<?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>39621</bug_id>
          
          <creation_ts>2010-05-24 14:52:54 -0700</creation_ts>
          <short_desc>Extreme memory growth on DOM Hanoi test</short_desc>
          <delta_ts>2010-05-25 11:05:47 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>bolsinga</cc>
    
    <cc>brettw</cc>
    
    <cc>darin</cc>
    
    <cc>sullivan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>229921</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-24 14:52:54 -0700</bug_when>
    <thetext>DOM Hanoi test with the default recursion level of 3 takes several hundred megabytes, but almost nothing in Firefox.

Steps to reproduce: run &lt;https://safari.apple.com/groups/safariteam/wiki/bb053/attachments/febd2/DOM-Hanoi%20v0.2.html&gt;.

In Safari, RPRVT steadily grows - up to about 800 Mb on x86-64, and perhaps even more on PowerPC. In Firefox, it oscillates between 40 and 80 Mb.

leaks tool says there are no leaks.

&lt;rdar://problem/8009738&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229923</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-24 14:54:02 -0700</bug_when>
    <thetext>One thing I&apos;m seeing is the same as &lt;https://bugs.webkit.org/show_bug.cgi?id=9880&gt; - we just added a notification that&apos;s sent to the client when form controls change:
HTMLTextAreaElement::HTMLTextAreaElement(const QualifiedName&amp; tagName, Document* document, HTMLFormElement* form)
&lt;...&gt;
{
    ASSERT(hasTagName(textareaTag));
    setFormControlValueMatchesRenderer(true);
    notifyFormStateChanged(this);  // &lt;-- here an ObjC wrapper for the node is created and autoreleased
}

It&apos;s more tricky to fix, because HTML elements start with refcount zero, so draining the autorelease pool would destroy HTMLTextAreaElement - during its own constructor!

The offending notifyFormStateChanged() call was added in &lt;http://trac.webkit.org/changeset/39152&gt;. It&apos;s only present for HTMLTextArea, which makes me wonder if it&apos;s actually needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229929</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-24 15:00:26 -0700</bug_when>
    <thetext>Without ObjC-style autorelease, destroying a temporary wrapper made for this call will just destroy the element, like it happens when forcing autorelease pool draining in ObjC case.

So, this can&apos;t really work on other platforms. Note that WebKit/win has an empty implementation for formStateDidChange(), and WebKit/chromium all but ignores the element argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229935</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-24 15:07:16 -0700</bug_when>
    <thetext>This call was added by Brett Wilson in &lt;http://trac.webkit.org/changeset/39152&gt;, and Mac implementation was added by Greg Bolsinga in &lt;http://trac.webkit.org/changeset/45723&gt;.

Brett and Greg, can we just remove the notifyFormStateChanged() call from HTMLTextAreaElement constructor? Greg, is formStateDidChange delegate call needed at all? Bug 27153 only mentioned focus and blur as needed calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229944</commentid>
    <comment_count>4</comment_count>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2010-05-24 15:27:27 -0700</bug_when>
    <thetext>I can confirm that WebChromeClient::formStateDidChange() is not needed on iPhone right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229945</commentid>
    <comment_count>5</comment_count>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2010-05-24 15:28:24 -0700</bug_when>
    <thetext>In other words, that can be made an empty inline method, and not be implemented to call CallUIDelegate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230007</commentid>
    <comment_count>6</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-05-24 17:53:38 -0700</bug_when>
    <thetext>Chrome this to implement session saving without polling. When the user changes a form field, we set a timer (to avoid saving too often) and then serialize the current form state to disk. Then we can restore the form state when recovering from a crash.

The other form elements do the same thing, but they derive from HTMLInputElement which is where the code lives for those controls.

It&apos;s not immediately clear why this call has to be in the constructor. My guess is that I was thinking if a form control was added with some initial value, we would want to count that as a change to the form state of the page. However, it appears that the initial set is coming from setNonDirtyValue. So I think the call to notifyFormStateChanged in the constructor can be safely removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230011</commentid>
    <comment_count>7</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2010-05-24 18:00:09 -0700</bug_when>
    <thetext>(To be clear, though, the other calls should stay, we can&apos;t remove all of them without breaking this feature.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230335</commentid>
    <comment_count>8</comment_count>
      <attachid>57024</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-25 10:26:06 -0700</bug_when>
    <thetext>Created attachment 57024
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230340</commentid>
    <comment_count>9</comment_count>
      <attachid>57024</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 10:33:37 -0700</bug_when>
    <thetext>Comment on attachment 57024
proposed fix

&gt; +        * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
&gt; +        Don&apos;t call notifyFormStateChanged() - since the element starts with refcount 0, it&apos;s not
&gt; +        safe to call functions that are likely to create temporary wrappers (wrapper destructor
&gt; +        would bring refcount back to 0, and destroy HTMLTextAreaElement from within its constructor).

This could also be resolved by making HTMLTextAreaElement start with a reference count of 1. We do plan to do this eventually for all DOM classes, and we could do this one ahead of time.

I assume that the real reason it&apos;s OK not to call this is that people don&apos;t need the call. Your change log entry talks about why the call caused problems, but does not address why it&apos;s OK to remove the call.

&gt; +        Need a short description and bug URL (OOPS!)

I assume that your comment here was going to say something about his private WebUIDelegate method being no longer needed since it&apos;s no longer used by Safari nor any other client of the Mac OS X version of WebKit.

Perhaps we could remove formStateDidChange entirely. Does any platform use it in WebKit?

Generally speaking the issue of autoreleased objects could be addressed by adding autorelease pools as well.

I&apos;m going to say review- on this, but really the code change might be OK if you put clearer comments in</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230342</commentid>
    <comment_count>10</comment_count>
      <attachid>57027</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-25 10:43:12 -0700</bug_when>
    <thetext>Created attachment 57027
now with a saved ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230349</commentid>
    <comment_count>11</comment_count>
      <attachid>57027</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 10:56:22 -0700</bug_when>
    <thetext>Comment on attachment 57027
now with a saved ChangeLog

&gt;  {
&gt;      ASSERT(hasTagName(textareaTag));
&gt;      setFormControlValueMatchesRenderer(true);
&gt; -    notifyFormStateChanged(this);
&gt;  }

This patch still does not explain why this change is OK. The WebKit part of the patch removes the Mac OS X code entirely, which does two things:

    1) Makes it clear this change is OK on Mac OS X.
    2) Does some of the cleanup of this unused feature.

But this does not prove that this change is OK for non-Mac-OS-X versions of WebKit, nor does it do all the cleanup that&apos;s possible. I think it&apos;s fine to remove this unused function call, but I don&apos;t see why you&apos;d want to do some but not all of the cleanup at the same time.

And this code change seems to have an effect on Chromium. ChromeClientImpl::formStateDidChange for chromium calls didUpdateCurrentHistoryItem. That code is probably incorrect, but this code change will mean it doesn&apos;t get called any more.

I&apos;m going to say r=me if you keep the code in inside a PLATFORM(CHROMIUM) ifdef, leaving a known but in the Chromium case that can be addressed next. Then we should clean all this out entirely as quickly as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230354</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 10:58:34 -0700</bug_when>
    <thetext>OK, I see the Chromium comments in the change log now.

Sorry I should have read this before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230358</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 11:00:03 -0700</bug_when>
    <thetext>The change log comments could say:

    This call is only needed on Chromium, ignored on all other platforms, and on Chromium it&apos;s not needed at creation time for new textarea elements.

If it said that, then I would not have been confused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230363</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-25 11:05:47 -0700</bug_when>
    <thetext>&gt; The change log comments could say:

Oops, landed before I saw this. Sorry, I see how this could be confusing without looking at bug comments.

Committed &lt;http://trac.webkit.org/changeset/60175&gt;. There is some memory growth remaining, unlike in Firefox, I&apos;ll file a new bug for that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57024</attachid>
            <date>2010-05-25 10:26:06 -0700</date>
            <delta_ts>2010-05-25 10:43:12 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>DOMHanoi1.txt</filename>
            <type>text/plain</type>
            <size>4391</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDE3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDUtMjUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjIxCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MDA5NzM4PiBFeHRyZW1lIG1lbW9yeSBncm93dGggb24gRE9NIEhhbm9p
IHRlc3QKKworICAgICAgICBUaGUgbGFyZ2VzdCBjYXVzZSBvZiBtZW1vcnkgZ3Jvd3RoIG9uIHRo
aXMgdGVzdCB3ZXJlIGF1dG9yZWxlYXNlZCBET01Ob2RlIG9iamVjdHMgY3JlYXRlZAorICAgICAg
ICB0byBtYWtlIHdlYlZpZXc6Zm9ybVN0YXRlRGlkQ2hhbmdlRm9yTm9kZTogZGVsZWdhdGUgY2Fs
bHMuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOiAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudCk6CisgICAgICAgIERvbid0
IGNhbGwgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpIC0gc2luY2UgdGhlIGVsZW1lbnQgc3RhcnRz
IHdpdGggcmVmY291bnQgMCwgaXQncyBub3QKKyAgICAgICAgc2FmZSB0byBjYWxsIGZ1bmN0aW9u
cyB0aGF0IGFyZSBsaWtlbHkgdG8gY3JlYXRlIHRlbXBvcmFyeSB3cmFwcGVycyAod3JhcHBlciBk
ZXN0cnVjdG9yCisgICAgICAgIHdvdWxkIGJyaW5nIHJlZmNvdW50IGJhY2sgdG8gMCwgYW5kIGRl
c3Ryb3kgSFRNTFRleHRBcmVhRWxlbWVudCBmcm9tIHdpdGhpbiBpdHMgY29uc3RydWN0b3IpLgor
CiAyMDEwLTA1LTI1ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDA5OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNiBAQCBIVE1M
VGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50CiB7CiAgICAgQVNTRVJUKGhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpKTsKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRl
cmVyKHRydWUpOwotICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CiB9CiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29u
c3QKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2MDE3MikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDUtMjUgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkK
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAo
V2ViQ2hyb21lQ2xpZW50Ojpmb3JtU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlVJRGVsZWdh
dGVQcml2YXRlLmg6CisKIDIwMTAtMDUtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA2MDA5OCkKKysr
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Myw3ICsxNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJl
cGxhY2VXaXRoR2VuZXJhdGVkRmlsZUZvclVwbG9hZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHBh
dGgsIFdlYkNvcmU6OlN0cmluZyAmZ2VuZXJhdGVkRmlsZW5hbWUpOwogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U3RyaW5nIGdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYgcGF0aCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IFdl
YkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0
IFdlYkNvcmU6Ok5vZGUqKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmb3JtRGlkRm9jdXMoY29u
c3QgV2ViQ29yZTo6Tm9kZSopOwogICAgIHZpcnR1YWwgdm9pZCBmb3JtRGlkQmx1cihjb25zdCBX
ZWJDb3JlOjpOb2RlKik7CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbQkocmV2aXNpb24gNjAwOTgpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjk1LDExICs2OTUsNiBA
QCBTdHJpbmcgV2ViQ2hyb21lQ2xpZW50OjpnZW5lcmF0ZVJlcGxhY2VtCiAgICAgcmV0dXJuIFtb
bV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBnZW5lcmF0
ZVJlcGxhY2VtZW50RmlsZTpwYXRoXTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmZvcm1T
dGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2RlKiBub2RlKQotewotICAgIENhbGxVSURl
bGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6Zm9ybVN0YXRlRGlkQ2hhbmdlRm9y
Tm9kZTopLCBraXQoY29uc3RfY2FzdDxXZWJDb3JlOjpOb2RlKj4obm9kZSkpKTsKLX0KLQogdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OmZvcm1EaWRGb2N1cyhjb25zdCBXZWJDb3JlOjpOb2RlKiBub2Rl
KQogewogICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6Zm9y
bURpZEZvY3VzTm9kZTopLCBraXQoY29uc3RfY2FzdDxXZWJDb3JlOjpOb2RlKj4obm9kZSkpKTsK
SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCShyZXZpc2lv
biA2MDA5OCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDYgQEAgQGludGVyZmFjZSBOU09iamVjdCAoV2Vi
VUlEZWxlZ2F0ZVByaXZhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lOihXZWJGcmFtZSAqKWZyYW1l
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdGVuZXI6KGlkPFdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXI+
KWxpc3RlbmVyOwogCi0tICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZm9ybVN0YXRl
RGlkQ2hhbmdlRm9yTm9kZTooRE9NTm9kZSAqKW5vZGU7CiAtICh2b2lkKXdlYlZpZXc6KFdlYlZp
ZXcgKilzZW5kZXIgZm9ybURpZEZvY3VzTm9kZTooRE9NTm9kZSAqKW5vZGU7CiAtICh2b2lkKXdl
YlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZm9ybURpZEJsdXJOb2RlOihET01Ob2RlICopbm9kZTsK
IAo=
</data>
<flag name="review"
          id="41534"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57027</attachid>
            <date>2010-05-25 10:43:12 -0700</date>
            <delta_ts>2010-05-25 10:56:22 -0700</delta_ts>
            <desc>now with a saved ChangeLog</desc>
            <filename>DOMHanoi1.txt</filename>
            <type>text/plain</type>
            <size>4548</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDE3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDUtMjUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjIxCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MDA5NzM4PiBFeHRyZW1lIG1lbW9yeSBncm93dGggb24gRE9NIEhhbm9p
IHRlc3QKKworICAgICAgICBUaGUgbGFyZ2VzdCBjYXVzZSBvZiBtZW1vcnkgZ3Jvd3RoIG9uIHRo
aXMgdGVzdCB3ZXJlIGF1dG9yZWxlYXNlZCBET01Ob2RlIG9iamVjdHMgY3JlYXRlZAorICAgICAg
ICB0byBtYWtlIHdlYlZpZXc6Zm9ybVN0YXRlRGlkQ2hhbmdlRm9yTm9kZTogZGVsZWdhdGUgY2Fs
bHMuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOiAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudCk6CisgICAgICAgIERvbid0
IGNhbGwgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpIC0gc2luY2UgdGhlIGVsZW1lbnQgc3RhcnRz
IHdpdGggcmVmY291bnQgMCwgaXQncyBub3QKKyAgICAgICAgc2FmZSB0byBjYWxsIGZ1bmN0aW9u
cyB0aGF0IGFyZSBsaWtlbHkgdG8gY3JlYXRlIHRlbXBvcmFyeSB3cmFwcGVycyAod3JhcHBlciBk
ZXN0cnVjdG9yCisgICAgICAgIHdvdWxkIGJyaW5nIHJlZmNvdW50IGJhY2sgdG8gMCwgYW5kIGRl
c3Ryb3kgSFRNTFRleHRBcmVhRWxlbWVudCBmcm9tIHdpdGhpbiBpdHMgY29uc3RydWN0b3IpLgor
CiAyMDEwLTA1LTI1ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDA5OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNiBAQCBIVE1M
VGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50CiB7CiAgICAgQVNTRVJUKGhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpKTsKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRl
cmVyKHRydWUpOwotICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CiB9CiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29u
c3QKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2MDE3MikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUtMjUgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjIx
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MDA5NzM4PiBFeHRyZW1lIG1lbW9yeSBncm93dGgg
b24gRE9NIEhhbm9pIHRlc3QKKworICAgICAgICBSZW1vdmVkIGZvcm1TdGF0ZURpZENoYW5nZSBz
dXBwb3J0LCB3aGljaCBpcyBub3QgbmVlZGVkIGJ5IGFueSBjbGllbnQuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNocm9tZUNsaWVu
dDo6Zm9ybVN0YXRlRGlkQ2hhbmdlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW06CisgICAgICAgICogV2ViVmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oOgor
CiAyMDEwLTA1LTI1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNjAwOTgpCisrKyBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyAr
MTQzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXBsYWNlV2l0aEdlbmVy
YXRlZEZpbGVGb3JVcGxvYWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBwYXRoLCBXZWJDb3JlOjpT
dHJpbmcgJmdlbmVyYXRlZEZpbGVuYW1lKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBn
ZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHBhdGgpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2RlKik7
CisgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2Rl
KikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9ybURpZEZvY3VzKGNvbnN0IFdlYkNvcmU6Ok5v
ZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgZm9ybURpZEJsdXIoY29uc3QgV2ViQ29yZTo6Tm9kZSop
OwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0J
KHJldmlzaW9uIDYwMDk4KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5NSwxMSArNjk1LDYgQEAgU3RyaW5nIFdlYkNo
cm9tZUNsaWVudDo6Z2VuZXJhdGVSZXBsYWNlbQogICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlE
ZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgZ2VuZXJhdGVSZXBsYWNlbWVudEZp
bGU6cGF0aF07CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb3JtU3RhdGVEaWRDaGFuZ2Uo
Y29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKLXsKLSAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZp
ZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmZvcm1TdGF0ZURpZENoYW5nZUZvck5vZGU6KSwga2l0KGNv
bnN0X2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG5vZGUpKSk7Ci19Ci0KIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50Ojpmb3JtRGlkRm9jdXMoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKIHsKICAgICBDYWxs
VUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmZvcm1EaWRGb2N1c05vZGU6
KSwga2l0KGNvbnN0X2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG5vZGUpKSk7CkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaAkocmV2aXNpb24gNjAwOTgpCisrKyBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQxLDcgKzE0MSw2IEBAIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlVJRGVsZWdhdGVQcml2
YXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcmFtZTooV2ViRnJhbWUgKilmcmFtZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3RlbmVyOihpZDxXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyPilsaXN0ZW5lcjsKIAot
LSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGZvcm1TdGF0ZURpZENoYW5nZUZvck5v
ZGU6KERPTU5vZGUgKilub2RlOwogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGZv
cm1EaWRGb2N1c05vZGU6KERPTU5vZGUgKilub2RlOwogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3
ICopc2VuZGVyIGZvcm1EaWRCbHVyTm9kZTooRE9NTm9kZSAqKW5vZGU7CiAK
</data>
<flag name="review"
          id="41537"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>