<?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>89828</bug_id>
          
          <creation_ts>2012-06-24 07:04:39 -0700</creation_ts>
          <short_desc>Optimize RenderGeometryMap mappings gathering</short_desc>
          <delta_ts>2012-07-10 16:54:52 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>656198</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 07:04:39 -0700</bug_when>
    <thetext>RenderGeometryMap currently gathers mappings by climbing the rendering tree. This is slow and can produce large number of mapping steps. In the common case we already have the child layer coordinates available in the layer tree and we can just use that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656199</commentid>
    <comment_count>1</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 07:18:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/10559009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656213</commentid>
    <comment_count>2</comment_count>
      <attachid>149194</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 10:00:51 -0700</bug_when>
    <thetext>Created attachment 149194
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656214</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-24 10:04:16 -0700</bug_when>
    <thetext>Attachment 149194 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.h:483:  Line contains only semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656250</commentid>
    <comment_count>4</comment_count>
      <attachid>149194</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-24 14:53:17 -0700</bug_when>
    <thetext>Comment on attachment 149194
patch

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

&gt; Source/WebCore/rendering/RenderGeometryMap.cpp:182
&gt; +    if (ancestorLayer &amp;&amp; layer-&gt;canUseConvertToLayerCoords() &amp;&amp; renderer-&gt;style()-&gt;position() != FixedPosition) {

Doesn&apos;t this need to check canUseConvertToLayerCoords() on all layers between layer and ancestorLayer? There&apos;s no guarantee that ancestorLayer is an immediate ancestor.

&gt; Source/WebCore/rendering/RenderGeometryMap.h:52
&gt; +    // Called by code walking the layer tree.
&gt; +    void pushMappingsToAncestor(const RenderLayer*, const RenderLayer* ancestorLayer);
&gt; +    void popMappingsToAncestor(const RenderLayer*);

I&apos;d like to keep versions that are renderer-based, so we can call them from absoluteRects()/absoluteQuads() at some point (we already know of cases where these are a bottleneck).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656251</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-24 14:54:32 -0700</bug_when>
    <thetext>Also, I think we should try to wean ourselves off of convertToLayerCoords in the long term, since it would be better to have one way to do coordinate math that always &quot;just works&quot;, rather than checking whether it&apos;s OK to call it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656257</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 16:13:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Doesn&apos;t this need to check canUseConvertToLayerCoords() on all layers between layer and ancestorLayer? There&apos;s no guarantee that ancestorLayer is an immediate ancestor.

Sounds likely. Can you think of a way to test that case? The patch is logic pretty well tested due to 

    ASSERT(enclosingIntRect(rendererMappedResult) == enclosingIntRect(FloatQuad(result).boundingBox()));

in RenderGeometryMap::absoluteRect() and we don&apos;t hit the case in layout tests. 

&gt; I&apos;d like to keep versions that are renderer-based, so we can call them from absoluteRects()/absoluteQuads() at some point (we already know of cases where these are a bottleneck).

We don&apos;t usually leave around dead code. It is trivial to add back later. Are you planning to use it soon?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656258</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 16:15:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Also, I think we should try to wean ourselves off of convertToLayerCoords in the long term, since it would be better to have one way to do coordinate math that always &quot;just works&quot;, rather than checking whether it&apos;s OK to call it.

Sounds very sensible, this is not nice at all. The new scheme will need some sort of caching though, just walking up the rendering tree is pretty slow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656261</commentid>
    <comment_count>8</comment_count>
      <attachid>149206</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 16:57:14 -0700</bug_when>
    <thetext>Created attachment 149206
updated patch

- check that all layers between the current and the ancestor have canUseConvertToLayerCoords().
- put the renderer version of pushMappingsToAncestor back for future use</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656265</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-24 16:59:35 -0700</bug_when>
    <thetext>Attachment 149206 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/rendering/RenderLayer.h:483:  Line contains only semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656268</commentid>
    <comment_count>10</comment_count>
      <attachid>149206</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-24 17:05:21 -0700</bug_when>
    <thetext>Comment on attachment 149206
updated patch

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

&gt; Source/WebCore/rendering/RenderGeometryMap.cpp:190
&gt; +        canConvertInLayerTree = current-&gt;canUseConvertToLayerCoords();

Shouldn&apos;t this be &amp;= ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656275</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 17:13:51 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Shouldn&apos;t this be &amp;= ?

No need, we bail out from the loop if the variable turns false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656278</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 17:14:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/121124</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656330</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-24 19:17:32 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/121130 fixes an assert with fast/block/inline-children-root-linebox-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661061</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-30 11:07:19 -0700</bug_when>
    <thetext>This change caused RenderGeometryMap::pushView() to no longer get called. This might have broken compositing overlap testing inside of position:fixed, I&apos;m not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661062</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-30 11:10:07 -0700</bug_when>
    <thetext>        push(renderer, toLayoutSize(layerOffset), /*accumulatingTransform*/ true, /*isNonUniform*/ false, /*isFixedPosition*/ false, /*hasTransform*/ false);

accumulatingTransform should also be false; that refers to preserve-3d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661063</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-30 11:11:19 -0700</bug_when>
    <thetext>...and I think we need to check for position:fixed on intermediate layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661078</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-30 15:11:13 -0700</bug_when>
    <thetext>The assert in absoluteRect should verify that the results are identical to the old code across all our tests. I wonder if those cases don&apos;t occur for some reason? Or is the test coverage just weak?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661079</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-30 15:19:58 -0700</bug_when>
    <thetext>We&apos;d hae to have a test that has compositing layers inside position:fixed, with a scrolled page. We might not. Or maybe the breakage is benign so far (but I&apos;m making some changes that hit it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661085</commentid>
    <comment_count>19</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-30 15:58:36 -0700</bug_when>
    <thetext>The top level view will use pushView() due to the ancestorLayer test. I think the problems would be with scrolled subframes. Not sure if canUseConvertToLayerCoords test catches them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661086</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-30 15:59:16 -0700</bug_when>
    <thetext>pushView was never hit when using the convertToLayerCoords path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661087</commentid>
    <comment_count>21</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-30 16:04:25 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; pushView was never hit when using the convertToLayerCoords path.

Correct. The idea is to not take convertToLayerCoords path for the RenderViews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661088</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-30 16:16:34 -0700</bug_when>
    <thetext>Yeah. Push the RenderView alone, then push layer offsets from it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661098</commentid>
    <comment_count>23</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-30 16:45:51 -0700</bug_when>
    <thetext>The patch in bug 90342 has some relevant RenderGeometryMap changes (assertions and fixes), but not a fix for the pushView issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666167</commentid>
    <comment_count>24</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-07-10 16:54:52 -0700</bug_when>
    <thetext>This caused bug 90919.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149194</attachid>
            <date>2012-06-24 10:00:51 -0700</date>
            <delta_ts>2012-06-24 16:57:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>geometrymap-perf-4.patch</filename>
            <type>text/plain</type>
            <size>9914</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTExNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA2LTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZW5kZXJHZW9t
ZXRyeU1hcCBtYXBwaW5ncyBnYXRoZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg5ODI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuZGVyR2VvbWV0cnlNYXAgY3VycmVudGx5IGdhdGhlcnMgbWFw
cGluZ3MgYnkgY2xpbWJpbmcgdGhlIHJlbmRlcmluZyB0cmVlLiBUaGlzIGlzIHNsb3cgYW5kIGNh
biBwcm9kdWNlIAorICAgICAgICBsYXJnZSBudW1iZXIgb2YgbWFwcGluZyBzdGVwcy4gSW4gdGhl
IGNvbW1vbiBjYXNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgY2hpbGQgbGF5ZXIgY29vcmRpbmF0ZXMg
YXZhaWxhYmxlIGluCisgICAgICAgIHRoZSBsYXllciB0cmVlIGFuZCB3ZSBjYW4ganVzdCB1c2Ug
dGhhdC4KKyAgICAgICAgCisgICAgICAgIFRoZSBjb21iaW5hdGlvbiBvZiBmYXN0ZXIgbWFwcGlu
Z3MgZ2F0aGVyaW5nIGFuZCBmZXdlciBudW1iZXIgb2YgYXBwbHlpbmcgc3RlcHMgcmVkdWNlcyB0
aW1lIHNwZW50IHVuZGVyIAorICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVD
b21wb3NpdGluZ1JlcXVpcmVtZW50cyB0byBsZXNzIHRoYW4gaGFsZiB3aGVuIHNjcm9sbGluZyB0
aGUgbW9iaWxlIHZlcnNpb24KKyAgICAgICAgb2YgdHdpdHRlci5jb20uCisgICAgICAgIAorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFwOjpwdXNoTWFwcGluZ3NUb0Fu
Y2VzdG9yKToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgcHJlLWNvbXB1dGVkIG1hcHBpbmcg
ZnJvbSB0aGUgbGF5ZXIgdHJlZSB3aGVuIHBvc3NpYmxlLgorCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJHZW9tZXRyeU1hcDo6cG9wTWFwcGluZ3NUb0FuY2VzdG9yKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaDoKKyAgICAgICAgCisgICAgICAgICAgICBBZGQgc29t
ZSBpbmxpbmUgY2FwYWNpdHkuCisKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVuZGVy
R2VvbWV0cnlNYXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhblVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKToKKyAg
ICAgICAgKFJlbmRlckxheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRk
VG9PdmVybGFwTWFwUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKToKKwogMjAxMi0wNi0yNCAg
UGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzcGVlZCB1cCBUaW1lbGluZSBhbmQgRWxlbWVudHMgcGFuZWwgcmVuZGVyaW5nCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5jcHAJ
KHJldmlzaW9uIDEyMTEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9t
ZXRyeU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFwLmgiCiAKKyNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1TdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0KIC8vIFN0b3JlcyBkYXRhIGFib3V0IGhvdyB0byBtYXAgZnJvbSBvbmUg
cmVuZGVyZXIgdG8gaXRzIGNvbnRhaW5lci4KIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwU3RlcCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyR2VvbWV0cnlNYXBTdGVwKTsKQEAgLTE3
MCwxOCArMTcxLDI0IEBAIHZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRvQWJzb2x1dGUoVHIK
ICAgICB0cmFuc2Zvcm1TdGF0ZS5mbGF0dGVuKCk7ICAgIAogfQogCi12b2lkIFJlbmRlckdlb21l
dHJ5TWFwOjpwdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvcikKK3ZvaWQgUmVuZGVyR2Vv
bWV0cnlNYXA6OnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVy
LCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikKIHsKLSAgICBjb25zdCBSZW5kZXJP
YmplY3QqIGN1cnJSZW5kZXJlciA9IHJlbmRlcmVyOworICAgIGNvbnN0IFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKICAgICAKICAgICAvLyBXZSBuZWVkIHRvIHB1
c2ggbWFwcGluZ3MgaW4gcmV2ZXJzZSBvcmRlciBoZXJlLCBzbyBkbyBpbnNlcnRpb25zIHJhdGhl
ciB0aGFuIGFwcGVuZHMuCi0gICAgbV9pbnNlcnRpb25Qb3NpdGlvbiA9IG1fbWFwcGluZy5zaXpl
KCk7Ci0gICAgCisgICAgVGVtcG9yYXJ5Q2hhbmdlPHNpemVfdD4gcG9zaXRpb25DaGFuZ2UobV9p
bnNlcnRpb25Qb3NpdGlvbiwgbV9tYXBwaW5nLnNpemUoKSk7CisKKyAgICAvLyBUaGUgc2ltcGxl
IGNhc2UgY2FuIGJlIGhhbmRsZWQgZmFzdCBpbiB0aGUgbGF5ZXIgdHJlZS4KKyAgICBpZiAoYW5j
ZXN0b3JMYXllciAmJiBsYXllci0+Y2FuVXNlQ29udmVydFRvTGF5ZXJDb29yZHMoKSAmJiByZW5k
ZXJlci0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKSB7CisgICAgICAgIExh
eW91dFBvaW50IGxheWVyT2Zmc2V0OworICAgICAgICBsYXllci0+Y29udmVydFRvTGF5ZXJDb29y
ZHMoYW5jZXN0b3JMYXllciwgbGF5ZXJPZmZzZXQpOworICAgICAgICBwdXNoKHJlbmRlcmVyLCB0
b0xheW91dFNpemUobGF5ZXJPZmZzZXQpLCAvKmFjY3VtdWxhdGluZ1RyYW5zZm9ybSovIHRydWUs
IC8qaXNOb25Vbmlmb3JtKi8gZmFsc2UsIC8qaXNGaXhlZFBvc2l0aW9uKi8gZmFsc2UsIC8qaGFz
VHJhbnNmb3JtKi8gZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IFJl
bmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclJlbmRlcmVyID0gYW5jZXN0b3JMYXllciA/IGFu
Y2VzdG9yTGF5ZXItPnJlbmRlcmVyKCkgOiAwOwogICAgIGRvIHsKLSAgICAgICAgY3VyclJlbmRl
cmVyID0gY3VyclJlbmRlcmVyLT5wdXNoTWFwcGluZ1RvQ29udGFpbmVyKGFuY2VzdG9yLCAqdGhp
cyk7Ci0gICAgfSB3aGlsZSAoY3VyclJlbmRlcmVyICYmIGN1cnJSZW5kZXJlciAhPSBhbmNlc3Rv
cik7Ci0gICAgCi0gICAgbV9pbnNlcnRpb25Qb3NpdGlvbiA9IG5vdEZvdW5kOworICAgICAgICBy
ZW5kZXJlciA9IHJlbmRlcmVyLT5wdXNoTWFwcGluZ1RvQ29udGFpbmVyKGFuY2VzdG9yUmVuZGVy
ZXIsICp0aGlzKTsKKyAgICB9IHdoaWxlIChyZW5kZXJlciAmJiByZW5kZXJlciAhPSBhbmNlc3Rv
clJlbmRlcmVyKTsKIH0KIAogdm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6cHVzaChjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tQ29udGFpbmVy
LCBib29sIGFjY3VtdWxhdGluZ1RyYW5zZm9ybSwgYm9vbCBpc05vblVuaWZvcm0sIGJvb2wgaXNG
aXhlZFBvc2l0aW9uLCBib29sIGhhc1RyYW5zZm9ybSkKQEAgLTIyMCwxMSArMjI3LDEyIEBAIHZv
aWQgUmVuZGVyR2VvbWV0cnlNYXA6OnB1c2hWaWV3KGNvbnN0IFIKICAgICBtX21hcHBpbmcuaW5z
ZXJ0KG1faW5zZXJ0aW9uUG9zaXRpb24sIHN0ZXAucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBSZW5k
ZXJHZW9tZXRyeU1hcDo6cG9wTWFwcGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlckJveE1vZGVs
T2JqZWN0KiBhbmNlc3RvcikKK3ZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6OnBvcE1hcHBpbmdzVG9B
bmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikKIHsKICAgICBBU1NFUlQo
bV9tYXBwaW5nLnNpemUoKSk7CiAKLSAgICB3aGlsZSAobV9tYXBwaW5nLnNpemUoKSAmJiBtX21h
cHBpbmcubGFzdCgpLT5tX3JlbmRlcmVyICE9IGFuY2VzdG9yKSB7CisgICAgY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGFuY2VzdG9yUmVuZGVyZXIgPSBhbmNlc3RvckxheWVyID8gYW5jZXN0
b3JMYXllci0+cmVuZGVyZXIoKSA6IDA7CisgICAgd2hpbGUgKG1fbWFwcGluZy5zaXplKCkgJiYg
bV9tYXBwaW5nLmxhc3QoKS0+bV9yZW5kZXJlciAhPSBhbmNlc3RvclJlbmRlcmVyKSB7CiAgICAg
ICAgIHN0ZXBSZW1vdmVkKCptX21hcHBpbmcubGFzdCgpLmdldCgpKTsKICAgICAgICAgbV9tYXBw
aW5nLnJlbW92ZUxhc3QoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyR2VvbWV0cnlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyR2VvbWV0cnlNYXAuaAkocmV2aXNpb24gMTIxMTA1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXBT
dGVwOworY2xhc3MgUmVuZGVyTGF5ZXI7CiAKIC8vIENhbiBiZSB1c2VkIHdoaWxlIHdhbGtpbmcg
dGhlIFJlbmRlcmVyIHRyZWUgdG8gY2FjaGUgZGF0YSBhYm91dCBvZmZzZXRzIGFuZCB0cmFuc2Zv
cm1zLgogY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXAgewpAQCAtNDYsOSArNDcsOSBAQCBwdWJsaWM6
CiAgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsK
ICAgICBGbG9hdFJlY3QgYWJzb2x1dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAg
IAotICAgIC8vIENhbGxlZCBieSBjb2RlIHdhbGtpbmcgdGhlIHJlbmRlcmVyIG9yIGxheWVyIHRy
ZWVzLgotICAgIHZvaWQgcHVzaE1hcHBpbmdzVG9BbmNlc3Rvcihjb25zdCBSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3IpOwotICAgIHZvaWQgcG9wTWFw
cGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0Kik7CisgICAgLy8gQ2Fs
bGVkIGJ5IGNvZGUgd2Fsa2luZyB0aGUgbGF5ZXIgdHJlZS4KKyAgICB2b2lkIHB1c2hNYXBwaW5n
c1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0
b3JMYXllcik7CisgICAgdm9pZCBwb3BNYXBwaW5nc1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5
ZXIqKTsKICAgICAKICAgICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGJ5IHJlbmRlcmVycyBpbnNpZGUgYSBjYWxsIHRvIHB1c2hNYXBwaW5nc1RvQW5jZXN0
b3IoKS4KIApAQCAtNzAsOCArNzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzVHJhbnNmb3Jt
U3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtZWRTdGVwc0NvdW50OyB9CiAgICAgYm9v
bCBoYXNGaXhlZFBvc2l0aW9uU3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRTdGVwc0NvdW50
OyB9CiAgICAgCi0gICAgdHlwZWRlZiBWZWN0b3I8T3duUHRyPFJlbmRlckdlb21ldHJ5TWFwU3Rl
cD4gPiBSZW5kZXJHZW9tZXRyeU1hcFN0ZXBzOyAvLyBGSVhNRTogaW5saW5lIGNhcGFjaXR5Pwot
ICAgIAorICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxSZW5kZXJHZW9tZXRyeU1hcFN0ZXA+LCAz
Mj4gUmVuZGVyR2VvbWV0cnlNYXBTdGVwczsKKwogICAgIHNpemVfdCBtX2luc2VydGlvblBvc2l0
aW9uOwogICAgIGludCBtX25vblVuaWZvcm1TdGVwc0NvdW50OwogICAgIGludCBtX3RyYW5zZm9y
bWVkU3RlcHNDb3VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CShyZXZpc2lvbiAxMjExMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDczLDYgKzQ3MywxNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRGaWx0ZXJCYWNrZW5kTmVlZHNSZXBhaW50aW5nSW5SZWN0KGNvbnN0IExheW91dFJlY3Qm
LCBib29sIGltbWVkaWF0ZSk7CiAjZW5kaWYKIAorICAgIGJvb2wgY2FuVXNlQ29udmVydFRvTGF5
ZXJDb29yZHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhlc2UgUmVuZGVyT2JqZWN0IGhh
dmUgYW4gaW1wYWN0IG9uIHRoZWlyIGxheWVycycgd2l0aG91dCB0aGVtIGtub3dpbmcgYWJvdXQg
aXQuCisgICAgICAgIHJldHVybiAhcmVuZGVyZXIoKS0+aGFzQ29sdW1ucygpICYmICFyZW5kZXJl
cigpLT5oYXNUcmFuc2Zvcm0oKSAmJiAhaXNDb21wb3NpdGVkKCkKKyNpZiBFTkFCTEUoU1ZHKQor
ICAgICAgICAgICAgJiYgIXJlbmRlcmVyKCktPmlzU1ZHUm9vdCgpCisjZW5kaWYKKyAgICAgICAg
ICAgIDsKKyAgICB9CisKICAgICB2b2lkIGNvbnZlcnRUb1BpeGVsU25hcHBlZExheWVyQ29vcmRz
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBJbnRQb2ludCYgbG9jYXRpb24pIGNv
bnN0OwogICAgIHZvaWQgY29udmVydFRvUGl4ZWxTbmFwcGVkTGF5ZXJDb29yZHMoY29uc3QgUmVu
ZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIEludFJlY3QmKSBjb25zdDsKICAgICB2b2lkIGNvbnZl
cnRUb0xheWVyQ29vcmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBMYXlvdXRQ
b2ludCYgbG9jYXRpb24pIGNvbnN0OwpAQCAtODU4LDE2ICs4NjgsNiBAQCBwcml2YXRlOgogICAg
IExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxv
d1JpZ2h0KCkgY29uc3Q7CiAKLSAgICBib29sIGNhblVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoZXNlIFJlbmRlck9iamVjdCBoYXZlIGFuIGltcGFj
dCBvbiB0aGVpciBsYXllcnMnIHdpdGhvdXQgdGhlbSBrbm93aW5nIGFib3V0IGl0LgotICAgICAg
ICByZXR1cm4gIXJlbmRlcmVyKCktPmhhc0NvbHVtbnMoKSAmJiAhcmVuZGVyZXIoKS0+aGFzVHJh
bnNmb3JtKCkgJiYgIWlzQ29tcG9zaXRlZCgpCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgICAg
ICYmICFyZW5kZXJlcigpLT5pc1NWR1Jvb3QoKQotI2VuZGlmCi0gICAgICAgICAgICA7Ci0gICAg
fQotCiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNjcm9sbGJhclN0YXJ0KGludCBtaW5YLCBpbnQg
bWF4WCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsU2Nyb2xsYmFyU3RhcnQoaW50
IG1pblgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gMTIxMTA1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3MSw3ICs2NzEsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVy
bGFwCiAKICAgICAvLyBBIG51bGwgYW5jZXN0b3JMYXllciBpcyBhbiBpbmRpY2F0aW9uIHRoYXQg
J2xheWVyJyBoYXMgYWxyZWFkeSBiZWVuIHB1c2hlZC4KICAgICBpZiAoYW5jZXN0b3JMYXllcikK
LSAgICAgICAgb3ZlcmxhcE1hcC5nZW9tZXRyeU1hcCgpLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3Io
bGF5ZXItPnJlbmRlcmVyKCksIGFuY2VzdG9yTGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBv
dmVybGFwTWFwLmdlb21ldHJ5TWFwKCkucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihsYXllciwgYW5j
ZXN0b3JMYXllcik7CiAgICAgCiAgICAgSW50UmVjdCBib3VuZHM7CiAgICAgYm9vbCBoYXZlQ29t
cHV0ZWRCb3VuZHMgPSBmYWxzZTsKQEAgLTcxMCw3ICs3MTAsNyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YWRkVG9PdmVybGFwCiAgICAgfQogICAgIAogICAgIGlmIChhbmNlc3Rvckxh
eWVyKQotICAgICAgICBvdmVybGFwTWFwLmdlb21ldHJ5TWFwKCkucG9wTWFwcGluZ3NUb0FuY2Vz
dG9yKGFuY2VzdG9yTGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBvdmVybGFwTWFwLmdlb21l
dHJ5TWFwKCkucG9wTWFwcGluZ3NUb0FuY2VzdG9yKGFuY2VzdG9yTGF5ZXIpOwogfQogCiAvLyAg
UmVjdXJzZSB0aHJvdWdoIHRoZSBsYXllcnMgaW4gei1pbmRleCBhbmQgb3ZlcmZsb3cgb3JkZXIg
KHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gcGFpbnRpbmcgb3JkZXIpCkBAIC03MjcsNyArNzI3LDcg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wbwogICAgIGxheWVyLT51
cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKICAgICAKICAgICBpZiAob3ZlcmxhcE1hcCkKLSAg
ICAgICAgb3ZlcmxhcE1hcC0+Z2VvbWV0cnlNYXAoKS5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGxh
eWVyLT5yZW5kZXJlcigpLCBhbmNlc3RvckxheWVyID8gYW5jZXN0b3JMYXllci0+cmVuZGVyZXIo
KSA6IDApOworICAgICAgICBvdmVybGFwTWFwLT5nZW9tZXRyeU1hcCgpLnB1c2hNYXBwaW5nc1Rv
QW5jZXN0b3IobGF5ZXIsIGFuY2VzdG9yTGF5ZXIpOwogICAgIAogICAgIC8vIENsZWFyIHRoZSBm
bGFnCiAgICAgbGF5ZXItPnNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChmYWxzZSk7CkBAIC05
MTAsNyArOTEwLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wbwog
ICAgIGRlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSB8PSBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zv
cm0gfHwgbGF5ZXItPmhhczNEVHJhbnNmb3JtKCk7CiAKICAgICBpZiAob3ZlcmxhcE1hcCkKLSAg
ICAgICAgb3ZlcmxhcE1hcC0+Z2VvbWV0cnlNYXAoKS5wb3BNYXBwaW5nc1RvQW5jZXN0b3IoYW5j
ZXN0b3JMYXllciA/IGFuY2VzdG9yTGF5ZXItPnJlbmRlcmVyKCkgOiAwKTsKKyAgICAgICAgb3Zl
cmxhcE1hcC0+Z2VvbWV0cnlNYXAoKS5wb3BNYXBwaW5nc1RvQW5jZXN0b3IoYW5jZXN0b3JMYXll
cik7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRDb21wb3NpdGluZ1BhcmVu
dChSZW5kZXJMYXllciogY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149206</attachid>
            <date>2012-06-24 16:57:14 -0700</date>
            <delta_ts>2012-06-24 17:05:20 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>geometrymap-perf-5.patch</filename>
            <type>text/plain</type>
            <size>10746</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTExNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA2LTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZW5kZXJHZW9t
ZXRyeU1hcCBtYXBwaW5ncyBnYXRoZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg5ODI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuZGVyR2VvbWV0cnlNYXAgY3VycmVudGx5IGdhdGhlcnMgbWFw
cGluZ3MgYnkgY2xpbWJpbmcgdGhlIHJlbmRlcmluZyB0cmVlLiBUaGlzIGlzIHNsb3cgYW5kIGNh
biBwcm9kdWNlIAorICAgICAgICBsYXJnZSBudW1iZXIgb2YgbWFwcGluZyBzdGVwcy4gSW4gdGhl
IGNvbW1vbiBjYXNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgY2hpbGQgbGF5ZXIgY29vcmRpbmF0ZXMg
YXZhaWxhYmxlIGluCisgICAgICAgIHRoZSBsYXllciB0cmVlIGFuZCB3ZSBjYW4ganVzdCB1c2Ug
dGhhdC4KKyAgICAgICAgCisgICAgICAgIFRoZSBjb21iaW5hdGlvbiBvZiBmYXN0ZXIgbWFwcGlu
Z3MgZ2F0aGVyaW5nIGFuZCBmZXdlciBudW1iZXIgb2YgYXBwbHlpbmcgc3RlcHMgcmVkdWNlcyB0
aW1lIHNwZW50IHVuZGVyIAorICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVD
b21wb3NpdGluZ1JlcXVpcmVtZW50cyB0byBsZXNzIHRoYW4gaGFsZiB3aGVuIHNjcm9sbGluZyB0
aGUgbW9iaWxlIHZlcnNpb24KKyAgICAgICAgb2YgdHdpdHRlci5jb20uCisgICAgICAgIAorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFwOjpwdXNoTWFwcGluZ3NUb0Fu
Y2VzdG9yKToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgcHJlLWNvbXB1dGVkIG1hcHBpbmcg
ZnJvbSB0aGUgbGF5ZXIgdHJlZSB3aGVuIHBvc3NpYmxlLgorCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJHZW9tZXRyeU1hcDo6cG9wTWFwcGluZ3NUb0FuY2VzdG9yKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaDoKKyAgICAgICAgCisgICAgICAgICAgICBBZGQgc29t
ZSBpbmxpbmUgY2FwYWNpdHkuCisKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVuZGVy
R2VvbWV0cnlNYXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhblVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKToKKyAg
ICAgICAgKFJlbmRlckxheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRk
VG9PdmVybGFwTWFwUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKToKKwogMjAxMi0wNi0yNCAg
UGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzcGVlZCB1cCBUaW1lbGluZSBhbmQgRWxlbWVudHMgcGFuZWwgcmVuZGVyaW5nCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5jcHAJ
KHJldmlzaW9uIDEyMTEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9t
ZXRyeU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFwLmgiCiAKKyNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1TdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0KIC8vIFN0b3JlcyBkYXRhIGFib3V0IGhvdyB0byBtYXAgZnJvbSBvbmUg
cmVuZGVyZXIgdG8gaXRzIGNvbnRhaW5lci4KIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwU3RlcCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyR2VvbWV0cnlNYXBTdGVwKTsKQEAgLTE3
MCwxOCArMTcxLDMzIEBAIHZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6Om1hcFRvQWJzb2x1dGUoVHIK
ICAgICB0cmFuc2Zvcm1TdGF0ZS5mbGF0dGVuKCk7ICAgIAogfQogCi12b2lkIFJlbmRlckdlb21l
dHJ5TWFwOjpwdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvcikKK3ZvaWQgUmVuZGVyR2Vv
bWV0cnlNYXA6OnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yUmVuZGVyZXIpCiB7Ci0g
ICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyUmVuZGVyZXIgPSByZW5kZXJlcjsKLSAgICAKICAg
ICAvLyBXZSBuZWVkIHRvIHB1c2ggbWFwcGluZ3MgaW4gcmV2ZXJzZSBvcmRlciBoZXJlLCBzbyBk
byBpbnNlcnRpb25zIHJhdGhlciB0aGFuIGFwcGVuZHMuCi0gICAgbV9pbnNlcnRpb25Qb3NpdGlv
biA9IG1fbWFwcGluZy5zaXplKCk7Ci0gICAgCisgICAgVGVtcG9yYXJ5Q2hhbmdlPHNpemVfdD4g
cG9zaXRpb25DaGFuZ2UobV9pbnNlcnRpb25Qb3NpdGlvbiwgbV9tYXBwaW5nLnNpemUoKSk7CiAg
ICAgZG8gewotICAgICAgICBjdXJyUmVuZGVyZXIgPSBjdXJyUmVuZGVyZXItPnB1c2hNYXBwaW5n
VG9Db250YWluZXIoYW5jZXN0b3IsICp0aGlzKTsKLSAgICB9IHdoaWxlIChjdXJyUmVuZGVyZXIg
JiYgY3VyclJlbmRlcmVyICE9IGFuY2VzdG9yKTsKLSAgICAKLSAgICBtX2luc2VydGlvblBvc2l0
aW9uID0gbm90Rm91bmQ7CisgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnB1c2hNYXBwaW5n
VG9Db250YWluZXIoYW5jZXN0b3JSZW5kZXJlciwgKnRoaXMpOworICAgIH0gd2hpbGUgKHJlbmRl
cmVyICYmIHJlbmRlcmVyICE9IGFuY2VzdG9yUmVuZGVyZXIpOworfQorCit2b2lkIFJlbmRlckdl
b21ldHJ5TWFwOjpwdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
ciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpCit7CisgICAgY29uc3QgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOworCisgICAgLy8gVGhlIHNpbXBs
ZSBjYXNlIGNhbiBiZSBoYW5kbGVkIGZhc3QgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgYm9vbCBj
YW5Db252ZXJ0SW5MYXllclRyZWUgPSBhbmNlc3RvckxheWVyICYmIHJlbmRlcmVyLT5zdHlsZSgp
LT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb247CisgICAgZm9yIChjb25zdCBSZW5kZXJMYXll
ciogY3VycmVudCA9IGxheWVyOyBjdXJyZW50ICE9IGFuY2VzdG9yTGF5ZXIgJiYgY2FuQ29udmVy
dEluTGF5ZXJUcmVlOyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCkpCisgICAgICAgIGNhbkNv
bnZlcnRJbkxheWVyVHJlZSA9IGN1cnJlbnQtPmNhblVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKCk7
CisKKyAgICBpZiAoY2FuQ29udmVydEluTGF5ZXJUcmVlKSB7CisgICAgICAgIFRlbXBvcmFyeUNo
YW5nZTxzaXplX3Q+IHBvc2l0aW9uQ2hhbmdlKG1faW5zZXJ0aW9uUG9zaXRpb24sIG1fbWFwcGlu
Zy5zaXplKCkpOworICAgICAgICBMYXlvdXRQb2ludCBsYXllck9mZnNldDsKKyAgICAgICAgbGF5
ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGxheWVyT2Zmc2V0KTsKKyAg
ICAgICAgcHVzaChyZW5kZXJlciwgdG9MYXlvdXRTaXplKGxheWVyT2Zmc2V0KSwgLyphY2N1bXVs
YXRpbmdUcmFuc2Zvcm0qLyB0cnVlLCAvKmlzTm9uVW5pZm9ybSovIGZhbHNlLCAvKmlzRml4ZWRQ
b3NpdGlvbiovIGZhbHNlLCAvKmhhc1RyYW5zZm9ybSovIGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JSZW5kZXJl
ciA9IGFuY2VzdG9yTGF5ZXIgPyBhbmNlc3RvckxheWVyLT5yZW5kZXJlcigpIDogMDsKKyAgICBw
dXNoTWFwcGluZ3NUb0FuY2VzdG9yKHJlbmRlcmVyLCBhbmNlc3RvclJlbmRlcmVyKTsKIH0KIAog
dm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6cHVzaChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tQ29udGFpbmVyLCBib29sIGFjY3VtdWxhdGlu
Z1RyYW5zZm9ybSwgYm9vbCBpc05vblVuaWZvcm0sIGJvb2wgaXNGaXhlZFBvc2l0aW9uLCBib29s
IGhhc1RyYW5zZm9ybSkKQEAgLTIyMCwxNiArMjM2LDIyIEBAIHZvaWQgUmVuZGVyR2VvbWV0cnlN
YXA6OnB1c2hWaWV3KGNvbnN0IFIKICAgICBtX21hcHBpbmcuaW5zZXJ0KG1faW5zZXJ0aW9uUG9z
aXRpb24sIHN0ZXAucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6cG9w
TWFwcGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvcikK
K3ZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6OnBvcE1hcHBpbmdzVG9BbmNlc3Rvcihjb25zdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JSZW5kZXJlcikKIHsKICAgICBBU1NFUlQobV9tYXBw
aW5nLnNpemUoKSk7CiAKLSAgICB3aGlsZSAobV9tYXBwaW5nLnNpemUoKSAmJiBtX21hcHBpbmcu
bGFzdCgpLT5tX3JlbmRlcmVyICE9IGFuY2VzdG9yKSB7CisgICAgd2hpbGUgKG1fbWFwcGluZy5z
aXplKCkgJiYgbV9tYXBwaW5nLmxhc3QoKS0+bV9yZW5kZXJlciAhPSBhbmNlc3RvclJlbmRlcmVy
KSB7CiAgICAgICAgIHN0ZXBSZW1vdmVkKCptX21hcHBpbmcubGFzdCgpLmdldCgpKTsKICAgICAg
ICAgbV9tYXBwaW5nLnJlbW92ZUxhc3QoKTsKICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyR2VvbWV0
cnlNYXA6OnBvcE1hcHBpbmdzVG9BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JM
YXllcikKK3sKKyAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JSZW5kZXJl
ciA9IGFuY2VzdG9yTGF5ZXIgPyBhbmNlc3RvckxheWVyLT5yZW5kZXJlcigpIDogMDsKKyAgICBw
b3BNYXBwaW5nc1RvQW5jZXN0b3IoYW5jZXN0b3JSZW5kZXJlcik7Cit9CisKIHZvaWQgUmVuZGVy
R2VvbWV0cnlNYXA6OnN0ZXBJbnNlcnRlZChjb25zdCBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAmIHN0
ZXApCiB7CiAgICAgLy8gT2Zmc2V0IG9uIHRoZSBmaXJzdCBzdGVwIGlzIHRoZSBSZW5kZXJWaWV3
J3Mgb2Zmc2V0LCB3aGljaCBpcyBvbmx5IGFwcGxpZWQgd2hlbiB3ZSBoYXZlIGZpeGVkLXBvc2l0
aW9uLnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1h
cC5oCShyZXZpc2lvbiAxMjExMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R2VvbWV0cnlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcFN0ZXA7CitjbGFzcyBSZW5kZXJM
YXllcjsKIAogLy8gQ2FuIGJlIHVzZWQgd2hpbGUgd2Fsa2luZyB0aGUgUmVuZGVyZXIgdHJlZSB0
byBjYWNoZSBkYXRhIGFib3V0IG9mZnNldHMgYW5kIHRyYW5zZm9ybXMuCiBjbGFzcyBSZW5kZXJH
ZW9tZXRyeU1hcCB7CkBAIC00Nyw3ICs0OCw5IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgYWJz
b2x1dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIAogICAgIC8vIENhbGxlZCBi
eSBjb2RlIHdhbGtpbmcgdGhlIHJlbmRlcmVyIG9yIGxheWVyIHRyZWVzLgotICAgIHZvaWQgcHVz
aE1hcHBpbmdzVG9BbmNlc3Rvcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJCb3hN
b2RlbE9iamVjdCogYW5jZXN0b3IpOworICAgIHZvaWQgcHVzaE1hcHBpbmdzVG9BbmNlc3Rvcihj
b25zdCBSZW5kZXJMYXllciosIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKTsKKyAg
ICB2b2lkIHBvcE1hcHBpbmdzVG9BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciopOworICAgIHZv
aWQgcHVzaE1hcHBpbmdzVG9BbmNlc3Rvcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JSZW5kZXJlcik7CiAgICAgdm9pZCBwb3BNYXBwaW5n
c1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqKTsKICAgICAKICAgICAvLyBU
aGUgZm9sbG93aW5nIG1ldGhvZHMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHJlbmRlcmVycyBp
bnNpZGUgYSBjYWxsIHRvIHB1c2hNYXBwaW5nc1RvQW5jZXN0b3IoKS4KQEAgLTcwLDggKzczLDgg
QEAgcHJpdmF0ZToKICAgICBib29sIGhhc1RyYW5zZm9ybVN0ZXAoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zZm9ybWVkU3RlcHNDb3VudDsgfQogICAgIGJvb2wgaGFzRml4ZWRQb3NpdGlvblN0ZXAo
KSBjb25zdCB7IHJldHVybiBtX2ZpeGVkU3RlcHNDb3VudDsgfQogICAgIAotICAgIHR5cGVkZWYg
VmVjdG9yPE93blB0cjxSZW5kZXJHZW9tZXRyeU1hcFN0ZXA+ID4gUmVuZGVyR2VvbWV0cnlNYXBT
dGVwczsgLy8gRklYTUU6IGlubGluZSBjYXBhY2l0eT8KLSAgICAKKyAgICB0eXBlZGVmIFZlY3Rv
cjxPd25QdHI8UmVuZGVyR2VvbWV0cnlNYXBTdGVwPiwgMzI+IFJlbmRlckdlb21ldHJ5TWFwU3Rl
cHM7CisKICAgICBzaXplX3QgbV9pbnNlcnRpb25Qb3NpdGlvbjsKICAgICBpbnQgbV9ub25Vbmlm
b3JtU3RlcHNDb3VudDsKICAgICBpbnQgbV90cmFuc2Zvcm1lZFN0ZXBzQ291bnQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTIxMTA1KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3Myw2ICs0NzMsMTYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RmlsdGVyQmFja2VuZE5lZWRz
UmVwYWludGluZ0luUmVjdChjb25zdCBMYXlvdXRSZWN0JiwgYm9vbCBpbW1lZGlhdGUpOwogI2Vu
ZGlmCiAKKyAgICBib29sIGNhblVzZUNvbnZlcnRUb0xheWVyQ29vcmRzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIC8vIFRoZXNlIFJlbmRlck9iamVjdCBoYXZlIGFuIGltcGFjdCBvbiB0aGVpciBs
YXllcnMnIHdpdGhvdXQgdGhlbSBrbm93aW5nIGFib3V0IGl0LgorICAgICAgICByZXR1cm4gIXJl
bmRlcmVyKCktPmhhc0NvbHVtbnMoKSAmJiAhcmVuZGVyZXIoKS0+aGFzVHJhbnNmb3JtKCkgJiYg
IWlzQ29tcG9zaXRlZCgpCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgICAgICYmICFyZW5kZXJl
cigpLT5pc1NWR1Jvb3QoKQorI2VuZGlmCisgICAgICAgICAgICA7CisgICAgfQorCiAgICAgdm9p
ZCBjb252ZXJ0VG9QaXhlbFNuYXBwZWRMYXllckNvb3Jkcyhjb25zdCBSZW5kZXJMYXllciogYW5j
ZXN0b3JMYXllciwgSW50UG9pbnQmIGxvY2F0aW9uKSBjb25zdDsKICAgICB2b2lkIGNvbnZlcnRU
b1BpeGVsU25hcHBlZExheWVyQ29vcmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVy
LCBJbnRSZWN0JikgY29uc3Q7CiAgICAgdm9pZCBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBS
ZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKSBjb25zdDsK
QEAgLTg1OCwxNiArODY4LDYgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVm
dCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OwogCi0gICAg
Ym9vbCBjYW5Vc2VDb252ZXJ0VG9MYXllckNvb3JkcygpIGNvbnN0Ci0gICAgewotICAgICAgICAv
LyBUaGVzZSBSZW5kZXJPYmplY3QgaGF2ZSBhbiBpbXBhY3Qgb24gdGhlaXIgbGF5ZXJzJyB3aXRo
b3V0IHRoZW0ga25vd2luZyBhYm91dCBpdC4KLSAgICAgICAgcmV0dXJuICFyZW5kZXJlcigpLT5o
YXNDb2x1bW5zKCkgJiYgIXJlbmRlcmVyKCktPmhhc1RyYW5zZm9ybSgpICYmICFpc0NvbXBvc2l0
ZWQoKQotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgICAgICAmJiAhcmVuZGVyZXIoKS0+aXNTVkdS
b290KCkKLSNlbmRpZgotICAgICAgICAgICAgOwotICAgIH0KLQogICAgIExheW91dFVuaXQgdmVy
dGljYWxTY3JvbGxiYXJTdGFydChpbnQgbWluWCwgaW50IG1heFgpIGNvbnN0OwogICAgIExheW91
dFVuaXQgaG9yaXpvbnRhbFNjcm9sbGJhclN0YXJ0KGludCBtaW5YKSBjb25zdDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAJKHJldmlzaW9uIDEyMTEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcAogCiAgICAgLy8gQSBudWxsIGFu
Y2VzdG9yTGF5ZXIgaXMgYW4gaW5kaWNhdGlvbiB0aGF0ICdsYXllcicgaGFzIGFscmVhZHkgYmVl
biBwdXNoZWQuCiAgICAgaWYgKGFuY2VzdG9yTGF5ZXIpCi0gICAgICAgIG92ZXJsYXBNYXAuZ2Vv
bWV0cnlNYXAoKS5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGxheWVyLT5yZW5kZXJlcigpLCBhbmNl
c3RvckxheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgb3ZlcmxhcE1hcC5nZW9tZXRyeU1hcCgp
LnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IobGF5ZXIsIGFuY2VzdG9yTGF5ZXIpOwogICAgIAogICAg
IEludFJlY3QgYm91bmRzOwogICAgIGJvb2wgaGF2ZUNvbXB1dGVkQm91bmRzID0gZmFsc2U7CkBA
IC03MTAsNyArNzEwLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3Zlcmxh
cAogICAgIH0KICAgICAKICAgICBpZiAoYW5jZXN0b3JMYXllcikKLSAgICAgICAgb3ZlcmxhcE1h
cC5nZW9tZXRyeU1hcCgpLnBvcE1hcHBpbmdzVG9BbmNlc3RvcihhbmNlc3RvckxheWVyLT5yZW5k
ZXJlcigpKTsKKyAgICAgICAgb3ZlcmxhcE1hcC5nZW9tZXRyeU1hcCgpLnBvcE1hcHBpbmdzVG9B
bmNlc3RvcihhbmNlc3RvckxheWVyKTsKIH0KIAogLy8gIFJlY3Vyc2UgdGhyb3VnaCB0aGUgbGF5
ZXJzIGluIHotaW5kZXggYW5kIG92ZXJmbG93IG9yZGVyICh3aGljaCBpcyBlcXVpdmFsZW50IHRv
IHBhaW50aW5nIG9yZGVyKQpAQCAtNzI3LDcgKzcyNyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpjb21wdXRlQ29tcG8KICAgICBsYXllci0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVk
KCk7CiAgICAgCiAgICAgaWYgKG92ZXJsYXBNYXApCi0gICAgICAgIG92ZXJsYXBNYXAtPmdlb21l
dHJ5TWFwKCkucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihsYXllci0+cmVuZGVyZXIoKSwgYW5jZXN0
b3JMYXllciA/IGFuY2VzdG9yTGF5ZXItPnJlbmRlcmVyKCkgOiAwKTsKKyAgICAgICAgb3Zlcmxh
cE1hcC0+Z2VvbWV0cnlNYXAoKS5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGxheWVyLCBhbmNlc3Rv
ckxheWVyKTsKICAgICAKICAgICAvLyBDbGVhciB0aGUgZmxhZwogICAgIGxheWVyLT5zZXRIYXND
b21wb3NpdGluZ0Rlc2NlbmRhbnQoZmFsc2UpOwpAQCAtOTEwLDcgKzkxMCw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG8KICAgICBkZXNjZW5kYW50SGFzM0RUcmFu
c2Zvcm0gfD0gYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtIHx8IGxheWVyLT5oYXMzRFRyYW5z
Zm9ybSgpOwogCiAgICAgaWYgKG92ZXJsYXBNYXApCi0gICAgICAgIG92ZXJsYXBNYXAtPmdlb21l
dHJ5TWFwKCkucG9wTWFwcGluZ3NUb0FuY2VzdG9yKGFuY2VzdG9yTGF5ZXIgPyBhbmNlc3Rvckxh
eWVyLT5yZW5kZXJlcigpIDogMCk7CisgICAgICAgIG92ZXJsYXBNYXAtPmdlb21ldHJ5TWFwKCku
cG9wTWFwcGluZ3NUb0FuY2VzdG9yKGFuY2VzdG9yTGF5ZXIpOwogfQogCiB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6c2V0Q29tcG9zaXRpbmdQYXJlbnQoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5
ZXIsIFJlbmRlckxheWVyKiBwYXJlbnRMYXllcikK
</data>
<flag name="review"
          id="157157"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>