<?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>100306</bug_id>
          
          <creation_ts>2012-10-24 16:21:55 -0700</creation_ts>
          <short_desc>Add non-virtual firstChild/lastChild overrides to RenderBlock and RenderTableCol for a &gt; 30% speedup on table from bug 100304</short_desc>
          <delta_ts>2012-11-01 10:37:42 -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>New Bugs</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>
          
          <blocked>100304</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>bdakin</cc>
    
    <cc>eae</cc>
    
    <cc>hyatt</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>750181</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-24 16:21:55 -0700</bug_when>
    <thetext>Add non-virtual firstChild/lastChild overrides to RenderBlock and RenderTableCol for a &gt; 30% speedup on table from bug 100304</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750185</commentid>
    <comment_count>1</comment_count>
      <attachid>170505</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-24 16:26:19 -0700</bug_when>
    <thetext>Created attachment 170505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750227</commentid>
    <comment_count>2</comment_count>
      <attachid>170518</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-24 17:10:48 -0700</bug_when>
    <thetext>Created attachment 170518
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750768</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-10-25 06:58:23 -0700</bug_when>
    <thetext>Nice! Does it benefit large tables with fewer tbodies as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750961</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-25 10:16:28 -0700</bug_when>
    <thetext>It benefits any rendering code in a RenderBlock subclass which uses firstChild/lastChild in a hot code path.  RenderTable is one such example.  I don&apos;t know the effect on smaller tables, but I would not be surprised if this showed up in a variety of rendering benchmarks as a small win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750970</commentid>
    <comment_count>5</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-10-25 10:21:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; It benefits any rendering code in a RenderBlock subclass which uses firstChild/lastChild in a hot code path.  RenderTable is one such example.  I don&apos;t know the effect on smaller tables, but I would not be surprised if this showed up in a variety of rendering benchmarks as a small win.

Right, I was curious if you&apos;ve seen any performance improvements from this change in large tables with a single tbody or if it only applies to tables with multiple bodies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751027</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-25 11:04:06 -0700</bug_when>
    <thetext>The problem in bug 100304 seems to have little to do with it&apos;s many tbodies.  I was mistaken yesterday (if you heard my discussion in the office).

This method is hot because we call RenderTable::colElement() 4 times for every cell.  The first thing that method does is call firstColumn() which calls firstChild().

So we end up calling firstChild a lot. :)  We&apos;ll do that for any table with lots of cells, regardless of the number of tbodies.  I haven&apos;t yet, but I can run this against https://github.com/dglazkov/performance-tests and I expect we&apos;ll see some small win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751042</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-25 11:20:52 -0700</bug_when>
    <thetext>Actually, I believe dglazkov&apos;s tests do not have columns and thus go down the fast-path which avoids the firstChild call all together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751188</commentid>
    <comment_count>8</comment_count>
      <attachid>170518</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-10-25 14:03:01 -0700</bug_when>
    <thetext>Comment on attachment 170518
Patch

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

&gt; Source/WebCore/rendering/RenderObject.h:184
&gt; +    // functions to make these fast when we already have a more specific poitner type.

typo: poitner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751690</commentid>
    <comment_count>9</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-10-26 01:47:54 -0700</bug_when>
    <thetext>The part of this change that makes me sad is that it assumes you have properly downcasted your object (ie RenderBlock treated as RenderObject will miss the mark :-/). Thus this really feels like a fragile effort to work around our current design.

We should think of a good way to avoid the bad / slow pattern instead of assuming that it is going to stay and that we should make it fast. As a whole, I don&apos;t think the whole children()-&gt;firstChild() vs firstChild() performance impacts are that well known among people (or it is super easy to forget the cost which is why something _enforceable_ would be nice). This is obviously a long term goal, not sure if it&apos;s possible to tackle it as part of this change.

A more manageable action item is to add some ASSERT to this change that catches if we start calling back into RenderObject&apos;s firstChild / lastChild, like using some debug-only flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752278</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-26 12:27:29 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; The part of this change that makes me sad is that it assumes you have properly downcasted your object (ie RenderBlock treated as RenderObject will miss the mark :-/). Thus this really feels like a fragile effort to work around our current design.

Correct.  Our current design, of making RenderObject have a firstChild method, w/o storing the actual child pointers (or have a single RenderChildren subclass to cast to), makes it so that firstChild, etc. must cost a virtual dispatch.

This is a transparent solution which allows primarily classes which *already* know that they are a RenderBlock subclass to use firstChild/lastChild w/o thinking about it.  Code which deals with RenderObjects (which I&apos;m not interested in atm) still must take the virtual dispatch hit.

One way to make this less &quot;fragile&quot; would be to rename RenderObject::firstChild to slowFirstChild or something to make it explicit that it&apos;s slow.

I think the main trouble we have here is that those who work on both the DOM and rendering, don&apos;t necessarily remember when moving to rendering that firstChild is slow.

&gt; We should think of a good way to avoid the bad / slow pattern instead of assuming that it is going to stay and that we should make it fast. As a whole, I don&apos;t think the whole children()-&gt;firstChild() vs firstChild() performance impacts are that well known among people (or it is super easy to forget the cost which is why something _enforceable_ would be nice). This is obviously a long term goal, not sure if it&apos;s possible to tackle it as part of this change.

I don&apos;t see any way to avoid virtual dispatch if RenderObject isn&apos;t going to contain the child pointers.

But, as I noted in the FIXME, we certainly could make the cost more obvious by renaming RenderObject::firstChild.  I decided that would be too big a change for this patch (which I assumed would generate some small amount of discussion).

&gt; A more manageable action item is to add some ASSERT to this change that catches if we start calling back into RenderObject&apos;s firstChild / lastChild, like using some debug-only flag.

I don&apos;t think that&apos;s possible.  There are some sections of code which do tree-traversal, and don&apos;t know the type of the object.  ASSERTing if we called the RenderObject::firstChild would require all callers to check the type of the object before calling firstChild, which would defeat the purpose of firstChild being on RenderObject in the first place. :)

I think this is a good, short-term mediation of this problem, with the possibility of expanding deployment of these fast firstChild methods and/or renaming RenderObject::firstChild in the longer-term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753830</commentid>
    <comment_count>11</comment_count>
      <attachid>170518</attachid>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2012-10-29 16:08:30 -0700</bug_when>
    <thetext>Comment on attachment 170518
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.h:89
&gt; +    RenderObject* firstChild() const { ASSERT(children() == virtualChildren()); return children()-&gt;firstChild(); }

Probably add a comment here so that someone does not remove them in future without understanding the loss. Also, this function will look a little better 2 lines below after children() function definition. The assert is pretty useless i think since virtualChildren is just used to reference from RenderObject, i dont think there can be a case where children() != virtualChildren()

&gt;&gt; Source/WebCore/rendering/RenderObject.h:184
&gt;&gt; +    // functions to make these fast when we already have a more specific poitner type.
&gt; 
&gt; typo: poitner

typo: poitner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753835</commentid>
    <comment_count>12</comment_count>
      <attachid>170518</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-10-29 16:14:11 -0700</bug_when>
    <thetext>Comment on attachment 170518
Patch

Eric explained this to me and it seems safe.  It&apos;s a bit unconventional, but I think that&apos;s fine because most functions aren&apos;t as hot as these.

I wasn&apos;t super excited by the naming since it&apos;s not obvious why the methods are slow.  Renaming virtualChildren, RenderObject::firstChild and RenderObject::lastChild to something more clear sounds useful to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754096</commentid>
    <comment_count>13</comment_count>
      <attachid>170518</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-10-30 02:08:10 -0700</bug_when>
    <thetext>Comment on attachment 170518
Patch

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

&gt; I don&apos;t think that&apos;s possible.  There are some sections of code which do tree-traversal, and don&apos;t know the type of the object.  ASSERTing if we called the RenderObject::firstChild would require all callers to check the type of the object before calling firstChild, which would defeat the purpose of firstChild being on RenderObject in the first place. :)

There may be some clever trick to catch that (using template) but I agree, it may not buy us much.

&gt; I think this is a good, short-term mediation of this problem, with the possibility of expanding deployment of these fast firstChild methods and/or renaming RenderObject::firstChild in the longer-term.

Fair enough. I still think the change is extremely fragile but the  performance implications are compelling enough that I won&apos;t block it. We should definitely track firstChild -&gt; slowFirstChild renaming and globally making cheaper to iterate over children.

&gt; Source/WebCore/ChangeLog:28
&gt; +

I would advocate to land this pattern on all objects that have overridden virtualChildren() instead of just the one you spotted in your testing. This means that the following classes would need to be modified: RenderMedia, RenderFrameSet, RenderInline, RenderTableRow and RenderTableSection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754113</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-30 02:28:27 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 170518 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170518&amp;action=review
&gt; I would advocate to land this pattern on all objects that have overridden virtualChildren() instead of just the one you spotted in your testing. This means that the following classes would need to be modified: RenderMedia, RenderFrameSet, RenderInline, RenderTableRow and RenderTableSection.

That&apos;s fine.  My goal was to limit the scope of this change as much as possible.

If I were to do that, would you suggest I override all 4 methods which use virtualChildren?
http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderObject.h#L181

It seemed like firstChild is really the only commonly used of the 4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754116</commentid>
    <comment_count>15</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-10-30 02:35:38 -0700</bug_when>
    <thetext>&gt; If I were to do that, would you suggest I override all 4 methods which use virtualChildren?
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderObject.h#L181
&gt; 
&gt; It seemed like firstChild is really the only commonly used of the 4.

Not really, as you are pointing out, some functions are more popular and thus it&apos;s not worth the time / maintenance cost extending this hack to more than just firstChild / lastChild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755014</commentid>
    <comment_count>16</comment_count>
      <attachid>171589</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-31 00:01:57 -0700</bug_when>
    <thetext>Created attachment 171589
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755019</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-31 00:16:33 -0700</bug_when>
    <thetext>Hopefully I addressed everyones&apos; comments.  Let me know and I&apos;m happy to make follow-up patches.

We should also go back and remove many of the children().firstChild() callers now that firstChild() is fast when you know your own type. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755037</commentid>
    <comment_count>18</comment_count>
      <attachid>171589</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 01:14:20 -0700</bug_when>
    <thetext>Comment on attachment 171589
Patch for landing

Clearing flags on attachment: 171589

Committed r132995: &lt;http://trac.webkit.org/changeset/132995&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755038</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 01:14:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756386</commentid>
    <comment_count>20</comment_count>
      <attachid>171589</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-01 10:04:27 -0700</bug_when>
    <thetext>Comment on attachment 171589
Patch for landing

This is a fantastic improvement, but I also think we should ponder a way to accomplish this without so much copied and pasted code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756426</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-01 10:37:42 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 171589 [details])
&gt; This is a fantastic improvement, but I also think we should ponder a way to accomplish this without so much copied and pasted code.

I fully support this idea!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170505</attachid>
            <date>2012-10-24 16:26:19 -0700</date>
            <delta_ts>2012-10-24 17:10:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100306-20121024162454.patch</filename>
            <type>text/plain</type>
            <size>4001</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODNmMzM1ZTA2ZWM5NzI4
Nzc4NGVkN2UwMDNkZTgzNzIzMzk5YmY5NS4uZDAyNzc3NjcyZDE0ZjFjNjAxNDE3NDNlMDAzMzc2
Y2MwZTM0MzQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTEwLTI0ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgbm9uLXZpcnR1YWwgZmly
c3RDaGlsZC9sYXN0Q2hpbGQgb3ZlcnJpZGVzIHRvIFJlbmRlckJsb2NrIGFuZCBSZW5kZXJUYWJs
ZUNvbCBmb3IgYSA+IDMwJSBzcGVlZHVwIG9uIHRhYmxlIGZyb20gYnVnIDEwMDMwNAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMzA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJlc3VtYWJseSB0aGlz
IGlzIGEgc3BlZWR1cCBmb3Igb3RoZXIgcmVuZGVyaW5nIHRlc3RzIGFzIHdlbGwuICBXZSB1c2Ug
Zmlyc3RDaGlsZCgpIGFsbCBvdmVyCisgICAgICAgIHRoZSByZW5kZXJpbmcgY29kZSB3L28gY29u
c2lkZXJpbmcgdGhhdCBpdCBtYWtlcyBhIHZpcnR1YWwgZnVuY3Rpb24gY2FsbC4KKyAgICAgICAg
T3JpZ2luYWxseSBJIGp1c3QgZml4ZWQgdGhlIG9uZSBjYWxsc2l0ZSB3aGljaCB3YXMgc2hvd2lu
ZyB1cCBvbiB0aGUgc2FtcGxlIHRvCisgICAgICAgIHVzZSBjaGlsZHJlbigpLT5maXJzdENoaWxk
KCkgZGlyZWN0bHkuICBIb3dldmVyIGFmdGVyIGZ1cnRoZXIgdGhvdWdodCwgdGhpcworICAgICAg
ICBicm9hZGVyIHNvbHV0aW9uIHNlZW1lZCB0aGUgYmV0dGVyIHdheSB0byBnby4gIFRoZSBmaXJz
dCBwYXRjaCB3YXMgYSAxNSUgd2luIGZvcgorICAgICAgICB0aGlzIGxhcmdlIHRhYmxlLCB0aGlz
IGJyb2FkZXIgc29sdXRpb24gd2FzIGEgMzAlIT8gd2luLgorCisgICAgICAgIFRoZSBlbGVwaGFu
dCBpbiB0aGUgcm9vbSBmb3IgdGhpcyB0YWJsZSBpcyB0aGF0IHdlJ3JlIHdhbGtpbmcgdGhlIHdo
b2xlIHRhYmxlCisgICAgICAgIGZvciBtYW55IG5leHRDb2x1bW4gY2FsbHMuICBCdXQgdGhhdCBJ
IHdpbGwgc29sdmUgaW4gYSBsYXRlciBidWcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaXJzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXN0Q2hpbGQpOgorICAgICAgICAoUmVuZGVy
QmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJl
bmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNvbDo6bGFzdENoaWxkKToKKyAgICAgICAgKFJlbmRlclRhYmxlQ29s
KToKKwogMjAxMi0xMC0wOCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgSW4gc29tZSBmbG9hdCBzaXR1YXRpb25zLCB0aGUgb3JpZ2luYWwgbGF5b3V0IGlzIHdy
b25nIGFuZCBvbmx5IGNvcnJlY3RzIGl0c2VsZiBvbiByZXBhaW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDI0Y2NlOTliNDc0N2U1ZmY5MTVkNDA3YTc5NzIxMTU2
ODE0MDczZTcuLjFlY2FjNzNhOWVhYmU2MTkzMzRmNjFhZWI3OWFmODNhMWFmNmIyOWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC04Niw2ICs4Niw5IEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJCbG9jayhOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyQmxvY2soKTsK
IAorICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVu
KCktPmZpcnN0Q2hpbGQoKTsgfQorICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gY2hpbGRyZW4oKS0+bGFzdENoaWxkKCk7IH0KKwogICAgIGNvbnN0IFJlbmRlck9i
amVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQog
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJl
bjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggMWQ1ZTc2
N2Q0OTMxOGE1MTUxMjM4NWY4OTZkNGYxMGVmY2FjODFhMy4uMWNjZDhiODQzYzU4MDkyYWEyZDEy
NmEyMDQzZmU5YmZmMzFlODUyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaApAQCAtMTc3LDYgKzE3NywxMSBAQCBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0KiBwcmV2
aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzOyB9CiAgICAgUmVuZGVyT2Jq
ZWN0KiBuZXh0U2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogCisgICAgLy8gRklY
TUU6IFRoZXNlIHNob3VsZCBiZSByZW5hbWVkIHNsb3dGaXJzdENoaWxkLCBzbG93TGFzdENoaWxk
LCBldGMuCisgICAgLy8gdG8gZGlzY291cmFnZSB0aGVpciB1c2UuIFRoZSB2aXJ0dWFsQ2hpbGRy
ZW4oKSBjYWxsIGluc2lkZSB0aGVzZQorICAgIC8vIGNhbiBiZSBzbG93IGZvciBob3QgY29kZSBw
YXRocy4KKyAgICAvLyBDdXJyZW50bHksIHNvbWUgc3ViY2xhc3NlcyBsaWtlIFJlbmRlckJsb2Nr
LCBvdmVycmlkZSB0aGVzZSBOT04tdmlydHVhbAorICAgIC8vIGZ1bmN0aW9ucyB0byBtYWtlIHRo
ZXNlIGZhc3Qgd2hlbiB3ZSBhbHJlYWR5IGhhdmUgYSBtb3JlIHNwZWNpZmljIHBvaXRuZXIgdHlw
ZS4KICAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdAogICAgIHsKICAgICAgICAg
aWYgKGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4gPSB2aXJ0dWFsQ2hpbGRy
ZW4oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNv
bC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKaW5kZXggMWE5
ZmFjNmVjMjNkNmYwYzVjNzEwNWRiZmMxMTQzMWU4ZGE4MjRhNS4uZDk0M2UzMGY1MzdlZDQxYWRh
MmQxN2QyODBhMDJlZjA0NmFiYTVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ29sLmgKQEAgLTM3LDYgKzM3LDkgQEAgY2xhc3MgUmVuZGVyVGFibGVDb2wgOiBwdWJs
aWMgUmVuZGVyQm94IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5kZXJUYWJsZUNvbChOb2Rl
Kik7CiAKKyAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBjaGls
ZHJlbigpLT5maXJzdENoaWxkKCk7IH0KKyAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIGNoaWxkcmVuKCktPmxhc3RDaGlsZCgpOyB9CisKICAgICBjb25zdCBSZW5k
ZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47
IH0KICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hp
bGRyZW47IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170518</attachid>
            <date>2012-10-24 17:10:48 -0700</date>
            <delta_ts>2012-10-31 00:01:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100306-20121024170923.patch</filename>
            <type>text/plain</type>
            <size>4165</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODNmMzM1ZTA2ZWM5NzI4
Nzc4NGVkN2UwMDNkZTgzNzIzMzk5YmY5NS4uZDAyNzc3NjcyZDE0ZjFjNjAxNDE3NDNlMDAzMzc2
Y2MwZTM0MzQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTEwLTI0ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgbm9uLXZpcnR1YWwgZmly
c3RDaGlsZC9sYXN0Q2hpbGQgb3ZlcnJpZGVzIHRvIFJlbmRlckJsb2NrIGFuZCBSZW5kZXJUYWJs
ZUNvbCBmb3IgYSA+IDMwJSBzcGVlZHVwIG9uIHRhYmxlIGZyb20gYnVnIDEwMDMwNAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMzA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJlc3VtYWJseSB0aGlz
IGlzIGEgc3BlZWR1cCBmb3Igb3RoZXIgcmVuZGVyaW5nIHRlc3RzIGFzIHdlbGwuICBXZSB1c2Ug
Zmlyc3RDaGlsZCgpIGFsbCBvdmVyCisgICAgICAgIHRoZSByZW5kZXJpbmcgY29kZSB3L28gY29u
c2lkZXJpbmcgdGhhdCBpdCBtYWtlcyBhIHZpcnR1YWwgZnVuY3Rpb24gY2FsbC4KKyAgICAgICAg
T3JpZ2luYWxseSBJIGp1c3QgZml4ZWQgdGhlIG9uZSBjYWxsc2l0ZSB3aGljaCB3YXMgc2hvd2lu
ZyB1cCBvbiB0aGUgc2FtcGxlIHRvCisgICAgICAgIHVzZSBjaGlsZHJlbigpLT5maXJzdENoaWxk
KCkgZGlyZWN0bHkuICBIb3dldmVyIGFmdGVyIGZ1cnRoZXIgdGhvdWdodCwgdGhpcworICAgICAg
ICBicm9hZGVyIHNvbHV0aW9uIHNlZW1lZCB0aGUgYmV0dGVyIHdheSB0byBnby4gIFRoZSBmaXJz
dCBwYXRjaCB3YXMgYSAxNSUgd2luIGZvcgorICAgICAgICB0aGlzIGxhcmdlIHRhYmxlLCB0aGlz
IGJyb2FkZXIgc29sdXRpb24gd2FzIGEgMzAlIT8gd2luLgorCisgICAgICAgIFRoZSBlbGVwaGFu
dCBpbiB0aGUgcm9vbSBmb3IgdGhpcyB0YWJsZSBpcyB0aGF0IHdlJ3JlIHdhbGtpbmcgdGhlIHdo
b2xlIHRhYmxlCisgICAgICAgIGZvciBtYW55IG5leHRDb2x1bW4gY2FsbHMuICBCdXQgdGhhdCBJ
IHdpbGwgc29sdmUgaW4gYSBsYXRlciBidWcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaXJzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXN0Q2hpbGQpOgorICAgICAgICAoUmVuZGVy
QmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJl
bmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNvbDo6bGFzdENoaWxkKToKKyAgICAgICAgKFJlbmRlclRhYmxlQ29s
KToKKwogMjAxMi0xMC0wOCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgSW4gc29tZSBmbG9hdCBzaXR1YXRpb25zLCB0aGUgb3JpZ2luYWwgbGF5b3V0IGlzIHdy
b25nIGFuZCBvbmx5IGNvcnJlY3RzIGl0c2VsZiBvbiByZXBhaW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDI0Y2NlOTliNDc0N2U1ZmY5MTVkNDA3YTc5NzIxMTU2
ODE0MDczZTcuLmZkZDA1MGFjOGQwODc2NzJmZWRjYjk3OWRiMzc1MWQ2YzAxNjI0MzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC04Niw2ICs4Niw5IEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJCbG9jayhOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyQmxvY2soKTsK
IAorICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgQVNTRVJUKGNoaWxkcmVu
KCkgPT0gdmlydHVhbENoaWxkcmVuKCkpOyByZXR1cm4gY2hpbGRyZW4oKS0+Zmlyc3RDaGlsZCgp
OyB9CisgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IEFTU0VSVChjaGlsZHJl
bigpID09IHZpcnR1YWxDaGlsZHJlbigpKTsgcmV0dXJuIGNoaWxkcmVuKCktPmxhc3RDaGlsZCgp
OyB9CisKICAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gJm1fY2hpbGRyZW47IH0KICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxk
cmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCmluZGV4IDFkNWU3NjdkNDkzMThhNTE1MTIzODVmODk2ZDRmMTBlZmNhYzgx
YTMuLjFjY2Q4Yjg0M2M1ODA5MmFhMmQxMjZhMjA0M2ZlOWJmZjMxZTg1MjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTE3Nyw2ICsxNzcsMTEgQEAgcHVibGlj
OgogICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9w
cmV2aW91czsgfQogICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVy
biBtX25leHQ7IH0KIAorICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVuYW1lZCBzbG93
Rmlyc3RDaGlsZCwgc2xvd0xhc3RDaGlsZCwgZXRjLgorICAgIC8vIHRvIGRpc2NvdXJhZ2UgdGhl
aXIgdXNlLiBUaGUgdmlydHVhbENoaWxkcmVuKCkgY2FsbCBpbnNpZGUgdGhlc2UKKyAgICAvLyBj
YW4gYmUgc2xvdyBmb3IgaG90IGNvZGUgcGF0aHMuCisgICAgLy8gQ3VycmVudGx5LCBzb21lIHN1
YmNsYXNzZXMgbGlrZSBSZW5kZXJCbG9jaywgb3ZlcnJpZGUgdGhlc2UgTk9OLXZpcnR1YWwKKyAg
ICAvLyBmdW5jdGlvbnMgdG8gbWFrZSB0aGVzZSBmYXN0IHdoZW4gd2UgYWxyZWFkeSBoYXZlIGEg
bW9yZSBzcGVjaWZpYyBwb2l0bmVyIHR5cGUuCiAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxk
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3Qq
IGNoaWxkcmVuID0gdmlydHVhbENoaWxkcmVuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNvbC5oCmluZGV4IDFhOWZhYzZlYzIzZDZmMGM1YzcxMDVkYmZjMTE0MzFlOGRh
ODI0YTUuLmEyMjlmYWEwMTc2MzRhY2QzY2QyMTdkZGYzM2Y3YzA0ODJiNWRkNGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCkBAIC0zNyw2ICszNyw5IEBAIGNs
YXNzIFJlbmRlclRhYmxlQ29sIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgUmVuZGVyVGFibGVDb2woTm9kZSopOwogCisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdENo
aWxkKCkgY29uc3QgeyBBU1NFUlQoY2hpbGRyZW4oKSA9PSB2aXJ0dWFsQ2hpbGRyZW4oKSk7IHJl
dHVybiBjaGlsZHJlbigpLT5maXJzdENoaWxkKCk7IH0KKyAgICBSZW5kZXJPYmplY3QqIGxhc3RD
aGlsZCgpIGNvbnN0IHsgQVNTRVJUKGNoaWxkcmVuKCkgPT0gdmlydHVhbENoaWxkcmVuKCkpOyBy
ZXR1cm4gY2hpbGRyZW4oKS0+bGFzdENoaWxkKCk7IH0KKwogICAgIGNvbnN0IFJlbmRlck9iamVj
dENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogICAg
IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsg
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171589</attachid>
            <date>2012-10-31 00:01:57 -0700</date>
            <delta_ts>2012-11-01 10:04:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100306-20121031000020.patch</filename>
            <type>text/plain</type>
            <size>9774</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyOTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM0NTI3Y2EzZDA5MTI4
MmFiNDFjZTkwYjJjNmYzNWY4YmRhYTZmOC4uNTAxY2IzNzRhYmQwNTFlYThhNjMxZjg0ZDUwOGU2
YjM0N2UzMGMxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDEyLTEwLTMwICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAorICAgICAgICBBZGQgbm9uLXZpcnR1YWwgZmly
c3RDaGlsZC9sYXN0Q2hpbGQgb3ZlcnJpZGVzIHRvIFJlbmRlckJsb2NrIGFuZCBSZW5kZXJUYWJs
ZUNvbCBmb3IgYSA+IDMwJSBzcGVlZHVwIG9uIHRhYmxlIGZyb20gYnVnIDEwMDMwNAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMzA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQWJoaXNoZWsgQXJ5YS4KKworICAgICAgICBQcmVzdW1hYmx5IHRoaXMg
aXMgYSBzcGVlZHVwIGZvciBvdGhlciByZW5kZXJpbmcgdGVzdHMgYXMgd2VsbC4gIFdlIHVzZSBm
aXJzdENoaWxkKCkgYWxsIG92ZXIKKyAgICAgICAgdGhlIHJlbmRlcmluZyBjb2RlIHcvbyBjb25z
aWRlcmluZyB0aGF0IGl0IG1ha2VzIGEgdmlydHVhbCBmdW5jdGlvbiBjYWxsLgorICAgICAgICBP
cmlnaW5hbGx5IEkganVzdCBmaXhlZCB0aGUgb25lIGNhbGxzaXRlIHdoaWNoIHdhcyBzaG93aW5n
IHVwIG9uIHRoZSBzYW1wbGUgdG8KKyAgICAgICAgdXNlIGNoaWxkcmVuKCktPmZpcnN0Q2hpbGQo
KSBkaXJlY3RseS4gIEhvd2V2ZXIgYWZ0ZXIgZnVydGhlciB0aG91Z2h0LCB0aGlzCisgICAgICAg
IGJyb2FkZXIgc29sdXRpb24gc2VlbWVkIHRoZSBiZXR0ZXIgd2F5IHRvIGdvLiAgVGhlIGZpcnN0
IHBhdGNoIHdhcyBhIDE1JSB3aW4gZm9yCisgICAgICAgIHRoaXMgbGFyZ2UgdGFibGUsIHRoaXMg
YnJvYWRlciBzb2x1dGlvbiB3YXMgYSAzMCUhPyB3aW4uCisKKyAgICAgICAgVGhlIGVsZXBoYW50
IGluIHRoZSByb29tIGZvciB0aGlzIHRhYmxlIGlzIHRoYXQgd2UncmUgd2Fsa2luZyB0aGUgd2hv
bGUgdGFibGUKKyAgICAgICAgZm9yIG1hbnkgbmV4dENvbHVtbiBjYWxscy4gIEJ1dCB0aGF0IEkg
d2lsbCBzb2x2ZSBpbiBhIGxhdGVyIGJ1Zy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpcnN0Q2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxhc3RDaGlsZCk6CisgICAgICAgIChSZW5kZXJC
bG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoUmVu
ZGVyT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ29sOjpsYXN0Q2hpbGQpOgorICAgICAgICAoUmVuZGVyVGFibGVDb2wp
OgorCisyMDEyLTEwLTMwICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKwogICAgICAg
ICBSb2JvSG9ybmV0UHJvIHNwZW5kcyB+MjUlIG9mIHRvdGFsIHRlc3QgdGltZSBpbiBXZWJDb3Jl
OjpSZWdpb246OlNoYXBlIG1ldGhvZHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk4ODAwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgKaW5kZXggNTY3ZDdkY2I0YzNlYWEwMjgxNDk4NjQ0MTk4MmRiYWNmZDIwMDNiZS4uMmNiYzZk
MzQwYTg3OTkxMWI0OTFhNTk2ZjYxNGVjOTYwMzA0Njg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgKQEAgLTg2LDYgKzg2LDkgQEAgcHVibGljOgogICAgIFJlbmRlckJs
b2NrKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCbG9jaygpOwogCisgICAgUmVuZGVyT2Jq
ZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyBBU1NFUlQoY2hpbGRyZW4oKSA9PSB2aXJ0dWFsQ2hp
bGRyZW4oKSk7IHJldHVybiBjaGlsZHJlbigpLT5maXJzdENoaWxkKCk7IH0KKyAgICBSZW5kZXJP
YmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgQVNTRVJUKGNoaWxkcmVuKCkgPT0gdmlydHVhbENo
aWxkcmVuKCkpOyByZXR1cm4gY2hpbGRyZW4oKS0+bGFzdENoaWxkKCk7IH0KKwogICAgIGNvbnN0
IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGls
ZHJlbjsgfQogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAm
bV9jaGlsZHJlbjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5o
CmluZGV4IGI2NzA1NzVjMzAyYzdiOWZhNTM0NGIwNmNiMWIzYTg0ODNjMDNjMmIuLmVkYWIyZDk4
Yzk2NzlmNTgzZTkzMDA2YWJkNmJkODA0ZmVhMTZhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFtZVNldC5oCkBAIC01OCw2ICs1OCw5IEBAIHB1YmxpYzoKICAgICBSZW5k
ZXJGcmFtZVNldChIVE1MRnJhbWVTZXRFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyRnJh
bWVTZXQoKTsKIAorICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgQVNTRVJU
KGNoaWxkcmVuKCkgPT0gdmlydHVhbENoaWxkcmVuKCkpOyByZXR1cm4gY2hpbGRyZW4oKS0+Zmly
c3RDaGlsZCgpOyB9CisgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IEFTU0VS
VChjaGlsZHJlbigpID09IHZpcnR1YWxDaGlsZHJlbigpKTsgcmV0dXJuIGNoaWxkcmVuKCktPmxh
c3RDaGlsZCgpOyB9CisKICAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KICAgICBSZW5kZXJPYmplY3RDaGlsZExp
c3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oCmluZGV4IDU2MmZmNDdiOTNlMDYzMmQ4MmZhMjhmYjZkMjU1
NmQ5YTI0ZWQ2MmIuLjViYzk1NGEwYjgwZTIwYTA5NzgxMWJlYTEzMzUwYTE1M2RhZDQ0MGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTM1LDYgKzM1LDkgQEAg
Y2xhc3MgUmVuZGVySW5saW5lIDogcHVibGljIFJlbmRlckJveE1vZGVsT2JqZWN0IHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBSZW5kZXJJbmxpbmUoTm9kZSopOwogCisgICAgUmVuZGVyT2JqZWN0
KiBmaXJzdENoaWxkKCkgY29uc3QgeyBBU1NFUlQoY2hpbGRyZW4oKSA9PSB2aXJ0dWFsQ2hpbGRy
ZW4oKSk7IHJldHVybiBjaGlsZHJlbigpLT5maXJzdENoaWxkKCk7IH0KKyAgICBSZW5kZXJPYmpl
Y3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgQVNTRVJUKGNoaWxkcmVuKCkgPT0gdmlydHVhbENoaWxk
cmVuKCkpOyByZXR1cm4gY2hpbGRyZW4oKS0+bGFzdENoaWxkKCk7IH0KKwogICAgIHZpcnR1YWwg
dm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkID0gMCk7CiAKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAppbmRleCBhYmNjM2I2NGJhOGVh
NzgzMjIyNmUwMDhjMTc1ZGNhZDc2YzRhZTU2Li40Njk0Y2FiYzRiN2Y3NzRhM2M4YTk0NWI3ZTdj
YjM3MTA5YjcwMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaApAQCAt
NDAsNiArNDAsOSBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTWVkaWEoSFRNTE1lZGlhRWxlbWVudCos
IGNvbnN0IEludFNpemUmIGludHJpbnNpY1NpemUpOwogICAgIHZpcnR1YWwgflJlbmRlck1lZGlh
KCk7CiAKKyAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IEFTU0VSVChjaGls
ZHJlbigpID09IHZpcnR1YWxDaGlsZHJlbigpKTsgcmV0dXJuIGNoaWxkcmVuKCktPmZpcnN0Q2hp
bGQoKTsgfQorICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3QgeyBBU1NFUlQoY2hp
bGRyZW4oKSA9PSB2aXJ0dWFsQ2hpbGRyZW4oKSk7IHJldHVybiBjaGlsZHJlbigpLT5sYXN0Q2hp
bGQoKTsgfQorCiAgICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBj
aGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAppbmRleCA4N2E1OGY0ZGE2NjRiMGU4ZWFlMzBmNGIyZmY1MDdmN2I3
NWI5ZWUyLi44YTU3ODE5NjZhZTBjOTBjNzliN2I0YmY0MzQxOWY3Y2I1NmMxODgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xNzgsNiArMTc4LDExIEBAIHB1
YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIHByZXZpb3VzU2libGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJldmlvdXM7IH0KICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXh0OyB9CiAKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHJlbmFtZWQg
c2xvd0ZpcnN0Q2hpbGQsIHNsb3dMYXN0Q2hpbGQsIGV0Yy4KKyAgICAvLyB0byBkaXNjb3VyYWdl
IHRoZWlyIHVzZS4gVGhlIHZpcnR1YWxDaGlsZHJlbigpIGNhbGwgaW5zaWRlIHRoZXNlCisgICAg
Ly8gY2FuIGJlIHNsb3cgZm9yIGhvdCBjb2RlIHBhdGhzLgorICAgIC8vIEN1cnJlbnRseSwgc29t
ZSBzdWJjbGFzc2VzIGxpa2UgUmVuZGVyQmxvY2ssIG92ZXJyaWRlIHRoZXNlIE5PTi12aXJ0dWFs
CisgICAgLy8gZnVuY3Rpb25zIHRvIG1ha2UgdGhlc2UgZmFzdCB3aGVuIHdlIGFscmVhZHkgaGF2
ZSBhIG1vcmUgc3BlY2lmaWMgcG9pbnRlciB0eXBlLgogICAgIFJlbmRlck9iamVjdCogZmlyc3RD
aGlsZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0KiBjaGlsZHJlbiA9IHZpcnR1YWxDaGlsZHJlbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuaAppbmRleCA5ZWNhNDIyNDdmMTRmMzEzMTc3MzYwNmE4YTU0NmM4
MjgzNTljZDk4Li4wYzA4ZjgwMTkxNDE2NTZjZTgyZGJlZDZkYjEwOGE2ZWIxNGM1NWJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaApAQCAtMzcsNiArMzcsOSBA
QCBjbGFzcyBSZW5kZXJUYWJsZUNvbCA6IHB1YmxpYyBSZW5kZXJCb3ggewogcHVibGljOgogICAg
IGV4cGxpY2l0IFJlbmRlclRhYmxlQ29sKE5vZGUqKTsKIAorICAgIFJlbmRlck9iamVjdCogZmly
c3RDaGlsZCgpIGNvbnN0IHsgQVNTRVJUKGNoaWxkcmVuKCkgPT0gdmlydHVhbENoaWxkcmVuKCkp
OyByZXR1cm4gY2hpbGRyZW4oKS0+Zmlyc3RDaGlsZCgpOyB9CisgICAgUmVuZGVyT2JqZWN0KiBs
YXN0Q2hpbGQoKSBjb25zdCB7IEFTU0VSVChjaGlsZHJlbigpID09IHZpcnR1YWxDaGlsZHJlbigp
KTsgcmV0dXJuIGNoaWxkcmVuKCktPmxhc3RDaGlsZCgpOyB9CisKICAgICBjb25zdCBSZW5kZXJP
YmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0K
ICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRy
ZW47IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Um93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAppbmRleCA4
MGQ0YzE3ZTY0M2EzYjBhYzRkZDdjMTdmNzI0Y2M0YmI3MmZmN2JiLi5iNDM4YTRjMDEwYjhjOTNi
ZWIyNTcyNjc0ZWFmZDM5ZTdiMzVlNTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVSb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuaApAQCAtMzYsNiArMzYsOSBAQCBjbGFzcyBSZW5kZXJUYWJsZVJvdyA6IHB1
YmxpYyBSZW5kZXJCb3ggewogcHVibGljOgogICAgIGV4cGxpY2l0IFJlbmRlclRhYmxlUm93KE5v
ZGUqKTsKIAorICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgQVNTRVJUKGNo
aWxkcmVuKCkgPT0gdmlydHVhbENoaWxkcmVuKCkpOyByZXR1cm4gY2hpbGRyZW4oKS0+Zmlyc3RD
aGlsZCgpOyB9CisgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IEFTU0VSVChj
aGlsZHJlbigpID09IHZpcnR1YWxDaGlsZHJlbigpKTsgcmV0dXJuIGNoaWxkcmVuKCktPmxhc3RD
aGlsZCgpOyB9CisKICAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3Qq
IGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IGNkNmViOTczOTkzMjgxZDFjYmI1
MDQxMGYwOWY4MDNjZWMwMDg2ZGMuLjc5Y2RkNGExZGE1MmRlOWRlOTViNzAxMmYyYjgwYmFkMTUx
N2JjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmgKQEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlU2VjdGlvbihOb2Rl
Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGFibGVTZWN0aW9uKCk7CiAKKyAgICBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IEFTU0VSVChjaGlsZHJlbigpID09IHZpcnR1YWxDaGls
ZHJlbigpKTsgcmV0dXJuIGNoaWxkcmVuKCktPmZpcnN0Q2hpbGQoKTsgfQorICAgIFJlbmRlck9i
amVjdCogbGFzdENoaWxkKCkgY29uc3QgeyBBU1NFUlQoY2hpbGRyZW4oKSA9PSB2aXJ0dWFsQ2hp
bGRyZW4oKSk7IHJldHVybiBjaGlsZHJlbigpLT5sYXN0Q2hpbGQoKTsgfQorCiAgICAgY29uc3Qg
UmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2NoaWxk
cmVuOyB9CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJuICZt
X2NoaWxkcmVuOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQ29udGFpbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5oCmluZGV4IDMzNTczMmI4NDdkOTg1YWMwYjA5YzAwYzdkYTZjZmZiNjVl
OGI5MGEuLjNjMGZhOTgxNGEyZmU4NmViOTczYTQ2ODAyZmQ3MjQ1MjU0NjZlYTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaApAQCAt
MzYsNiArMzYsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVyU1ZHQ29udGFpbmVyKFNW
R1N0eWxlZEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdDb250YWluZXIoKTsKIAor
ICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgQVNTRVJUKGNoaWxkcmVuKCkg
PT0gdmlydHVhbENoaWxkcmVuKCkpOyByZXR1cm4gY2hpbGRyZW4oKS0+Zmlyc3RDaGlsZCgpOyB9
CisgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IEFTU0VSVChjaGlsZHJlbigp
ID09IHZpcnR1YWxDaGlsZHJlbigpKTsgcmV0dXJuIGNoaWxkcmVuKCktPmxhc3RDaGlsZCgpOyB9
CisKICAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyBy
ZXR1cm4gJm1fY2hpbGRyZW47IH0KICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVu
KCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuaAppbmRleCAzZmFkYzkxMGJlNWQ0ZTc5YjNiMjRhYmE4ZWFmYjg1
NGUyNjJiMDNmLi4xZTExMmExOTkwN2EyZjlkZmRlZjU0ODMyNjAyMWJhODMwODY2YWI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApAQCAtNDMsNiAr
NDMsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5p
bmdTVkdEb2N1bWVudCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5z
aWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0U2l6ZSYgaW50cmluc2ljU2l6ZSwgZG91YmxlJiBpbnRy
aW5zaWNSYXRpbywgYm9vbCYgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSkgY29uc3Q7CisKKyAg
ICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IEFTU0VSVChjaGlsZHJlbigpID09
IHZpcnR1YWxDaGlsZHJlbigpKTsgcmV0dXJuIGNoaWxkcmVuKCktPmZpcnN0Q2hpbGQoKTsgfQor
ICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3QgeyBBU1NFUlQoY2hpbGRyZW4oKSA9
PSB2aXJ0dWFsQ2hpbGRyZW4oKSk7IHJldHVybiBjaGlsZHJlbigpLT5sYXN0Q2hpbGQoKTsgfQor
CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuICZtX2NoaWxkcmVuOyB9CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigp
IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>