<?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>115063</bug_id>
          
          <creation_ts>2013-04-23 16:18:17 -0700</creation_ts>
          <short_desc>Improve performance of the RenderLayerCompositor::OverlapMap</short_desc>
          <delta_ts>2014-04-16 18:01:00 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandru Chiculita">achicu</reporter>
          <assigned_to name="Alexandru Chiculita">achicu</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>880172</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-04-23 16:18:17 -0700</bug_when>
    <thetext>The RenderLayerCompositor::computeCompositingRequirements is using the OverlapMap to check if layers need to be promoted to composited layers, because they display in front of other composited layers.

There are two problems:
1. Sometimes we already know we want to make the layer composited (ie. it has a 3d transform)
2. All the previous layers are not overlapping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880183</commentid>
    <comment_count>1</comment_count>
      <attachid>199336</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-04-23 17:06:26 -0700</bug_when>
    <thetext>Created attachment 199336
Patch V1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880197</commentid>
    <comment_count>2</comment_count>
      <attachid>199336</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-04-23 17:38:25 -0700</bug_when>
    <thetext>Comment on attachment 199336
Patch V1

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

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:123
&gt; +    Vector&lt;IntRect&gt; m_layerRects;
&gt; +    IntRect m_boundingBox;
&gt; +};

This is becoming more like a Region. How does the performance of this compare with a Region? (I think we used them in the past with poor results.)

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:943
&gt; +    if (overlapMap &amp;&amp; !overlapMap-&gt;isEmpty() &amp;&amp; compositingState.m_testingOverlap &amp;&amp; !requiresCompositingLayer(layer)) {

requiresCompositingLayer() is now getting called twice for each computeCompositingRequirements() call; once here, and once inside needsToBeComposited(). It&apos;s not very cheap, so we should refactor to call it only once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880313</commentid>
    <comment_count>3</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-04-23 20:36:01 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 199336 [details])
Thanks for your review!

&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=199336&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:123
&gt; &gt; +    Vector&lt;IntRect&gt; m_layerRects;
&gt; &gt; +    IntRect m_boundingBox;
&gt; &gt; +};
&gt; 
&gt; This is becoming more like a Region. How does the performance of this compare with a Region? (I think we used them in the past with poor results.)
&gt; 
I&apos;ve tested the Region and it seems to have poor performance because of the maintenance overhead. For example in this example it makes the test go from 700 to around 4500. Considering that I didn&apos;t remove the bounding box check, the increase was only accounting for the creation of the Region and not the actual queries.

I think that the Region is too generic for this scenario. I was thinking that something like a tree should better cover this problem as it can optimise both the insertion and the queries: http://en.wikipedia.org/wiki/Spatial_index#Spatial_index . 

Another simple check that I could do without implementing anything would be to have two &quot;pod interval trees&quot;. We&apos;ve used that structure with floats before. The trees could to store the rectangles for X and Y axis, respectively. We can then search both trees and compute the intersection of the resulting lists. If there&apos;s a common rect in both lists, we can assume the layer will overlap with that rect.

I&apos;m not yet sure if this kind of scenario really exists in real web applications (ie. lots of 3d layers that need to check for overlap), so having a more complex structure might introduce an insertion overhead for the most common cases.

That&apos;s why I think the bounding box is reasonable enough for the most common cases, where layers are not overlapping at all and are the result of the block layout positioning mechanism.

Also, checking if the layer already has a 3D transform allows app developers to optimise their apps in such a way that the overlap map is never consulted. I would rather consider the overlap map an emergency mechanism. In that case we might even consider computing the overlap map, lazily, the first time it is needed. 

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:943
&gt; &gt; +    if (overlapMap &amp;&amp; !overlapMap-&gt;isEmpty() &amp;&amp; compositingState.m_testingOverlap &amp;&amp; !requiresCompositingLayer(layer)) {
&gt; 
&gt; requiresCompositingLayer() is now getting called twice for each computeCompositingRequirements() call; once here, and once inside needsToBeComposited(). It&apos;s not very cheap, so we should refactor to call it only once.

Agree, my initial thought was to have it in a separate patch. 

The only difference that the second call would have is the indirect reason that is computed part of this initial step. I&apos;m fine with doing that in this patch. Will have a new patch tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880336</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-04-23 23:07:40 -0700</bug_when>
    <thetext>It would be instructive here to say if you saw marked performance issues on any real web sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880733</commentid>
    <comment_count>5</comment_count>
      <attachid>199507</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-04-24 11:43:49 -0700</bug_when>
    <thetext>Created attachment 199507
Patch V1

Refactored the willBeComposited to avoid calling requiresCompositingLayer twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880734</commentid>
    <comment_count>6</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-04-24 11:47:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; It would be instructive here to say if you saw marked performance issues on any real web sites.

I couldn&apos;t find a real website that would create so many layers to trigger the issue. However, the check for being composited or not should not hurt performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001292</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-16 13:11:19 -0700</bug_when>
    <thetext>Do we still want to consider this issue? It&apos;s languishing in the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001298</commentid>
    <comment_count>8</comment_count>
      <attachid>199507</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-16 13:19:47 -0700</bug_when>
    <thetext>Comment on attachment 199507
Patch V1

Rejecting attachment 199507 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 199507, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:

Hunk #1 succeeded at 105 (offset 15 lines).
Hunk #2 succeeded at 155 (offset 15 lines).
Hunk #3 FAILED at 166.
Hunk #4 FAILED at 176.
Hunk #5 FAILED at 947.
Hunk #6 FAILED at 979.
Hunk #7 succeeded at 1162 with fuzz 2 (offset 187 lines).
4 out of 7 hunks FAILED -- saving rejects to file Source/WebCore/rendering/RenderLayerCompositor.cpp.rej

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Simon Fraser&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.appspot.com/results/5512279156064256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001388</commentid>
    <comment_count>9</comment_count>
      <attachid>229496</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-16 16:39:14 -0700</bug_when>
    <thetext>Created attachment 229496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001439</commentid>
    <comment_count>10</comment_count>
      <attachid>229496</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-16 18:00:54 -0700</bug_when>
    <thetext>Comment on attachment 229496
Patch

Clearing flags on attachment: 229496

Committed r167407: &lt;http://trac.webkit.org/changeset/167407&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001440</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-16 18:01:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199336</attachid>
            <date>2013-04-23 17:06:26 -0700</date>
            <delta_ts>2013-04-24 11:43:49 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug115063_v1.patch</filename>
            <type>text/plain</type>
            <size>10523</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYjU2ODdmMi4uMDBhODZmOCAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxMy0wNC0yMyAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0aGUgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpPdmVybGFwTWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTUwNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBjb21wdXRpbmcgdGhlIG92
ZXJsYXAgb2YgNTAwMCBsYXllcnMuCisKKyAgICAgICAgKiBMYXlvdXQvbGF5ZXJzX292ZXJsYXBf
MmQuaHRtbDogQWRkZWQuIFVzaW5nIG5vbi1jb21wb3NpdGVkIGxheWVycywgdG8gY2hlY2sKKyAg
ICAgICAgdGhhdCB0aGUgcGVyZm9ybWFuY2Ugb24gdGhlIG5vbi1jb21wb3NpdGVkIHBhdGggaXMg
bm90IGNoYW5naW5nIHdpdGggdGhpcyBwYXRjaC4KKyAgICAgICAgKiBMYXlvdXQvbGF5ZXJzX292
ZXJsYXBfM2QuaHRtbDogQWRkZWQuIFJlY29yZHMgdGhlIHRpbWUgdG8gZG8gdGhlIGxheW91dCBv
ZiA1MDAwCisgICAgICAgIG5vbi1vdmVybGFwcGluZyAzRCBsYXllcnMuCisKIDIwMTMtMDQtMTAg
IEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFzcyBy
ZW1vdmUgYWxsIHRoZSBlbXB0eSBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvbGF5ZXJzX292ZXJsYXBfMmQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvTGF5
b3V0L2xheWVyc19vdmVybGFwXzJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYTdkOTBlMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvTGF5b3V0
L2xheWVyc19vdmVybGFwXzJkLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHRpdGxlPlBlcmZvcm1hbmNlIHRlc3RlciBm
b3Igbm9uLW92ZXJsYXBpbmcgMkQgbGF5ZXJzPC90aXRsZT4KKyAgICAgICAgPHN0eWxlPgorICAg
ICAgICAgICAgLmNvbnRhaW5lciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZl
OworICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4OworICAgICAgICAgICAgICAgIGhlaWdodDog
MjBweDsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQUFBOworICAgICAgICAg
ICAgICAgIG1hcmdpbjogMCBhdXRvIDVweDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
LmJveCB7CisgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgaGVp
Z2h0OiAxMDAlOworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5j
b21wb3NpdGVkIHsKKyAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRl
WigxcHgpOworICAgICAgICAgICAgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAg
IDxib2R5PgorICAgICAgICA8cHJlIGlkPSJsb2ciPjwvcHJlPgorICAgICAgICA8c2NyaXB0Pgor
ICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVGVzdEZ1bmN0aW9uKGNvdW50KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29u
dGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAg
ICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0ZXIuY2xhc3NOYW1lID0gJ2NvbnRhaW5lcic7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlubmVyLmNsYXNzTmFtZSA9ICdib3gnOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFVzZSBhdCBsZWFzdCBvbmUgM0QgbGF5ZXIgdG8gdHJpZ2dlciB0aGUgb3ZlcmxhcCBtYXAg
Y2hlY2tpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXIuY2xhc3NOYW1lICs9
ICIgY29tcG9zaXRlZCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQob3V0ZXIpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVy
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYSBsYXlvdXQgdXBkYXRlLgorICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGFpbmVyLnJlbW92ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFBlcmZUZXN0UnVubmVyLm1lYXN1cmVUaW1lKHtydW46IGNyZWF0ZVRl
c3RGdW5jdGlvbig1MDAwKX0pOworICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0xheW91dC9sYXllcnNfb3ZlcmxhcF8z
ZC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvbGF5ZXJzX292ZXJsYXBfM2QuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzMyYzNmCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvbGF5ZXJzX292ZXJsYXBfM2QuaHRtbApAQCAt
MCwwICsxLDQ3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAg
ICA8dGl0bGU+UGVyZm9ybWFuY2UgdGVzdGVyIGZvciBub24tb3ZlcmxhcGluZyAzRCBsYXllcnM8
L3RpdGxlPgorICAgICAgICA8c3R5bGU+CisgICAgICAgICAgICAuY29udGFpbmVyIHsKKyAgICAg
ICAgICAgICAgICB3aWR0aDogMjBweDsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwcHg7Cisg
ICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0FBQTsKKyAgICAgICAgICAgICAgICBt
YXJnaW46IDAgYXV0byA1cHg7CisgICAgICAgICAgICAgICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTog
NDAwcHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5ib3ggeworICAgICAgICAgICAg
ICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAg
ICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDog
cmVkOworICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKCAtMjAw
cHggKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8
Ym9keT4KKyAgICAgICAgPHByZSBpZD0ibG9nIj48L3ByZT4KKyAgICAgICAgPHNjcmlwdD4KKyAg
ICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRlc3RGdW5jdGlvbihjb3VudCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgICAg
ICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dGVyLmNsYXNzTmFtZSA9ICdjb250YWluZXInOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbm5lci5jbGFzc05hbWUgPSAnYm94JzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChvdXRlcik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWlu
ZXIpOworICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBhIGxheW91dCB1cGRhdGUuCisgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OworICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXIucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIubWVhc3VyZVRpbWUoe3J1bjogY3JlYXRl
VGVzdEZ1bmN0aW9uKDUwMDApfSk7CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkNDgzMzNkLi4xZDMzOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzMgQEAKKzIwMTMtMDQtMjMgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUu
Y29tPgorCisgICAgICAgIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgdGhlIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6T3ZlcmxhcE1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE1MDYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgZnVuY3Rpb25hbGl0eSBvciBiZWhhdmlv
ci4KKworICAgICAgICBEbyBub3QgdXNlIHRoZSBPdmVybGFwTWFwIGluIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzIGlmIHRoZSBsYXllciBhbHJl
YWR5CisgICAgICAgIGhhcyBhIDNEIHRyYW5zZm9ybS4gVGhpcyB3YXkgd2UgY2FuIGF2b2lkIGEg
cG90ZW50aWFsIGV4cGVuc2l2ZSBsb29rdXBzIHdoZW4gd2Uga25vdyBmb3Igc3VyZSB0aGUgbGF5
ZXIKKyAgICAgICAgaXMgYWxyZWFkeSBzdXBwb3NlZCB0byBiZSBjb21wb3NpdGVkLiAKKworICAg
ICAgICBBbHNvLCBhZGRlZCBhIGJvdW5kaW5nIGJveCBvZiB0aGUgb3ZlcmxhcCBtYXAsIHNvIHRo
YXQgaXQgY2FuIGNhdGNoIGNhc2VzIHdoZW4gdGhlIG5ldyBsYXllciBpcyBub3Qgb3ZlcmxhcHBp
bmcKKyAgICAgICAgYW55IG9mIHRoZSBwcmV2aW91cyBsYXllcnMuIFRoaXMgaXMgcHJldHR5IGNv
bW1vbiB3aGVuIGhhdmluZyBjb21wb3NpdGVkIGxheWVycyBsYWlkIG91dCBpbiBhIHZlcnRpY2Fs
L2hvcml6b250YWwgbGlzdC4KKworCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHA6CisgICAgICAgIChPdmVybGFwTWFwQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok92ZXJsYXBNYXBDb250YWluZXI6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpPdmVy
bGFwTWFwQ29udGFpbmVyOjpvdmVybGFwc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpPdmVy
bGFwTWFwQ29udGFpbmVyOjp1bml0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1hcDo6YWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1hcDo6b3ZlcmxhcHNMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFw
OjpwdXNoQ29tcG9zaXRpbmdDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFwOjpwb3BDb21wb3NpdGluZ0NvbnRhaW5lcik6CisgICAg
ICAgIChSZW5kZXJMYXllckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMp
OgorCiAyMDEzLTA0LTIzICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgogCiAgICAg
ICAgIFtDU1MgRXhjbHVzaW9uc10gSW1wcm92ZSBFeGNsdXNpb25Qb2x5Z29uIHNtYXJ0IHBvaW50
ZXIgc2FmZXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCmluZGV4IDNmMTAyZjEuLmFiNDNmNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC05MCw2ICs5MCwz
OCBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHRocm90dGxlZExheWVyRmx1c2hEZWxheSA9IC41Owog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitjbGFzcyBPdmVybGFwTWFwQ29udGFpbmVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkZChjb25zdCBJbnRSZWN0JiBib3VuZHMpCisgICAgewor
ICAgICAgICBtX2xheWVyUmVjdHMuYXBwZW5kKGJvdW5kcyk7CisgICAgICAgIG1fYm91bmRpbmdC
b3gudW5pdGUoYm91bmRzKTsKKyAgICB9CisKKyAgICBib29sIG92ZXJsYXBzTGF5ZXJzKGNvbnN0
IEludFJlY3QmIGJvdW5kcykgY29uc3QKKyAgICB7CisgICAgICAgIC8vIENoZWNraW5nIHdpdGgg
dGhlIGJvdW5kaW5nIGJveCB3aWxsIHF1aWNrbHkgcmVqZWN0IGNhc2VzIHdoZW4KKyAgICAgICAg
Ly8gbGF5ZXJzIGFyZSBjcmVhdGVkIGZvciBsaXN0cyBvZiBpdGVtcyBnb2luZyBpbiBvbmUgZGly
ZWN0aW9uIGFuZAorICAgICAgICAvLyBuZXZlciBvdmVybGFwIHdpdGggZWFjaCBvdGhlci4KKyAg
ICAgICAgaWYgKCFib3VuZHMuaW50ZXJzZWN0cyhtX2JvdW5kaW5nQm94KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGF5ZXJS
ZWN0cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fbGF5ZXJSZWN0c1tpXS5pbnRl
cnNlY3RzKGJvdW5kcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgdW5pdGUoY29uc3QgT3Zl
cmxhcE1hcENvbnRhaW5lciYgb3RoZXJDb250YWluZXIpCisgICAgeworICAgICAgICBtX2xheWVy
UmVjdHMuYXBwZW5kKG90aGVyQ29udGFpbmVyLm1fbGF5ZXJSZWN0cyk7CisgICAgICAgIG1fYm91
bmRpbmdCb3gudW5pdGUob3RoZXJDb250YWluZXIubV9ib3VuZGluZ0JveCk7CisgICAgfQorcHJp
dmF0ZToKKyAgICBWZWN0b3I8SW50UmVjdD4gbV9sYXllclJlY3RzOworICAgIEludFJlY3QgbV9i
b3VuZGluZ0JveDsKK307CisKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1h
cCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3ZlcmxhcE1hcCk7CiBwdWJsaWM6CkBAIC0x
MDgsNyArMTQwLDcgQEAgcHVibGljOgogICAgICAgICAvLyBjb250cmlidXRlIHRvIG92ZXJsYXAg
YXMgc29vbiBhcyB0aGVpciBjb21wb3NpdGVkIGFuY2VzdG9yIGhhcyBiZWVuCiAgICAgICAgIC8v
IHJlY3Vyc2l2ZWx5IHByb2Nlc3NlZCBhbmQgcG9wcGVkIG9mZiB0aGUgc3RhY2suCiAgICAgICAg
IEFTU0VSVChtX292ZXJsYXBTdGFjay5zaXplKCkgPj0gMik7Ci0gICAgICAgIG1fb3ZlcmxhcFN0
YWNrW21fb3ZlcmxhcFN0YWNrLnNpemUoKSAtIDJdLmFwcGVuZChib3VuZHMpOworICAgICAgICBt
X292ZXJsYXBTdGFja1ttX292ZXJsYXBTdGFjay5zaXplKCkgLSAyXS5hZGQoYm91bmRzKTsKICAg
ICAgICAgbV9sYXllcnMuYWRkKGxheWVyKTsKICAgICB9CiAKQEAgLTExOSwxMiArMTUxLDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBvdmVybGFwc0xheWVycyhjb25zdCBJbnRSZWN0JiBib3VuZHMp
IGNvbnN0CiAgICAgewotICAgICAgICBjb25zdCBSZWN0TGlzdCYgbGF5ZXJSZWN0cyA9IG1fb3Zl
cmxhcFN0YWNrLmxhc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxheWVy
UmVjdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChsYXllclJlY3RzW2ldLmludGVy
c2VjdHMoYm91bmRzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX292ZXJsYXBTdGFjay5sYXN0
KCkub3ZlcmxhcHNMYXllcnMoYm91bmRzKTsKICAgICB9CiAKICAgICBib29sIGlzRW1wdHkoKQpA
QCAtMTM0LDIwICsxNjEsMTkgQEAgcHVibGljOgogCiAgICAgdm9pZCBwdXNoQ29tcG9zaXRpbmdD
b250YWluZXIoKQogICAgIHsKLSAgICAgICAgbV9vdmVybGFwU3RhY2suYXBwZW5kKFJlY3RMaXN0
KCkpOworICAgICAgICBtX292ZXJsYXBTdGFjay5hcHBlbmQoT3ZlcmxhcE1hcENvbnRhaW5lcigp
KTsKICAgICB9CiAKICAgICB2b2lkIHBvcENvbXBvc2l0aW5nQ29udGFpbmVyKCkKICAgICB7Ci0g
ICAgICAgIG1fb3ZlcmxhcFN0YWNrW21fb3ZlcmxhcFN0YWNrLnNpemUoKSAtIDJdLmFwcGVuZCht
X292ZXJsYXBTdGFjay5sYXN0KCkpOworICAgICAgICBtX292ZXJsYXBTdGFja1ttX292ZXJsYXBT
dGFjay5zaXplKCkgLSAyXS51bml0ZShtX292ZXJsYXBTdGFjay5sYXN0KCkpOwogICAgICAgICBt
X292ZXJsYXBTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgfQogCiAgICAgUmVuZGVyR2VvbWV0cnlN
YXAmIGdlb21ldHJ5TWFwKCkgeyByZXR1cm4gbV9nZW9tZXRyeU1hcDsgfQogCiBwcml2YXRlOgot
ICAgIHR5cGVkZWYgVmVjdG9yPEludFJlY3Q+IFJlY3RMaXN0OwotICAgIFZlY3RvcjxSZWN0TGlz
dD4gbV9vdmVybGFwU3RhY2s7CisgICAgVmVjdG9yPE92ZXJsYXBNYXBDb250YWluZXI+IG1fb3Zl
cmxhcFN0YWNrOwogICAgIEhhc2hTZXQ8Y29uc3QgUmVuZGVyTGF5ZXIqPiBtX2xheWVyczsKICAg
ICBSZW5kZXJHZW9tZXRyeU1hcCBtX2dlb21ldHJ5TWFwOwogfTsKQEAgLTkxMSw3ICs5MzcsMTAg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVt
ZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3IKIAogICAgIGJvb2wgaGF2ZUNvbXB1dGVkQm91bmRz
ID0gZmFsc2U7CiAgICAgSW50UmVjdCBhYnNCb3VuZHM7Ci0gICAgaWYgKG92ZXJsYXBNYXAgJiYg
IW92ZXJsYXBNYXAtPmlzRW1wdHkoKSAmJiBjb21wb3NpdGluZ1N0YXRlLm1fdGVzdGluZ092ZXJs
YXApIHsKKyAgICAvLyBJZiB3ZSBrbm93IGZvciBzdXJlIHRoZSBsYXllciBpcyBnb2luZyB0byBi
ZSBjb21wb3NpdGVkLCBkb24ndCBib3RoZXIgbG9va2luZyBpdCB1cCBpbiB0aGUgb3ZlcmxhcCBt
YXAuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFyZSB1c2luZyByZXF1aXJlc0NvbXBvc2l0aW5nTGF5
ZXIgaW5zdGVhZCBvZiBuZWVkc1RvQmVDb21wb3NpdGVkIHRvIGF2b2lkIHJlYWRpbmcgYmFjayB0
aGUKKyAgICAvLyBwcmV2aW91cyBpbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIHRocm91Z2ggdGhl
IGNhbGwgdG8gbmVlZHNUb0JlQ29tcG9zaXRlZC4KKyAgICBpZiAob3ZlcmxhcE1hcCAmJiAhb3Zl
cmxhcE1hcC0+aXNFbXB0eSgpICYmIGNvbXBvc2l0aW5nU3RhdGUubV90ZXN0aW5nT3ZlcmxhcCAm
JiAhcmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGxheWVyKSkgewogICAgICAgICAvLyBJZiB3ZSdy
ZSB0ZXN0aW5nIGZvciBvdmVybGFwLCB3ZSBvbmx5IG5lZWQgdG8gY29tcG9zaXRlIGlmIHdlIG92
ZXJsYXAgc29tZXRoaW5nIHRoYXQgaXMgYWxyZWFkeSBjb21wb3NpdGVkLgogICAgICAgICBhYnNC
b3VuZHMgPSBlbmNsb3NpbmdJbnRSZWN0KG92ZXJsYXBNYXAtPmdlb21ldHJ5TWFwKCkuYWJzb2x1
dGVSZWN0KGxheWVyLT5vdmVybGFwQm91bmRzKCkpKTsKIAo=
</data>
<flag name="review"
          id="220935"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="220936"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199507</attachid>
            <date>2013-04-24 11:43:49 -0700</date>
            <delta_ts>2014-04-16 16:39:10 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug115063_v2.patch</filename>
            <type>text/plain</type>
            <size>12191</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYjU2ODdmMi4uMDBhODZmOCAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxMy0wNC0yMyAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9i
ZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0aGUgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpPdmVybGFwTWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTUwNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBjb21wdXRpbmcgdGhlIG92
ZXJsYXAgb2YgNTAwMCBsYXllcnMuCisKKyAgICAgICAgKiBMYXlvdXQvbGF5ZXJzX292ZXJsYXBf
MmQuaHRtbDogQWRkZWQuIFVzaW5nIG5vbi1jb21wb3NpdGVkIGxheWVycywgdG8gY2hlY2sKKyAg
ICAgICAgdGhhdCB0aGUgcGVyZm9ybWFuY2Ugb24gdGhlIG5vbi1jb21wb3NpdGVkIHBhdGggaXMg
bm90IGNoYW5naW5nIHdpdGggdGhpcyBwYXRjaC4KKyAgICAgICAgKiBMYXlvdXQvbGF5ZXJzX292
ZXJsYXBfM2QuaHRtbDogQWRkZWQuIFJlY29yZHMgdGhlIHRpbWUgdG8gZG8gdGhlIGxheW91dCBv
ZiA1MDAwCisgICAgICAgIG5vbi1vdmVybGFwcGluZyAzRCBsYXllcnMuCisKIDIwMTMtMDQtMTAg
IEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFzcyBy
ZW1vdmUgYWxsIHRoZSBlbXB0eSBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvbGF5ZXJzX292ZXJsYXBfMmQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvTGF5
b3V0L2xheWVyc19vdmVybGFwXzJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYTdkOTBlMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvTGF5b3V0
L2xheWVyc19vdmVybGFwXzJkLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHRpdGxlPlBlcmZvcm1hbmNlIHRlc3RlciBm
b3Igbm9uLW92ZXJsYXBpbmcgMkQgbGF5ZXJzPC90aXRsZT4KKyAgICAgICAgPHN0eWxlPgorICAg
ICAgICAgICAgLmNvbnRhaW5lciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZl
OworICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4OworICAgICAgICAgICAgICAgIGhlaWdodDog
MjBweDsKKyAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQUFBOworICAgICAgICAg
ICAgICAgIG1hcmdpbjogMCBhdXRvIDVweDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
LmJveCB7CisgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgICAgICAgICAgaGVp
Z2h0OiAxMDAlOworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5j
b21wb3NpdGVkIHsKKyAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRl
WigxcHgpOworICAgICAgICAgICAgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAg
IDxib2R5PgorICAgICAgICA8cHJlIGlkPSJsb2ciPjwvcHJlPgorICAgICAgICA8c2NyaXB0Pgor
ICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVGVzdEZ1bmN0aW9uKGNvdW50KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29u
dGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAg
ICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0ZXIuY2xhc3NOYW1lID0gJ2NvbnRhaW5lcic7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlubmVyLmNsYXNzTmFtZSA9ICdib3gnOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFVzZSBhdCBsZWFzdCBvbmUgM0QgbGF5ZXIgdG8gdHJpZ2dlciB0aGUgb3ZlcmxhcCBtYXAg
Y2hlY2tpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXIuY2xhc3NOYW1lICs9
ICIgY29tcG9zaXRlZCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQob3V0ZXIpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVy
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYSBsYXlvdXQgdXBkYXRlLgorICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGFpbmVyLnJlbW92ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFBlcmZUZXN0UnVubmVyLm1lYXN1cmVUaW1lKHtydW46IGNyZWF0ZVRl
c3RGdW5jdGlvbig1MDAwKX0pOworICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0xheW91dC9sYXllcnNfb3ZlcmxhcF8z
ZC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvbGF5ZXJzX292ZXJsYXBfM2QuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzMyYzNmCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvbGF5ZXJzX292ZXJsYXBfM2QuaHRtbApAQCAt
MCwwICsxLDQ3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAg
ICA8dGl0bGU+UGVyZm9ybWFuY2UgdGVzdGVyIGZvciBub24tb3ZlcmxhcGluZyAzRCBsYXllcnM8
L3RpdGxlPgorICAgICAgICA8c3R5bGU+CisgICAgICAgICAgICAuY29udGFpbmVyIHsKKyAgICAg
ICAgICAgICAgICB3aWR0aDogMjBweDsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwcHg7Cisg
ICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0FBQTsKKyAgICAgICAgICAgICAgICBt
YXJnaW46IDAgYXV0byA1cHg7CisgICAgICAgICAgICAgICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTog
NDAwcHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5ib3ggeworICAgICAgICAgICAg
ICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAg
ICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDog
cmVkOworICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKCAtMjAw
cHggKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8
Ym9keT4KKyAgICAgICAgPHByZSBpZD0ibG9nIj48L3ByZT4KKyAgICAgICAgPHNjcmlwdD4KKyAg
ICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRlc3RGdW5jdGlvbihjb3VudCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgICAg
ICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dGVyLmNsYXNzTmFtZSA9ICdjb250YWluZXInOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbm5lci5jbGFzc05hbWUgPSAnYm94JzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChvdXRlcik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWlu
ZXIpOworICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBhIGxheW91dCB1cGRhdGUuCisgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OworICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXIucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIubWVhc3VyZVRpbWUoe3J1bjogY3JlYXRl
VGVzdEZ1bmN0aW9uKDUwMDApfSk7CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkNDgzMzNkLi4xZDMzOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzMgQEAKKzIwMTMtMDQtMjMgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUu
Y29tPgorCisgICAgICAgIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgdGhlIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6T3ZlcmxhcE1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE1MDYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgZnVuY3Rpb25hbGl0eSBvciBiZWhhdmlv
ci4KKworICAgICAgICBEbyBub3QgdXNlIHRoZSBPdmVybGFwTWFwIGluIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzIGlmIHRoZSBsYXllciBhbHJl
YWR5CisgICAgICAgIGhhcyBhIDNEIHRyYW5zZm9ybS4gVGhpcyB3YXkgd2UgY2FuIGF2b2lkIGEg
cG90ZW50aWFsIGV4cGVuc2l2ZSBsb29rdXBzIHdoZW4gd2Uga25vdyBmb3Igc3VyZSB0aGUgbGF5
ZXIKKyAgICAgICAgaXMgYWxyZWFkeSBzdXBwb3NlZCB0byBiZSBjb21wb3NpdGVkLiAKKworICAg
ICAgICBBbHNvLCBhZGRlZCBhIGJvdW5kaW5nIGJveCBvZiB0aGUgb3ZlcmxhcCBtYXAsIHNvIHRo
YXQgaXQgY2FuIGNhdGNoIGNhc2VzIHdoZW4gdGhlIG5ldyBsYXllciBpcyBub3Qgb3ZlcmxhcHBp
bmcKKyAgICAgICAgYW55IG9mIHRoZSBwcmV2aW91cyBsYXllcnMuIFRoaXMgaXMgcHJldHR5IGNv
bW1vbiB3aGVuIGhhdmluZyBjb21wb3NpdGVkIGxheWVycyBsYWlkIG91dCBpbiBhIHZlcnRpY2Fs
L2hvcml6b250YWwgbGlzdC4KKworCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHA6CisgICAgICAgIChPdmVybGFwTWFwQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok92ZXJsYXBNYXBDb250YWluZXI6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpPdmVy
bGFwTWFwQ29udGFpbmVyOjpvdmVybGFwc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpPdmVy
bGFwTWFwQ29udGFpbmVyOjp1bml0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1hcDo6YWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1hcDo6b3ZlcmxhcHNMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFw
OjpwdXNoQ29tcG9zaXRpbmdDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFwOjpwb3BDb21wb3NpdGluZ0NvbnRhaW5lcik6CisgICAg
ICAgIChSZW5kZXJMYXllckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMp
OgorCiAyMDEzLTA0LTIzICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgogCiAgICAg
ICAgIFtDU1MgRXhjbHVzaW9uc10gSW1wcm92ZSBFeGNsdXNpb25Qb2x5Z29uIHNtYXJ0IHBvaW50
ZXIgc2FmZXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCmluZGV4IDNmMTAyZjEuLjlhMjEyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC05MCw2ICs5MCwz
OCBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHRocm90dGxlZExheWVyRmx1c2hEZWxheSA9IC41Owog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitjbGFzcyBPdmVybGFwTWFwQ29udGFpbmVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkZChjb25zdCBJbnRSZWN0JiBib3VuZHMpCisgICAgewor
ICAgICAgICBtX2xheWVyUmVjdHMuYXBwZW5kKGJvdW5kcyk7CisgICAgICAgIG1fYm91bmRpbmdC
b3gudW5pdGUoYm91bmRzKTsKKyAgICB9CisKKyAgICBib29sIG92ZXJsYXBzTGF5ZXJzKGNvbnN0
IEludFJlY3QmIGJvdW5kcykgY29uc3QKKyAgICB7CisgICAgICAgIC8vIENoZWNraW5nIHdpdGgg
dGhlIGJvdW5kaW5nIGJveCB3aWxsIHF1aWNrbHkgcmVqZWN0IGNhc2VzIHdoZW4KKyAgICAgICAg
Ly8gbGF5ZXJzIGFyZSBjcmVhdGVkIGZvciBsaXN0cyBvZiBpdGVtcyBnb2luZyBpbiBvbmUgZGly
ZWN0aW9uIGFuZAorICAgICAgICAvLyBuZXZlciBvdmVybGFwIHdpdGggZWFjaCBvdGhlci4KKyAg
ICAgICAgaWYgKCFib3VuZHMuaW50ZXJzZWN0cyhtX2JvdW5kaW5nQm94KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGF5ZXJS
ZWN0cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fbGF5ZXJSZWN0c1tpXS5pbnRl
cnNlY3RzKGJvdW5kcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgdW5pdGUoY29uc3QgT3Zl
cmxhcE1hcENvbnRhaW5lciYgb3RoZXJDb250YWluZXIpCisgICAgeworICAgICAgICBtX2xheWVy
UmVjdHMuYXBwZW5kKG90aGVyQ29udGFpbmVyLm1fbGF5ZXJSZWN0cyk7CisgICAgICAgIG1fYm91
bmRpbmdCb3gudW5pdGUob3RoZXJDb250YWluZXIubV9ib3VuZGluZ0JveCk7CisgICAgfQorcHJp
dmF0ZToKKyAgICBWZWN0b3I8SW50UmVjdD4gbV9sYXllclJlY3RzOworICAgIEludFJlY3QgbV9i
b3VuZGluZ0JveDsKK307CisKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1h
cCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3ZlcmxhcE1hcCk7CiBwdWJsaWM6CkBAIC0x
MDgsNyArMTQwLDcgQEAgcHVibGljOgogICAgICAgICAvLyBjb250cmlidXRlIHRvIG92ZXJsYXAg
YXMgc29vbiBhcyB0aGVpciBjb21wb3NpdGVkIGFuY2VzdG9yIGhhcyBiZWVuCiAgICAgICAgIC8v
IHJlY3Vyc2l2ZWx5IHByb2Nlc3NlZCBhbmQgcG9wcGVkIG9mZiB0aGUgc3RhY2suCiAgICAgICAg
IEFTU0VSVChtX292ZXJsYXBTdGFjay5zaXplKCkgPj0gMik7Ci0gICAgICAgIG1fb3ZlcmxhcFN0
YWNrW21fb3ZlcmxhcFN0YWNrLnNpemUoKSAtIDJdLmFwcGVuZChib3VuZHMpOworICAgICAgICBt
X292ZXJsYXBTdGFja1ttX292ZXJsYXBTdGFjay5zaXplKCkgLSAyXS5hZGQoYm91bmRzKTsKICAg
ICAgICAgbV9sYXllcnMuYWRkKGxheWVyKTsKICAgICB9CiAKQEAgLTExOSwxMiArMTUxLDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBvdmVybGFwc0xheWVycyhjb25zdCBJbnRSZWN0JiBib3VuZHMp
IGNvbnN0CiAgICAgewotICAgICAgICBjb25zdCBSZWN0TGlzdCYgbGF5ZXJSZWN0cyA9IG1fb3Zl
cmxhcFN0YWNrLmxhc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxheWVy
UmVjdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChsYXllclJlY3RzW2ldLmludGVy
c2VjdHMoYm91bmRzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX292ZXJsYXBTdGFjay5sYXN0
KCkub3ZlcmxhcHNMYXllcnMoYm91bmRzKTsKICAgICB9CiAKICAgICBib29sIGlzRW1wdHkoKQpA
QCAtMTM0LDIwICsxNjEsMTkgQEAgcHVibGljOgogCiAgICAgdm9pZCBwdXNoQ29tcG9zaXRpbmdD
b250YWluZXIoKQogICAgIHsKLSAgICAgICAgbV9vdmVybGFwU3RhY2suYXBwZW5kKFJlY3RMaXN0
KCkpOworICAgICAgICBtX292ZXJsYXBTdGFjay5hcHBlbmQoT3ZlcmxhcE1hcENvbnRhaW5lcigp
KTsKICAgICB9CiAKICAgICB2b2lkIHBvcENvbXBvc2l0aW5nQ29udGFpbmVyKCkKICAgICB7Ci0g
ICAgICAgIG1fb3ZlcmxhcFN0YWNrW21fb3ZlcmxhcFN0YWNrLnNpemUoKSAtIDJdLmFwcGVuZCht
X292ZXJsYXBTdGFjay5sYXN0KCkpOworICAgICAgICBtX292ZXJsYXBTdGFja1ttX292ZXJsYXBT
dGFjay5zaXplKCkgLSAyXS51bml0ZShtX292ZXJsYXBTdGFjay5sYXN0KCkpOwogICAgICAgICBt
X292ZXJsYXBTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgfQogCiAgICAgUmVuZGVyR2VvbWV0cnlN
YXAmIGdlb21ldHJ5TWFwKCkgeyByZXR1cm4gbV9nZW9tZXRyeU1hcDsgfQogCiBwcml2YXRlOgot
ICAgIHR5cGVkZWYgVmVjdG9yPEludFJlY3Q+IFJlY3RMaXN0OwotICAgIFZlY3RvcjxSZWN0TGlz
dD4gbV9vdmVybGFwU3RhY2s7CisgICAgVmVjdG9yPE92ZXJsYXBNYXBDb250YWluZXI+IG1fb3Zl
cmxhcFN0YWNrOwogICAgIEhhc2hTZXQ8Y29uc3QgUmVuZGVyTGF5ZXIqPiBtX2xheWVyczsKICAg
ICBSZW5kZXJHZW9tZXRyeU1hcCBtX2dlb21ldHJ5TWFwOwogfTsKQEAgLTkwNiwxMiArOTMyLDE4
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJl
bWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yCiAgICAgCiAgICAgLy8gQ2xlYXIgdGhlIGZsYWcK
ICAgICBsYXllci0+c2V0SGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZhbHNlKTsKLSAgICAKLSAg
ICBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiBjb21wb3NpdGluZ1JlYXNv
biA9IGNvbXBvc2l0aW5nU3RhdGUubV9zdWJ0cmVlSXNDb21wb3NpdGluZyA/IFJlbmRlckxheWVy
OjpJbmRpcmVjdENvbXBvc2l0aW5nRm9yU3RhY2tpbmcgOiBSZW5kZXJMYXllcjo6Tm9JbmRpcmVj
dENvbXBvc2l0aW5nUmVhc29uOworICAgIGxheWVyLT5zZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uKFJlbmRlckxheWVyOjpOb0luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24pOworCisgICAgLy8g
Q2hlY2sgaWYgdGhlIGxheWVyIG5lZWRzIHRvIGJlIGNvbXBvc2l0ZWQgZm9yIG5vbi1pbmRpcmVj
dCByZWFzb25zIChleC4gM0QgdHJhbnNmb3JtKS4KKyAgICAvLyBXZSB1c2UgdGhpcyB2YWx1ZSB0
byBhdm9pZCBjaGVja2luZyB0aGUgb3ZlcmxhcC1tYXAsIGlmIHdlIGtub3cgZm9yIHN1cmUgdGhl
IGxheWVyCisgICAgLy8gaXMgYWxyZWFkeSBnb2luZyB0byBiZSBjb21wb3NpdGVkIGZvciBvdGhl
ciByZWFzb25zLgorICAgIGJvb2wgd2lsbEJlQ29tcG9zaXRlZCA9IG5lZWRzVG9CZUNvbXBvc2l0
ZWQobGF5ZXIpOwogCisgICAgUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24g
Y29tcG9zaXRpbmdSZWFzb24gPSBjb21wb3NpdGluZ1N0YXRlLm1fc3VidHJlZUlzQ29tcG9zaXRp
bmcgPyBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ0ZvclN0YWNraW5nIDogUmVuZGVy
TGF5ZXI6Ok5vSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjsKICAgICBib29sIGhhdmVDb21wdXRl
ZEJvdW5kcyA9IGZhbHNlOwogICAgIEludFJlY3QgYWJzQm91bmRzOwotICAgIGlmIChvdmVybGFw
TWFwICYmICFvdmVybGFwTWFwLT5pc0VtcHR5KCkgJiYgY29tcG9zaXRpbmdTdGF0ZS5tX3Rlc3Rp
bmdPdmVybGFwKSB7CisgICAgLy8gSWYgd2Uga25vdyBmb3Igc3VyZSB0aGUgbGF5ZXIgaXMgZ29p
bmcgdG8gYmUgY29tcG9zaXRlZCwgZG9uJ3QgYm90aGVyIGxvb2tpbmcgaXQgdXAgaW4gdGhlIG92
ZXJsYXAgbWFwLgorICAgIGlmICghd2lsbEJlQ29tcG9zaXRlZCAmJiBvdmVybGFwTWFwICYmICFv
dmVybGFwTWFwLT5pc0VtcHR5KCkgJiYgY29tcG9zaXRpbmdTdGF0ZS5tX3Rlc3RpbmdPdmVybGFw
KSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIHRlc3RpbmcgZm9yIG92ZXJsYXAsIHdlIG9ubHkgbmVl
ZCB0byBjb21wb3NpdGUgaWYgd2Ugb3ZlcmxhcCBzb21ldGhpbmcgdGhhdCBpcyBhbHJlYWR5IGNv
bXBvc2l0ZWQuCiAgICAgICAgIGFic0JvdW5kcyA9IGVuY2xvc2luZ0ludFJlY3Qob3ZlcmxhcE1h
cC0+Z2VvbWV0cnlNYXAoKS5hYnNvbHV0ZVJlY3QobGF5ZXItPm92ZXJsYXBCb3VuZHMoKSkpOwog
CkBAIC05MzIsNiArOTY0LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRl
Q29tcG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yCiAjZW5kaWYKIAog
ICAgIGxheWVyLT5zZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKGNvbXBvc2l0aW5nUmVhc29u
KTsKKyAgICAvLyBDaGVjayBpZiB0aGUgY29tcHV0ZWQgaW5kaXJlY3QgcmVhc29uIHdpbGwgZm9y
Y2UgdGhlIGxheWVyIHRvIGJlY29tZSBjb21wb3NpdGVkLgorICAgIGlmICghd2lsbEJlQ29tcG9z
aXRlZCAmJiBsYXllci0+bXVzdENvbXBvc2l0ZUZvckluZGlyZWN0UmVhc29ucygpICYmIGNhbkJl
Q29tcG9zaXRlZChsYXllcikpCisgICAgICAgIHdpbGxCZUNvbXBvc2l0ZWQgPSB0cnVlOworICAg
IEFTU0VSVCh3aWxsQmVDb21wb3NpdGVkID09IG5lZWRzVG9CZUNvbXBvc2l0ZWQobGF5ZXIpKTsK
IAogICAgIC8vIFRoZSBjaGlsZHJlbiBvZiB0aGlzIGxheWVyIGRvbid0IG5lZWQgdG8gY29tcG9z
aXRlLCB1bmxlc3MgdGhlcmUgaXMKICAgICAvLyBhIGNvbXBvc2l0aW5nIGxheWVyIGFtb25nIHRo
ZW0sIHNvIHN0YXJ0IGJ5IGluaGVyaXRpbmcgdGhlIGNvbXBvc2l0aW5nCkBAIC05MzksNyArOTc1
LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVp
cmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3IKICAgICBDb21wb3NpdGluZ1N0YXRlIGNoaWxk
U3RhdGUoY29tcG9zaXRpbmdTdGF0ZSk7CiAgICAgY2hpbGRTdGF0ZS5tX3N1YnRyZWVJc0NvbXBv
c2l0aW5nID0gZmFsc2U7CiAKLSAgICBib29sIHdpbGxCZUNvbXBvc2l0ZWQgPSBuZWVkc1RvQmVD
b21wb3NpdGVkKGxheWVyKTsKICAgICBpZiAod2lsbEJlQ29tcG9zaXRlZCkgewogICAgICAgICAv
LyBUZWxsIHRoZSBwYXJlbnQgaXQgaGFzIGNvbXBvc2l0aW5nIGRlc2NlbmRhbnRzLgogICAgICAg
ICBjb21wb3NpdGluZ1N0YXRlLm1fc3VidHJlZUlzQ29tcG9zaXRpbmcgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229496</attachid>
            <date>2014-04-16 16:39:14 -0700</date>
            <delta_ts>2014-04-16 18:00:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115063-20140416163853.patch</filename>
            <type>text/plain</type>
            <size>12051</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjczOTApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA0LTE2ICBB
bGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KKworICAgICAgICBJbXByb3Zl
IHBlcmZvcm1hbmNlIG9mIHRoZSBSZW5kZXJMYXllckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTA2MworCisg
ICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICBUZXN0aW5nIHRoZSBw
ZXJmb3JtYW5jZSBvZiBjb21wdXRpbmcgdGhlIG92ZXJsYXAgb2YgNTAwMCBsYXllcnMuCisKKyAg
ICAgICAgKiBMYXlvdXQvbGF5ZXJzX292ZXJsYXBfMmQuaHRtbDogQWRkZWQuIFVzaW5nIG5vbi1j
b21wb3NpdGVkIGxheWVycywgdG8gY2hlY2sKKyAgICAgICAgdGhhdCB0aGUgcGVyZm9ybWFuY2Ug
b24gdGhlIG5vbi1jb21wb3NpdGVkIHBhdGggaXMgbm90IGNoYW5naW5nIHdpdGggdGhpcyBwYXRj
aC4KKyAgICAgICAgKiBMYXlvdXQvbGF5ZXJzX292ZXJsYXBfM2QuaHRtbDogQWRkZWQuIFJlY29y
ZHMgdGhlIHRpbWUgdG8gZG8gdGhlIGxheW91dCBvZiA1MDAwCisgICAgICAgIG5vbi1vdmVybGFw
cGluZyAzRCBsYXllcnMuCisKIDIwMTQtMDQtMTUgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW0NTUyBTaGFwZXNdIExpbmtpbmcgc3R5bGVzaGVldCBpbnN0
ZWFkIG9mIGlubGluZSBzdHlsZSBkZWZpbml0aW9uIGhhcyBydWluZWQgU2hhcGVzUmVnaW9ucyB0
ZXN0CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0xheW91dC9sYXllcnNfb3ZlcmxhcF8yZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvTGF5b3V0L2xheWVyc19vdmVybGFwXzJk
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0xheW91dC9sYXllcnNfb3Zl
cmxhcF8yZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT5QZXJmb3JtYW5jZSB0ZXN0
ZXIgZm9yIG5vbi1vdmVybGFwaW5nIDJEIGxheWVyczwvdGl0bGU+CisgICAgICAgIDxzdHlsZT4K
KyAgICAgICAgICAgIC5jb250YWluZXIgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICAgICAgICAgICAgICB3aWR0aDogMjBweDsKKyAgICAgICAgICAgICAgICBoZWln
aHQ6IDIwcHg7CisgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0FBQTsKKyAgICAg
ICAgICAgICAgICBtYXJnaW46IDAgYXV0byA1cHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC5ib3ggeworICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICAgICAgICAg
IGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
ICAgICAgICAgICAgYmFja2dyb3VuZDogcmVkOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAuY29tcG9zaXRlZCB7CisgICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5z
bGF0ZVooMXB4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorICAgIDwvaGVhZD4K
KyAgICA8Ym9keT4KKyAgICAgICAgPHByZSBpZD0ibG9nIj48L3ByZT4KKyAgICAgICAgPHNjcmlw
dD4KKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRlc3RGdW5jdGlvbihjb3VudCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAg
ICAgICAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dGVyLmNsYXNzTmFtZSA9ICdjb250YWluZXInOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbm5lci5jbGFzc05hbWUgPSAnYm94JzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVc2UgYXQgbGVhc3Qgb25lIDNEIGxheWVyIHRvIHRyaWdnZXIgdGhlIG92ZXJsYXAg
bWFwIGNoZWNraW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyLmNsYXNzTmFt
ZSArPSAiIGNvbXBvc2l0ZWQiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG91dGVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRh
aW5lcik7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgbGF5b3V0IHVwZGF0ZS4KKyAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBQZXJmVGVzdFJ1bm5lci5tZWFzdXJlVGltZSh7cnVuOiBjcmVh
dGVUZXN0RnVuY3Rpb24oNTAwMCl9KTsKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvbGF5ZXJzX292ZXJsYXBfM2Qu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0xheW91dC9sYXllcnNfb3Zlcmxh
cF8zZC5odG1sCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9MYXlvdXQvbGF5ZXJz
X292ZXJsYXBfM2QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8dGl0bGU+UGVyZm9ybWFuY2Ug
dGVzdGVyIGZvciBub24tb3ZlcmxhcGluZyAzRCBsYXllcnM8L3RpdGxlPgorICAgICAgICA8c3R5
bGU+CisgICAgICAgICAgICAuY29udGFpbmVyIHsKKyAgICAgICAgICAgICAgICB3aWR0aDogMjBw
eDsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwcHg7CisgICAgICAgICAgICAgICAgYm9yZGVy
OiAxcHggc29saWQgI0FBQTsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDAgYXV0byA1cHg7Cisg
ICAgICAgICAgICAgICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogNDAwcHg7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC5ib3ggeworICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAg
ICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmVkOworICAgICAgICAgICAgICAg
IC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKCAtMjAwcHggKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5u
ZXIuanMiPjwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHByZSBp
ZD0ibG9nIj48L3ByZT4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgIGZ1bmN0aW9uIGNy
ZWF0ZVRlc3RGdW5jdGlvbihjb3VudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyLmNsYXNz
TmFtZSA9ICdjb250YWluZXInOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlubmVyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bm5lci5jbGFzc05hbWUgPSAnYm94JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyLmFw
cGVuZENoaWxkKGlubmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBl
bmRDaGlsZChvdXRlcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgICAgICAgICAgICAg
ICAgICAvLyBGb3JjZSBhIGxheW91dCB1cGRhdGUuCisgICAgICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmJvZHkuY2xpZW50SGVpZ2h0OworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVt
b3ZlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUGVy
ZlRlc3RSdW5uZXIubWVhc3VyZVRpbWUoe3J1bjogY3JlYXRlVGVzdEZ1bmN0aW9uKDUwMDApfSk7
CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE2NzM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE0LTA0LTE2ICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8
YWNoaWN1QGFkb2JlLmNvbT4KKworICAgICAgICBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIHRoZSBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTA2MworCisgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5
IG9yIGJlaGF2aW9yLgorCisgICAgICAgIERvIG5vdCB1c2UgdGhlIE92ZXJsYXBNYXAgaW4gUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMgaWYgdGhl
IGxheWVyIGFscmVhZHkKKyAgICAgICAgaGFzIGEgM0QgdHJhbnNmb3JtLiBUaGlzIHdheSB3ZSBj
YW4gYXZvaWQgYSBwb3RlbnRpYWwgZXhwZW5zaXZlIGxvb2t1cHMgd2hlbiB3ZSBrbm93IGZvciBz
dXJlIHRoZSBsYXllcgorICAgICAgICBpcyBhbHJlYWR5IHN1cHBvc2VkIHRvIGJlIGNvbXBvc2l0
ZWQuIAorCisgICAgICAgIEFsc28sIGFkZGVkIGEgYm91bmRpbmcgYm94IG9mIHRoZSBvdmVybGFw
IG1hcCwgc28gdGhhdCBpdCBjYW4gY2F0Y2ggY2FzZXMgd2hlbiB0aGUgbmV3IGxheWVyIGlzIG5v
dCBvdmVybGFwcGluZworICAgICAgICBhbnkgb2YgdGhlIHByZXZpb3VzIGxheWVycy4gVGhpcyBp
cyBwcmV0dHkgY29tbW9uIHdoZW4gaGF2aW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIGxhaWQgb3V0IGlu
IGEgdmVydGljYWwvaG9yaXpvbnRhbCBsaXN0LgorCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKE92ZXJsYXBNYXBDb250YWluZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6T3ZlcmxhcE1hcENvbnRhaW5lcjo6YWRkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok92ZXJsYXBNYXBDb250YWluZXI6Om92ZXJsYXBzTGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok92ZXJsYXBNYXBDb250YWluZXI6OnVuaXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFwOjphZGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFwOjpv
dmVybGFwc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
Ok92ZXJsYXBNYXA6OnB1c2hDb21wb3NpdGluZ0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Ok92ZXJsYXBNYXA6OnBvcENvbXBvc2l0aW5nQ29udGFp
bmVyKToKKyAgICAgICAgKFJlbmRlckxheWVyQ29tcG9zaXRvcjo6T3ZlcmxhcE1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1Jl
cXVpcmVtZW50cyk6CisKIDIwMTQtMDQtMTYgIFBldGVyIE1vbG5hciAgPHBtb2xuYXIudS1zemVn
ZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KIAogICAgICAgICBJbXByb3ZlIHNlY3VyaXR5IG1pdGln
YXRpb24gYWRkZWQgaW4gd2Via2l0IHI5NDAwMS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxNjczOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwzOCBAQCBzdGF0aWMgY29uc3QgZG91YmxlIHRo
cm90dGxlZExheWVyRmx1c2hECiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK2NsYXNz
IE92ZXJsYXBNYXBDb250YWluZXIgeworcHVibGljOgorICAgIHZvaWQgYWRkKGNvbnN0IEludFJl
Y3QmIGJvdW5kcykKKyAgICB7CisgICAgICAgIG1fbGF5ZXJSZWN0cy5hcHBlbmQoYm91bmRzKTsK
KyAgICAgICAgbV9ib3VuZGluZ0JveC51bml0ZShib3VuZHMpOworICAgIH0KKworICAgIGJvb2wg
b3ZlcmxhcHNMYXllcnMoY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAorICAgIHsKKyAgICAg
ICAgLy8gQ2hlY2tpbmcgd2l0aCB0aGUgYm91bmRpbmcgYm94IHdpbGwgcXVpY2tseSByZWplY3Qg
Y2FzZXMgd2hlbgorICAgICAgICAvLyBsYXllcnMgYXJlIGNyZWF0ZWQgZm9yIGxpc3RzIG9mIGl0
ZW1zIGdvaW5nIGluIG9uZSBkaXJlY3Rpb24gYW5kCisgICAgICAgIC8vIG5ldmVyIG92ZXJsYXAg
d2l0aCBlYWNoIG90aGVyLgorICAgICAgICBpZiAoIWJvdW5kcy5pbnRlcnNlY3RzKG1fYm91bmRp
bmdCb3gpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9sYXllclJlY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
bV9sYXllclJlY3RzW2ldLmludGVyc2VjdHMoYm91bmRzKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
dm9pZCB1bml0ZShjb25zdCBPdmVybGFwTWFwQ29udGFpbmVyJiBvdGhlckNvbnRhaW5lcikKKyAg
ICB7CisgICAgICAgIG1fbGF5ZXJSZWN0cy5hcHBlbmRWZWN0b3Iob3RoZXJDb250YWluZXIubV9s
YXllclJlY3RzKTsKKyAgICAgICAgbV9ib3VuZGluZ0JveC51bml0ZShvdGhlckNvbnRhaW5lci5t
X2JvdW5kaW5nQm94KTsKKyAgICB9Citwcml2YXRlOgorICAgIFZlY3RvcjxJbnRSZWN0PiBtX2xh
eWVyUmVjdHM7CisgICAgSW50UmVjdCBtX2JvdW5kaW5nQm94OworfTsKKwogY2xhc3MgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpPdmVybGFwTWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShP
dmVybGFwTWFwKTsKIHB1YmxpYzoKQEAgLTEyMyw3ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIGNvbnRyaWJ1dGUgdG8gb3ZlcmxhcCBhcyBzb29uIGFzIHRoZWlyIGNvbXBvc2l0ZWQgYW5j
ZXN0b3IgaGFzIGJlZW4KICAgICAgICAgLy8gcmVjdXJzaXZlbHkgcHJvY2Vzc2VkIGFuZCBwb3Bw
ZWQgb2ZmIHRoZSBzdGFjay4KICAgICAgICAgQVNTRVJUKG1fb3ZlcmxhcFN0YWNrLnNpemUoKSA+
PSAyKTsKLSAgICAgICAgbV9vdmVybGFwU3RhY2tbbV9vdmVybGFwU3RhY2suc2l6ZSgpIC0gMl0u
YXBwZW5kKGJvdW5kcyk7CisgICAgICAgIG1fb3ZlcmxhcFN0YWNrW21fb3ZlcmxhcFN0YWNrLnNp
emUoKSAtIDJdLmFkZChib3VuZHMpOwogICAgICAgICBtX2xheWVycy5hZGQobGF5ZXIpOwogICAg
IH0KIApAQCAtMTM0LDcgKzE2Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3ZlcmxhcHNMYXll
cnMoY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
b3ZlcmxhcFN0YWNrLmxhc3QoKS5pbnRlcnNlY3RzKGJvdW5kcyk7CisgICAgICAgIHJldHVybiBt
X292ZXJsYXBTdGFjay5sYXN0KCkub3ZlcmxhcHNMYXllcnMoYm91bmRzKTsKICAgICB9CiAKICAg
ICBib29sIGlzRW1wdHkoKQpAQCAtMTQ0LDEyICsxNzYsMTIgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBwdXNoQ29tcG9zaXRpbmdDb250YWluZXIoKQogICAgIHsKLSAgICAgICAgbV9vdmVybGFwU3Rh
Y2suYXBwZW5kKFJlY3RMaXN0KCkpOworICAgICAgICBtX292ZXJsYXBTdGFjay5hcHBlbmQoT3Zl
cmxhcE1hcENvbnRhaW5lcigpKTsKICAgICB9CiAKICAgICB2b2lkIHBvcENvbXBvc2l0aW5nQ29u
dGFpbmVyKCkKICAgICB7Ci0gICAgICAgIG1fb3ZlcmxhcFN0YWNrW21fb3ZlcmxhcFN0YWNrLnNp
emUoKSAtIDJdLmFwcGVuZChtX292ZXJsYXBTdGFjay5sYXN0KCkpOworICAgICAgICBtX292ZXJs
YXBTdGFja1ttX292ZXJsYXBTdGFjay5zaXplKCkgLSAyXS51bml0ZShtX292ZXJsYXBTdGFjay5s
YXN0KCkpOwogICAgICAgICBtX292ZXJsYXBTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgfQogCkBA
IC0xODUsNyArMjE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH07CiAKLSAgICBWZWN0
b3I8UmVjdExpc3Q+IG1fb3ZlcmxhcFN0YWNrOworICAgIFZlY3RvcjxPdmVybGFwTWFwQ29udGFp
bmVyPiBtX292ZXJsYXBTdGFjazsKICAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckxheWVyKj4gbV9s
YXllcnM7CiAgICAgUmVuZGVyR2VvbWV0cnlNYXAgbV9nZW9tZXRyeU1hcDsKIH07CkBAIC0xMDkw
LDEyICsxMTIyLDE5IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG8K
ICAgICAKICAgICAvLyBDbGVhciB0aGUgZmxhZwogICAgIGxheWVyLnNldEhhc0NvbXBvc2l0aW5n
RGVzY2VuZGFudChmYWxzZSk7CisgICAgbGF5ZXIuc2V0SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
bihSZW5kZXJMYXllcjo6Tm9JbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKTsKIAotICAgIFJlbmRl
ckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIGNvbXBvc2l0aW5nUmVhc29uID0gY29t
cG9zaXRpbmdTdGF0ZS5tX3N1YnRyZWVJc0NvbXBvc2l0aW5nID8gUmVuZGVyTGF5ZXI6OkluZGly
ZWN0Q29tcG9zaXRpbmdGb3JTdGFja2luZyA6IFJlbmRlckxheWVyOjpOb0luZGlyZWN0Q29tcG9z
aXRpbmdSZWFzb247CisgICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVyIG5lZWRzIHRvIGJlIGNvbXBv
c2l0ZWQgZm9yIG5vbi1pbmRpcmVjdCByZWFzb25zIChleC4gM0QgdHJhbnNmb3JtKS4KKyAgICAv
LyBXZSB1c2UgdGhpcyB2YWx1ZSB0byBhdm9pZCBjaGVja2luZyB0aGUgb3ZlcmxhcC1tYXAsIGlm
IHdlIGtub3cgZm9yIHN1cmUgdGhlIGxheWVyCisgICAgLy8gaXMgYWxyZWFkeSBnb2luZyB0byBi
ZSBjb21wb3NpdGVkIGZvciBvdGhlciByZWFzb25zLgorICAgIGJvb2wgd2lsbEJlQ29tcG9zaXRl
ZCA9IG5lZWRzVG9CZUNvbXBvc2l0ZWQobGF5ZXIpOwogCisgICAgUmVuZGVyTGF5ZXI6OkluZGly
ZWN0Q29tcG9zaXRpbmdSZWFzb24gY29tcG9zaXRpbmdSZWFzb24gPSBjb21wb3NpdGluZ1N0YXRl
Lm1fc3VidHJlZUlzQ29tcG9zaXRpbmcgPyBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGlu
Z0ZvclN0YWNraW5nIDogUmVuZGVyTGF5ZXI6Ok5vSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjsK
ICAgICBib29sIGhhdmVDb21wdXRlZEJvdW5kcyA9IGZhbHNlOwogICAgIEludFJlY3QgYWJzQm91
bmRzOwotICAgIGlmIChvdmVybGFwTWFwICYmICFvdmVybGFwTWFwLT5pc0VtcHR5KCkgJiYgY29t
cG9zaXRpbmdTdGF0ZS5tX3Rlc3RpbmdPdmVybGFwKSB7CisKKyAgICAvLyBJZiB3ZSBrbm93IGZv
ciBzdXJlIHRoZSBsYXllciBpcyBnb2luZyB0byBiZSBjb21wb3NpdGVkLCBkb24ndCBib3RoZXIg
bG9va2luZyBpdCB1cCBpbiB0aGUgb3ZlcmxhcCBtYXAKKyAgICBpZiAoIXdpbGxCZUNvbXBvc2l0
ZWQgJiYgb3ZlcmxhcE1hcCAmJiAhb3ZlcmxhcE1hcC0+aXNFbXB0eSgpICYmIGNvbXBvc2l0aW5n
U3RhdGUubV90ZXN0aW5nT3ZlcmxhcCkgewogICAgICAgICAvLyBJZiB3ZSdyZSB0ZXN0aW5nIGZv
ciBvdmVybGFwLCB3ZSBvbmx5IG5lZWQgdG8gY29tcG9zaXRlIGlmIHdlIG92ZXJsYXAgc29tZXRo
aW5nIHRoYXQgaXMgYWxyZWFkeSBjb21wb3NpdGVkLgogICAgICAgICBhYnNCb3VuZHMgPSBlbmNs
b3NpbmdJbnRSZWN0KG92ZXJsYXBNYXAtPmdlb21ldHJ5TWFwKCkuYWJzb2x1dGVSZWN0KGxheWVy
Lm92ZXJsYXBCb3VuZHMoKSkpOwogCkBAIC0xMTE3LDYgKzExNTYsMTEgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wbwogCiAgICAgbGF5ZXIuc2V0SW5kaXJlY3RDb21w
b3NpdGluZ1JlYXNvbihjb21wb3NpdGluZ1JlYXNvbik7CiAKKyAgICAvLyBDaGVjayBpZiB0aGUg
Y29tcHV0ZWQgaW5kaXJlY3QgcmVhc29uIHdpbGwgZm9yY2UgdGhlIGxheWVyIHRvIGJlY29tZSBj
b21wb3NpdGVkLgorICAgIGlmICghd2lsbEJlQ29tcG9zaXRlZCAmJiBsYXllci5tdXN0Q29tcG9z
aXRlRm9ySW5kaXJlY3RSZWFzb25zKCkgJiYgY2FuQmVDb21wb3NpdGVkKGxheWVyKSkKKyAgICAg
ICAgd2lsbEJlQ29tcG9zaXRlZCA9IHRydWU7CisgICAgQVNTRVJUKHdpbGxCZUNvbXBvc2l0ZWQg
PT0gbmVlZHNUb0JlQ29tcG9zaXRlZChsYXllcikpOworCiAgICAgLy8gVGhlIGNoaWxkcmVuIG9m
IHRoaXMgbGF5ZXIgZG9uJ3QgbmVlZCB0byBjb21wb3NpdGUsIHVubGVzcyB0aGVyZSBpcwogICAg
IC8vIGEgY29tcG9zaXRpbmcgbGF5ZXIgYW1vbmcgdGhlbSwgc28gc3RhcnQgYnkgaW5oZXJpdGlu
ZyB0aGUgY29tcG9zaXRpbmcKICAgICAvLyBhbmNlc3RvciB3aXRoIG1fc3VidHJlZUlzQ29tcG9z
aXRpbmcgc2V0IHRvIGZhbHNlLgpAQCAtMTEyNiw3ICsxMTcwLDYgQEAgdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wbwogICAgIGNoaWxkU3RhdGUubV9oYXNVbmlzb2xhdGVk
Q29tcG9zaXRlZEJsZW5kaW5nRGVzY2VuZGFudHMgPSBmYWxzZTsKICNlbmRpZgogCi0gICAgYm9v
bCB3aWxsQmVDb21wb3NpdGVkID0gbmVlZHNUb0JlQ29tcG9zaXRlZChsYXllcik7CiAgICAgaWYg
KHdpbGxCZUNvbXBvc2l0ZWQpIHsKICAgICAgICAgLy8gVGVsbCB0aGUgcGFyZW50IGl0IGhhcyBj
b21wb3NpdGluZyBkZXNjZW5kYW50cy4KICAgICAgICAgY29tcG9zaXRpbmdTdGF0ZS5tX3N1YnRy
ZWVJc0NvbXBvc2l0aW5nID0gdHJ1ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>