<?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>56493</bug_id>
          
          <creation_ts>2011-03-16 15:16:05 -0700</creation_ts>
          <short_desc>Drag-scrolling overlay scrollbars thumb in overflow regions does not work</short_desc>
          <delta_ts>2011-04-14 15:09:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>abarth</cc>
    
    <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>368575</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-16 15:16:05 -0700</bug_when>
    <thetext>If you try try grab onto the scroll thumb of an overlay scrollbar in an overflow region, it will not work. I have a fix. 

&lt;rdar://problem/9112688&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368581</commentid>
    <comment_count>1</comment_count>
      <attachid>85985</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-16 15:23:19 -0700</bug_when>
    <thetext>Created attachment 85985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368639</commentid>
    <comment_count>2</comment_count>
      <attachid>85985</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-16 16:47:43 -0700</bug_when>
    <thetext>Comment on attachment 85985
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:3860
&gt; +    bool checkChildren = !useClip || (hasControlClip() ? controlClipRect(tx, ty).intersects(hitTestArea) : overflowClipRect(tx, ty, true).intersects(hitTestArea));

If we’re going to be passing constants to this, then it should be an enum instead of a boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368690</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-16 17:49:36 -0700</bug_when>
    <thetext>Thanks, Darin! I switch over to an enum.

Fixed with revision 81304.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368785</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-16 20:25:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/81304 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382406</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-08 11:38:33 -0700</bug_when>
    <thetext>Re-opening since this is still broken for transformed or positioned overflow areas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382409</commentid>
    <comment_count>6</comment_count>
      <attachid>88847</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-08 11:41:04 -0700</bug_when>
    <thetext>Created attachment 88847
Patch for transformed and/or positioned overflow areas

Okay, this approach might be a little crazy. To get the ClipRects right (necessary for positioned objects to hit test properly), this patch re-computes ClipRects whenever we paint to hit test so that painting does not include the scrollbar size and hit testing does. This might be completely crazy. Maybe it would be better to have two instances of the ClipRects? One could be the painting ClipRects and one could be the hit-testing ClipRects. Anyway, I thought I would put this out there and gauge opinions on the matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382411</commentid>
    <comment_count>7</comment_count>
      <attachid>85985</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-08 11:41:29 -0700</bug_when>
    <thetext>Comment on attachment 85985
Patch

Clearing the flag since this first patch was committed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382419</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-08 11:45:31 -0700</bug_when>
    <thetext>Attachment 88847 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/rendering/RenderLayer.h:371:  The parameter name &quot;relevancy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:374:  The parameter name &quot;relevancy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:377:  The parameter name &quot;relevancy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:567:  The parameter name &quot;relevancy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/rendering/RenderLayer.h:568:  The parameter name &quot;relevancy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382425</commentid>
    <comment_count>9</comment_count>
      <attachid>88847</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-08 11:51:18 -0700</bug_when>
    <thetext>Comment on attachment 88847
Patch for transformed and/or positioned overflow areas

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:2350
&gt; +    // The clip rects need to be recomputed for painting not to include scrollbar size for overlay scrollbars.
&gt; +    if (ScrollbarTheme::nativeTheme()-&gt;usesOverlayScrollbars())
&gt; +        clearClipRectsIncludingDescendants();

Why can&apos;t you just set the flag to use temporary clip rects? We really don&apos;t want to kill the clip rects cache altogether.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3217
&gt; +void RenderLayer::updateClipRects(const RenderLayer* rootLayer, OverlayScrollbarSizeRelevancy relevancy)

I don&apos;t get the &quot;relevancy&quot; terminology. Can&apos;t this just be an &apos;IncludeScrollbars enum?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382427</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-08 11:52:18 -0700</bug_when>
    <thetext>RenderLayer::hitTestLayer already has:

    useTemporaryClipRects = compositor()-&gt;inCompositingMode();

Why can&apos;t you just also set this when you have overlay scrollbars?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382562</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-08 14:24:01 -0700</bug_when>
    <thetext>I think you should just cache two sets of clip rects based off the relevancy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382566</commentid>
    <comment_count>12</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-08 14:28:11 -0700</bug_when>
    <thetext>And yeah what Simon said.  I think relevancy is not the best term to use.  It seems like it could just be a boolean.  Everyone who calls it is going to parameterize with a variable name, so I don&apos;t see an enum as being required.  You only need to use an enum to avoid passing raw true/false values, but I don&apos;t think you&apos;ll be doing that ever, so a boolean should be fine.

But yeah I&apos;d just compute two sets of clip rects and only branch to the alternate set if the overflowClipRect returned actually changes.  That way overflow:hidden (far and away the most common clip) doesn&apos;t have to recompute two sets or have to be cleared just because you used overlay scrollbars.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382570</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-08 14:39:11 -0700</bug_when>
    <thetext>If you don&apos;t want to cache two sets of clip rects you could just set useTemporaryClipRects during hit testing.  You should only need to set this though if there is an actual overlay scrollbar present.

Remember that 99% of clipping on the Web is done using overflow:hidden, which doesn&apos;t care about scrollbars.  Let&apos;s not penalize that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382693</commentid>
    <comment_count>14</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-08 18:32:39 -0700</bug_when>
    <thetext>Thanks for the feedback, guys!

First,  the temporary clip rects concept does not seem to work for this. I confess I am not entirely sure why, but I know that reverting to the original clip rect at any point before the end of hit testing results in the wrong behavior.

In terms of the relevancy name and using a bool versus and enum, the original patch added the OverlayScrollbarSizeRelevancy enumeration. My original patch just used a bool, but Darin suggested switching to an enum in his comment in this very bug (see comment 2). I am open the changing the enum or switching it back to a bool, but I would rather do that in a follow-up patch since that would touch a lot of code that is not necessary for getting positioned and transformed hit-testing to work properly. Also, I agree that OverlayScrollbarSizeRelevancy is not the greatest name, but I think that the values of the enum -- IgnoreOverlayScrollbarSize and IncludeOverlayScrollbar size -- are clear and informative.

I like the plan of caching two sets of clip rects. It should also be easy to do this only in the case when it&apos;s necessary…I will add logic for that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382715</commentid>
    <comment_count>15</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-08 19:39:11 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Thanks for the feedback, guys!
&gt; 
&gt; First,  the temporary clip rects concept does not seem to work for this. I confess I am not entirely sure why, but I know that reverting to the original clip rect at any point before the end of hit testing results in the wrong behavior.
&gt; 
&gt;

Since I couldn&apos;t remember why this didn&apos;t work, it started gnawing at me, and I tried it again…I was able to make it work this time! I think I know exactly what silly thing I missed that made me think this didn&apos;t work. Anyway. Now I think the temporary clip rects is the simplest approach, and I will post a new patch in a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382828</commentid>
    <comment_count>16</comment_count>
      <attachid>88941</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-09 19:40:50 -0700</bug_when>
    <thetext>Created attachment 88941
Patch that uses temporary clip rects

Here is a much better patch that uses temporary clip rects.

A few things about this patch:

1. Since this patch turned out to be so minimal, I am definitely open to changing the name of the OverlayScrollbarSizeRelevancy enum in the same patch if anyone has a better suggestion. Maybe it should just be OverlayScrollbarSize? I still think the values of this enum have good names -- as a reminder, the values are IgnoreOverlayScrollbarSize and IncludeOverlayScrollbarSize. I do think they add meaning over a bool, but I agree that the type name of the enum is not the best. Anyone have a suggestion?

2. The concept of m_overlayScrollbarsRequireTemporaryClipRects that I added with this patch is admittedly not the smartest mechanism, in that it never gets set to false once it is set to true. So if a positioned overflow area with overlay scrollbars is resized so that it doesn&apos;t have scrollbars anymore, then m_overlayScrollbarsRequireTemporaryClipRects is not set to false as it should be. That being said, you don&apos;t lose much by having it always be true in that case -- you just do some extra work, but you don&apos;t sacrifice functionality at all. Anyway, I think it&apos;s okay and it avoid the extra work in the vast majority of cases. If you disagree, please chime in. Also the name is a bit cumbersomely-long, so if you have a better suggestion, let me know</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382829</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-09 19:42:32 -0700</bug_when>
    <thetext>Attachment 88941 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/rendering/RenderLayer.cpp:2868:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/rendering/RenderLayer.cpp:2868:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 2 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382902</commentid>
    <comment_count>18</comment_count>
      <attachid>88941</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-10 10:20:46 -0700</bug_when>
    <thetext>Comment on attachment 88941
Patch that uses temporary clip rects

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

r- because I think this is still not quite right.

I wish we could have some layout tests for this.

&gt; Source/WebCore/rendering/RenderLayer.cpp:2188
&gt; +        if (renderer()-&gt;isPositioned() || renderer()-&gt;isRelPositioned() || renderer()-&gt;hasClip())
&gt; +            rootLayer-&gt;setOverlayScrollbarsRequireTemporaryClipRects(true);

Why hasClip(), rather than hasOverflowClip()?

I don&apos;t really see the need to cache this value on the rootLayer (which, BTW, is just the painting root, so it changes with transforms and compositing). So I think it&apos;s wrong to stuff it on rootLayer.

&gt;&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:2868
&gt;&gt;&gt; +    useTemporaryClipRects = rootLayer-&gt;overlayScrollbarsRequireTemporaryClipRects();//ScrollbarTheme::nativeTheme()-&gt;usesOverlayScrollbars();
&gt;&gt; 
&gt;&gt; One space before end of line comments  [whitespace/comments] [5]
&gt; 
&gt; Should have a space between // and comment  [whitespace/comments] [4]

This needs to be an |=, otherwise you&apos;re clobbering the compositor()-&gt;inCompositingMode() setting.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3205
&gt; +void RenderLayer::updateClipRects(const RenderLayer* rootLayer, OverlayScrollbarSizeRelevancy relevancy)

Maybe just call the enum ScrollBarSizeIncluded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383017</commentid>
    <comment_count>19</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-10 21:04:16 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 88941 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88941&amp;action=review
&gt; 
&gt; r- because I think this is still not quite right.
&gt; 
&gt; I wish we could have some layout tests for this.
&gt; 

I agree. We definitely need to turn on overlay scrollbars in DRT soon. 

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:2188
&gt; &gt; +        if (renderer()-&gt;isPositioned() || renderer()-&gt;isRelPositioned() || renderer()-&gt;hasClip())
&gt; &gt; +            rootLayer-&gt;setOverlayScrollbarsRequireTemporaryClipRects(true);
&gt; 
&gt; Why hasClip(), rather than hasOverflowClip()?
&gt; 

This code was added to RenderLayer::paintOverflow controls, so hasOverflowClip() is always true (there is an early return if it is not). hasClip() is there because RenderLayer::calculateClipRects() does special assignments that involve scrollbars when hasClip() is true. 

&gt; I don&apos;t really see the need to cache this value on the rootLayer (which, BTW, is just the painting root, so it changes with transforms and compositing). So I think it&apos;s wrong to stuff it on rootLayer.
&gt; 

Do you have another suggestion? This is what we do for painting scrollbars, and it works well in the transform cases that I have tested. 

&gt; &gt;&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:2868
&gt; &gt;&gt;&gt; +    useTemporaryClipRects = rootLayer-&gt;overlayScrollbarsRequireTemporaryClipRects();//ScrollbarTheme::nativeTheme()-&gt;usesOverlayScrollbars();
&gt; &gt;&gt; 
&gt; &gt;&gt; One space before end of line comments  [whitespace/comments] [5]
&gt; &gt; 
&gt; &gt; Should have a space between // and comment  [whitespace/comments] [4]
&gt; 
&gt; This needs to be an |=, otherwise you&apos;re clobbering the compositor()-&gt;inCompositingMode() setting.
&gt; 

Eek, good catch. Will fix.

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:3205
&gt; &gt; +void RenderLayer::updateClipRects(const RenderLayer* rootLayer, OverlayScrollbarSizeRelevancy relevancy)
&gt; 
&gt; Maybe just call the enum ScrollBarSizeIncluded?

I considered a similar name when I first created this enum, and I don&apos;t care for it because I feel like it is naming the enumeration after one of the two values in the enumeration, which seems odd. Also, I feel that it must still include the work &quot;overlay&quot; to describe the scrollbars since non-overlay scrollbars are always included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385416</commentid>
    <comment_count>20</comment_count>
      <attachid>89509</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-13 18:11:09 -0700</bug_when>
    <thetext>Created attachment 89509
New patch

New patch! This patch fixes the |= bug that Simon pointed out above. It also uses ScrollView to track whether there are any overlay scrollbars painted in the view currently rather than trying to do something similar with the root layer.

I started renaming OverlayScrollbarSizeRelevancy to OverlayScrollbarSizeIncluded despite my protestations above. But in the end, I reverted the change. The most obvious variable name for something of type OverlayScrollbarSizeIncluded would be scrollbarSizeIncluded, which just makes it sound like the scrollbar size IS included. We need a name that conveys that the variable might mean that the size is included, or it might mean the size is ignored. So yeah. I went back to the original protestations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386059</commentid>
    <comment_count>21</comment_count>
      <attachid>89509</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-14 14:49:57 -0700</bug_when>
    <thetext>Comment on attachment 89509
New patch

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

&gt; Source/WebCore/platform/ScrollView.cpp:927
&gt; +    m_containsScrollableAreaWithOverlayScrollbars = false;

Init this in the constructor too?

&gt; Source/WebCore/rendering/RenderLayer.cpp:2184
&gt; +        renderView-&gt;layer()-&gt;setContainsDirtyOverlayScrollbars(true);

I&apos;m not sure what dirtyOverflowScrollbars are?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386066</commentid>
    <comment_count>22</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-14 14:54:44 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 89509 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89509&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollView.cpp:927
&gt; &gt; +    m_containsScrollableAreaWithOverlayScrollbars = false;
&gt; 
&gt; Init this in the constructor too?

Good catch, will do.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:2184
&gt; &gt; +        renderView-&gt;layer()-&gt;setContainsDirtyOverlayScrollbars(true);
&gt; 
&gt; I&apos;m not sure what dirtyOverflowScrollbars are?

This is a line of code that was there already and is only touched by this patch because I stores the RenderView in a local variable to avoid fetching it twice. Anyway, in case you still want to know what it is, painting does a second pass through the layer tree to paint overlay scrollbars if and only if dirtyOverflowScrollbars is true. (See RenderLayer::paintOverlayScrollbars().) We can&apos;t use the same mechanism for hit testing simply because this variable is set back to false immediately once the overlay scrollbars have been painted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386084</commentid>
    <comment_count>23</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-04-14 15:09:23 -0700</bug_when>
    <thetext>Committed patch with revision 83899.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85985</attachid>
            <date>2011-03-16 15:23:19 -0700</date>
            <delta_ts>2011-04-08 11:41:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>7588</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjgzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDMtMTYgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU2NDkzIERyYWctc2Nyb2xsaW5nIG92ZXJsYXkgCisgICAgICAgIHNjcm9sbGJhcnMg
dGh1bWIgaW4gb3ZlcmZsb3cgcmVnaW9ucyBkb2VzIG5vdCB3b3JrCisgICAgICAgIC1hbmQgY29y
cmVzcG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzkxMTI2ODg+IERyYWctc2Nyb2xs
aW5nIG92ZXJsYXkgc2Nyb2xsYmFycyB0aHVtYiBpbiBvdmVyZmxvdyAKKyAgICAgICAgcmVnaW9u
cyBkb2VzIG5vdCB3b3JrCisKKyAgICAgICAgVXAgdW50aWwgbm93LCBvdmVybGF5IHNjcm9sbGJh
cnMgaGF2ZSBhbHdheXMgYmVlbiB0cmVhdGVkIGluIHRoZSBSZW5kZXIgVHJlZSBhcyBpZiAKKyAg
ICAgICAgdGhleSBoYXZlIGEgdGhpY2tuZXNzIG9mIDAgYmVjYXVzZSB0aGV5IHNob3VsZCBub3Qg
YWZmZWN0IGxheW91dC4gSG93ZXZlciwgaXQgaXMgCisgICAgICAgIGltcG9ydGFudCB0byBjb25z
aWRlciB0aGVpciBzaXplIHdoZW4gaGl0LXRlc3RpbmcgYmVjYXVzZSBvdGhlcndpc2UsIHdlIGhh
dmUgdGhpcyAKKyAgICAgICAgYnVnISBUaGlzIHBhdGNoIGFkZHMgYSBib29sZWFuIHBhcmFtZXRl
ciB0byBvdmVyZmxvd0NsaXBSZWN0KCksIAorICAgICAgICBSZW5kZXJMYXllcjo6dmVydGljYWxT
Y3JvbGxiYXJXaWR0aCgpLCBhbmQgCisgICAgICAgIFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCkuIFRoaXMgYm9vbCBpbmRpY2F0ZXMgd2hldGhlciB0byBpbmNsdWRlIAor
ICAgICAgICB0aGUgYWN0dWFsIG92ZXJsYXkgc2Nyb2xsYmFyIHRoaWNrbmVzcy4gSXQgZGVmYXVs
dHMgdG8gZmFsc2UgYW5kIGlzIG9ubHkgc2VudCBpcyAKKyAgICAgICAgYXMgdHJ1ZSBmcm9tIFJl
bmRlckJsb2M6Om5vZGVBdFBvaW50KCkuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJl
Y3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorCiAyMDExLTAzLTE2ICBE
aW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBDYXJsc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCShyZXZpc2lvbiA4MTI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NTcsNyArMzg1Nyw3IEBAIGJvb2wg
UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKICAgICBib29sIHVzZU92ZXJmbG93
Q2xpcCA9IGhhc092ZXJmbG93Q2xpcCgpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllcigpOwogICAg
IGJvb2wgdXNlQ2xpcCA9IChoYXNDb250cm9sQ2xpcCgpIHx8IHVzZU92ZXJmbG93Q2xpcCk7CiAg
ICAgSW50UmVjdCBoaXRUZXN0QXJlYShyZXN1bHQucmVjdEZvclBvaW50KF94LCBfeSkpOwotICAg
IGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29u
dHJvbENsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkgOiBvdmVyZmxvd0Ns
aXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpOworICAgIGJvb2wgY2hlY2tD
aGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0
KHR4LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0
eSwgdHJ1ZSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpOwogICAgIGlmIChjaGVja0NoaWxkcmVu
KSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAgICBpbnQg
c2Nyb2xsZWRYID0gdHg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkocmV2aXNpb24gODEyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5MCw3ICsxMDkwLDcgQEAgdm9pZCBSZW5kZXJCb3g6
OnBvcENvbnRlbnRzQ2xpcChQYWludEluZgogICAgICAgICBwYWludEluZm8ucGhhc2UgPSBvcmln
aW5hbFBoYXNlOwogfQogCi1JbnRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChpbnQg
dHgsIGludCB0eSkKK0ludFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGludCB0eCwg
aW50IHR5LCBib29sIGluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkKIHsKICAgICAvLyBGSVhN
RTogV2hlbiBvdmVyZmxvdy1jbGlwIChDU1MzKSBpcyBpbXBsZW1lbnRlZCwgd2UnbGwgb2J0YWlu
IHRoZSBwcm9wZXJ0eQogICAgIC8vIGhlcmUuCkBAIC0xMTA1LDggKzExMDUsOCBAQCBJbnRSZWN0
IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChpbnQgCiAKICAgICAvLyBTdWJ0cmFjdCBvdXQg
c2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCiAgICAgaWYgKGxheWVyKCkpIHsKLSAgICAgICAg
Y2xpcFdpZHRoIC09IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICAgICAg
Y2xpcEhlaWdodCAtPSBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CisgICAg
ICAgIGNsaXBXaWR0aCAtPSBsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKGluY2x1ZGVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgIGNsaXBIZWlnaHQgLT0gbGF5ZXIoKS0+aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodChpbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogICAg
IH0KIAogICAgIHJldHVybiBJbnRSZWN0KGNsaXBYLCBjbGlwWSwgY2xpcFdpZHRoLCBjbGlwSGVp
Z2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDgx
MjY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgSW50UmVj
dCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKLSAgICB2aXJ0dWFsIEludFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdChpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCBJbnRSZWN0IG92ZXJmbG93Q2xpcFJl
Y3QoaW50IHR4LCBpbnQgdHksIGJvb2wgaW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplID0gZmFs
c2UpOwogICAgIEludFJlY3QgY2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwg
Ym9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBJbnRSZWN0IGNvbnRyb2xDbGlwUmVjdChpbnQgLyp0eCovLCBpbnQgLyp0eSovKSBjb25zdCB7
IHJldHVybiBJbnRSZWN0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkocmV2aXNpb24gODEyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEwLDE2ICsxOTEwLDE2IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmEKICNlbmRpZgogfQogCi1pbnQg
UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAoraW50IFJlbmRlckxh
eWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKGJvb2wgaW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJT
aXplKSBjb25zdAogewotICAgIGlmICghbV92QmFyIHx8IG1fdkJhci0+aXNPdmVybGF5U2Nyb2xs
YmFyKCkpCisgICAgaWYgKCFtX3ZCYXIgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkg
JiYgIWluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiBtX3ZCYXItPndpZHRoKCk7CiB9CiAKLWludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCgpIGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQoYm9vbCBpbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFtX2hCYXIgfHwgbV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICBpZiAo
IW1faEJhciB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAhaW5jbHVkZU92ZXJs
YXlTY3JvbGxiYXJTaXplKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1faEJhci0+
aGVpZ2h0KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAko
cmV2aXNpb24gODEyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDggKzI1NSw4IEBAIHB1YmxpYzoKICAgICBTY3JvbGxi
YXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0K
ICAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV92QmFy
LmdldCgpOyB9CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0OwotICAg
IGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7CisgICAgaW50IHZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgoYm9vbCBpbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUgPSBmYWxzZSkg
Y29uc3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoYm9vbCBpbmNsdWRlT3Zl
cmxheVNjcm9sbGJhclNpemUgPSBmYWxzZSkgY29uc3Q7CiAKICAgICBib29sIGhhc092ZXJmbG93
Q29udHJvbHMoKSBjb25zdDsKICAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhpbnQg
dHgsIGludCB0eSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHAJKHJldmlzaW9uIDgxMjY5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0OCw5ICsxMTQ4LDkgQEAgaW50IFJlbmRlclRh
YmxlOjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIAogICAgIHJldHVybiBmaXJzdE5vbkVtcHR5U2Vj
dGlvbi0+bG9naWNhbFRvcCgpICsgZmlyc3ROb25FbXB0eVNlY3Rpb24tPmZpcnN0TGluZUJveEJh
c2VsaW5lKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QoaW50
IHR4LCBpbnQgdHkpCitJbnRSZWN0IFJlbmRlclRhYmxlOjpvdmVyZmxvd0NsaXBSZWN0KGludCB0
eCwgaW50IHR5LCBib29sIGluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkKIHsKLSAgICBJbnRS
ZWN0IHJlY3QgPSBSZW5kZXJCbG9jazo6b3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpOworICAgIElu
dFJlY3QgcmVjdCA9IFJlbmRlckJsb2NrOjpvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSwgaW5jbHVk
ZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGEgY2FwdGlv
biwgZXhwYW5kIHRoZSBjbGlwIHRvIGluY2x1ZGUgdGhlIGNhcHRpb24uCiAgICAgLy8gRklYTUU6
IFRlY2huaWNhbGx5IHRoaXMgaXMgd3JvbmcsIGJ1dCBpdCdzIHZpcnR1YWxseSBpbXBvc3NpYmxl
IHRvIGZpeCB0aGlzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAko
cmV2aXNpb24gODEyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IG92
ZXJmbG93Q2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgSW50UmVjdCBvdmVy
Zmxvd0NsaXBSZWN0KGludCB0eCwgaW50IHR5LCBib29sIGluY2x1ZGVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSA9IGZhbHNlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRPdmVyZmxvd0Zyb21DaGlsZHJl
bigpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88847</attachid>
            <date>2011-04-08 11:41:04 -0700</date>
            <delta_ts>2011-04-09 19:40:50 -0700</delta_ts>
            <desc>Patch for transformed and/or positioned overflow areas</desc>
            <filename>crazy.txt</filename>
            <type>text/plain</type>
            <size>12556</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMzE3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDQtMDggIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NjQ5MworICAgICAgICBEcmFnLXNjcm9sbGluZyBvdmVybGF5IHNjcm9sbGJhcnMgdGh1bWIgaW4g
b3ZlcmZsb3cgcmVnaW9ucyBkb2VzIG5vdCB3b3JrCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzkxMTI2ODg+CisKKyAgICAgICAgVGhlcmUgd2Fz
IGFuIG9yaWdpbmFsIGNoYW5nZSB0byBmaXggdGhpcyBpbiB0aGUgbm9ybWFsIGhpdC10ZXN0aW5n
IGNhc2UsIGJ1dCBoaXQgCisgICAgICAgIHRlc3Rpbmcgb2YgdHJhbnNmb3JtZWQgYW5kL29yIHBv
c2l0aW9uZWQgb2JqZWN0cyB3YXMgc3RpbGwgYnJva2VuLiBUaGUgdHJhbnNmb3JtZWQgCisgICAg
ICAgIGNhc2UgaXMgc2ltcGxlciwgYW5kIHRoYXQgaXMgZml4ZWQgYnkgc2VuZGluZyBhbiBPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSAKKyAgICAgICAgcGFyYW1ldGVyIHRvIGNhbGN1bGF0
ZVJlY3RzKCkuIFRoZSB0cmlja3kgcGFydCBpcyBmb3IgcG9zaXRpb25lZCBvYmplY3RzIHNpbmNl
IHRob3NlIAorICAgICAgICByZWN0cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQ2xpcFJlY3RzLiBU
aGlzIHBhdGNoIHJlLWNvbXB1dGVzIHRoZSBDbGlwUmVjdHMgZXZlcnkgCisgICAgICAgIHRpbWUg
d2UgcGFpbnQgb3IgSGl0VGVzdC4gVGhpcyB3YXksIENsaXBSZWN0cyBpbmNsdWRlcyBzY3JvbGxi
YXIgc2l6ZSBmb3IgaGl0IAorICAgICAgICB0ZXN0aW5nIGFuZCBkb2VzIG5vdCBmb3IgcGFpbnRp
bmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVDbGlwUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFyZW50Q2xpcFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpiYWNrZ3JvdW5kQ2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZVJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKwogMjAx
MS0wNC0wOCAgTWlzaGEgVHl1dHl1bmlrICA8bWljaGFlbC50eXV0eXVuaWtAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21ib3MuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDgzMTQwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0NSw2
ICsyMzQ1LDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24KIAog
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0
JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCAq
cGFpbnRpbmdSb290KQogeworICAgIC8vIFRoZSBjbGlwIHJlY3RzIG5lZWQgdG8gYmUgcmVjb21w
dXRlZCBmb3IgcGFpbnRpbmcgbm90IHRvIGluY2x1ZGUgc2Nyb2xsYmFyIHNpemUgZm9yIG92ZXJs
YXkgc2Nyb2xsYmFycy4KKyAgICBpZiAoU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnVz
ZXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICBjbGVhckNsaXBSZWN0c0luY2x1ZGluZ0Rl
c2NlbmRhbnRzKCk7CisKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXAgb3ZlcmxhcFRlc3RSZXF1
ZXN0czsKICAgICBwYWludExheWVyKHRoaXMsIHAsIGRhbWFnZVJlY3QsIHBhaW50QmVoYXZpb3Is
IHBhaW50aW5nUm9vdCwgJm92ZXJsYXBUZXN0UmVxdWVzdHMpOwogICAgIE92ZXJsYXBUZXN0UmVx
dWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gb3ZlcmxhcFRlc3RSZXF1ZXN0cy5lbmQoKTsKQEAgLTI0
MDQsNiArMjQwOCwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVy
CiAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCwgT3Zl
cmxhcFRlc3RSZXF1ZXN0TWFwKiBvdmVybGFwVGVzdFJlcXVlc3RzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCiB7CisgICAgLy8gVGhlIGNsaXAg
cmVjdHMgbmVlZCB0byBiZSByZWNvbXB1dGVkIGZvciBwYWludGluZyBub3QgdG8gaW5jbHVkZSBz
Y3JvbGxiYXIgc2l6ZSBmb3Igb3ZlcmxheSBzY3JvbGxiYXJzLgorICAgIGlmIChTY3JvbGxiYXJU
aGVtZTo6bmF0aXZlVGhlbWUoKS0+dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHVw
ZGF0ZUNsaXBSZWN0cyhyb290TGF5ZXIsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKwog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoaXNDb21wb3NpdGVkKCkp
IHsKICAgICAgICAgLy8gVGhlIHVwZGF0aW5nQ29udHJvbFRpbnRzKCkgcGFpbnRpbmcgcGFzcyBn
b2VzIHRocm91Z2ggY29tcG9zaXRpbmcgbGF5ZXJzLApAQCAtMjczMyw2ICsyNzQxLDEwIEBAIHN0
YXRpYyBpbmxpbmUgSW50UmVjdCBmcmFtZVZpc2libGVSZWN0KFIKIGJvb2wgUmVuZGVyTGF5ZXI6
OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCkKIHsKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKwor
ICAgIC8vIFRoZSBjbGlwIHJlY3RzIG5lZWQgdG8gYmUgcmVjb21wdXRlZCBmb3IgaGl0LXRlc3Rp
bmcgdG8gYWx3YXlzIGluY2x1ZGUgc2Nyb2xsYmFyIHNpemUuCisgICAgaWYgKFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgY2xl
YXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogICAgIAogICAgIEludFJlY3QgaGl0
VGVzdEFyZWEgPSByZW5kZXJlcigpLT52aWV3KCktPmRvY3VtZW50UmVjdCgpOwogICAgIGlmICgh
cmVxdWVzdC5pZ25vcmVDbGlwcGluZygpKQpAQCAtMjg2NSwxMSArMjg3NywxNSBAQCBSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAKICAgICBJbnRSZWN0IGhpdFRlc3RB
cmVhID0gcmVzdWx0LnJlY3RGb3JQb2ludChoaXRUZXN0UG9pbnQpOwogCisgICAgLy8gVGhlIGNs
aXAgcmVjdHMgbmVlZCB0byBiZSByZWNvbXB1dGVkIGZvciBoaXQtdGVzdGluZyB0byBhbHdheXMg
aW5jbHVkZSBzY3JvbGxiYXIgc2l6ZS4KKyAgICBpZiAoU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKCktPnVzZXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICB1cGRhdGVDbGlwUmVjdHMo
cm9vdExheWVyLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOworCiAgICAgLy8gQXBwbHkg
YSB0cmFuc2Zvcm0gaWYgd2UgaGF2ZSBvbmUuCiAgICAgaWYgKHRyYW5zZm9ybSgpICYmICFhcHBs
aWVkVHJhbnNmb3JtKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCBy
ZWN0cyBoYXZlIGJlZW4gY2FsY3VsYXRlZC4KICAgICAgICAgaWYgKHBhcmVudCgpKSB7Ci0gICAg
ICAgICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXllciwg
dXNlVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICAgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSBi
YWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdExheWVyLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMsIEluY2x1
ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVz
dCB0aGUgZW5jbG9zaW5nIGNsaXAgbm93LgogICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRl
cnNlY3RzKGhpdFRlc3RBcmVhKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTI5Mzcs
NyArMjk1Myw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAg
ICBJbnRSZWN0IGJnUmVjdDsKICAgICBJbnRSZWN0IGZnUmVjdDsKICAgICBJbnRSZWN0IG91dGxp
bmVSZWN0OwotICAgIGNhbGN1bGF0ZVJlY3RzKHJvb3RMYXllciwgaGl0VGVzdFJlY3QsIGxheWVy
Qm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QsIHVzZVRlbXBvcmFyeUNsaXBSZWN0
cyk7CisgICAgY2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCBoaXRUZXN0UmVjdCwgbGF5ZXJCb3Vu
ZHMsIGJnUmVjdCwgZmdSZWN0LCBvdXRsaW5lUmVjdCwgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzLCBJ
bmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogICAgIAogICAgIC8vIFRoZSBmb2xsb3dpbmcg
YXJlIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHotZGVwdGggb2YgdGhlIGhpdCBwb2lu
dCBvZiAzZC10cmFuc2Zvcm1lZAogICAgIC8vIGRlc2NlbmRhbnRzLgpAQCAtMzE5OCw3ICszMjE0
LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYQogICAgIHJldHVy
biAwOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDbGlwUmVjdHMoY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllcikKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZWN0cyhjb25z
dCBSZW5kZXJMYXllciogcm9vdExheWVyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuY3kpCiB7CiAgICAgaWYgKG1fY2xpcFJlY3RzKSB7CiAgICAgICAgIEFTU0VSVChyb290
TGF5ZXIgPT0gbV9jbGlwUmVjdHNSb290KTsKQEAgLTMyMDksMTAgKzMyMjUsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlQ2xpcFJlY3RzKGNvbnN0IAogICAgIC8vIGV4YW1pbmUgdGhlIHBh
cmVudC4gIFdlIHdhbnQgdG8gY2FjaGUgY2xpcCByZWN0cyB3aXRoIHVzIGFzIHRoZSByb290Lgog
ICAgIFJlbmRlckxheWVyKiBwYXJlbnRMYXllciA9IHJvb3RMYXllciAhPSB0aGlzID8gcGFyZW50
KCkgOiAwOwogICAgIGlmIChwYXJlbnRMYXllcikKLSAgICAgICAgcGFyZW50TGF5ZXItPnVwZGF0
ZUNsaXBSZWN0cyhyb290TGF5ZXIpOworICAgICAgICBwYXJlbnRMYXllci0+dXBkYXRlQ2xpcFJl
Y3RzKHJvb3RMYXllciwgcmVsZXZhbmN5KTsKIAogICAgIENsaXBSZWN0cyBjbGlwUmVjdHM7Ci0g
ICAgY2FsY3VsYXRlQ2xpcFJlY3RzKHJvb3RMYXllciwgY2xpcFJlY3RzLCB0cnVlKTsKKyAgICBj
YWxjdWxhdGVDbGlwUmVjdHMocm9vdExheWVyLCBjbGlwUmVjdHMsIHRydWUsIHJlbGV2YW5jeSk7
CiAKICAgICBpZiAocGFyZW50TGF5ZXIgJiYgcGFyZW50TGF5ZXItPmNsaXBSZWN0cygpICYmIGNs
aXBSZWN0cyA9PSAqcGFyZW50TGF5ZXItPmNsaXBSZWN0cygpKQogICAgICAgICBtX2NsaXBSZWN0
cyA9IHBhcmVudExheWVyLT5jbGlwUmVjdHMoKTsKQEAgLTMyMjQsNyArMzI0MCw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZWN0cyhjb25zdCAKICNlbmRpZgogfQogCi12b2lkIFJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMsIGJvb2wgdXNlQ2FjaGVkKSBjb25zdAordm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IENsaXBSZWN0cyYgY2xpcFJlY3RzLCBib29sIHVzZUNhY2hlZCwgT3ZlcmxheVNjcm9sbGJhclNp
emVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAogewogICAgIGlmICghcGFyZW50KCkpIHsKICAg
ICAgICAgLy8gVGhlIHJvb3QgbGF5ZXIncyBjbGlwIHJlY3QgaXMgYWx3YXlzIGluZmluaXRlLgpA
QCAtMzI3Miw3ICszMjg4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3Rz
KGNvbgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3Zl
cmZsb3dDbGlwKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gdG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3QoeCwgeSk7CisgICAgICAgICAg
ICBJbnRSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5vdmVy
Zmxvd0NsaXBSZWN0KHgsIHksIHJlbGV2YW5jeSk7CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0
T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dDbGlwLCBjbGlwUmVjdHMu
b3ZlcmZsb3dDbGlwUmVjdCgpKSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS0+aXNQb3Np
dGlvbmVkKCkgfHwgcmVuZGVyZXIoKS0+aXNSZWxQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAg
ICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdPdmVyZmxvd0NsaXAs
IGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpKSk7CkBAIC0zMjg2LDI0ICszMzAyLDI0IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb24KICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBhcmVudENsaXBSZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBD
bGlwUmVjdHMmIGNsaXBSZWN0cywgYm9vbCB0ZW1wb3JhcnlDbGlwUmVjdHMpIGNvbnN0Cit2b2lk
IFJlbmRlckxheWVyOjpwYXJlbnRDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzLCBPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBh
cmVudCgpKTsKICAgICBpZiAodGVtcG9yYXJ5Q2xpcFJlY3RzKSB7Ci0gICAgICAgIHBhcmVudCgp
LT5jYWxjdWxhdGVDbGlwUmVjdHMocm9vdExheWVyLCBjbGlwUmVjdHMpOworICAgICAgICBwYXJl
bnQoKS0+Y2FsY3VsYXRlQ2xpcFJlY3RzKHJvb3RMYXllciwgY2xpcFJlY3RzLCByZWxldmFuY3kp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcGFyZW50KCktPnVwZGF0ZUNsaXBSZWN0
cyhyb290TGF5ZXIpOworICAgIHBhcmVudCgpLT51cGRhdGVDbGlwUmVjdHMocm9vdExheWVyLCBy
ZWxldmFuY3kpOwogICAgIGNsaXBSZWN0cyA9ICpwYXJlbnQoKS0+Y2xpcFJlY3RzKCk7CiB9CiAK
LUludFJlY3QgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRDbGlwUmVjdChjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBib29sIHRlbXBvcmFyeUNsaXBSZWN0cykgY29uc3QKK0ludFJlY3QgUmVu
ZGVyTGF5ZXI6OmJhY2tncm91bmRDbGlwUmVjdChjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVy
LCBib29sIHRlbXBvcmFyeUNsaXBSZWN0cywgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
cmVsZXZhbmN5KSBjb25zdAogewogICAgIEludFJlY3QgYmFja2dyb3VuZFJlY3Q7CiAgICAgaWYg
KHBhcmVudCgpKSB7CiAgICAgICAgIENsaXBSZWN0cyBwYXJlbnRSZWN0czsKLSAgICAgICAgcGFy
ZW50Q2xpcFJlY3RzKHJvb3RMYXllciwgcGFyZW50UmVjdHMsIHRlbXBvcmFyeUNsaXBSZWN0cyk7
CisgICAgICAgIHBhcmVudENsaXBSZWN0cyhyb290TGF5ZXIsIHBhcmVudFJlY3RzLCB0ZW1wb3Jh
cnlDbGlwUmVjdHMsIHJlbGV2YW5jeSk7CiAgICAgICAgIGJhY2tncm91bmRSZWN0ID0gcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uID8gcGFyZW50UmVjdHMu
Zml4ZWRDbGlwUmVjdCgpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAocmVuZGVyZXIoKS0+
aXNQb3NpdGlvbmVkKCkgPyBwYXJlbnRSZWN0cy5wb3NDbGlwUmVjdCgpIDogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVjdHMu
b3ZlcmZsb3dDbGlwUmVjdCgpKTsKQEAgLTMzMTYsMTAgKzMzMzIsMTEgQEAgSW50UmVjdCBSZW5k
ZXJMYXllcjo6YmFja2dyb3VuZENsaXBSZWN0KAogfQogCiB2b2lkIFJlbmRlckxheWVyOjpjYWxj
dWxhdGVSZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBJbnRSZWN0JiBw
YWludERpcnR5UmVjdCwgSW50UmVjdCYgbGF5ZXJCb3VuZHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRSZWN0JiBiYWNrZ3JvdW5kUmVjdCwgSW50UmVjdCYgZm9yZWdyb3Vu
ZFJlY3QsIEludFJlY3QmIG91dGxpbmVSZWN0LCBib29sIHRlbXBvcmFyeUNsaXBSZWN0cykgY29u
c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QmIGJhY2tncm91bmRS
ZWN0LCBJbnRSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgSW50UmVjdCYgb3V0bGluZVJlY3QsIGJvb2wg
dGVtcG9yYXJ5Q2xpcFJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAogewogICAgIGlmIChy
b290TGF5ZXIgIT0gdGhpcyAmJiBwYXJlbnQoKSkgewotICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9
IGJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHRlbXBvcmFyeUNsaXBSZWN0cyk7CisgICAg
ICAgIGJhY2tncm91bmRSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXllciwgdGVtcG9y
YXJ5Q2xpcFJlY3RzLCByZWxldmFuY3kpOwogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3QocGFpbnREaXJ0eVJlY3QpOwogICAgIH0gZWxzZQogICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9
IHBhaW50RGlydHlSZWN0OwpAQCAtMzMzNiw3ICszMzUzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlUmVjdHMoY29uc3QgUgogICAgIGlmIChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0Ns
aXAoKSB8fCByZW5kZXJlcigpLT5oYXNDbGlwKCkpIHsKICAgICAgICAgLy8gVGhpcyBsYXllciBl
c3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgogICAgICAgICBpZiAocmVuZGVyZXIoKS0+
aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3Qo
dG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3QoeCwgeSkpOworICAgICAg
ICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5v
dmVyZmxvd0NsaXBSZWN0KHgsIHksIHJlbGV2YW5jeSkpOwogICAgICAgICBpZiAocmVuZGVyZXIo
KS0+aGFzQ2xpcCgpKSB7CiAgICAgICAgICAgICAvLyBDbGlwIGFwcGxpZXMgdG8gKnVzKiBhcyB3
ZWxsLCBzbyBnbyBhaGVhZCBhbmQgdXBkYXRlIHRoZSBkYW1hZ2VSZWN0LgogICAgICAgICAgICAg
SW50UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNsaXBSZWN0KHgs
IHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9u
IDgzMTQwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2NywxMyArMzY3LDE0IEBAIHB1YmxpYzoKICAgICAvLyB8cm9vdExheWVy
fS4gIEl0IGFsc28gY29tcHV0ZXMgb3VyIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgY2xpcCBy
ZWN0cwogICAgIC8vIGZvciBwYWludGluZy9ldmVudCBoYW5kbGluZy4KICAgICB2b2lkIGNhbGN1
bGF0ZVJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEludFJlY3QmIHBh
aW50RGlydHlSZWN0LCBJbnRSZWN0JiBsYXllckJvdW5kcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEludFJlY3QmIGJhY2tncm91bmRSZWN0LCBJbnRSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgSW50
UmVjdCYgb3V0bGluZVJlY3QsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzID0gZmFsc2UpIGNvbnN0
OworICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCYgYmFja2dyb3VuZFJlY3QsIEludFJl
Y3QmIGZvcmVncm91bmRSZWN0LCBJbnRSZWN0JiBvdXRsaW5lUmVjdCwgYm9vbCB0ZW1wb3JhcnlD
bGlwUmVjdHMgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKIAogICAgIC8vIENvbXB1dGUgYW5kIGNhY2hlIGNsaXAgcmVjdHMgY29tcHV0ZWQgd2l0
aCB0aGUgZ2l2ZW4gbGF5ZXIgYXMgdGhlIHJvb3QKLSAgICB2b2lkIHVwZGF0ZUNsaXBSZWN0cyhj
b25zdCBSZW5kZXJMYXllciogcm9vdExheWVyKTsKKyAgICB2b2lkIHVwZGF0ZUNsaXBSZWN0cyhj
b25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAgICAgLy8gQ29tcHV0
ZSBhbmQgcmV0dXJuIHRoZSBjbGlwIHJlY3RzLiBJZiB1c2VDYWNoZWQgaXMgdHJ1ZSwgd2lsbCB1
c2VkIHByZXZpb3VzbHkgY29tcHV0ZWQgY2xpcCByZWN0cyBvbiBhbmNlc3RvcnMKICAgICAvLyAo
cmF0aGVyIHRoYW4gY29tcHV0aW5nIHRoZW0gYWxsIGZyb20gc2NyYXRjaCB1cCB0aGUgcGFyZW50
IGNoYWluKS4KLSAgICB2b2lkIGNhbGN1bGF0ZUNsaXBSZWN0cyhjb25zdCBSZW5kZXJMYXllciog
cm9vdExheWVyLCBDbGlwUmVjdHMmLCBib29sIHVzZUNhY2hlZCA9IGZhbHNlKSBjb25zdDsKKyAg
ICB2b2lkIGNhbGN1bGF0ZUNsaXBSZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBD
bGlwUmVjdHMmLCBib29sIHVzZUNhY2hlZCA9IGZhbHNlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSByZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CiAg
ICAgQ2xpcFJlY3RzKiBjbGlwUmVjdHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBSZWN0czsgfQog
CiAgICAgSW50UmVjdCBjaGlsZHJlbkNsaXBSZWN0KCkgY29uc3Q7IC8vIFJldHVybnMgdGhlIGZv
cmVncm91bmQgY2xpcCByZWN0IG9mIHRoZSBsYXllciBpbiB0aGUgZG9jdW1lbnQncyBjb29yZGlu
YXRlIHNwYWNlLgpAQCAtNTYzLDggKzU2NCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwYWludGlu
Z0luc2lkZVJlZmxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3BhaW50aW5nSW5zaWRlUmVmbGVj
dGlvbjsgfQogICAgIHZvaWQgc2V0UGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGJvb2wgYikgeyBt
X3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA9IGI7IH0KICAgICAKLSAgICB2b2lkIHBhcmVudENs
aXBSZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBDbGlwUmVjdHMmLCBib29sIHRl
bXBvcmFyeUNsaXBSZWN0cyA9IGZhbHNlKSBjb25zdDsKLSAgICBJbnRSZWN0IGJhY2tncm91bmRD
bGlwUmVjdChjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBib29sIHRlbXBvcmFyeUNsaXBS
ZWN0cykgY29uc3Q7CisgICAgdm9pZCBwYXJlbnRDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgQ2xpcFJlY3RzJiwgYm9vbCB0ZW1wb3JhcnlDbGlwUmVjdHMgPSBmYWxzZSwg
T3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpIGNvbnN0OworICAgIEludFJlY3QgYmFja2dyb3VuZENsaXBSZWN0KGNvbnN0
IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzLCBPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSkgY29uc3Q7CiAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNl
c3RvcigpIGNvbnN0OwogCg==
</data>
<flag name="review"
          id="81436"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88941</attachid>
            <date>2011-04-09 19:40:50 -0700</date>
            <delta_ts>2011-04-13 18:11:09 -0700</delta_ts>
            <desc>Patch that uses temporary clip rects</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>13207</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMzg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDQtMDkgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NjQ5MworICAgICAgICBEcmFnLXNjcm9sbGluZyBvdmVybGF5IHNjcm9sbGJhcnMgdGh1bWIgaW4g
b3ZlcmZsb3cgcmVnaW9ucyBkb2VzIG5vdCB3b3JrCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzkxMTI2ODg+CisKKyAgICAgICAgVGhlcmUgd2Fz
IGFuIG9yaWdpbmFsIGNoYW5nZSB0byBmaXggdGhpcyBpbiB0aGUgbm9ybWFsIGhpdC10ZXN0aW5n
IGNhc2UsIGJ1dCBoaXQgCisgICAgICAgIHRlc3Rpbmcgb2YgdHJhbnNmb3JtZWQgYW5kL29yIHBv
c2l0aW9uZWQgb2JqZWN0cyB3YXMgc3RpbGwgYnJva2VuLiBUaGUgdHJhbnNmb3JtZWQgCisgICAg
ICAgIGNhc2UgaXMgaXMgZml4ZWQgYnkgc2VuZGluZyBhbiBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSBwYXJhbWV0ZXIgdG8gCisgICAgICAgIGNhbGN1bGF0ZVJlY3RzKCkuIEdldHRpbmcg
cG9zaXRpb25lZCBvYmplY3RzIHJpZ2h0IGlzIGEgbGl0dGxlIHRyaWNraWVyLiBUaG9zZSBuZWVk
IAorICAgICAgICB0byBvcHQgaW50byB1c2luZyB0ZW1wb3JhcnkgY2xpcCByZWN0cyBkdXJpbmcg
aGl0IHRlc3RpbmcuIFRvIGF2b2lkIGRvaW5nIHRoYXQgd2hlbiAKKyAgICAgICAgaXQgaXMgbm90
IGFic29sdXRlbHkgbmVjZXNzYXJ5LCBJIGFkZGVkIGEgbmV3IGJpdCB0byB0cmFjayB3aGV0aGVy
IHdlIGhhdmUgCisgICAgICAgIHNjcm9sbGJhcnMgdGhhdCBtZWV0IHRoZSBuZWNlc3NhcnkgY3Jp
dGVyaWEuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVw
ZGF0ZUNsaXBSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRl
Q2xpcFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYXJlbnRDbGlwUmVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJhY2tncm91bmRDbGlwUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6Om92ZXJsYXlTY3JvbGxiYXJzUmVxdWlyZVRlbXBvcmFyeUNsaXBSZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0T3ZlcmxheVNjcm9sbGJhcnNSZXF1aXJlVGVtcG9y
YXJ5Q2xpcFJlY3RzKToKKwogMjAxMS0wNC0wOSAgS2VpdGggS3l6aXZhdCAgPGtlaXRoLmt5eml2
YXRAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21ib3MuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDgzMTQw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc2LDYgKzE3Niw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJC
b3hNb2RlbE8KICAgICAsIG1fbXVzdE92ZXJsYXBDb21wb3NpdGVkTGF5ZXJzKGZhbHNlKQogI2Vu
ZGlmCiAgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKKyAgICAs
IG1fb3ZlcmxheVNjcm9sbGJhcnNSZXF1aXJlVGVtcG9yYXJ5Q2xpcFJlY3RzKGZhbHNlKQogICAg
ICwgbV9tYXJxdWVlKDApCiAgICAgLCBtX3N0YXRpY0lubGluZVBvc2l0aW9uKDApCiAgICAgLCBt
X3N0YXRpY0Jsb2NrUG9zaXRpb24oMCkKQEAgLTIxODMsNiArMjE4NCw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scygKICAgICAgICAgUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciA9IHJlbmRlcmVyKCktPnZpZXcoKS0+bGF5ZXIoKTsKICAgICAgICAgcm9vdExheWVyLT5z
ZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7CiAgICAgICAgIG1fY2FjaGVk
T3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IEludFBvaW50KHR4LCB0eSk7CisgICAgICAgIGlmIChy
ZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJlcigpLT5pc1JlbFBvc2l0aW9uZWQo
KSB8fCByZW5kZXJlcigpLT5oYXNDbGlwKCkpCisgICAgICAgICAgICByb290TGF5ZXItPnNldE92
ZXJsYXlTY3JvbGxiYXJzUmVxdWlyZVRlbXBvcmFyeUNsaXBSZWN0cyh0cnVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMjg2Miw2ICsyODY1LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICB1c2VUZW1wb3JhcnlDbGlwUmVjdHMgPSBjb21wb3NpdG9yKCktPmluQ29tcG9zaXRpbmdN
b2RlKCk7CiAjZW5kaWYKKyAgICB1c2VUZW1wb3JhcnlDbGlwUmVjdHMgPSByb290TGF5ZXItPm92
ZXJsYXlTY3JvbGxiYXJzUmVxdWlyZVRlbXBvcmFyeUNsaXBSZWN0cygpOy8vU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwogCiAgICAgSW50UmVj
dCBoaXRUZXN0QXJlYSA9IHJlc3VsdC5yZWN0Rm9yUG9pbnQoaGl0VGVzdFBvaW50KTsKIApAQCAt
Mjg2OSw3ICsyODczLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIo
UgogICAgIGlmICh0cmFuc2Zvcm0oKSAmJiAhYXBwbGllZFRyYW5zZm9ybSkgewogICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQu
CiAgICAgICAgIGlmIChwYXJlbnQoKSkgewotICAgICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9
IGJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyk7Cisg
ICAgICAgICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXll
ciwgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOwog
ICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHRlc3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4K
ICAgICAgICAgICAgIGlmICghY2xpcFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yOTM3LDcgKzI5NDEsNyBAQCBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgSW50UmVjdCBiZ1JlY3Q7CiAgICAgSW50
UmVjdCBmZ1JlY3Q7CiAgICAgSW50UmVjdCBvdXRsaW5lUmVjdDsKLSAgICBjYWxjdWxhdGVSZWN0
cyhyb290TGF5ZXIsIGhpdFRlc3RSZWN0LCBsYXllckJvdW5kcywgYmdSZWN0LCBmZ1JlY3QsIG91
dGxpbmVSZWN0LCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMpOworICAgIGNhbGN1bGF0ZVJlY3RzKHJv
b3RMYXllciwgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGlu
ZVJlY3QsIHVzZVRlbXBvcmFyeUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KTsKICAgICAKICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIGZvciBrZWVwaW5nIHRyYWNr
IG9mIHRoZSB6LWRlcHRoIG9mIHRoZSBoaXQgcG9pbnQgb2YgM2QtdHJhbnNmb3JtZWQKICAgICAv
LyBkZXNjZW5kYW50cy4KQEAgLTMxOTgsNyArMzIwMiw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6aGl0VGVzdENoaWxkTGEKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlQ2xpcFJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIpCit2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
T3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KQogewogICAgIGlmIChtX2Ns
aXBSZWN0cykgewogICAgICAgICBBU1NFUlQocm9vdExheWVyID09IG1fY2xpcFJlY3RzUm9vdCk7
CkBAIC0zMjA5LDEwICszMjEzLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZWN0
cyhjb25zdCAKICAgICAvLyBleGFtaW5lIHRoZSBwYXJlbnQuICBXZSB3YW50IHRvIGNhY2hlIGNs
aXAgcmVjdHMgd2l0aCB1cyBhcyB0aGUgcm9vdC4KICAgICBSZW5kZXJMYXllciogcGFyZW50TGF5
ZXIgPSByb290TGF5ZXIgIT0gdGhpcyA/IHBhcmVudCgpIDogMDsKICAgICBpZiAocGFyZW50TGF5
ZXIpCi0gICAgICAgIHBhcmVudExheWVyLT51cGRhdGVDbGlwUmVjdHMocm9vdExheWVyKTsKKyAg
ICAgICAgcGFyZW50TGF5ZXItPnVwZGF0ZUNsaXBSZWN0cyhyb290TGF5ZXIsIHJlbGV2YW5jeSk7
CiAKICAgICBDbGlwUmVjdHMgY2xpcFJlY3RzOwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0cyhyb290
TGF5ZXIsIGNsaXBSZWN0cywgdHJ1ZSk7CisgICAgY2FsY3VsYXRlQ2xpcFJlY3RzKHJvb3RMYXll
ciwgY2xpcFJlY3RzLCB0cnVlLCByZWxldmFuY3kpOwogCiAgICAgaWYgKHBhcmVudExheWVyICYm
IHBhcmVudExheWVyLT5jbGlwUmVjdHMoKSAmJiBjbGlwUmVjdHMgPT0gKnBhcmVudExheWVyLT5j
bGlwUmVjdHMoKSkKICAgICAgICAgbV9jbGlwUmVjdHMgPSBwYXJlbnRMYXllci0+Y2xpcFJlY3Rz
KCk7CkBAIC0zMjI0LDcgKzMyMjgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDbGlwUmVj
dHMoY29uc3QgCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJl
Y3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENsaXBSZWN0cyYgY2xpcFJlY3RzLCBi
b29sIHVzZUNhY2hlZCkgY29uc3QKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0
cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBDbGlwUmVjdHMmIGNsaXBSZWN0cywgYm9v
bCB1c2VDYWNoZWQsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29u
c3QKIHsKICAgICBpZiAoIXBhcmVudCgpKSB7CiAgICAgICAgIC8vIFRoZSByb290IGxheWVyJ3Mg
Y2xpcCByZWN0IGlzIGFsd2F5cyBpbmZpbml0ZS4KQEAgLTMyNzIsNyArMzI3Niw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb24KICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgICAg
ICBJbnRSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5vdmVy
Zmxvd0NsaXBSZWN0KHgsIHkpOworICAgICAgICAgICAgSW50UmVjdCBuZXdPdmVyZmxvd0NsaXAg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+b3ZlcmZsb3dDbGlwUmVjdCh4LCB5LCByZWxldmFu
Y3kpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJzZWN0
aW9uKG5ld092ZXJmbG93Q2xpcCwgY2xpcFJlY3RzLm92ZXJmbG93Q2xpcFJlY3QoKSkpOwogICAg
ICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpIHx8IHJlbmRlcmVyKCktPmlz
UmVsUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVj
dChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dDbGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkp
OwpAQCAtMzI4NiwyNCArMzI5MCwyNCBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlw
UmVjdHMoY29uCiAgICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYXJlbnRDbGlwUmVjdHMo
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMsIGJvb2wg
dGVtcG9yYXJ5Q2xpcFJlY3RzKSBjb25zdAordm9pZCBSZW5kZXJMYXllcjo6cGFyZW50Q2xpcFJl
Y3RzKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENsaXBSZWN0cyYgY2xpcFJlY3RzLCBi
b29sIHRlbXBvcmFyeUNsaXBSZWN0cywgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVs
ZXZhbmN5KSBjb25zdAogewogICAgIEFTU0VSVChwYXJlbnQoKSk7CiAgICAgaWYgKHRlbXBvcmFy
eUNsaXBSZWN0cykgewotICAgICAgICBwYXJlbnQoKS0+Y2FsY3VsYXRlQ2xpcFJlY3RzKHJvb3RM
YXllciwgY2xpcFJlY3RzKTsKKyAgICAgICAgcGFyZW50KCktPmNhbGN1bGF0ZUNsaXBSZWN0cyhy
b290TGF5ZXIsIGNsaXBSZWN0cywgZmFsc2UsIHJlbGV2YW5jeSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBwYXJlbnQoKS0+dXBkYXRlQ2xpcFJlY3RzKHJvb3RMYXllcik7CisgICAg
cGFyZW50KCktPnVwZGF0ZUNsaXBSZWN0cyhyb290TGF5ZXIsIHJlbGV2YW5jeSk7CiAgICAgY2xp
cFJlY3RzID0gKnBhcmVudCgpLT5jbGlwUmVjdHMoKTsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXll
cjo6YmFja2dyb3VuZENsaXBSZWN0KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGJvb2wg
dGVtcG9yYXJ5Q2xpcFJlY3RzKSBjb25zdAorSW50UmVjdCBSZW5kZXJMYXllcjo6YmFja2dyb3Vu
ZENsaXBSZWN0KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGJvb2wgdGVtcG9yYXJ5Q2xp
cFJlY3RzLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0CiB7
CiAgICAgSW50UmVjdCBiYWNrZ3JvdW5kUmVjdDsKICAgICBpZiAocGFyZW50KCkpIHsKICAgICAg
ICAgQ2xpcFJlY3RzIHBhcmVudFJlY3RzOwotICAgICAgICBwYXJlbnRDbGlwUmVjdHMocm9vdExh
eWVyLCBwYXJlbnRSZWN0cywgdGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICAgICAgcGFyZW50Q2xp
cFJlY3RzKHJvb3RMYXllciwgcGFyZW50UmVjdHMsIHRlbXBvcmFyeUNsaXBSZWN0cywgcmVsZXZh
bmN5KTsKICAgICAgICAgYmFja2dyb3VuZFJlY3QgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5wb3Np
dGlvbigpID09IEZpeGVkUG9zaXRpb24gPyBwYXJlbnRSZWN0cy5maXhlZENsaXBSZWN0KCkgOgog
ICAgICAgICAgICAgICAgICAgICAgICAgIChyZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSA/IHBh
cmVudFJlY3RzLnBvc0NsaXBSZWN0KCkgOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkp
OwpAQCAtMzMxNiwxMCArMzMyMCwxMSBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5k
Q2xpcFJlY3QoCiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IFJl
bmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEludFJlY3QmIHBhaW50RGlydHlSZWN0LCBJbnRS
ZWN0JiBsYXllckJvdW5kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QmIGJhY2tncm91bmRSZWN0LCBJbnRSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgSW50UmVjdCYgb3V0
bGluZVJlY3QsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzKSBjb25zdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50UmVjdCYgYmFja2dyb3VuZFJlY3QsIEludFJlY3QmIGZvcmVn
cm91bmRSZWN0LCBJbnRSZWN0JiBvdXRsaW5lUmVjdCwgYm9vbCB0ZW1wb3JhcnlDbGlwUmVjdHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSByZWxldmFuY3kpIGNvbnN0CiB7CiAgICAgaWYgKHJvb3RMYXllciAhPSB0aGlzICYm
IHBhcmVudCgpKSB7Ci0gICAgICAgIGJhY2tncm91bmRSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0
KHJvb3RMYXllciwgdGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICAgICAgYmFja2dyb3VuZFJlY3Qg
PSBiYWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdExheWVyLCB0ZW1wb3JhcnlDbGlwUmVjdHMsIHJlbGV2
YW5jeSk7CiAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChwYWludERpcnR5UmVjdCk7
CiAgICAgfSBlbHNlCiAgICAgICAgIGJhY2tncm91bmRSZWN0ID0gcGFpbnREaXJ0eVJlY3Q7CkBA
IC0zMzM2LDcgKzMzNDEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25z
dCBSCiAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCkt
Pmhhc0NsaXAoKSkgewogICAgICAgICAvLyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xpcCBv
ZiBzb21lIGtpbmQuCiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJl
cigpKS0+b3ZlcmZsb3dDbGlwUmVjdCh4LCB5KSk7CisgICAgICAgICAgICBmb3JlZ3JvdW5kUmVj
dC5pbnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93Q2xpcFJlY3QoeCwg
eSwgcmVsZXZhbmN5KSk7CiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5oYXNDbGlwKCkpIHsKICAg
ICAgICAgICAgIC8vIENsaXAgYXBwbGllcyB0byAqdXMqIGFzIHdlbGwsIHNvIGdvIGFoZWFkIGFu
ZCB1cGRhdGUgdGhlIGRhbWFnZVJlY3QuCiAgICAgICAgICAgICBJbnRSZWN0IG5ld1Bvc0NsaXAg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2xpcFJlY3QoeCwgeSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gODMxNDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDgg
KzI1NSw4IEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KICAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CiAKLSAgICBpbnQgdmVydGlj
YWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kg
PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Ci0gICAgaW50IGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5ID0g
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworICAgIGludCB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpIGNvbnN0OworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUp
IGNvbnN0OwogCiAgICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAgICAgdm9p
ZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoaW50IHR4LCBpbnQgdHkpOwpAQCAtMzY3LDEzICsz
NjcsMTQgQEAgcHVibGljOgogICAgIC8vIHxyb290TGF5ZXJ9LiAgSXQgYWxzbyBjb21wdXRlcyBv
dXIgYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCBjbGlwIHJlY3RzCiAgICAgLy8gZm9yIHBhaW50
aW5nL2V2ZW50IGhhbmRsaW5nLgogICAgIHZvaWQgY2FsY3VsYXRlUmVjdHMoY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgY29uc3QgSW50UmVjdCYgcGFpbnREaXJ0eVJlY3QsIEludFJlY3Qm
IGxheWVyQm91bmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCYgYmFja2dyb3Vu
ZFJlY3QsIEludFJlY3QmIGZvcmVncm91bmRSZWN0LCBJbnRSZWN0JiBvdXRsaW5lUmVjdCwgYm9v
bCB0ZW1wb3JhcnlDbGlwUmVjdHMgPSBmYWxzZSkgY29uc3Q7CisgICAgICAgICAgICAgICAgICAg
ICAgICBJbnRSZWN0JiBiYWNrZ3JvdW5kUmVjdCwgSW50UmVjdCYgZm9yZWdyb3VuZFJlY3QsIElu
dFJlY3QmIG91dGxpbmVSZWN0LCBib29sIHRlbXBvcmFyeUNsaXBSZWN0cyA9IGZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25v
cmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CiAKICAgICAvLyBDb21wdXRlIGFuZCBjYWNo
ZSBjbGlwIHJlY3RzIGNvbXB1dGVkIHdpdGggdGhlIGdpdmVuIGxheWVyIGFzIHRoZSByb290Ci0g
ICAgdm9pZCB1cGRhdGVDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcik7Cisg
ICAgdm9pZCB1cGRhdGVDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7
CiAgICAgLy8gQ29tcHV0ZSBhbmQgcmV0dXJuIHRoZSBjbGlwIHJlY3RzLiBJZiB1c2VDYWNoZWQg
aXMgdHJ1ZSwgd2lsbCB1c2VkIHByZXZpb3VzbHkgY29tcHV0ZWQgY2xpcCByZWN0cyBvbiBhbmNl
c3RvcnMKICAgICAvLyAocmF0aGVyIHRoYW4gY29tcHV0aW5nIHRoZW0gYWxsIGZyb20gc2NyYXRj
aCB1cCB0aGUgcGFyZW50IGNoYWluKS4KLSAgICB2b2lkIGNhbGN1bGF0ZUNsaXBSZWN0cyhjb25z
dCBSZW5kZXJMYXllciogcm9vdExheWVyLCBDbGlwUmVjdHMmLCBib29sIHVzZUNhY2hlZCA9IGZh
bHNlKSBjb25zdDsKKyAgICB2b2lkIGNhbGN1bGF0ZUNsaXBSZWN0cyhjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBDbGlwUmVjdHMmLCBib29sIHVzZUNhY2hlZCA9IGZhbHNlLCBPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25z
dDsKICAgICBDbGlwUmVjdHMqIGNsaXBSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Rz
OyB9CiAKICAgICBJbnRSZWN0IGNoaWxkcmVuQ2xpcFJlY3QoKSBjb25zdDsgLy8gUmV0dXJucyB0
aGUgZm9yZWdyb3VuZCBjbGlwIHJlY3Qgb2YgdGhlIGxheWVyIGluIHRoZSBkb2N1bWVudCdzIGNv
b3JkaW5hdGUgc3BhY2UuCkBAIC00NDcsNiArNDQ4LDkgQEAgcHVibGljOgogICAgIGJvb2wgY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KICAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQogCisgICAgYm9vbCBvdmVybGF5U2Nyb2xs
YmFyc1JlcXVpcmVUZW1wb3JhcnlDbGlwUmVjdHMoKSBjb25zdCB7IHJldHVybiBtX292ZXJsYXlT
Y3JvbGxiYXJzUmVxdWlyZVRlbXBvcmFyeUNsaXBSZWN0czsgfQorICAgIHZvaWQgc2V0T3Zlcmxh
eVNjcm9sbGJhcnNSZXF1aXJlVGVtcG9yYXJ5Q2xpcFJlY3RzKGJvb2wgdGVtcG9yYXJ5Q2xpcFJl
Y3RzKSB7IG1fb3ZlcmxheVNjcm9sbGJhcnNSZXF1aXJlVGVtcG9yYXJ5Q2xpcFJlY3RzID0gdGVt
cG9yYXJ5Q2xpcFJlY3RzOyB9CisKIHByaXZhdGU6CiAgICAgLy8gVGhlIG5vcm1hbCBvcGVyYXRv
ciBuZXcgaXMgZGlzYWxsb3dlZCBvbiBhbGwgcmVuZGVyIG9iamVjdHMuCiAgICAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCkgdGhyb3coKTsKQEAgLTU2Myw4ICs1NjcsOCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgcGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wYWlu
dGluZ0luc2lkZVJlZmxlY3Rpb247IH0KICAgICB2b2lkIHNldFBhaW50aW5nSW5zaWRlUmVmbGVj
dGlvbihib29sIGIpIHsgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gPSBiOyB9CiAgICAgCi0g
ICAgdm9pZCBwYXJlbnRDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgQ2xp
cFJlY3RzJiwgYm9vbCB0ZW1wb3JhcnlDbGlwUmVjdHMgPSBmYWxzZSkgY29uc3Q7Ci0gICAgSW50
UmVjdCBiYWNrZ3JvdW5kQ2xpcFJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgYm9v
bCB0ZW1wb3JhcnlDbGlwUmVjdHMpIGNvbnN0OworICAgIHZvaWQgcGFyZW50Q2xpcFJlY3RzKGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENsaXBSZWN0cyYsIGJvb2wgdGVtcG9yYXJ5Q2xp
cFJlY3RzID0gZmFsc2UsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworICAgIEludFJlY3QgYmFja2dyb3VuZENsaXBSZWN0
KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzLCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KSBjb25zdDsKIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdUcmFuc2Zvcm1lZEFuY2VzdG9y
KCkgY29uc3Q7CiAKQEAgLTY4OCw2ICs2OTIsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogICAg
IGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOworICAgIGJvb2wgbV9v
dmVybGF5U2Nyb2xsYmFyc1JlcXVpcmVUZW1wb3JhcnlDbGlwUmVjdHMgOiAxOwogCiAgICAgSW50
UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwogCg==
</data>
<flag name="review"
          id="81547"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89509</attachid>
            <date>2011-04-13 18:11:09 -0700</date>
            <delta_ts>2011-04-14 14:49:57 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>13905</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNzk0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDQtMTMgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NjQ5MworICAgICAgICBEcmFnLXNjcm9sbGluZyBvdmVybGF5IHNjcm9sbGJhcnMgdGh1bWIgaW4g
b3ZlcmZsb3cgcmVnaW9ucyBkb2VzIG5vdCB3b3JrCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzkxMTI2ODg+CisKKyAgICAgICAgVGhlcmUgd2Fz
IGFuIG9yaWdpbmFsIGNoYW5nZSB0byBmaXggdGhpcyBpbiB0aGUgbm9ybWFsIGhpdC10ZXN0aW5n
IGNhc2UsIGJ1dCBoaXQgCisgICAgICAgIHRlc3Rpbmcgb2YgdHJhbnNmb3JtZWQgYW5kL29yIHBv
c2l0aW9uZWQgb2JqZWN0cyB3YXMgc3RpbGwgYnJva2VuLiBUaGUgdHJhbnNmb3JtZWQgCisgICAg
ICAgIGNhc2UgaXMgZml4ZWQgYnkgc2VuZGluZyBhbiBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSBwYXJhbWV0ZXIgdG8gCisgICAgICAgIGNhbGN1bGF0ZVJlY3RzKCkuIEdldHRpbmcgcG9z
aXRpb25lZCBvYmplY3RzIHJpZ2h0IGlzIGEgbGl0dGxlIHRyaWNraWVyLiBUaG9zZSBuZWVkIAor
ICAgICAgICB0byBvcHQgaW50byB1c2luZyB0ZW1wb3JhcnkgY2xpcCByZWN0cyBkdXJpbmcgaGl0
IHRlc3RpbmcuIFRvIGF2b2lkIGRvaW5nIHRoYXQgd2hlbiAKKyAgICAgICAgaXQgaXMgbm90IG5l
Y2Vzc2FyeSwgSSBhZGRlZCBhIG5ldyBiaXQgdG8gU2Nyb2xsVmlldyB0byB0cmFjayB3aGV0aGVy
IHRoZXJlIGFyZSAKKyAgICAgICAgY3VycmVudGx5IG92ZXJsYXkgc2Nyb2xsYmFycyBwYWludGVk
IGluIHRoZSB2aWV3LgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGFpbnNTY3Jv
bGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3OjpzZXRDb250YWluc1Njcm9sbGFibGVBcmVhV2l0aE92ZXJsYXlTY3JvbGxiYXJzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVDbGlwUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZUNsaXBSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFyZW50Q2xp
cFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xpcFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKwogMjAxMS0wNC0xMyAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA4
Mzc1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MjIsNiArOTIyLDkgQEAgdm9pZCBTY3JvbGxWaWV3OjpwYWludChHcmFwaGlj
c0NvbnRleHQqIAogICAgICAgICByZXR1cm47CiAKICAgICBub3RpZnlQYWdlVGhhdENvbnRlbnRB
cmVhV2lsbFBhaW50KCk7CisKKyAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYW55IG92ZXJsYXkgc2Ny
b2xsYmFycyBhcyB3ZSBwYWludCwgdGhpcyB3aWxsIGJlIHNldCB0byB0cnVlLgorICAgIG1fY29u
dGFpbnNTY3JvbGxhYmxlQXJlYVdpdGhPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwogICAgIAog
ICAgIEludFJlY3QgZG9jdW1lbnREaXJ0eVJlY3QgPSByZWN0OwogICAgIGRvY3VtZW50RGlydHlS
ZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5oCShyZXZpc2lvbiA4Mzc1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50
UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKKyAgICBib29sIGNvbnRhaW5zU2Nyb2xsYWJs
ZUFyZWFXaXRoT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zU2Ny
b2xsYWJsZUFyZWFXaXRoT3ZlcmxheVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldENvbnRhaW5z
U2Nyb2xsYWJsZUFyZWFXaXRoT3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBjb250YWlucykgeyBtX2Nv
bnRhaW5zU2Nyb2xsYWJsZUFyZWFXaXRoT3ZlcmxheVNjcm9sbGJhcnMgPSBjb250YWluczsgfQor
CiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsVmlldygpOwogCkBAIC0zNDgsNiArMzUxLDggQEAgcHJp
dmF0ZToKICAgICBib29sIG1fY2xpcHNSZXBhaW50czsKICAgICBib29sIG1fZGVsZWdhdGVzU2Ny
b2xsaW5nOwogCisgICAgYm9vbCBtX2NvbnRhaW5zU2Nyb2xsYWJsZUFyZWFXaXRoT3ZlcmxheVNj
cm9sbGJhcnM7CisKICAgICBJbnRTaXplIG1fYm91bmRzU2l6ZTsKIAogICAgIHZvaWQgaW5pdCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lv
biA4Mzc1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxODAsOSArMjE4MCwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWlu
dE92ZXJmbG93Q29udHJvbHMoCiAgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJz
IHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAogICAg
IC8vIHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0
byBnZXQgaXQgcmlnaHQuCiAgICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKSB7Ci0gICAgICAgIFJlbmRlckxheWVyKiByb290TGF5ZXIgPSBy
ZW5kZXJlcigpLT52aWV3KCktPmxheWVyKCk7Ci0gICAgICAgIHJvb3RMYXllci0+c2V0Q29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICBSZW5kZXJWaWV3KiByZW5k
ZXJWaWV3ID0gcmVuZGVyZXIoKS0+dmlldygpOworICAgICAgICByZW5kZXJWaWV3LT5sYXllcigp
LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7CiAgICAgICAgIG1fY2Fj
aGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IEludFBvaW50KHR4LCB0eSk7CisgICAgICAgIHJl
bmRlclZpZXctPmZyYW1lVmlldygpLT5zZXRDb250YWluc1Njcm9sbGFibGVBcmVhV2l0aE92ZXJs
YXlTY3JvbGxiYXJzKHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yODYyLDYg
KzI4NjMsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyA9
IGNvbXBvc2l0b3IoKS0+aW5Db21wb3NpdGluZ01vZGUoKTsKICNlbmRpZgorICAgIHVzZVRlbXBv
cmFyeUNsaXBSZWN0cyB8PSByZW5kZXJlcigpLT52aWV3KCktPmZyYW1lVmlldygpLT5jb250YWlu
c1Njcm9sbGFibGVBcmVhV2l0aE92ZXJsYXlTY3JvbGxiYXJzKCk7CiAKICAgICBJbnRSZWN0IGhp
dFRlc3RBcmVhID0gcmVzdWx0LnJlY3RGb3JQb2ludChoaXRUZXN0UG9pbnQpOwogCkBAIC0yODY5
LDcgKzI4NzEsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAg
ICAgaWYgKHRyYW5zZm9ybSgpICYmICFhcHBsaWVkVHJhbnNmb3JtKSB7CiAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBoYXZlIGJlZW4gY2FsY3VsYXRlZC4KICAg
ICAgICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gYmFj
a2dyb3VuZENsaXBSZWN0KHJvb3RMYXllciwgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICAg
ICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdExheWVyLCB1
c2VUZW1wb3JhcnlDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAgICAg
ICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVzdCB0aGUgZW5jbG9zaW5nIGNsaXAgbm93LgogICAg
ICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKQEAgLTI5MzcsNyArMjkzOSw3IEBAIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICBJbnRSZWN0IGJnUmVjdDsKICAgICBJbnRSZWN0
IGZnUmVjdDsKICAgICBJbnRSZWN0IG91dGxpbmVSZWN0OwotICAgIGNhbGN1bGF0ZVJlY3RzKHJv
b3RMYXllciwgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGlu
ZVJlY3QsIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyk7CisgICAgY2FsY3VsYXRlUmVjdHMocm9vdExh
eWVyLCBoaXRUZXN0UmVjdCwgbGF5ZXJCb3VuZHMsIGJnUmVjdCwgZmdSZWN0LCBvdXRsaW5lUmVj
dCwgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOwog
ICAgIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2Yg
dGhlIHotZGVwdGggb2YgdGhlIGhpdCBwb2ludCBvZiAzZC10cmFuc2Zvcm1lZAogICAgIC8vIGRl
c2NlbmRhbnRzLgpAQCAtMzE5OCw3ICszMjAwLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0Q2hpbGRMYQogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllcikKK3ZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUNsaXBSZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpCiB7CiAgICAgaWYgKG1fY2xpcFJl
Y3RzKSB7CiAgICAgICAgIEFTU0VSVChyb290TGF5ZXIgPT0gbV9jbGlwUmVjdHNSb290KTsKQEAg
LTMyMDksMTAgKzMyMTEsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2xpcFJlY3RzKGNv
bnN0IAogICAgIC8vIGV4YW1pbmUgdGhlIHBhcmVudC4gIFdlIHdhbnQgdG8gY2FjaGUgY2xpcCBy
ZWN0cyB3aXRoIHVzIGFzIHRoZSByb290LgogICAgIFJlbmRlckxheWVyKiBwYXJlbnRMYXllciA9
IHJvb3RMYXllciAhPSB0aGlzID8gcGFyZW50KCkgOiAwOwogICAgIGlmIChwYXJlbnRMYXllcikK
LSAgICAgICAgcGFyZW50TGF5ZXItPnVwZGF0ZUNsaXBSZWN0cyhyb290TGF5ZXIpOworICAgICAg
ICBwYXJlbnRMYXllci0+dXBkYXRlQ2xpcFJlY3RzKHJvb3RMYXllciwgcmVsZXZhbmN5KTsKIAog
ICAgIENsaXBSZWN0cyBjbGlwUmVjdHM7Ci0gICAgY2FsY3VsYXRlQ2xpcFJlY3RzKHJvb3RMYXll
ciwgY2xpcFJlY3RzLCB0cnVlKTsKKyAgICBjYWxjdWxhdGVDbGlwUmVjdHMocm9vdExheWVyLCBj
bGlwUmVjdHMsIHRydWUsIHJlbGV2YW5jeSk7CiAKICAgICBpZiAocGFyZW50TGF5ZXIgJiYgcGFy
ZW50TGF5ZXItPmNsaXBSZWN0cygpICYmIGNsaXBSZWN0cyA9PSAqcGFyZW50TGF5ZXItPmNsaXBS
ZWN0cygpKQogICAgICAgICBtX2NsaXBSZWN0cyA9IHBhcmVudExheWVyLT5jbGlwUmVjdHMoKTsK
QEAgLTMyMjQsNyArMzIyNiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZWN0cyhj
b25zdCAKICNlbmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMo
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMsIGJvb2wg
dXNlQ2FjaGVkKSBjb25zdAordm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENsaXBSZWN0cyYgY2xpcFJlY3RzLCBib29sIHVz
ZUNhY2hlZCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAog
ewogICAgIGlmICghcGFyZW50KCkpIHsKICAgICAgICAgLy8gVGhlIHJvb3QgbGF5ZXIncyBjbGlw
IHJlY3QgaXMgYWx3YXlzIGluZmluaXRlLgpAQCAtMzI3Miw3ICszMjc0LDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAgICAgIElu
dFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPm92ZXJmbG93
Q2xpcFJlY3QoeCwgeSk7CisgICAgICAgICAgICBJbnRSZWN0IG5ld092ZXJmbG93Q2xpcCA9IHRv
UmVuZGVyQm94KHJlbmRlcmVyKCkpLT5vdmVyZmxvd0NsaXBSZWN0KHgsIHksIHJlbGV2YW5jeSk7
CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0T3ZlcmZsb3dDbGlwUmVjdChpbnRlcnNlY3Rpb24o
bmV3T3ZlcmZsb3dDbGlwLCBjbGlwUmVjdHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7CiAgICAgICAg
ICAgICBpZiAocmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkgfHwgcmVuZGVyZXIoKS0+aXNSZWxQ
b3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGlu
dGVyc2VjdGlvbihuZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpKSk7CkBA
IC0zMjg2LDI0ICszMjg4LDI0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0
cyhjb24KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhcmVudENsaXBSZWN0cyhjb25z
dCBSZW5kZXJMYXllciogcm9vdExheWVyLCBDbGlwUmVjdHMmIGNsaXBSZWN0cywgYm9vbCB0ZW1w
b3JhcnlDbGlwUmVjdHMpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjpwYXJlbnRDbGlwUmVjdHMo
Y29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgQ2xpcFJlY3RzJiBjbGlwUmVjdHMsIGJvb2wg
dGVtcG9yYXJ5Q2xpcFJlY3RzLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFu
Y3kpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudCgpKTsKICAgICBpZiAodGVtcG9yYXJ5Q2xp
cFJlY3RzKSB7Ci0gICAgICAgIHBhcmVudCgpLT5jYWxjdWxhdGVDbGlwUmVjdHMocm9vdExheWVy
LCBjbGlwUmVjdHMpOworICAgICAgICBwYXJlbnQoKS0+Y2FsY3VsYXRlQ2xpcFJlY3RzKHJvb3RM
YXllciwgY2xpcFJlY3RzLCBmYWxzZSwgcmVsZXZhbmN5KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHBhcmVudCgpLT51cGRhdGVDbGlwUmVjdHMocm9vdExheWVyKTsKKyAgICBwYXJl
bnQoKS0+dXBkYXRlQ2xpcFJlY3RzKHJvb3RMYXllciwgcmVsZXZhbmN5KTsKICAgICBjbGlwUmVj
dHMgPSAqcGFyZW50KCktPmNsaXBSZWN0cygpOwogfQogCi1JbnRSZWN0IFJlbmRlckxheWVyOjpi
YWNrZ3JvdW5kQ2xpcFJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgYm9vbCB0ZW1w
b3JhcnlDbGlwUmVjdHMpIGNvbnN0CitJbnRSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xp
cFJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgYm9vbCB0ZW1wb3JhcnlDbGlwUmVj
dHMsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKIHsKICAg
ICBJbnRSZWN0IGJhY2tncm91bmRSZWN0OwogICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICBD
bGlwUmVjdHMgcGFyZW50UmVjdHM7Ci0gICAgICAgIHBhcmVudENsaXBSZWN0cyhyb290TGF5ZXIs
IHBhcmVudFJlY3RzLCB0ZW1wb3JhcnlDbGlwUmVjdHMpOworICAgICAgICBwYXJlbnRDbGlwUmVj
dHMocm9vdExheWVyLCBwYXJlbnRSZWN0cywgdGVtcG9yYXJ5Q2xpcFJlY3RzLCByZWxldmFuY3kp
OwogICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IHJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9u
KCkgPT0gRml4ZWRQb3NpdGlvbiA/IHBhcmVudFJlY3RzLmZpeGVkQ2xpcFJlY3QoKSA6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpID8gcGFyZW50
UmVjdHMucG9zQ2xpcFJlY3QoKSA6IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFJlY3RzLm92ZXJmbG93Q2xpcFJlY3QoKSk7CkBA
IC0zMzE2LDEwICszMzE4LDExIEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRDbGlw
UmVjdCgKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgY29uc3QgSW50UmVjdCYgcGFpbnREaXJ0eVJlY3QsIEludFJlY3Qm
IGxheWVyQm91bmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCYg
YmFja2dyb3VuZFJlY3QsIEludFJlY3QmIGZvcmVncm91bmRSZWN0LCBJbnRSZWN0JiBvdXRsaW5l
UmVjdCwgYm9vbCB0ZW1wb3JhcnlDbGlwUmVjdHMpIGNvbnN0CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRSZWN0JiBiYWNrZ3JvdW5kUmVjdCwgSW50UmVjdCYgZm9yZWdyb3Vu
ZFJlY3QsIEludFJlY3QmIG91dGxpbmVSZWN0LCBib29sIHRlbXBvcmFyeUNsaXBSZWN0cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5IHJlbGV2YW5jeSkgY29uc3QKIHsKICAgICBpZiAocm9vdExheWVyICE9IHRoaXMgJiYgcGFy
ZW50KCkpIHsKLSAgICAgICAgYmFja2dyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3Qocm9v
dExheWVyLCB0ZW1wb3JhcnlDbGlwUmVjdHMpOworICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IGJh
Y2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHRlbXBvcmFyeUNsaXBSZWN0cywgcmVsZXZhbmN5
KTsKICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KHBhaW50RGlydHlSZWN0KTsKICAg
ICB9IGVsc2UKICAgICAgICAgYmFja2dyb3VuZFJlY3QgPSBwYWludERpcnR5UmVjdDsKQEAgLTMz
MzYsNyArMzMzOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IFIK
ICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS0+aGFz
Q2xpcCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbGF5ZXIgZXN0YWJsaXNoZXMgYSBjbGlwIG9mIHNv
bWUga2luZC4KICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKQotICAg
ICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkp
LT5vdmVyZmxvd0NsaXBSZWN0KHgsIHkpKTsKKyAgICAgICAgICAgIGZvcmVncm91bmRSZWN0Lmlu
dGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+b3ZlcmZsb3dDbGlwUmVjdCh4LCB5LCBy
ZWxldmFuY3kpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmhhc0NsaXAoKSkgewogICAgICAg
ICAgICAgLy8gQ2xpcCBhcHBsaWVzIHRvICp1cyogYXMgd2VsbCwgc28gZ28gYWhlYWQgYW5kIHVw
ZGF0ZSB0aGUgZGFtYWdlUmVjdC4KICAgICAgICAgICAgIEludFJlY3QgbmV3UG9zQ2xpcCA9IHRv
UmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jbGlwUmVjdCh4LCB5KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA4Mzc1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsOCArMjU1
LDggQEAgcHVibGljOgogICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQogICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSA9IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kgPSBJZ25v
cmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29u
c3Q7CiAKICAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKICAgICB2b2lkIHBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyhpbnQgdHgsIGludCB0eSk7CkBAIC0zNjcsMTMgKzM2Nywx
NCBAQCBwdWJsaWM6CiAgICAgLy8gfHJvb3RMYXllcn0uICBJdCBhbHNvIGNvbXB1dGVzIG91ciBi
YWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNsaXAgcmVjdHMKICAgICAvLyBmb3IgcGFpbnRpbmcv
ZXZlbnQgaGFuZGxpbmcuCiAgICAgdm9pZCBjYWxjdWxhdGVSZWN0cyhjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgSW50UmVjdCYgbGF5
ZXJCb3VuZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0JiBiYWNrZ3JvdW5kUmVj
dCwgSW50UmVjdCYgZm9yZWdyb3VuZFJlY3QsIEludFJlY3QmIG91dGxpbmVSZWN0LCBib29sIHRl
bXBvcmFyeUNsaXBSZWN0cyA9IGZhbHNlKSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEludFJlY3QmIGJhY2tncm91bmRSZWN0LCBJbnRSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgSW50UmVj
dCYgb3V0bGluZVJlY3QsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzID0gZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKIAogICAgIC8vIENvbXB1dGUgYW5kIGNhY2hlIGNs
aXAgcmVjdHMgY29tcHV0ZWQgd2l0aCB0aGUgZ2l2ZW4gbGF5ZXIgYXMgdGhlIHJvb3QKLSAgICB2
b2lkIHVwZGF0ZUNsaXBSZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyKTsKKyAgICB2
b2lkIHVwZGF0ZUNsaXBSZWN0cyhjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKICAg
ICAvLyBDb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsaXAgcmVjdHMuIElmIHVzZUNhY2hlZCBpcyB0
cnVlLCB3aWxsIHVzZWQgcHJldmlvdXNseSBjb21wdXRlZCBjbGlwIHJlY3RzIG9uIGFuY2VzdG9y
cwogICAgIC8vIChyYXRoZXIgdGhhbiBjb21wdXRpbmcgdGhlbSBhbGwgZnJvbSBzY3JhdGNoIHVw
IHRoZSBwYXJlbnQgY2hhaW4pLgotICAgIHZvaWQgY2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IFJl
bmRlckxheWVyKiByb290TGF5ZXIsIENsaXBSZWN0cyYsIGJvb2wgdXNlQ2FjaGVkID0gZmFsc2Up
IGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiBy
b290TGF5ZXIsIENsaXBSZWN0cyYsIGJvb2wgdXNlQ2FjaGVkID0gZmFsc2UsIE92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0Owog
ICAgIENsaXBSZWN0cyogY2xpcFJlY3RzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdHM7IH0K
IAogICAgIEludFJlY3QgY2hpbGRyZW5DbGlwUmVjdCgpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBm
b3JlZ3JvdW5kIGNsaXAgcmVjdCBvZiB0aGUgbGF5ZXIgaW4gdGhlIGRvY3VtZW50J3MgY29vcmRp
bmF0ZSBzcGFjZS4KQEAgLTU2Myw4ICs1NjQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcGFpbnRp
bmdJbnNpZGVSZWZsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wYWludGluZ0luc2lkZVJlZmxl
Y3Rpb247IH0KICAgICB2b2lkIHNldFBhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihib29sIGIpIHsg
bV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gPSBiOyB9CiAgICAgCi0gICAgdm9pZCBwYXJlbnRD
bGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgQ2xpcFJlY3RzJiwgYm9vbCB0
ZW1wb3JhcnlDbGlwUmVjdHMgPSBmYWxzZSkgY29uc3Q7Ci0gICAgSW50UmVjdCBiYWNrZ3JvdW5k
Q2xpcFJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgYm9vbCB0ZW1wb3JhcnlDbGlw
UmVjdHMpIGNvbnN0OworICAgIHZvaWQgcGFyZW50Q2xpcFJlY3RzKGNvbnN0IFJlbmRlckxheWVy
KiByb290TGF5ZXIsIENsaXBSZWN0cyYsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzID0gZmFsc2Us
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUpIGNvbnN0OworICAgIEludFJlY3QgYmFja2dyb3VuZENsaXBSZWN0KGNvbnN0IFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIGJvb2wgdGVtcG9yYXJ5Q2xpcFJlY3RzLCBPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKIAogICAg
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdUcmFuc2Zvcm1lZEFuY2VzdG9yKCkgY29uc3Q7CiAK
</data>
<flag name="review"
          id="82196"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>