<?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>36201</bug_id>
          
          <creation_ts>2010-03-16 16:49:28 -0700</creation_ts>
          <short_desc>hashchange event should be dispatched asynchronously</short_desc>
          <delta_ts>2010-05-10 19:20:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>38754</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Fisher (:fishd, Google)">fishd</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>s3lance</cc>
    
    <cc>steven_lai</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>200509</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-16 16:49:28 -0700</bug_when>
    <thetext>hashchange event should be dispatched asynchronously

see step #11 of the history traversal algorithm (section 6.5.9):
http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#traverse-the-history

this is a recent change to the spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200510</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-16 16:50:02 -0700</bug_when>
    <thetext>Related to this, the HashChangeEvent now has additional fields:
http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#hashchangeevent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200514</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-03-16 16:53:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/7761278&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201638</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-03-18 16:52:54 -0700</bug_when>
    <thetext>There&apos;s 3 interesting new loading events in the spec where we don&apos;t match:  hashchange, popstate, and pageshow.

In exploring these 3 closely related events, there&apos;s 4 quite relevant bugzillas, including this one:

https://bugs.webkit.org/show_bug.cgi?id=36201
https://bugs.webkit.org/show_bug.cgi?id=36202
https://bugs.webkit.org/show_bug.cgi?id=36334
https://bugs.webkit.org/show_bug.cgi?id=36335

While I plan to resolve each of these with its own patch, I&apos;ll to lay the groundwork for all 4 to easily be resolved with a single zero-change-in-behavior patch here.

It will be touching Document.h, so its better to get it out of the way once.  ;)

Stay tuned here...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201652</commentid>
    <comment_count>4</comment_count>
      <attachid>51114</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-03-18 17:27:03 -0700</bug_when>
    <thetext>Created attachment 51114
Lay the groundwork for fixing popstate, pageshow, and hashchange in similar and simple manners.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201661</commentid>
    <comment_count>5</comment_count>
      <attachid>51114</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-18 17:58:10 -0700</bug_when>
    <thetext>Comment on attachment 51114
Lay the groundwork for fixing popstate, pageshow, and hashchange in similar and simple manners.

&gt;  void Document::enqueueStorageEvent(PassRefPtr&lt;Event&gt; storageEvent)

It seems that you could rename this function to be non-storage-event-specific as part of this &quot;no behavior change&quot; step. Is there a reason you didn&apos;t?

&gt; +    void schedulePageshowEvent(bool persisted);
&gt; +    void scheduleHashchangeEvent(const String&amp; oldURL, const String&amp; newURL);

&gt; +    void schedulePopstateEvent(PassRefPtr&lt;SerializedScriptValue&gt; stateObject);

It&apos;s a little strange to use schedule for all these new functions, but enqueue for the old function.

&gt; -    m_document-&gt;dispatchWindowEvent(PageTransitionEvent::create(eventNames().pageshowEvent, true), m_document);
&gt; +    m_document-&gt;schedulePageshowEvent(true);

Boolean arguments where we pass constnat valuesstink. And what in the world is &quot;persisted&quot;?

&gt; +    KURL oldURL;
&gt;      bool hashChange = equalIgnoringFragmentIdentifier(url, m_URL) &amp;&amp; url.fragmentIdentifier() != m_URL.fragmentIdentifier();
&gt; +    if (hashChange)
&gt; +        oldURL = m_URL;

If all we need for the old URL is a string, it&apos;s more efficient to save it in a String local variable instead of KURL. I don&apos;t think we should bother with the &quot;if&quot; statement here -- it&apos;s OK to unconditionally save the old URL since it will just be a bump to a reference count.

Can you end up getting a lot of hashchange events all in a row? Is it OK to get a hashchange event, later, after the URL is no longer the same at all?

I’ll say r=me but there is room for improvement here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201870</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-03-19 09:00:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 51114 [details])
&gt; &gt;  void Document::enqueueStorageEvent(PassRefPtr&lt;Event&gt; storageEvent)
&gt; 
&gt; It seems that you could rename this function to be non-storage-event-specific
&gt; as part of this &quot;no behavior change&quot; step. Is there a reason you didn&apos;t?

Good call - I&apos;ll just change it to &quot;enqueueEvent&quot;

&gt; 
&gt; &gt; +    void schedulePageshowEvent(bool persisted);
&gt; &gt; +    void scheduleHashchangeEvent(const String&amp; oldURL, const String&amp; newURL);
&gt; 
&gt; &gt; +    void schedulePopstateEvent(PassRefPtr&lt;SerializedScriptValue&gt; stateObject);
&gt; 
&gt; It&apos;s a little strange to use schedule for all these new functions, but enqueue
&gt; for the old function.

You&apos;re right.

&gt; 
&gt; &gt; -    m_document-&gt;dispatchWindowEvent(PageTransitionEvent::create(eventNames().pageshowEvent, true), m_document);
&gt; &gt; +    m_document-&gt;schedulePageshowEvent(true);
&gt; 
&gt; Boolean arguments where we pass constnat valuesstink. And what in the world is
&gt; &quot;persisted&quot;?

&quot;persisted&quot; is the official name of the field in the PageTransitionEvent that tells you whether this is a fresh page load or a page cache load, and it is defined to be a bool.  In this same patch I also call schedulePageShowEvent(false).

I&apos;ll make an enum for this for clarities sake, anyways.

&gt; 
&gt; &gt; +    KURL oldURL;
&gt; &gt;      bool hashChange = equalIgnoringFragmentIdentifier(url, m_URL) &amp;&amp; url.fragmentIdentifier() != m_URL.fragmentIdentifier();
&gt; &gt; +    if (hashChange)
&gt; &gt; +        oldURL = m_URL;
&gt; 
&gt; If all we need for the old URL is a string, it&apos;s more efficient to save it in a
&gt; String local variable instead of KURL. I don&apos;t think we should bother with the
&gt; &quot;if&quot; statement here -- it&apos;s OK to unconditionally save the old URL since it
&gt; will just be a bump to a reference count.

Good point, will change.

&gt; 
&gt; Can you end up getting a lot of hashchange events all in a row? 

Currently, no.  Once they&apos;re asynchronous, yes.  

&gt;Is it OK to get a hashchange event, later, after the URL is no longer the same at all?

That&apos;s what the new fields in the hashchange event are about - to make sure the event captures the before and after url so script knows what the change was even though it happened &quot;in the past&quot;

&gt; 
&gt; I’ll say r=me but there is room for improvement here.

I&apos;ll address your feedback first!

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201874</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-03-19 09:05:30 -0700</bug_when>
    <thetext>
&gt; &gt; 
&gt; &gt; &gt; -    m_document-&gt;dispatchWindowEvent(PageTransitionEvent::create(eventNames().pageshowEvent, true), m_document);
&gt; &gt; &gt; +    m_document-&gt;schedulePageshowEvent(true);
&gt; &gt; 
&gt; &gt; Boolean arguments where we pass constnat valuesstink. And what in the world is
&gt; &gt; &quot;persisted&quot;?
&gt; 
&gt; &quot;persisted&quot; is the official name of the field in the PageTransitionEvent that
&gt; tells you whether this is a fresh page load or a page cache load, and it is
&gt; defined to be a bool.  In this same patch I also call
&gt; schedulePageShowEvent(false).
&gt; 
&gt; I&apos;ll make an enum for this for clarities sake, anyways.
&gt; 

After digging in to this one, the PageTransitionEvent itself is too hard-wired into using this bool, and has to remain as such for the purposes of the DOM/IDL/etc.

I&apos;m adding an enum to Document.h specifically for the Pageshow event helper that will keep clarity there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201955</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-03-19 11:46:08 -0700</bug_when>
    <thetext>Landed the groundwork in http://trac.webkit.org/changeset/56249

Now resolving this bug, bug 36202, and bug 36334 should all be very simple, but I won&apos;t have time to tackle it for a few days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201962</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-19 11:52:05 -0700</bug_when>
    <thetext>We use enqueueEvent sometimes, and postTask other times. I talked to Brady about standardizing on one mechanism, and also about the fact that we needn&apos;t be using it whenever a specification says so. In most cases, events to be posted are triggered by network loading, which is itself asynchronous, so the behavior is indistinguishable.

Since these particular events can be dispatched during synchronous operations, we do need to post them in order to match the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201963</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-19 11:57:55 -0700</bug_when>
    <thetext>Looks like this broke the chromium compile?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201964</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-19 11:58:31 -0700</bug_when>
    <thetext>sheriffbot&gt; bradee-oh, darin: r56249 appears to have broken Chromium Mac Release, Chromium Linux Release

Not sure why the EWS didn&apos;t catch it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201965</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-19 12:01:35 -0700</bug_when>
    <thetext>Just need to change callers to call enqueueEvent instead of enqueueStorageEvent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202006</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-19 13:10:25 -0700</bug_when>
    <thetext>Chromium build fixed in http://trac.webkit.org/changeset/56258.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203593</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-24 14:32:44 -0700</bug_when>
    <thetext>Attachment 51114 was posted by a committer and has review+, assigning to Brady Eidson for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203757</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-24 20:24:35 -0700</bug_when>
    <thetext>Looks like this can be closed, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203773</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-24 21:14:57 -0700</bug_when>
    <thetext>No, this bug is not fixed.  Please see comment #8.  Brady only landed the groundwork for fixing this bug.  There is still a follow-up patch that is required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203784</commentid>
    <comment_count>17</comment_count>
      <attachid>51114</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-24 21:51:36 -0700</bug_when>
    <thetext>Comment on attachment 51114
Lay the groundwork for fixing popstate, pageshow, and hashchange in similar and simple manners.

Ok.  Clearing the flags and obsoleting this landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218669</commentid>
    <comment_count>18</comment_count>
      <attachid>54630</attachid>
    <who name="Steven Lai">steven_lai</who>
    <bug_when>2010-04-28 15:28:20 -0700</bug_when>
    <thetext>Created attachment 54630
Patch

Revert hashchange to fire asynchronously</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218682</commentid>
    <comment_count>19</comment_count>
      <attachid>54630</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-04-28 16:01:02 -0700</bug_when>
    <thetext>Comment on attachment 54630
Patch

Thanks for doing this!

One question though - I&apos;m kind of surprised that no existing layouttest fails with this change.  Did we really not need to update any previous results?

r+ if that&apos;s the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218718</commentid>
    <comment_count>20</comment_count>
    <who name="Steven Lai">s3lance</who>
    <bug_when>2010-04-28 17:45:24 -0700</bug_when>
    <thetext>Just re-ran layout tests on r58441
The change didn&apos;t affect any existing layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218726</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-04-28 17:49:38 -0700</bug_when>
    <thetext>Okay, I stand by my r+ then!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218727</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-04-28 17:49:39 -0700</bug_when>
    <thetext>Okay, I stand by my r+ then!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218790</commentid>
    <comment_count>23</comment_count>
      <attachid>54630</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-04-28 21:15:15 -0700</bug_when>
    <thetext>Comment on attachment 54630
Patch

WebCore/ChangeLog:5
 +          Reverted hashchange() event back to async.
Is this description of the change really correct?  I didn&apos;t think hashchange was ever async before.  I would have expected this to read:  &quot;Change hashchange() event to be async.&quot; or something like that :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219614</commentid>
    <comment_count>24</comment_count>
    <who name="Steven Lai">s3lance</who>
    <bug_when>2010-04-30 14:16:23 -0700</bug_when>
    <thetext>It used to be async on before r51644

Please see:
http://trac.webkit.org/changeset/51644</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219698</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-04-30 23:34:06 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; It used to be async on before r51644
&gt; 
&gt; Please see:
&gt; http://trac.webkit.org/changeset/51644

Ah, I see.  Sorry for the spam then!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220337</commentid>
    <comment_count>26</comment_count>
    <who name="Steven Lai">steven_lai</who>
    <bug_when>2010-05-03 15:39:31 -0700</bug_when>
    <thetext>Hi,
Just want to ask why it&apos;s cq-?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220493</commentid>
    <comment_count>27</comment_count>
      <attachid>54630</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-03 23:52:42 -0700</bug_when>
    <thetext>Comment on attachment 54630
Patch

Clearing flags on attachment: 54630

Committed r58736: &lt;http://trac.webkit.org/changeset/58736&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220494</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-03 23:52:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220499</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-04 00:15:02 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58736 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220534</commentid>
    <comment_count>30</comment_count>
    <who name="Steven Lai">s3lance</who>
    <bug_when>2010-05-04 02:20:14 -0700</bug_when>
    <thetext>Should reopen this bug because the patch doesn&apos;t update HashChangeEvent to its new proposed interface (i.e the arguments for old hash and the new hash in the event callback).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220625</commentid>
    <comment_count>31</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-05-04 09:05:08 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Should reopen this bug because the patch doesn&apos;t update HashChangeEvent to its
&gt; new proposed interface (i.e the arguments for old hash and the new hash in the
&gt; event callback).

This bug is about the hash change event being dispatched asynchronously or not.

If other changes need to be made to bring the event up to spec, please file separate bugzillas for those changes, as they are logically separate tasks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220627</commentid>
    <comment_count>32</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-05-04 09:07:55 -0700</bug_when>
    <thetext>Also note that the FIXME in the code already references the bug for that  :)

https://bugs.webkit.org/show_bug.cgi?id=36335</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220638</commentid>
    <comment_count>33</comment_count>
    <who name="Steven Lai">s3lance</who>
    <bug_when>2010-05-04 10:16:02 -0700</bug_when>
    <thetext>oops
i see!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222412</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-07 09:12:55 -0700</bug_when>
    <thetext>I believe this caused:
http://build.webkit.org/results/GTK%20Linux%2064-bit%20Debug/r58943%20(5683)/fast/loader/stateobjects/document-destroyed-navigate-back-with-fragment-scroll-pretty-diff.html
to start being flaky on Gtk, and probably all bots.

The test probably doesn&apos;t want to print the hashChanged event?  Or certainly not depend on its firing order in relation to other events?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222415</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-07 09:16:38 -0700</bug_when>
    <thetext>Filed bug 38754 about the new test failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223683</commentid>
    <comment_count>36</comment_count>
    <who name="Steven Lai">s3lance</who>
    <bug_when>2010-05-10 19:20:00 -0700</bug_when>
    <thetext>submitted patch to https://bugs.webkit.org/show_bug.cgi?id=36335 to fix the failure without disabling the test case.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51114</attachid>
            <date>2010-03-18 17:27:03 -0700</date>
            <delta_ts>2010-03-24 21:51:35 -0700</delta_ts>
            <desc>Lay the groundwork for fixing popstate, pageshow, and hashchange in similar and simple manners.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>8715</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjIwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDMtMTggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDMg
b2YgdGhlIG5ldyBIVE1MNSBsb2FkaW5nIGV2ZW50cyBuZWVkIHRvIGJlIGFzeW5jaHJvbm91cy4K
KworICAgICAgICBMYXlpbmcgdGhlIGdyb3VuZHdvcmsgZm9yOgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyMDEKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MjAyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjMzNAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYzMzUKKworICAgICAgICBEb2N1bWVudCBhbHJlYWR5
IGhhZCBhbiBhc3luY2hyb25vdXMgZXZlbnQgZGVsaXZlcnkgbWVjaGFuaXNtIGZvciBzdG9yYWdl
IGV2ZW50cywgc28KKyAgICAgICAgd2UgY2FuIHJlcHVycG9zZSB0aGF0IGZvciBhbGwgYXN5bmMg
ZXZlbnRzLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGlj
aXRDbG9zZSk6IFVzZSBEb2N1bWVudDo6c2NoZWR1bGUqIGZvciB0aGUgcmVsYXRlZCBldmVudHMu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZW5xdWV1ZVN0b3JhZ2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cGVuZGluZ0V2ZW50VGltZXJGaXJlZCk6IFJlbmFtZWQg
ZnJvbSAic3RvcmFnZUV2ZW50VGltZXJGaXJlZCIKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpzdGF0ZVBvcHBlZCk6IFVzZSBEb2N1bWVudDo6c2NoZWR1bGVQb3BzdGF0ZUV2ZW50CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2NoZWR1bGVQYWdlc2hvd0V2ZW50KTogQWxsIFBhZ2Vz
aG93IGV2ZW50cyBhcmUgcGlwZWQgdGhyb3VnaCBoZXJlLgorICAgICAgICAgIFRoaXMgd2lsbCBi
ZSBtYWRlIGFzeW5jaHJvbm91cyBpbiBhIHNlcGFyYXRlIHBhdGNoLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnNjaGVkdWxlSGFzaGNoYW5nZUV2ZW50KTogQWxsIEhhc2hjaGFuZ2UgZXZl
bnRzIGFyZSBwaXBlZCB0aHJvdWdoIGhlcmUuCisgICAgICAgICAgVGhpcyB3aWxsIGJlIG1hZGUg
YXN5bmNocm9ub3VzIGluIGEgc2VwYXJhdGUgcGF0Y2guCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2NoZWR1bGVQb3BzdGF0ZUV2ZW50KTogQWxsIFBvcHN0YXRlIGV2ZW50cyBhcmUgcGlw
ZWQgdGhyb3VnaCBoZXJlLgorICAgICAgICAgIFRoaXMgd2lsbCBiZSBtYWRlIGFzeW5jaHJvbm91
cyBpbiBhIHNlcGFyYXRlIHBhdGNoLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorCisgICAg
ICAgICogaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRG
cmFtZUJhc2U6OnJlc3RvcmUpOiBVc2UgRG9jdW1lbnQ6OnNjaGVkdWxlUGFnZXNob3dFdmVudAor
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpsb2FkSW5TYW1lRG9jdW1lbnQpOiBVc2UgRG9jdW1lbnQ6OnNjaGVkdWxlSGFz
aGNoYW5nZUV2ZW50CisKIDIwMTAtMDMtMTggIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDU2MjAzKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTAsNyArMzkwLDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwg
Ym9vbCBpcwogICAgICwgbV9ub3JtYWxXb3JsZFdyYXBwZXJDYWNoZSgwKQogI2VuZGlmCiAgICAg
LCBtX3VzaW5nR2VvbG9jYXRpb24oZmFsc2UpCi0gICAgLCBtX3N0b3JhZ2VFdmVudFRpbWVyKHRo
aXMsICZEb2N1bWVudDo6c3RvcmFnZUV2ZW50VGltZXJGaXJlZCkKKyAgICAsIG1fcGVuZGluZ0V2
ZW50VGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5nRXZlbnRUaW1lckZpcmVkKQogI2lmIEVO
QUJMRShXTUwpCiAgICAgLCBtX2NvbnRhaW5zV01MQ29udGVudChmYWxzZSkKICNlbmRpZgpAQCAt
MTgyMCw5ICsxODIwLDkgQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAgSW1h
Z2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0JlZm9yZUxvYWRFdmVudHMoKTsKICAgICBJbWFnZUxv
YWRlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZEV2ZW50cygpOwogICAgIGRpc3BhdGNoV2luZG93TG9h
ZEV2ZW50KCk7Ci0gICAgZGlzcGF0Y2hXaW5kb3dFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLnBhZ2VzaG93RXZlbnQsIGZhbHNlKSwgdGhpcyk7CisgICAgc2No
ZWR1bGVQYWdlc2hvd0V2ZW50KGZhbHNlKTsKICAgICBpZiAobV9wZW5kaW5nU3RhdGVPYmplY3Qp
Ci0gICAgICAgIGRpc3BhdGNoV2luZG93RXZlbnQoUG9wU3RhdGVFdmVudDo6Y3JlYXRlKG1fcGVu
ZGluZ1N0YXRlT2JqZWN0LnJlbGVhc2UoKSkpOworICAgICAgICBzY2hlZHVsZVBvcHN0YXRlRXZl
bnQobV9wZW5kaW5nU3RhdGVPYmplY3QucmVsZWFzZSgpKTsKICAgICAKICAgICBpZiAoZikKICAg
ICAgICAgZi0+bG9hZGVyKCktPmhhbmRsZWRPbmxvYWRFdmVudHMoKTsKQEAgLTI5OTUsMjAgKzI5
OTUsMjAgQEAgdm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dMb2FkRXZlbnQoKQogCiB2b2lk
IERvY3VtZW50OjplbnF1ZXVlU3RvcmFnZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHN0b3JhZ2VF
dmVudCkKIHsKLSAgICBtX3N0b3JhZ2VFdmVudFF1ZXVlLmFwcGVuZChzdG9yYWdlRXZlbnQpOwot
ICAgIGlmICghbV9zdG9yYWdlRXZlbnRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3N0b3Jh
Z2VFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICBtX3BlbmRpbmdFdmVudFF1ZXVlLmFw
cGVuZChzdG9yYWdlRXZlbnQpOworICAgIGlmICghbV9wZW5kaW5nRXZlbnRUaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICBtX3BlbmRpbmdFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6c3RvcmFnZUV2ZW50VGltZXJGaXJlZChUaW1lcjxEb2N1bWVudD4qKQor
dm9pZCBEb2N1bWVudDo6cGVuZGluZ0V2ZW50VGltZXJGaXJlZChUaW1lcjxEb2N1bWVudD4qKQog
ewotICAgIEFTU0VSVCghbV9zdG9yYWdlRXZlbnRUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBWZWN0
b3I8UmVmUHRyPEV2ZW50PiA+IHN0b3JhZ2VFdmVudFF1ZXVlOwotICAgIHN0b3JhZ2VFdmVudFF1
ZXVlLnN3YXAobV9zdG9yYWdlRXZlbnRRdWV1ZSk7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdFdmVu
dFRpbWVyLmlzQWN0aXZlKCkpOworICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gZXZlbnRRdWV1
ZTsKKyAgICBldmVudFF1ZXVlLnN3YXAobV9wZW5kaW5nRXZlbnRRdWV1ZSk7CiAKICAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAg
IEl0ZXJhdG9yIGVuZCA9IHN0b3JhZ2VFdmVudFF1ZXVlLmVuZCgpOwotICAgIGZvciAoSXRlcmF0
b3IgaXQgPSBzdG9yYWdlRXZlbnRRdWV1ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
SXRlcmF0b3IgZW5kID0gZXZlbnRRdWV1ZS5lbmQoKTsKKyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0g
ZXZlbnRRdWV1ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGRpc3BhdGNoV2lu
ZG93RXZlbnQoKml0KTsKIH0KIApAQCAtNDUwMSw3ICs0NTAxLDcgQEAgdm9pZCBEb2N1bWVudDo6
c3RhdGVQb3BwZWQoU2VyaWFsaXplZFNjcgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYg
KGYtPmxvYWRlcigpLT5pc0NvbXBsZXRlKCkpCi0gICAgICAgIGRpc3BhdGNoV2luZG93RXZlbnQo
UG9wU3RhdGVFdmVudDo6Y3JlYXRlKHN0YXRlT2JqZWN0KSk7CisgICAgICAgIHNjaGVkdWxlUG9w
c3RhdGVFdmVudChzdGF0ZU9iamVjdCk7CiAgICAgZWxzZQogICAgICAgICBtX3BlbmRpbmdTdGF0
ZU9iamVjdCA9IHN0YXRlT2JqZWN0OwogfQpAQCAtNDc1Nyw2ICs0NzU3LDI2IEBAIHZvaWQgRG9j
dW1lbnQ6OmRpc3BsYXlCdWZmZXJNb2RpZmllZEJ5RW4KICAgICAgICAgbV9kZWNvZGVyLT5lbmNv
ZGluZygpLmRpc3BsYXlCdWZmZXIoYnVmZmVyLCBsZW4pOwogfQogCit2b2lkIERvY3VtZW50Ojpz
Y2hlZHVsZVBhZ2VzaG93RXZlbnQoYm9vbCBwZXJzaXN0ZWQpCit7CisgICAgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjMzNCBQYWdlc2hvdyBldmVu
dCBuZWVkcyB0byBmaXJlIGFzeW5jaHJvbm91c2x5LgorICAgIGRpc3BhdGNoV2luZG93RXZlbnQo
UGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50LCBw
ZXJzaXN0ZWQpLCB0aGlzKTsKK30KKwordm9pZCBEb2N1bWVudDo6c2NoZWR1bGVIYXNoY2hhbmdl
RXZlbnQoY29uc3QgU3RyaW5nJiAvKm9sZFVSTCovLCBjb25zdCBTdHJpbmcmIC8qbmV3VVJMKi8p
Cit7CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNjIwMSBIYXNoY2hhbmdlIGV2ZW50IG5lZWRzIHRvIGZpcmUgYXN5bmNocm9ub3VzbHkuCisg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjMz
NSBIYXNoY2hhbmdlIGV2ZW50IGlzIG5vdyBpdHMgb3duIGludGVyZmFjZSBhbmQgdGFrZXMgdHdv
CisgICAgLy8gICBVUkwgYXJndW1lbnRzIHdoaWNoIHdlIG5lZWQgdG8gcGFzcyBpbiBoZXJlLgor
ICAgIGRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaGFzaGNo
YW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKwordm9pZCBEb2N1bWVudDo6c2NoZWR1bGVQ
b3BzdGF0ZUV2ZW50KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzdGF0ZU9iamVj
dCkKK3sKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM2MjAyIFBvcHN0YXRlIGV2ZW50IG5lZWRzIHRvIGZpcmUgYXN5bmNocm9ub3VzbHkKKyAg
ICBkaXNwYXRjaFdpbmRvd0V2ZW50KFBvcFN0YXRlRXZlbnQ6OmNyZWF0ZShzdGF0ZU9iamVjdCkp
OworfQorCiAjaWYgRU5BQkxFKFhIVE1MTVApCiBib29sIERvY3VtZW50Ojppc1hIVE1MTVBEb2N1
bWVudCgpIGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDU2MjAzKQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjI4LDcgKzYyOCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCk7CiAKICAgICB2b2lkIGVucXVldWVT
dG9yYWdlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQgc3RvcmFnZUV2ZW50VGlt
ZXJGaXJlZChUaW1lcjxEb2N1bWVudD4qKTsKKyAgICB2b2lkIHBlbmRpbmdFdmVudFRpbWVyRmly
ZWQoVGltZXI8RG9jdW1lbnQ+Kik7CiAKICAgICBQYXNzUmVmUHRyPEV2ZW50PiBjcmVhdGVFdmVu
dChjb25zdCBTdHJpbmcmIGV2ZW50VHlwZSwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC05NjAsNiAr
OTYwLDkgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzOyB9CiAgICAgdm9pZCBz
ZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpIHsgbV9jb250YWluc1ZhbGlkaXR5U3R5bGVS
dWxlcyA9IHRydWU7IH0KIAorICAgIHZvaWQgc2NoZWR1bGVQYWdlc2hvd0V2ZW50KGJvb2wgcGVy
c2lzdGVkKTsKKyAgICB2b2lkIHNjaGVkdWxlSGFzaGNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYg
b2xkVVJMLCBjb25zdCBTdHJpbmcmIG5ld1VSTCk7CisKIHByb3RlY3RlZDoKICAgICBEb2N1bWVu
dChGcmFtZSosIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpOwogCkBAIC05OTgsNiArMTAwMSw4
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNyZWF0ZVN0eWxlU2VsZWN0b3IoKTsKIAorICAgIHZv
aWQgc2NoZWR1bGVQb3BzdGF0ZUV2ZW50KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzdGF0ZU9iamVjdCk7CisKICAgICBPd25QdHI8Q1NTU3R5bGVTZWxlY3Rvcj4gbV9zdHlsZVNl
bGVjdG9yOwogICAgIGJvb2wgbV9kaWRDYWxjdWxhdGVTdHlsZVNlbGVjdG9yOwogCkBAIC0xMjE1
LDggKzEyMjAsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3VzaW5nR2VvbG9jYXRpb247CiAK
LSAgICBUaW1lcjxEb2N1bWVudD4gbV9zdG9yYWdlRXZlbnRUaW1lcjsKLSAgICBWZWN0b3I8UmVm
UHRyPEV2ZW50PiA+IG1fc3RvcmFnZUV2ZW50UXVldWU7CisgICAgVGltZXI8RG9jdW1lbnQ+IG1f
cGVuZGluZ0V2ZW50VGltZXI7CisgICAgVmVjdG9yPFJlZlB0cjxFdmVudD4gPiBtX3BlbmRpbmdF
dmVudFF1ZXVlOwogCiAjaWYgRU5BQkxFKFdNTCkKICAgICBib29sIG1fY29udGFpbnNXTUxDb250
ZW50OwpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCShyZXZpc2lvbiA1NjIwMykKKysrIFdl
YkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsx
MDUsNyBAQCB2b2lkIENhY2hlZEZyYW1lQmFzZTo6cmVzdG9yZSgpCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY2hpbGRGcmFtZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fY2hpbGRG
cmFtZXNbaV0tPm9wZW4oKTsKIAotICAgIG1fZG9jdW1lbnQtPmRpc3BhdGNoV2luZG93RXZlbnQo
UGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50LCB0
cnVlKSwgbV9kb2N1bWVudCk7CisgICAgbV9kb2N1bWVudC0+c2NoZWR1bGVQYWdlc2hvd0V2ZW50
KHRydWUpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgaWYgKG1fZG9jdW1lbnQtPmhh
c0xpc3RlbmVyVHlwZShEb2N1bWVudDo6VE9VQ0hfTElTVEVORVIpKQogICAgICAgICBtX2RvY3Vt
ZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+bmVlZFRvdWNoRXZlbnRzKHRydWUpOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNTYyMDMpCisrKyBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NDQsNyArMTc0NCwxMSBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSW5TYW1lRG9jdW1lbnQoY29uCiAgICAgICAgIGhpc3Rv
cnkoKS0+dXBkYXRlQmFja0ZvcndhcmRMaXN0Rm9yRnJhZ21lbnRTY3JvbGwoKTsKICAgICB9CiAg
ICAgCisgICAgS1VSTCBvbGRVUkw7CiAgICAgYm9vbCBoYXNoQ2hhbmdlID0gZXF1YWxJZ25vcmlu
Z0ZyYWdtZW50SWRlbnRpZmllcih1cmwsIG1fVVJMKSAmJiB1cmwuZnJhZ21lbnRJZGVudGlmaWVy
KCkgIT0gbV9VUkwuZnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgaWYgKGhhc2hDaGFuZ2UpCisg
ICAgICAgIG9sZFVSTCA9IG1fVVJMOworICAgIAogICAgIG1fVVJMID0gdXJsOwogICAgIGhpc3Rv
cnkoKS0+dXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOwogCkBAIC0xNzc5LDcgKzE3
ODMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSW5TYW1lRG9jdW1lbnQoY29uCiAgICAgfQog
ICAgIAogICAgIGlmIChoYXNoQ2hhbmdlKSB7Ci0gICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCkt
PmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaGFzaGNoYW5n
ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2No
ZWR1bGVIYXNoY2hhbmdlRXZlbnQob2xkVVJMLCBtX1VSTCk7CiAgICAgICAgIG1fY2xpZW50LT5k
aXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgpOwogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54630</attachid>
            <date>2010-04-28 15:28:20 -0700</date>
            <delta_ts>2010-05-03 23:52:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>hashchange-async.patch</filename>
            <type>text/plain</type>
            <size>4472</size>
            <attacher name="Steven Lai">steven_lai</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODQzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDQtMjggIFN0ZXZlbiBMYWkgIDxzdGV2ZW5fbGFpQGFzaWEu
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJldmVydGVkIGhhc2hjaGFuZ2UoKSBldmVudCBiYWNrIHRvIGFzeW5jLgorICAgICAgICAo
VGhpcyBjaGFuZ2UgZG9lcyBub3QgdXBkYXRlIEhhc2hDaGFuZ2VFdmVudCB0byBpdHMgbmV3IHBy
b3Bvc2VkIGludGVyZmFjZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM2MjAxCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzc3ODA3OTQKKyAgICAgICAg
cmRhcjovL3Byb2JsZW0vNzc2MTI3OCAocGFydGlhbCBmaXgpCisKKyAgICAgICAgVGVzdHM6IGZh
c3QvbG9hZGVyL2hhc2hjaGFuZ2UtZXZlbnQtYXN5bmMuaHRtbAorCisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDogcmV2ZXJ0ZWQgaGFzaGNoYW5nZSgpIGV2ZW50IGJhY2sgdG8gYXN5bmMKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplbnF1ZXVlSGFzaGNoYW5nZUV2ZW50KToKKwogMjAx
MC0wNC0yOCAgxLBzbWFpbCBEw7ZubWV6ICA8aXNtYWlsQG5hbXRyYWMub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNTc5
NDEpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NDEs
MTAgKzQ4NDEsOSBAQCB2b2lkIERvY3VtZW50OjplbnF1ZXVlUGFnZXNob3dFdmVudChQYWdlCiAK
IHZvaWQgRG9jdW1lbnQ6OmVucXVldWVIYXNoY2hhbmdlRXZlbnQoY29uc3QgU3RyaW5nJiAvKm9s
ZFVSTCovLCBjb25zdCBTdHJpbmcmIC8qbmV3VVJMKi8pCiB7Ci0gICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjIwMSBIYXNoY2hhbmdlIGV2ZW50
IG5lZWRzIHRvIGZpcmUgYXN5bmNocm9ub3VzbHkuCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjMzNSBIYXNoY2hhbmdlIGV2ZW50IGlzIG5v
dyBpdHMgb3duIGludGVyZmFjZSBhbmQgdGFrZXMgdHdvCiAgICAgLy8gICBVUkwgYXJndW1lbnRz
IHdoaWNoIHdlIG5lZWQgdG8gcGFzcyBpbiBoZXJlLgotICAgIGRpc3BhdGNoV2luZG93RXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaGFzaGNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaGFzaGNoYW5n
ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVBvcHN0
YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNTg0MzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNC0yOCAgU3RldmVuIExhaSAgPHN0ZXZl
bl9sYWlAYXNpYS5hcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdCBoYXNoY2hhbmdlKCkgZXZlbnQgaXMgZmlyZWQgaW4gYXN5bmNo
cm9ub3VzIG1hbm5lci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM2MjAxCisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9oYXNoY2hhbmdlLWV2ZW50LWFz
eW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIvaGFzaGNoYW5n
ZS1ldmVudC1hc3luYy5odG1sOiBBZGRlZC4KKwogMjAxMC0wNC0yOCAgT2phbiBWYWZhaSAgPG9q
YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvaGFzaGNoYW5nZS1ldmVudC1hc3luYy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvaGFzaGNoYW5nZS1l
dmVudC1hc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2xvYWRlci9oYXNoY2hhbmdlLWV2ZW50LWFzeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5IEBACitUaGlzIHRlc3QgY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGUgaGFzaGNo
YW5nZSBldmVudCBpcyBmaXJlZCBfX2Fuc3luY2hyb25vdXNseV9fIHdoZW4gdGhlIHZhbHVlIG9m
IGxvY2F0aW9uLmhhc2ggY2hhbmdlcy4KK0l0IGFzc3VtZXMgdGhlcmUgaXMgYSBoYXNoY2hhbmdl
IGV2ZW50IGZvciBlYWNoIGxvY2F0aW9uLmhhc2ggY2hhbmdlLgorCit1cGRhdGVIYXNoKCIjZm9v
IikKK3VwZGF0ZUhhc2goIiNiYXIiKQoraGFzaENoYW5nZUhhbmRsZXIoKQoraGFzaENoYW5nZUhh
bmRsZXIoKQorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9oYXNoY2hh
bmdlLWV2ZW50LWFzeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvaGFzaGNoYW5nZS1ldmVudC1hc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9sb2FkZXIvaGFzaGNoYW5nZS1ldmVudC1hc3luYy5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU1IEBACis8aHRtbD4KKzxib2R5PgorICAgIDxkaXY+CisgICAgVGhpcyB0ZXN0
IGNoZWNrcyB0byBtYWtlIHN1cmUgdGhlIGhhc2hjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgX19hbnN5
bmNocm9ub3VzbHlfXyB3aGVuIHRoZSB2YWx1ZSBvZiBsb2NhdGlvbi5oYXNoIGNoYW5nZXMuPGJy
Lz4KKyAgICBJdCBhc3N1bWVzIHRoZXJlIGlzIGEgaGFzaGNoYW5nZSBldmVudCBmb3IgZWFjaCBs
b2NhdGlvbi5oYXNoIGNoYW5nZS48YnIvPgorICAgIDxici8+CisgICAgPC9kaXY+CisgICAgPGRp
diBpZD0ibXNnIj48L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQi
PgorPCEtLQorCit2YXIgaGFzaENoYW5naW5nID0gZmFsc2U7Cit2YXIgZmFpbGVkID0gZmFsc2U7
Cit2YXIgbXNncyA9IFtdOworCit2YXIgbGMgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXI7
CitpZiAobGMpIHsKKyAgICBsYy5kdW1wQXNUZXh0KCk7CisgICAgbGMud2FpdFVudGlsRG9uZSgp
OworfQorCitmdW5jdGlvbiB1cGRhdGVIYXNoIChoYXNoKSB7CisgICAgbXNncy5wdXNoKCd1cGRh
dGVIYXNoKCInICsgaGFzaCArICciKScpOworICAgIGxvY2F0aW9uLmhyZWYgPSBoYXNoOworfTsK
KworZnVuY3Rpb24gbG9hZEhhbmRsZXIgKCkgeworICAgIGhhc2hDaGFuZ2luZyA9IHRydWU7Cisg
ICAgdXBkYXRlSGFzaCgnI2ZvbycpOworICAgIHVwZGF0ZUhhc2goJyNiYXInKTsKKyAgICBoYXNo
Q2hhbmdpbmcgPSBmYWxzZTsKK307CisKK3ZhciBjbnQgPSAwOworZnVuY3Rpb24gaGFzaENoYW5n
ZUhhbmRsZXIgKCkgeworICAgIG1zZ3MucHVzaCgnaGFzaENoYW5nZUhhbmRsZXIoKScpOworICAg
IGlmIChoYXNoQ2hhbmdpbmcpIHsKKyAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICB9CisgICAg
aWYgKCsrY250ID09IDIpIHsKKyAgICAgICAgbXNncy5wdXNoKCcnLCBmYWlsZWQgPyAiRkFJTFVS
RSIgOiAiU1VDQ0VTUyIpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXNnIiku
aW5uZXJIVE1MID0gbXNncy5qb2luKCc8YnIvPicpOworICAgICAgICBpZiAobGMpIHsKKyAgICAg
ICAgICAgIGxjLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK3dpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZEhhbmRsZXIsIGZhbHNlKTsKK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgaGFzaENoYW5nZUhhbmRsZXIsIGZhbHNlKTsKKwor
Ly8tLT4KKzwvc2NyaXB0PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>