<?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>85808</bug_id>
          
          <creation_ts>2012-05-07 10:34:07 -0700</creation_ts>
          <short_desc>[chromium] Non-preserves-3d requires explicit orthographic transform when computing screen-space transform</short_desc>
          <delta_ts>2012-08-06 10:43:22 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>84195</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dtu</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>reveman</cc>
    
    <cc>vangelis</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>617703</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-07 10:34:07 -0700</bug_when>
    <thetext>Consider the following case:
   parent layer A has a perspective projection
   descendant surface B does not preserve 3d, thus flattening its children
   children of B have 3-d transforms

In this case, children of B should be flattened to surface B, before the perspective projection is applied.
However, in the current code, this flattening is accidentally skipped when computing the screen-space transform, and therefore it computes incorrectly.

Thanks to danakj@ for finding this problem. =)

The fix is simple, when there is a surface that does not preserve 3d, and it does not have a perspective projection already, then it should be using an orthographic projection instead.  Because transforms accumulate over the entire hierarchy, this orthographic projection actually needs to be made explicit, so that children are correctly flattened before ancestor transforms do anything else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618100</commentid>
    <comment_count>1</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-07 16:52:23 -0700</bug_when>
    <thetext>It turns out that adding the orthographic portion of the screen-space transform (which I&apos;m pretty sure is correct) breaks one layout test that seems to be malformed in the first place.  The fix for that is in bug 84195.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685538</commentid>
    <comment_count>2</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-02 10:18:39 -0700</bug_when>
    <thetext>So I finally have a working fix.  Patch coming in a moment, no obvious regressions from unit tests and layout tests on mac.

Instead of using orthographic projection, it works more correctly to use the &quot;flattening&quot; operation, which is similar to an orthographic projection, but has some blatant differences, too:

- A canonical orthographic matrix post-multiplied to a transform would effectively set the matrix&apos;s 3rd column to (0, 0, 0, 0).   -- yes, 3rd element is zero here.

- The flatten operation effectively sets the matrix&apos;s 3rd row AND 3rd colum to (0, 0, 1, 0).

I tried for a while to swallow why exactly the flatten operation is more correct, but I can&apos;t justify it to myself 100% yet.  The best I could come up with is that x and y values behave exactly like an orthographic projection, while the z component of the matrix is overridden so that it preserves the z value that is input to this transform.

I experimented using an orthographic projection instead of flatten operation, andin that case layer sorting seems to break, for example, on http://www.webkit.org/blog-files/3d-transforms/transform-style.html

I narrowed it down to the difference in the value of m33() for these two transforms.  when m33() is zero for the orthographic projection, the layer sorting seems to break.  When it&apos;s 1 (flattening operation), the layer sorting works.  So my best guess is that the flatten operation is necessary for our layer sorter, because it preserves the z-values of points on the subtree that is being flattened.  At the same time, the transform remains &quot;correct&quot; for x and y, only because we know that inputs and outputs are 2d, even though 3d things can happen to them.

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685547</commentid>
    <comment_count>3</comment_count>
      <attachid>156117</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-02 10:30:29 -0700</bug_when>
    <thetext>Created attachment 156117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685706</commentid>
    <comment_count>4</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2012-08-02 13:07:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; 
&gt; I experimented using an orthographic projection instead of flatten operation, andin that case layer sorting seems to break, for example, on http://www.webkit.org/blog-files/3d-transforms/transform-style.html
&gt; 
&gt; I narrowed it down to the difference in the value of m33() for these two transforms.  when m33() is zero for the orthographic projection, the layer sorting seems to break.  When it&apos;s 1 (flattening operation), the layer sorting works.  So my best guess is that the flatten operation is necessary for our layer sorter, because it preserves the z-values of points on the subtree that is being flattened.  At the same time, the transform remains &quot;correct&quot; for x and y, only because we know that inputs and outputs are 2d, even though 3d things can happen to them.
&gt; 
&gt; Any thoughts?

Interesting. If preserves 3D isn&apos;t set shouldn&apos;t we be skipping sorting of sublayers altogether?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685811</commentid>
    <comment_count>5</comment_count>
      <attachid>156117</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-02 14:14:23 -0700</bug_when>
    <thetext>Comment on attachment 156117
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCMathUtil.cpp:371
&gt; +    //  - For z values, the new transform overrides any effect that the transform had on
&gt; +    //    z, and instead it preserves the z value for any points that are transformed.

Can you explain why z values are preserved? Shouldn&apos;t everything flatten to z=0 on the surface?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685860</commentid>
    <comment_count>6</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-02 14:54:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 156117 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156117&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCMathUtil.cpp:371
&gt; &gt; +    //  - For z values, the new transform overrides any effect that the transform had on
&gt; &gt; +    //    z, and instead it preserves the z value for any points that are transformed.
&gt; 
&gt; Can you explain why z values are preserved? Shouldn&apos;t everything flatten to z=0 on the surface?

Are you asking why they should be preserved?  Ian and I believe that it is an intentional hack that allows us to use the transform for two purposes simultaneously:  x,y,w would be used for rendering, and they are correctly orthographically projected, and z would be used for sorting; whatever z-value the subtree would have produced is preserved by having this flattening here.

Or, if you&apos;re asking how this transform actually preserves z, it&apos;s because of the 3rd row being set to 0, 0, 1, 0:

So  if we say  p&apos; = flattenedA * p

then   p&apos;.z =  0*p.x + 0*p.y + 1*p.z + 0*p.w 
so p&apos;.z = p.z.

Suppose we have additional matrices that were post-multiplied (i.e. the subtree has more transforms applied after the sublayer flattened).... like p&apos; = flattenedA * B * C * D * p

then  p&apos;.z =  z-value of (B * C * D * p).

i.e. it preserves whatever z-value is given to flattenedA.  It seems to me that is (almost) exactly what we want for layer sorting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685867</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-02 14:59:09 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 156117 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156117&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCMathUtil.cpp:371
&gt; &gt; &gt; +    //  - For z values, the new transform overrides any effect that the transform had on
&gt; &gt; &gt; +    //    z, and instead it preserves the z value for any points that are transformed.
&gt; &gt; 
&gt; &gt; Can you explain why z values are preserved? Shouldn&apos;t everything flatten to z=0 on the surface?
&gt; 
&gt; Are you asking why they should be preserved?  Ian and I believe that it is an intentional hack that allows us to use the transform for two purposes simultaneously:  x,y,w would be used for rendering, and they are correctly orthographically projected, and z would be used for sorting; whatever z-value the subtree would have produced is preserved by having this flattening here.

Yeah, I&apos;m asking why.

When do layers in non-preserves-3d contexts need to be sorted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685884</commentid>
    <comment_count>8</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-02 15:12:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; (From update of attachment 156117 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156117&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCMathUtil.cpp:371
&gt; &gt; &gt; &gt; +    //  - For z values, the new transform overrides any effect that the transform had on
&gt; &gt; &gt; &gt; +    //    z, and instead it preserves the z value for any points that are transformed.
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you explain why z values are preserved? Shouldn&apos;t everything flatten to z=0 on the surface?
&gt; &gt; 
&gt; &gt; Are you asking why they should be preserved?  Ian and I believe that it is an intentional hack that allows us to use the transform for two purposes simultaneously:  x,y,w would be used for rendering, and they are correctly orthographically projected, and z would be used for sorting; whatever z-value the subtree would have produced is preserved by having this flattening here.
&gt; 
&gt; Yeah, I&apos;m asking why.
&gt; 
&gt; When do layers in non-preserves-3d contexts need to be sorted?

Yeah, good question... this is also to answer Comment #4.

Actually the situation you guys are thinking of is not the situation we would be dealing with here.

The situation we&apos;re considering here is:  (1) an ancestor layer has preserve-3d==false.  Then, a bunch of layers in the subtree are in a 3d-rendering context, and need to be sorted with each other.

The transform these layers use to compute their z stuff for sorting is the drawTransform... and the drawTransform would include the ancestor&apos;s transform as part of the drawTransform.  That is where z-values would get lost if we used a pure orthographic projection -- at the ancestor.

By doing this flattening operation instead, we don&apos;t loose the z-values that we needed for correct sorting.

Does that answer your question?  =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685953</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-02 16:11:12 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt;
&gt; &gt; When do layers in non-preserves-3d contexts need to be sorted?
&gt; 
&gt; Yeah, good question... this is also to answer Comment #4.
&gt; 
&gt; Actually the situation you guys are thinking of is not the situation we would be dealing with here.
&gt; 
&gt; The situation we&apos;re considering here is:  (1) an ancestor layer has preserve-3d==false.  Then, a bunch of layers in the subtree are in a 3d-rendering context, and need to be sorted with each other.
&gt; 
&gt; The transform these layers use to compute their z stuff for sorting is the drawTransform... and the drawTransform would include the ancestor&apos;s transform as part of the drawTransform.  That is where z-values would get lost if we used a pure orthographic projection -- at the ancestor.

Ok, so keeping m33=1 and not forcing z=0 is only for the sublayer matrix flattening.  The screen space transform doesn&apos;t need this, but it&apos;s not problematic to have it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686028</commentid>
    <comment_count>10</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-02 17:25:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt;
&gt; &gt; &gt; When do layers in non-preserves-3d contexts need to be sorted?
&gt; &gt; 
&gt; &gt; Yeah, good question... this is also to answer Comment #4.
&gt; &gt; 
&gt; &gt; Actually the situation you guys are thinking of is not the situation we would be dealing with here.
&gt; &gt; 
&gt; &gt; The situation we&apos;re considering here is:  (1) an ancestor layer has preserve-3d==false.  Then, a bunch of layers in the subtree are in a 3d-rendering context, and need to be sorted with each other.
&gt; &gt; 
&gt; &gt; The transform these layers use to compute their z stuff for sorting is the drawTransform... and the drawTransform would include the ancestor&apos;s transform as part of the drawTransform.  That is where z-values would get lost if we used a pure orthographic projection -- at the ancestor.
&gt; 
&gt; Ok, so keeping m33=1 and not forcing z=0 is only for the sublayer matrix flattening.  The screen space transform doesn&apos;t need this, but it&apos;s not problematic to have it.


The screen space transform does need it.  That was the whole point of this bug.

Dana had a lovely repro for this, I have it locally on my machine.  How about I convert it into a layout test for one more &quot;layer&quot; of coverage (pun definitely intended)?  This was related to the bug you reported, where the android apps page was clipping the 3d layer when resizing the window.  http://code.google.com/p/chromium/issues/detail?id=121743</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686046</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-02 17:48:29 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; When do layers in non-preserves-3d contexts need to be sorted?
&gt; &gt; &gt; 
&gt; &gt; &gt; Yeah, good question... this is also to answer Comment #4.
&gt; &gt; &gt; 
&gt; &gt; &gt; Actually the situation you guys are thinking of is not the situation we would be dealing with here.
&gt; &gt; &gt; 
&gt; &gt; &gt; The situation we&apos;re considering here is:  (1) an ancestor layer has preserve-3d==false.  Then, a bunch of layers in the subtree are in a 3d-rendering context, and need to be sorted with each other.
&gt; &gt; &gt; 
&gt; &gt; &gt; The transform these layers use to compute their z stuff for sorting is the drawTransform... and the drawTransform would include the ancestor&apos;s transform as part of the drawTransform.  That is where z-values would get lost if we used a pure orthographic projection -- at the ancestor.
&gt; &gt; 
&gt; &gt; Ok, so keeping m33=1 and not forcing z=0 is only for the sublayer matrix flattening.  The screen space transform doesn&apos;t need this, but it&apos;s not problematic to have it.
&gt;  
&gt; The screen space transform does need it.  That was the whole point of this bug.

I was asking about m33=1 vs. m33=0, not about whether flattening needs to be applied.  Just trying to understand the math.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686227</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-02 22:15:57 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; &gt; When do layers in non-preserves-3d contexts need to be sorted?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yeah, good question... this is also to answer Comment #4.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Actually the situation you guys are thinking of is not the situation we would be dealing with here.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; The situation we&apos;re considering here is:  (1) an ancestor layer has preserve-3d==false.  Then, a bunch of layers in the subtree are in a 3d-rendering context, and need to be sorted with each other.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; The transform these layers use to compute their z stuff for sorting is the drawTransform... and the drawTransform would include the ancestor&apos;s transform as part of the drawTransform.  That is where z-values would get lost if we used a pure orthographic projection -- at the ancestor.
&gt; &gt; &gt; 
&gt; &gt; &gt; Ok, so keeping m33=1 and not forcing z=0 is only for the sublayer matrix flattening.  The screen space transform doesn&apos;t need this, but it&apos;s not problematic to have it.
&gt; &gt;  
&gt; &gt; The screen space transform does need it.  That was the whole point of this bug.
&gt; 
&gt; I was asking about m33=1 vs. m33=0, not about whether flattening needs to be applied.  Just trying to understand the math.


Oh I see what you&apos;re asking - I think you&apos;re right, the screen space transform doesn&apos;t need it.  but I&apos;ll try it out and make sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686823</commentid>
    <comment_count>13</comment_count>
      <attachid>156117</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-03 09:21:22 -0700</bug_when>
    <thetext>Comment on attachment 156117
Patch

R=me.  Ok, I think I&apos;m convinced by this.  Thanks for the explanation about why the sublayer matrix can&apos;t have m33=0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688208</commentid>
    <comment_count>14</comment_count>
      <attachid>156710</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-06 09:40:03 -0700</bug_when>
    <thetext>Created attachment 156710
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688213</commentid>
    <comment_count>15</comment_count>
      <attachid>156710</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-06 09:41:14 -0700</bug_when>
    <thetext>Comment on attachment 156710
Patch for landing

Rejecting attachment 156710 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
1 cwd: /mnt/git/webkit-commit-queue/

Parsed 2 diffs from patch file(s).
patching file Source/WebCore/ChangeLog
Hunk #1 FAILED at 3.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebCore/ChangeLog.rej
patching file Source/WebKit/chromium/ChangeLog
Hunk #1 FAILED at 3.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebKit/chromium/ChangeLog.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/13443446</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688216</commentid>
    <comment_count>16</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-06 09:43:44 -0700</bug_when>
    <thetext>
&gt; &gt; I was asking about m33=1 vs. m33=0, not about whether flattening needs to be applied.  Just trying to understand the math.
&gt; 
&gt; 
&gt; Oh I see what you&apos;re asking - I think you&apos;re right, the screen space transform doesn&apos;t need it.  but I&apos;ll try it out and make sure.


So, it looks like the screenSpaceTransform does actually require the m33==1 part, too.  The reason is that the inverse screen-space transform is being used by CCOcclusionTracker, with a project operation.  The projection would be incorrect if the z-value is not correctly preserved.

So I guess that&apos;s additional (and probably more important) explanation about why we need to do this special flatten operation, rather than the pure orthographic projection.

Nothing changes in the patch based on this new point, it&apos;s just about our conceptual understanding.  Thanks for reviewing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688220</commentid>
    <comment_count>17</comment_count>
      <attachid>156713</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-06 09:44:23 -0700</bug_when>
    <thetext>Created attachment 156713
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688263</commentid>
    <comment_count>18</comment_count>
      <attachid>156713</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-06 10:43:18 -0700</bug_when>
    <thetext>Comment on attachment 156713
Patch for landing

Clearing flags on attachment: 156713

Committed r124782: &lt;http://trac.webkit.org/changeset/124782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688264</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-06 10:43:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156117</attachid>
            <date>2012-08-02 10:30:29 -0700</date>
            <delta_ts>2012-08-06 09:39:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85808-20120802103010.patch</filename>
            <type>text/plain</type>
            <size>9575</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGMzMWYwZDRkZTk4ZDM2
OGUxNGExMzExZDM2NjljNjBjYTUzODFlMC4uYTk5MmQ3OWFiOTg3OGFiNjI0YmM2YzNjYjIzOGQ3
YWY4NzE5ZDRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA4LTAyICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Tm9uLXByZXNlcnZlcy0zZCByZXF1aXJlcyBleHBsaWNpdCBmbGF0dGVuaW5nIG9mIHNjcmVlbi1z
cGFjZSB0cmFuc2Zvcm0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NTgwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdoZW4gY29tcHV0aW5nIHRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtcywgeiB2YWx1
ZXMgd2VyZSBub3QKKyAgICAgICAgYmVpbmcgZmxhdHRlbmVkIHdoZW4gdGhleSBzaG91bGQgYmUu
IFRoaXMgY2F1c2VkIGluY29ycmVjdAorICAgICAgICBjbGlwcGluZyBkdWUgdG8gb2NjbHVzaW9u
IHRyYWNraW5nIHRoYXQgcmVsaWVkIG9uIHRoZSBzY3JlZW4tc3BhY2UKKyAgICAgICAgdHJhbnNm
b3JtLiBUaGUgZml4IGlzIHRvIGZsYXR0ZW4gdGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0ganVz
dAorICAgICAgICBsaWtlIHRoZSAic3VibGF5ZXJNYXRyaXgiIGlzIGZsYXR0ZW5lZCwgd2hlbiB0
aGUgbGF5ZXIgZG9lcyBub3QKKyAgICAgICAgcHJlc2VydmUtM2QuCisKKyAgICAgICAgSW4gYWRk
aXRpb24gdG8gbWFraW5nIHRoZSBzaW1wbGUgZml4LCBpdCB3YXMgY29udmVuaWVudCB0byBtYWtl
IGEKKyAgICAgICAgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgZmxhdHRlbmluZyBjb2RlLgorCisg
ICAgICAgIEFkZGl0aW9uYWwgdW5pdCB0ZXN0IGFkZGVkIHRvIGV4ZXJjaXNlIHRoYXQgZmxhdHRl
bmluZyBjb2RlOgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5VHJh
bnNmb3Jtc0ZvckZsYXR0ZW5pbmdMYXllcgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NN
YXRoVXRpbDo6ZmxhdHRlblRyYW5zZm9ybVRvMmQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5oOgorICAgICAg
ICAoQ0NNYXRoVXRpbCk6CisKIDIwMTItMDgtMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIEFkZCBiYWNrIEFTU0VSVCghbmVlZHNMYXlvdXQpIHRvIFJlbmRlclRh
YmxlU2VjdGlvbiB3aGljaCBpcyBub3cgdmFsaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggODRhOWZhODEyMGFmOTI4MmVhZDdjZTMyMjY3YTlmOTFlNjEzZmQ0OC4uMzQ3YWU1N2YzNzhj
MzhkOGQ0MTRjNGYxNDkzY2RkZmQyYmNkMjg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAxMi0wOC0wMiAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE5vbi1wcmVzZXJ2ZXMtM2QgcmVxdWly
ZXMgZXhwbGljaXQgZmxhdHRlbmluZyBvZiBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU4MDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwOgorCiAyMDEyLTA4LTAyICBIYW5zIFdlbm5ib3JnICA8aGFu
c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBGaXJlIHNw
ZWVjaCBzdGFydCBldmVudCBhdCB0aGUgc2FtZSB0aW1lIGFzIHNvdW5kIHN0YXJ0IGV2ZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCAwMDk0NmY0MGY1
NjIyZWY1MzFiYTFlMjQ4NDY4MmI0YTZlODIwZmI5Li4yYTc5YWVhYWNlYTU1NmIwYWEzYzAxZWJj
Y2Y2MTdiNTVlOTFlMGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5jcHAKQEAgLTU1Niw2ICs1NTYsOCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0ludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheQogCiAgICAg
Ly8gbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSByZXByZXNlbnRzIHRoZSB0cmFuc2Zvcm0gYmV0
d2VlbiByb290IGxheWVyJ3MgInNjcmVlbiBzcGFjZSIgYW5kIGxvY2FsIGNvbnRlbnQgc3BhY2Uu
CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSA9
IGZ1bGxIaWVyYXJjaHlNYXRyaXg7CisgICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0QoKSkKKyAg
ICAgICAgQ0NNYXRoVXRpbDo6ZmxhdHRlblRyYW5zZm9ybVRvMmQobGF5ZXJTY3JlZW5TcGFjZVRy
YW5zZm9ybSk7CiAgICAgbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybS5tdWx0aXBseShkcmF3VHJh
bnNmb3JtKTsKICAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0obGF5ZXJTY3JlZW5T
cGFjZVRyYW5zZm9ybSk7CiAKQEAgLTY3OSwxNSArNjgxLDggQEAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJv
b3RMYXkKICAgICB9CiAKICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBkb2Vzbid0
IHByZXNlcnZlIDNELgotICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsKLSAgICAgICAg
c3VibGF5ZXJNYXRyaXguc2V0TTEzKDApOwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMjMo
MCk7Ci0gICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zMSgwKTsKLSAgICAgICAgc3VibGF5ZXJN
YXRyaXguc2V0TTMyKDApOwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzMoMSk7Ci0gICAg
ICAgIHN1YmxheWVyTWF0cml4LnNldE0zNCgwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0
TTQzKDApOwotICAgIH0KKyAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICBD
Q01hdGhVdGlsOjpmbGF0dGVuVHJhbnNmb3JtVG8yZChzdWJsYXllck1hdHJpeCk7CiAKICAgICAv
LyBBcHBseSB0aGUgc3VibGF5ZXIgdHJhbnNmb3JtIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVy
LgogICAgIHN1YmxheWVyTWF0cml4Lm11bHRpcGx5KGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTWF0aFV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NNYXRoVXRpbC5jcHAKaW5kZXggZjliZTc2N2E4MTY3MWZiNDk1YTc1YjdkN2Fk
NTIyNjU1ZjU5NGYxYy4uNGQ1ZWM5MzNkN2IxMDBjZDQ5ZWMzOWE2OGQyNWUzNjU0MzlkMmQ2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NNYXRoVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NNYXRoVXRpbC5jcHAKQEAgLTM2MCw0ICszNjAsMjUgQEAgRmxvYXRQb2ludCBD
Q01hdGhVdGlsOjpwcm9qZWN0UG9pbnQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgY28KICAgICByZXR1cm4gaC5jYXJ0ZXNpYW5Qb2ludDJkKCk7CiB9CiAKK3ZvaWQg
Q0NNYXRoVXRpbDo6ZmxhdHRlblRyYW5zZm9ybVRvMmQoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKK3sKKyAgICAvLyBTZXQgYm90aCB0aGUgM3JkIHJvdyBhbmQgM3JkIGNvbHVt
biB0byAoMCwgMCwgMSwgMCkuCisgICAgLy8KKyAgICAvLyBPbmUgdXNlZnVsIGludGVycHJldGF0
aW9uIG9mIGRvaW5nIHRoaXMgb3BlcmF0aW9uOgorICAgIC8vICAtIEZvciB4IGFuZCB5IHZhbHVl
cywgdGhlIG5ldyB0cmFuc2Zvcm0gYmVoYXZlcyBlZmZlY3RpdmVseSBsaWtlIGFuIG9ydGhvZ3Jh
cGhpYworICAgIC8vICAgIHByb2plY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSBtYXRyaXggc2VxdWVu
Y2UuCisgICAgLy8gIC0gRm9yIHogdmFsdWVzLCB0aGUgbmV3IHRyYW5zZm9ybSBvdmVycmlkZXMg
YW55IGVmZmVjdCB0aGF0IHRoZSB0cmFuc2Zvcm0gaGFkIG9uCisgICAgLy8gICAgeiwgYW5kIGlu
c3RlYWQgaXQgcHJlc2VydmVzIHRoZSB6IHZhbHVlIGZvciBhbnkgcG9pbnRzIHRoYXQgYXJlIHRy
YW5zZm9ybWVkLgorICAgIC8vICAtIEJlY2F1c2Ugb2YgbGluZWFyaXR5IG9mIHRyYW5zZm9ybXMs
IHRoaXMgZmxhdHRlbmVkIHRyYW5zZm9ybSBhbHNvIHByZXNlcnZlcyB0aGUKKyAgICAvLyAgICBl
ZmZlY3QgdGhhdCBhbnkgc3Vic2VxdWVudCAocG9zdC1tdWx0aXBsaWVkKSB0cmFuc2Zvcm1zIHdv
dWxkIGhhdmUgb24geiB2YWx1ZXMuCisgICAgLy8KKyAgICB0cmFuc2Zvcm0uc2V0TTEzKDApOwor
ICAgIHRyYW5zZm9ybS5zZXRNMjMoMCk7CisgICAgdHJhbnNmb3JtLnNldE0zMSgwKTsKKyAgICB0
cmFuc2Zvcm0uc2V0TTMyKDApOworICAgIHRyYW5zZm9ybS5zZXRNMzMoMSk7CisgICAgdHJhbnNm
b3JtLnNldE0zNCgwKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTQzKDApOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmgKaW5kZXggMDRlODUwZWJkNmI0MjNjNTMzMzAw
YWQ1YWRiZDUwMTExZDVlNTNjOC4uM2ZiNTkxNDI5MGEyYTc1YmQ1MjVmM2U0ODQzNjU5NGNhOGU4
NDUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NNYXRoVXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuaApAQCAtMTEzLDYgKzExMyw4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgRmxvYXRQb2ludDNEIG1hcFBvaW50KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFBvaW50M0QmLCBib29sJiBjbGlwcGVkKTsKICAgICBz
dGF0aWMgRmxvYXRRdWFkIHByb2plY3RRdWFkKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBjb25zdCBGbG9hdFF1YWQmLCBib29sJiBjbGlwcGVkKTsKICAgICBzdGF0aWMg
RmxvYXRQb2ludCBwcm9qZWN0UG9pbnQoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sJiBjbGlwcGVkKTsKKworICAgIHN0YXRpYyB2
b2lkIGZsYXR0ZW5UcmFuc2Zvcm1UbzJkKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4
IDNlZDJkNjBlMmM1OTc1NTM2YmZjNGI0NmQ1NDkxM2I2YmE2NTFjZjEuLjA4ZGMxOGZjNGUzYTc1
MGFiZDg0YTE3ODBmNjRhNDhkOGI5NTIyMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtOTAz
LDYgKzkwMyw1MSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5z
Zm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIEVYUEVDVF9GTE9BVF9FUSg1LCBn
cmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOwogfQogCitURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JGbGF0dGVuaW5n
TGF5ZXIpCit7CisgICAgLy8gRm9yIGxheWVycyB0aGF0IGZsYXR0ZW4gdGhlaXIgc3VidHJlZSwg
dGhlcmUgc2hvdWxkIGJlIGFuIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uCisgICAgLy8gKGZvciB4
IGFuZCB5IHZhbHVlcykgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdHJhbnNmb3JtIHNlcXVlbmNlLiBO
b3RlIHRoYXQgdGhlIHdheSB0aGUKKyAgICAvLyBjb2RlIGlzIGN1cnJlbnRseSBpbXBsZW1lbnRl
ZCwgaXQgaXMgbm90IGV4cGVjdGVkIHRvIHVzZSBhIGNhbm9uaWNhbCBvcnRob2dyYXBoaWMKKyAg
ICAvLyBwcm9qZWN0aW9uLgorCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3QgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hpbGQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBy
b3RhdGlvbkFib3V0WUF4aXM7CisgICAgcm90YXRpb25BYm91dFlBeGlzLnJvdGF0ZTNkKDAsIDMw
LCAwKTsKKworICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onpl
cm8oKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCByb3RhdGlvbkFib3V0WUF4aXMsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTAp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdl
dCgpLCByb3RhdGlvbkFib3V0WUF4aXMsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJv
KCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisKKyAgICBy
b290LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOwor
ICAgIGNoaWxkLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisKKyAgICAvLyBObyBsYXll
cnMgaW4gdGhpcyB0ZXN0IHNob3VsZCBwcmVzZXJ2ZSAzZC4KKyAgICBBU1NFUlRfRkFMU0Uocm9v
dC0+cHJlc2VydmVzM0QoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkLT5wcmVzZXJ2ZXMzRCgp
KTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZC0+cHJlc2VydmVzM0QoKSk7CisKKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxkRHJhd1RyYW5zZm9ybSA9IHJvdGF0
aW9uQWJvdXRZQXhpczsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZENoaWxk
U2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSByb3RhdGlvbkFib3V0WUF4aXM7CisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkRHJhd1RyYW5zZm9ybSA9IHJvdGF0aW9u
QWJvdXRZQXhpczsgLy8gZHJhd3Mgb250byBjaGlsZCdzIHJlbmRlclN1cmZhY2UKKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZEdyYW5kQ2hpbGRTY3JlZW5TcGFjZVRyYW5zZm9y
bSA9IHJvdGF0aW9uQWJvdXRZQXhpcy50bzJkVHJhbnNmb3JtKCkgKiByb3RhdGlvbkFib3V0WUF4
aXM7CisKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJv
b3QuZ2V0KCkpOworCisgICAgLy8gVGhlIGNoaWxkJ3MgZHJhd1RyYW5zZm9ybSBzaG91bGQgaGF2
ZSBiZWVuIHRha2VuIGJ5IGl0cyBzdXJmYWNlLgorICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0
ZWRDaGlsZERyYXdUcmFuc2Zvcm0sIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZENoaWxk
U2NyZWVuU3BhY2VUcmFuc2Zvcm0sIGNoaWxkLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoaWRlbnRp
dHlNYXRyaXgsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFNjcmVlblNwYWNlVHJhbnNmb3JtLCBjaGlsZC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShleHBlY3RlZEdyYW5kQ2hpbGREcmF3VHJhbnNmb3JtLCBncmFuZENoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRH
cmFuZENoaWxkU2NyZWVuU3BhY2VUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworfQorCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJl
bmRlclN1cmZhY2VMaXN0Rm9yUmVuZGVyU3VyZmFjZVdpdGhDbGlwcGVkTGF5ZXIpCiB7CiAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156710</attachid>
            <date>2012-08-06 09:40:03 -0700</date>
            <delta_ts>2012-08-06 09:44:20 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-85808-20120806093939.patch</filename>
            <type>text/plain</type>
            <size>1181</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjM3MzdkYjVlMzE3ZmMw
NTY0NTZmNjc2M2VjMGVhODhiNDQ4NTczYi4uOWNiOTE0ZTU2OGMwNjY3OTllNjE3Y2JhMzJmZGVj
OTA0ODM0NzJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMyw3ICszLDcgQEAKICAgICAgICAgW2Nocm9taXVt
XSBOb24tcHJlc2VydmVzLTNkIHJlcXVpcmVzIGV4cGxpY2l0IGZsYXR0ZW5pbmcgb2Ygc2NyZWVu
LXNwYWNlIHRyYW5zZm9ybS4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg1ODA4CiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIFJldmlld2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KIAogICAgICAgICBXaGVuIGNvbXB1
dGluZyB0aGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybXMsIHogdmFsdWVzIHdlcmUgbm90CiAgICAg
ICAgIGJlaW5nIGZsYXR0ZW5lZCB3aGVuIHRoZXkgc2hvdWxkIGJlLiBUaGlzIGNhdXNlZCBpbmNv
cnJlY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzE0ZTFlNjgyZDU3OWQzZjdiNWQy
M2QxZDM5M2U1Y2Q4YWU5NThlYy4uNGM2MGFmY2QxZTJiZjM3NjYxN2Q0MGYwYWE5OTM5YzZjZTA5
NjhmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTMsNyArMyw3IEBACiAgICAgICAg
IFtjaHJvbWl1bV0gTm9uLXByZXNlcnZlcy0zZCByZXF1aXJlcyBleHBsaWNpdCBmbGF0dGVuaW5n
IG9mIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0uCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04NTgwOAogCi0gICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxrZXIuCiAKICAgICAgICAg
KiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156713</attachid>
            <date>2012-08-06 09:44:23 -0700</date>
            <delta_ts>2012-08-06 10:43:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-85808-20120806094400.patch</filename>
            <type>text/plain</type>
            <size>9573</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmZhMTcxMmUzNzY4ZTc1
NjViODg1YWUxOGM1NWEzMTBkZGQ3MzkzZS4uOWNiOTE0ZTU2OGMwNjY3OTllNjE3Y2JhMzJmZGVj
OTA0ODM0NzJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA4LTAyICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Tm9uLXByZXNlcnZlcy0zZCByZXF1aXJlcyBleHBsaWNpdCBmbGF0dGVuaW5nIG9mIHNjcmVlbi1z
cGFjZSB0cmFuc2Zvcm0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NTgwOAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KKwor
ICAgICAgICBXaGVuIGNvbXB1dGluZyB0aGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybXMsIHogdmFs
dWVzIHdlcmUgbm90CisgICAgICAgIGJlaW5nIGZsYXR0ZW5lZCB3aGVuIHRoZXkgc2hvdWxkIGJl
LiBUaGlzIGNhdXNlZCBpbmNvcnJlY3QKKyAgICAgICAgY2xpcHBpbmcgZHVlIHRvIG9jY2x1c2lv
biB0cmFja2luZyB0aGF0IHJlbGllZCBvbiB0aGUgc2NyZWVuLXNwYWNlCisgICAgICAgIHRyYW5z
Zm9ybS4gVGhlIGZpeCBpcyB0byBmbGF0dGVuIHRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtIGp1
c3QKKyAgICAgICAgbGlrZSB0aGUgInN1YmxheWVyTWF0cml4IiBpcyBmbGF0dGVuZWQsIHdoZW4g
dGhlIGxheWVyIGRvZXMgbm90CisgICAgICAgIHByZXNlcnZlLTNkLgorCisgICAgICAgIEluIGFk
ZGl0aW9uIHRvIG1ha2luZyB0aGUgc2ltcGxlIGZpeCwgaXQgd2FzIGNvbnZlbmllbnQgdG8gbWFr
ZSBhCisgICAgICAgIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGZsYXR0ZW5pbmcgY29kZS4KKwor
ICAgICAgICBBZGRpdGlvbmFsIHVuaXQgdGVzdCBhZGRlZCB0byBleGVyY2lzZSB0aGF0IGZsYXR0
ZW5pbmcgY29kZToKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVRy
YW5zZm9ybXNGb3JGbGF0dGVuaW5nTGF5ZXIKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TWF0aFV0aWw6OmZsYXR0ZW5UcmFuc2Zvcm1UbzJkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuaDoKKyAgICAg
ICAgKENDTWF0aFV0aWwpOgorCiAyMDEyLTA4LTA2ICBIaXJvbm9yaSBCb25vICA8aGJvbm9AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJvbGxpbmcgb3V0IG15IHIxMjMwNjcgYW5kIHIxMjM1NzIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTc0MTNkZTg0ZTVlMzI2Y2VkNmI4ODUwY2Iw
ODRhYTk3ZTUzZWZlYS4uNGM2MGFmY2QxZTJiZjM3NjYxN2Q0MGYwYWE5OTM5YzZjZTA5NjhmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wOC0wMiAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIE5vbi1wcmVzZXJ2ZXMtM2QgcmVxdWlyZXMgZXhwbGljaXQgZmxhdHRlbmluZyBvZiBzY3Jl
ZW4tc3BhY2UgdHJhbnNmb3JtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODU4MDgKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxrZXIu
CisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKKwogMjAx
Mi0wOC0wNiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiByZW5hbWUgV29ya2VyQWdlbnQuc2V0V29ya2VySW5zcGVjdGlvbkVu
YWJsZWQgdG8gV29ya2VyQWdlbnQuZW5hYmxlIGFuZCBtYWtlIGl0IHJldHVybiBlcnJvcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggMDA5NDZmNDBmNTYy
MmVmNTMxYmExZTI0ODQ2ODJiNGE2ZTgyMGZiOS4uMmE3OWFlYWFjZWE1NTZiMGFhM2MwMWViY2Nm
NjE3YjU1ZTkxZTBhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwCkBAIC01NTYsNiArNTU2LDggQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXkKIAogICAgIC8v
IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gcmVwcmVzZW50cyB0aGUgdHJhbnNmb3JtIGJldHdl
ZW4gcm9vdCBsYXllcidzICJzY3JlZW4gc3BhY2UiIGFuZCBsb2NhbCBjb250ZW50IHNwYWNlLgog
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBm
dWxsSGllcmFyY2h5TWF0cml4OworICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpCisgICAg
ICAgIENDTWF0aFV0aWw6OmZsYXR0ZW5UcmFuc2Zvcm1UbzJkKGxheWVyU2NyZWVuU3BhY2VUcmFu
c2Zvcm0pOwogICAgIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkoZHJhd1RyYW5z
Zm9ybSk7CiAgICAgbGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKGxheWVyU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0pOwogCkBAIC02NzksMTUgKzY4MSw4IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290
TGF5CiAgICAgfQogCiAgICAgLy8gRmxhdHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBw
cmVzZXJ2ZSAzRC4KLSAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgpKSB7Ci0gICAgICAgIHN1
YmxheWVyTWF0cml4LnNldE0xMygwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTIzKDAp
OwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzEoMCk7Ci0gICAgICAgIHN1YmxheWVyTWF0
cml4LnNldE0zMigwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTMzKDEpOwotICAgICAg
ICBzdWJsYXllck1hdHJpeC5zZXRNMzQoMCk7Ci0gICAgICAgIHN1YmxheWVyTWF0cml4LnNldE00
MygwKTsKLSAgICB9CisgICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0QoKSkKKyAgICAgICAgQ0NN
YXRoVXRpbDo6ZmxhdHRlblRyYW5zZm9ybVRvMmQoc3VibGF5ZXJNYXRyaXgpOwogCiAgICAgLy8g
QXBwbHkgdGhlIHN1YmxheWVyIHRyYW5zZm9ybSBhdCB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4K
ICAgICBzdWJsYXllck1hdHJpeC5tdWx0aXBseShsYXllci0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ01hdGhVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWF0aFV0aWwuY3BwCmluZGV4IGY5YmU3NjdhODE2NzFmYjQ5NWE3NWI3ZDdhZDUy
MjY1NWY1OTRmMWMuLjRkNWVjOTMzZDdiMTAwY2Q0OWVjMzlhNjhkMjVlMzY1NDM5ZDJkNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TWF0aFV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWF0aFV0aWwuY3BwCkBAIC0zNjAsNCArMzYwLDI1IEBAIEZsb2F0UG9pbnQgQ0NN
YXRoVXRpbDo6cHJvamVjdFBvaW50KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0sIGNvCiAgICAgcmV0dXJuIGguY2FydGVzaWFuUG9pbnQyZCgpOwogfQogCit2b2lkIEND
TWF0aFV0aWw6OmZsYXR0ZW5UcmFuc2Zvcm1UbzJkKFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0pCit7CisgICAgLy8gU2V0IGJvdGggdGhlIDNyZCByb3cgYW5kIDNyZCBjb2x1bW4g
dG8gKDAsIDAsIDEsIDApLgorICAgIC8vCisgICAgLy8gT25lIHVzZWZ1bCBpbnRlcnByZXRhdGlv
biBvZiBkb2luZyB0aGlzIG9wZXJhdGlvbjoKKyAgICAvLyAgLSBGb3IgeCBhbmQgeSB2YWx1ZXMs
IHRoZSBuZXcgdHJhbnNmb3JtIGJlaGF2ZXMgZWZmZWN0aXZlbHkgbGlrZSBhbiBvcnRob2dyYXBo
aWMKKyAgICAvLyAgICBwcm9qZWN0aW9uIHdhcyBhZGRlZCB0byB0aGUgbWF0cml4IHNlcXVlbmNl
LgorICAgIC8vICAtIEZvciB6IHZhbHVlcywgdGhlIG5ldyB0cmFuc2Zvcm0gb3ZlcnJpZGVzIGFu
eSBlZmZlY3QgdGhhdCB0aGUgdHJhbnNmb3JtIGhhZCBvbgorICAgIC8vICAgIHosIGFuZCBpbnN0
ZWFkIGl0IHByZXNlcnZlcyB0aGUgeiB2YWx1ZSBmb3IgYW55IHBvaW50cyB0aGF0IGFyZSB0cmFu
c2Zvcm1lZC4KKyAgICAvLyAgLSBCZWNhdXNlIG9mIGxpbmVhcml0eSBvZiB0cmFuc2Zvcm1zLCB0
aGlzIGZsYXR0ZW5lZCB0cmFuc2Zvcm0gYWxzbyBwcmVzZXJ2ZXMgdGhlCisgICAgLy8gICAgZWZm
ZWN0IHRoYXQgYW55IHN1YnNlcXVlbnQgKHBvc3QtbXVsdGlwbGllZCkgdHJhbnNmb3JtcyB3b3Vs
ZCBoYXZlIG9uIHogdmFsdWVzLgorICAgIC8vCisgICAgdHJhbnNmb3JtLnNldE0xMygwKTsKKyAg
ICB0cmFuc2Zvcm0uc2V0TTIzKDApOworICAgIHRyYW5zZm9ybS5zZXRNMzEoMCk7CisgICAgdHJh
bnNmb3JtLnNldE0zMigwKTsKKyAgICB0cmFuc2Zvcm0uc2V0TTMzKDEpOworICAgIHRyYW5zZm9y
bS5zZXRNMzQoMCk7CisgICAgdHJhbnNmb3JtLnNldE00MygwKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5oCmluZGV4IDA0ZTg1MGViZDZiNDIzYzUzMzMwMGFk
NWFkYmQ1MDExMWQ1ZTUzYzguLjNmYjU5MTQyOTBhMmE3NWJkNTI1ZjNlNDg0MzY1OTRjYThlODQ1
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTWF0aFV0aWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01hdGhVdGlsLmgKQEAgLTExMyw2ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEZsb2F0UG9pbnQzRCBtYXBQb2ludChjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgY29uc3QgRmxvYXRQb2ludDNEJiwgYm9vbCYgY2xpcHBlZCk7CiAgICAgc3Rh
dGljIEZsb2F0UXVhZCBwcm9qZWN0UXVhZChjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRRdWFkJiwgYm9vbCYgY2xpcHBlZCk7CiAgICAgc3RhdGljIEZs
b2F0UG9pbnQgcHJvamVjdFBvaW50KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCYgY2xpcHBlZCk7CisKKyAgICBzdGF0aWMgdm9p
ZCBmbGF0dGVuVHJhbnNmb3JtVG8yZChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCAz
ZWQyZDYwZTJjNTk3NTUzNmJmYzRiNDZkNTQ5MTNiNmJhNjUxY2YxLi4wOGRjMThmYzRlM2E3NTBh
YmQ4NGExNzgwZjY0YTQ4ZDhiOTUyMjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTkwMyw2
ICs5MDMsNTEgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zv
cm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBFWFBFQ1RfRkxPQVRfRVEoNSwgZ3Jh
bmRDaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKIH0KIAorVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yRmxhdHRlbmluZ0xh
eWVyKQoreworICAgIC8vIEZvciBsYXllcnMgdGhhdCBmbGF0dGVuIHRoZWlyIHN1YnRyZWUsIHRo
ZXJlIHNob3VsZCBiZSBhbiBvcnRob2dyYXBoaWMgcHJvamVjdGlvbgorICAgIC8vIChmb3IgeCBh
bmQgeSB2YWx1ZXMpIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRyYW5zZm9ybSBzZXF1ZW5jZS4gTm90
ZSB0aGF0IHRoZSB3YXkgdGhlCisgICAgLy8gY29kZSBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQs
IGl0IGlzIG5vdCBleHBlY3RlZCB0byB1c2UgYSBjYW5vbmljYWwgb3J0aG9ncmFwaGljCisgICAg
Ly8gcHJvamVjdGlvbi4KKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByb290ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBncmFuZENoaWxkID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcm90
YXRpb25BYm91dFlBeGlzOworICAgIHJvdGF0aW9uQWJvdXRZQXhpcy5yb3RhdGUzZCgwLCAzMCwg
MCk7CisKKyAgICBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludDo6emVybygpLCBGbG9hdFBvaW50Ojp6ZXJv
KCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhjaGlsZC5nZXQoKSwgcm90YXRpb25BYm91dFlBeGlzLCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludDo6emVybygpLCBGbG9hdFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQo
KSwgcm90YXRpb25BYm91dFlBeGlzLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludDo6emVybygp
LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworCisgICAgcm9v
dC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkKTsKKyAg
ICBjaGlsZC0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOworCisgICAgLy8gTm8gbGF5ZXJz
IGluIHRoaXMgdGVzdCBzaG91bGQgcHJlc2VydmUgM2QuCisgICAgQVNTRVJUX0ZBTFNFKHJvb3Qt
PnByZXNlcnZlczNEKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZC0+cHJlc2VydmVzM0QoKSk7
CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGQtPnByZXNlcnZlczNEKCkpOworCisgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZERyYXdUcmFuc2Zvcm0gPSByb3RhdGlv
bkFib3V0WUF4aXM7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRDaGlsZFNj
cmVlblNwYWNlVHJhbnNmb3JtID0gcm90YXRpb25BYm91dFlBeGlzOworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGV4cGVjdGVkR3JhbmRDaGlsZERyYXdUcmFuc2Zvcm0gPSByb3RhdGlvbkFi
b3V0WUF4aXM7IC8vIGRyYXdzIG9udG8gY2hpbGQncyByZW5kZXJTdXJmYWNlCisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRHcmFuZENoaWxkU2NyZWVuU3BhY2VUcmFuc2Zvcm0g
PSByb3RhdGlvbkFib3V0WUF4aXMudG8yZFRyYW5zZm9ybSgpICogcm90YXRpb25BYm91dFlBeGlz
OworCisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290
LmdldCgpKTsKKworICAgIC8vIFRoZSBjaGlsZCdzIGRyYXdUcmFuc2Zvcm0gc2hvdWxkIGhhdmUg
YmVlbiB0YWtlbiBieSBpdHMgc3VyZmFjZS4KKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVuZGVy
U3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVk
Q2hpbGREcmF3VHJhbnNmb3JtLCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWRDaGlsZFNj
cmVlblNwYWNlVHJhbnNmb3JtLCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGlkZW50aXR5
TWF0cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKGV4cGVjdGVkQ2hpbGRTY3JlZW5TcGFjZVRyYW5zZm9ybSwgY2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhf
RVEoZXhwZWN0ZWRHcmFuZENoaWxkRHJhd1RyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkR3Jh
bmRDaGlsZFNjcmVlblNwYWNlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKK30KKwogVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5k
ZXJTdXJmYWNlTGlzdEZvclJlbmRlclN1cmZhY2VXaXRoQ2xpcHBlZExheWVyKQogewogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>