<?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>60790</bug_id>
          
          <creation_ts>2011-05-13 12:49:57 -0700</creation_ts>
          <short_desc>Make DocumentEventQueue spawn a Task for each asynchronous event</short_desc>
          <delta_ts>2016-08-01 11:59:25 -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>WONTFIX</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="David Grogan">dgrogan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dimich</cc>
    
    <cc>levin</cc>
    
    <cc>mihaip</cc>
    
    <cc>pfeldman</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>403769</commentid>
    <comment_count>0</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-13 12:49:57 -0700</bug_when>
    <thetext>Make EventQueue spawn a Task for each asynchronous event</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403781</commentid>
    <comment_count>1</comment_count>
      <attachid>93496</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-13 13:12:06 -0700</bug_when>
    <thetext>Created attachment 93496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403788</commentid>
    <comment_count>2</comment_count>
      <attachid>93497</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-13 13:18:16 -0700</bug_when>
    <thetext>Created attachment 93497
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403803</commentid>
    <comment_count>3</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-13 13:31:12 -0700</bug_when>
    <thetext>Dave, could you take a look at this patch when you get a chance?

This is the smallest change extracted from bug 57789.  I fear I butchered object-lifetime management; I don&apos;t know how EventQueue, Events and Tasks get de-allocated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403911</commentid>
    <comment_count>4</comment_count>
      <attachid>93497</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-05-13 15:22:53 -0700</bug_when>
    <thetext>Comment on attachment 93497
Patch

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

&gt; Source/WebCore/dom/EventQueue.cpp:51
&gt; +    : m_scriptExecutionContext(context)

How do you know that EventQueue won&apos;t outlive context?

&gt; Source/WebCore/dom/EventQueue.cpp:90
&gt; +      : m_event(event)

4 space indent

&gt; Source/WebCore/dom/EventQueue.cpp:94
&gt; +    }

Add blank line.

&gt; Source/WebCore/dom/EventQueue.cpp:96
&gt; +    EventQueue* m_eventQueue;

Should this be a ref ptr? How do you know that m_eventQueue will still be alive when this runs?

&gt; Source/WebCore/dom/EventQueue.cpp:108
&gt; +        m_eventTaskMap.remove(event);

You should be able to call remove alone and not even do contains.

&gt; Source/WebCore/dom/EventQueue.cpp:139
&gt; +    bool found = m_eventTaskMap.contains(event);

Why not just use get directly and compare the result to 0?

Or you could use &quot;take&quot; and then just avoid calling &quot;removeEvent&quot; when the event is cancelled.

&gt; Source/WebCore/dom/EventQueue.cpp:140
&gt; +    if (found) {

Perfer return early.

If (!found)
    return false;

&gt; Source/WebCore/dom/EventQueue.cpp:149
&gt; +    m_eventTaskMap.clear();

Don&apos;t you need to iterate through this map and call cancel on each task?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404010</commentid>
    <comment_count>5</comment_count>
      <attachid>93497</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-13 19:39:54 -0700</bug_when>
    <thetext>Comment on attachment 93497
Patch

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

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:51
&gt;&gt; +    : m_scriptExecutionContext(context)
&gt; 
&gt; How do you know that EventQueue won&apos;t outlive context?

The only instantiator of EventQueue is Document.  Document only exposes a raw EventQueue pointer to clients, not a PassRefPtr.  So EventQueue should only be destructed when Context is destructed.  Is that accurate?

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:96
&gt;&gt; +    EventQueue* m_eventQueue;
&gt; 
&gt; Should this be a ref ptr? How do you know that m_eventQueue will still be alive when this runs?

I&apos;m not sure and I don&apos;t, respectively :(
This is the kind of thing I was referring to in comment 3 with &quot;I fear I butchered object-lifetime management; I don&apos;t know how EventQueue, Events and Tasks get de-allocated.&quot;

I _think_ keeping EventQueue as a raw pointer should be ok if EventDispatcherTask exposes a flag-setting method, e.g. &quot;eventQueueIsDead&quot;, that EventQueue&apos;s destructor calls on each of its tasks.  The task would check the flag before calling m_eventQueue-&gt;removeEvent.  Would that work?

Is there a test that you know of that would have exposed this potential null pointer dereference?  I&apos;ve just been running the layout tests.

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:149
&gt;&gt; +    m_eventTaskMap.clear();
&gt; 
&gt; Don&apos;t you need to iterate through this map and call cancel on each task?

Yes, that would be better.  I&apos;ll add that.  Currently, I don&apos;t think it matters in practice because canceledQueuedEvents is only called in Document::detach, after stopActiveDOMObjects is called.  But you&apos;re right, cancelling each task is more true to the function name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404011</commentid>
    <comment_count>6</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-13 19:41:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 93497 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93497&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/EventQueue.cpp:51
&gt; &gt;&gt; +    : m_scriptExecutionContext(context)
&gt; &gt; 
&gt; &gt; How do you know that EventQueue won&apos;t outlive context?
&gt; 
&gt; The only instantiator of EventQueue is Document.  Document only exposes a raw EventQueue pointer to clients, not a PassRefPtr.  So EventQueue should only be destructed when Context is destructed.  Is that accurate?

&quot;Context&quot; should be &quot;Document&quot;, sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404715</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-05-16 14:22:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 93497 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93497&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/EventQueue.cpp:51
&gt; &gt;&gt; +    : m_scriptExecutionContext(context)
&gt; &gt; 
&gt; &gt; How do you know that EventQueue won&apos;t outlive context?
&gt; 
&gt; The only instantiator of EventQueue is Document.  Document only exposes a raw EventQueue pointer to clients, not a PassRefPtr.  So EventQueue should only be destructed when Context is destructed.  Is that accurate?
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/EventQueue.cpp:96
&gt; &gt;&gt; +    EventQueue* m_eventQueue;
&gt; &gt; 
&gt; &gt; Should this be a ref ptr? How do you know that m_eventQueue will still be alive when this runs?
&gt; 
&gt; I&apos;m not sure and I don&apos;t, respectively :(
&gt; This is the kind of thing I was referring to in comment 3 with &quot;I fear I butchered object-lifetime management; I don&apos;t know how EventQueue, Events and Tasks get de-allocated.&quot;
&gt; 
&gt; I _think_ keeping EventQueue as a raw pointer should be ok if EventDispatcherTask exposes a flag-setting method, e.g. &quot;eventQueueIsDead&quot;, that EventQueue&apos;s destructor calls on each of its tasks.  The task would check the flag before calling m_eventQueue-&gt;removeEvent.  Would that work?
&gt; 
&gt; Is there a test that you know of that would have exposed this potential null pointer dereference?  I&apos;ve just been running the layout tests.


If EventQueue cancels all tasks when it dies and you do a change to remove tasks from the map when they are cancelled. Then when a task is in the cancelled state, it can just return and not even access EventQueue.

That should solve the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406102</commentid>
    <comment_count>8</comment_count>
      <attachid>93497</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-18 16:44:13 -0700</bug_when>
    <thetext>Comment on attachment 93497
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/dom/EventQueue.cpp:51
&gt;&gt;&gt;&gt;&gt; +    : m_scriptExecutionContext(context)
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; How do you know that EventQueue won&apos;t outlive context?
&gt;&gt;&gt; 
&gt;&gt;&gt; The only instantiator of EventQueue is Document.  Document only exposes a raw EventQueue pointer to clients, not a PassRefPtr.  So EventQueue should only be destructed when Context is destructed.  Is that accurate?
&gt;&gt; 
&gt;&gt; &quot;Context&quot; should be &quot;Document&quot;, sorry.
&gt; 
&gt; If EventQueue cancels all tasks when it dies and you do a change to remove tasks from the map when they are cancelled. Then when a task is in the cancelled state, it can just return and not even access EventQueue.
&gt; 
&gt; That should solve the issue.

Ah, yes.  That is pretty straightforward.

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:90
&gt;&gt; +      : m_event(event)
&gt; 
&gt; 4 space indent

done

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:94
&gt;&gt; +    }
&gt; 
&gt; Add blank line.

done

&gt;&gt;&gt; Source/WebCore/dom/EventQueue.cpp:96
&gt;&gt;&gt; +    EventQueue* m_eventQueue;
&gt;&gt; 
&gt;&gt; Should this be a ref ptr? How do you know that m_eventQueue will still be alive when this runs?
&gt; 
&gt; I&apos;m not sure and I don&apos;t, respectively :(
&gt; This is the kind of thing I was referring to in comment 3 with &quot;I fear I butchered object-lifetime management; I don&apos;t know how EventQueue, Events and Tasks get de-allocated.&quot;
&gt; 
&gt; I _think_ keeping EventQueue as a raw pointer should be ok if EventDispatcherTask exposes a flag-setting method, e.g. &quot;eventQueueIsDead&quot;, that EventQueue&apos;s destructor calls on each of its tasks.  The task would check the flag before calling m_eventQueue-&gt;removeEvent.  Would that work?
&gt; 
&gt; Is there a test that you know of that would have exposed this potential null pointer dereference?  I&apos;ve just been running the layout tests.

Do we have existing types of tests that would catch object-lifetime problems?

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:108
&gt;&gt; +        m_eventTaskMap.remove(event);
&gt; 
&gt; You should be able to call remove alone and not even do contains.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406105</commentid>
    <comment_count>9</comment_count>
      <attachid>94003</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-18 16:49:40 -0700</bug_when>
    <thetext>Created attachment 94003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406113</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-05-18 17:05:29 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 93497 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93497&amp;action=review
&gt; &gt; Is there a test that you know of that would have exposed this potential null pointer dereference?  I&apos;ve just been running the layout tests.
&gt; 
&gt; Do we have existing types of tests that would catch object-lifetime problems?

That is a really general issue. So the answer is yes. But I think you mean do we have tests for EventQueue to detect lifetime issues with respect to ScriptExecutionContext, etc.

I don&apos;t know. I would guess not unless you write them.

But there are layout tests (which are just html files basically) that test various things. People around you should know about them if you need assistance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406116</commentid>
    <comment_count>11</comment_count>
      <attachid>94003</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-05-18 17:11:31 -0700</bug_when>
    <thetext>Comment on attachment 94003
Patch

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

Just a few last comments.

&gt; Source/WebCore/dom/EventQueue.cpp:86
&gt; +        m_isCancelled = true;

You could release m_event here.

&gt; Source/WebCore/dom/EventQueue.cpp:113
&gt; +    m_eventTaskMap.add(event, task.get());

Ideally event.release() (since you don&apos;t need event anymore).

&gt; Source/WebCore/dom/EventQueue.cpp:138
&gt; +    if (task) {

Personally, I&apos;d find

  if (!task)
     return false;
  task-&gt;cancel();
  removeEvent(event);
  return true;

to be more readable.

&gt; Source/WebCore/dom/EventQueue.h:47
&gt;  

If we get rid of the RefCounted nature of EventQueue, it makes it a lot clearer that there aren&apos;t lifetime issues.

I think the reason for making it refcounted (which you pointed out was https://bugs.webkit.org/show_bug.cgi?id=55512) is now gone.

&gt; Source/WebCore/dom/EventQueue.h:49
&gt; +    virtual ~EventQueue();

Why did this become virtual? (I don&apos;t see something new being derived from EventQueue.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406218</commentid>
    <comment_count>12</comment_count>
      <attachid>94003</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-18 20:14:08 -0700</bug_when>
    <thetext>Comment on attachment 94003
Patch

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

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:86
&gt;&gt; +        m_isCancelled = true;
&gt; 
&gt; You could release m_event here.

Done.

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:113
&gt;&gt; +    m_eventTaskMap.add(event, task.get());
&gt; 
&gt; Ideally event.release() (since you don&apos;t need event anymore).

I made this change, but what does it buy us?  Is the idea to avoid a ref + deref or is there more that I&apos;m missing?

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:138
&gt;&gt; +    if (task) {
&gt; 
&gt; Personally, I&apos;d find
&gt; 
&gt;   if (!task)
&gt;      return false;
&gt;   task-&gt;cancel();
&gt;   removeEvent(event);
&gt;   return true;
&gt; 
&gt; to be more readable.

done

&gt;&gt; Source/WebCore/dom/EventQueue.h:47
&gt;&gt;  
&gt; 
&gt; If we get rid of the RefCounted nature of EventQueue, it makes it a lot clearer that there aren&apos;t lifetime issues.
&gt; 
&gt; I think the reason for making it refcounted (which you pointed out was https://bugs.webkit.org/show_bug.cgi?id=55512) is now gone.

Removed RefCounted, thanks for pointing this out.

&gt;&gt; Source/WebCore/dom/EventQueue.h:49
&gt;&gt; +    virtual ~EventQueue();
&gt; 
&gt; Why did this become virtual? (I don&apos;t see something new being derived from EventQueue.)

Because many years ago I was instructed to &quot;always declare destructors as virtual&quot; because you don&apos;t know if your class will ever be used as a base.

I suppose we don&apos;t because we don&apos;t want the extra runtime indirection?  Or we don&apos;t want a reader mistaking the virtual destructor for a signal indicating the existence of a derived class?

Reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406219</commentid>
    <comment_count>13</comment_count>
      <attachid>94036</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-18 20:15:46 -0700</bug_when>
    <thetext>Created attachment 94036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406234</commentid>
    <comment_count>14</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-05-18 20:55:12 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 94003 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94003&amp;action=review

&gt; &gt;&gt; Source/WebCore/dom/EventQueue.cpp:113
&gt; &gt;&gt; +    m_eventTaskMap.add(event, task.get());
&gt; &gt; 
&gt; &gt; Ideally event.release() (since you don&apos;t need event anymore).
&gt; 
&gt; I made this change, but what does it buy us?  Is the idea to avoid a ref + deref or is there more that I&apos;m missing?

That&apos;s all.  Just nice to do when you no longer need an object.

&gt; &gt;&gt; Source/WebCore/dom/EventQueue.h:49
&gt; &gt;&gt; +    virtual ~EventQueue();
&gt; &gt; 
&gt; &gt; Why did this become virtual? (I don&apos;t see something new being derived from EventQueue.)
&gt; 
&gt; Because many years ago I was instructed to &quot;always declare destructors as virtual&quot; because you don&apos;t know if your class will ever be used as a base.
&gt; 
&gt; I suppose we don&apos;t because we don&apos;t want the extra runtime indirection? 

Yes afaik. (It potentially slows things down.)

&gt; Or we don&apos;t want a reader mistaking the virtual destructor for a signal indicating the existence of a derived class?

WebKit abhors virtuals. (Basically, you can use them but you must prove that you really need it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406340</commentid>
    <comment_count>15</comment_count>
      <attachid>94036</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-19 05:04:10 -0700</bug_when>
    <thetext>Comment on attachment 94036
Patch

Clearing flags on attachment: 94036

Committed r86838: &lt;http://trac.webkit.org/changeset/86838&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406341</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-19 05:04:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413132</commentid>
    <comment_count>17</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-05-31 21:53:50 -0700</bug_when>
    <thetext>According to tonistiigi, this regressed inspector operation (https://bugs.webkit.org/show_bug.cgi?id=61653).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440704</commentid>
    <comment_count>18</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-07-21 16:16:48 -0700</bug_when>
    <thetext>rolled back in bug 61653</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476373</commentid>
    <comment_count>19</comment_count>
      <attachid>109363</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-09-30 16:07:10 -0700</bug_when>
    <thetext>Created attachment 109363
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476409</commentid>
    <comment_count>20</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-09-30 16:39:46 -0700</bug_when>
    <thetext>(Continuing from the comments in bug 61653)

This patch caused the script line numbers in web inspector to not scroll when the script is paused.

The problem is that pausing causes WTF::MainThread&apos;s functionQueue to no longer be serviced, preventing any tasks that were posted to the main thread from being dispatched, including the ScrollEvent&apos;s EventTask.  Scrolling worked before this patch because ActiveDOMObjects (including DOMTimers, which had been used) are only stopped on the page being inspected, not globally.

Dmitry described other effects:
&quot;&quot;&quot;
For example, suspending the script in a single page will stop all pages in the other tabs of the same single-process browser from doing Workers, Databases, FileAPI, media player and other things which use callOnMainThread().

If it was possible to suspend tasks per-ScriptExecutionContext, then it would be a better fix. The David&apos;s change would not regress things then because the main thread queue would be only suspended for the paused page. It would also avoid freezing various internal things that use callOnMainThread() for other, unrelated, pages.
&quot;&quot;&quot;

So... Yury or Pavel, could you comment on how feasible suspending tasks per-ScriptExecutionContext is and how much work it would be?


(I think this is the same problem causing the behavior described in bug 26801.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479103</commentid>
    <comment_count>21</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-10-06 06:01:17 -0700</bug_when>
    <thetext>&gt; So... Yury or Pavel, could you comment on how feasible suspending tasks per-ScriptExecutionContext is and how much work it would be?

I don&apos;t think you are asking the right people. But from what I know, suspending tasks on particular ScriptExecutionContext does not much sense since there may be synchronous interaction between them. What was motivation behind this change again? It sounds like it won&apos;t make things simpler anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479643</commentid>
    <comment_count>22</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-06 17:15:01 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; So... Yury or Pavel, could you comment on how feasible suspending tasks per-ScriptExecutionContext is and how much work it would be?
&gt; 
&gt; I don&apos;t think you are asking the right people.

Oh, yikes, could you direct me to someone who would be more appropriate, if you know who that would be?

&gt; But from what I know, suspending tasks on particular ScriptExecutionContext does not much sense since there may be synchronous interaction between them.   What was motivation behind this change again? It sounds like it won&apos;t make things simpler anymore.

Document currently maintains am event queue in addition to the main task queue.  Document uses this other queue for asynchronous DOM events.  (Async events are added to the queue and dispatched when a DOMTimer(0) fires.) Having two queues is problematic for reasons that I cannot express better than Dmitry Titov, so:

&quot;Having 2 queues will sooner or later cause problems with ordering of tasks, termination, suspension and other things that all require some control on how queues operate.&quot;

So, that&apos;s the rationale.  I&apos;m involved because I want to fire IndexedDB&apos;s asynchronous events from a worker so wanted to move the EventQueue from Document up into ScriptExecutionContext.

I don&apos;t consider myself well-enough armed to debate the merits of collapsing the two queues into one, but it seems odd that this only affects single-process safari.  Maybe I&apos;m showing my ignorance, but If the correct behavior is to pause the global task queue, why isn&apos;t single-process chrome affected?  (This question isn&apos;t directed at Pavel necessarily, just to anyone who might know.)

Help and explanations are very welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479677</commentid>
    <comment_count>23</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-10-06 18:01:29 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; So... Yury or Pavel, could you comment on how feasible suspending tasks per-ScriptExecutionContext is and how much work it would be?
&gt; 
&gt; I don&apos;t think you are asking the right people. But from what I know, suspending tasks on particular ScriptExecutionContext does not much sense since there may be synchronous interaction between them. What was motivation behind this change again? It sounds like it won&apos;t make things simpler anymore.

Things seem to be in need of some fixing anyways :-) To rehash the issues, the &apos;pause&apos; button in the debugger seems to freeze the queue used in callOnMainThread(). At the same time it tries to freeze SuspendableTimers, but only for the SWC under debugging. This already can cause the script in other pages to receive a JS callback on timer and synchronously operate on JS objects of the &apos;paused&apos; page if they can cross-script each other. So it is already possible to modify the page under &apos;pause&apos;.

At the same time, dev tools are implemented as HTML/JS page(s) as well - so they need some timers/events to be delivered to function properly. In case of in case of single-process environment, they need to be unfrozen and function in the same process with the debugged page. It randomly (?) turned out that David&apos;s patch that moved scroll events from timer-delivered to callOnMainThread-delivered broke dev tools pages because they don&apos;t update on scroll anymore when a script in the debugger is paused.

It doesn&apos;t seem the patch makes something more complicated then it already is. 

As a long term fix, I can see either disable having dev tools and debugged pages in the same process at all (and freeze all the pages in that process even better then today, with some visual cues as described in bug 26801), or we could become better in freezing only Tasks/Timers for debugged pages and continue to run others, while accepting that JS objects can be modified or even destroyed during &apos;pause&apos; in the debugger from underneath us in case when pages cross-script each other, as is already possible today. Not sure how bad it is. 

I think that the question to dev tools folks was about this ^, how to debug a page when dev tools (also a page) are in the same process and use the same set of queues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486514</commentid>
    <comment_count>24</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-18 18:50:10 -0700</bug_when>
    <thetext>In the short term, to get IndexedDB to run on workers, can I change EventQueue to keep the current behavior for Document but post EventDispatcherTasks for WorkerContexts?

I posted a patch that does that a few months ago, I could just update it: https://bugs.webkit.org/attachment.cgi?id=90833&amp;action=review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488668</commentid>
    <comment_count>25</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-10-21 14:32:33 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; In the short term, to get IndexedDB to run on workers, can I change EventQueue to keep the current behavior for Document but post EventDispatcherTasks for WorkerContexts?
&gt; 
&gt; I posted a patch that does that a few months ago, I could just update it: https://bugs.webkit.org/attachment.cgi?id=90833&amp;action=review

This indeed sounds reasonable.

I think that&apos; in light of complications that were uncovered by the attempt to do PostTask for each event instead of keeping a separate queue, your idea of keeping the implementation separate is a good one. While it&apos;s sad to see that a dual-queue solution grew into the code deep enough to become difficult to change, that investigation can happen separately from your work on IDB in Workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570051</commentid>
    <comment_count>26</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-03-02 17:16:00 -0800</bug_when>
    <thetext>I&apos;m not going to work on this anytime soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216193</commentid>
    <comment_count>27</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-08-01 11:59:25 -0700</bug_when>
    <thetext>I am going to close this, as the entire discussion is moot now that Web Inspector is always out of process from the inspected page. And the original author has no intent of working on this further, and it&apos;s not needed for any other purpose AFAICT.

It would be nice to unify all work enqueued in a web content process&apos;s event loop, but I don&apos;t think anyone is advocating to do that with approach taken here (using ScriptExecutionContext::Task).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93496</attachid>
            <date>2011-05-13 13:12:06 -0700</date>
            <delta_ts>2011-05-13 13:18:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60790-20110513131205.patch</filename>
            <type>text/plain</type>
            <size>8741</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY0NDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MGUzMDE5YjhjZmY2ZWVi
MjlmZjIwYjcwYzNmYzE3ODI4OGY1NjM5Li5hMTJjZWNlMzVlNDYxNjkwY2ZhZGFjMTkzODNlMzdj
NjYxYTZiNjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDUtMTMgIERhdmlk
IEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRXZlbnRRdWV1ZSBwb3N0IGEgVGFzayB0byB0
aGUgdGFzayBxdWV1ZSBmb3IgZWFjaCBhc3luY2hyb25vdXMgZXZlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzkwCisKKyAgICAgICAgQ3VycmVu
dGx5IEV2ZW50UXVldWUgcXVldWVzIHVwIGV2ZW50cyB0byBiZSBmaXJlZCBhc3luY2hyb25vdXNs
eSBhbmQKKyAgICAgICAgZmlyZXMgZWFjaCBvZiB0aGVtIHdoZW4gYSBzaW5nbGUgRE9NVGltZXIg
Z29lcyBvZmYuICBJbiB0aGUgd29yZHMgb2YKKyAgICAgICAgZGltaWNoLCAiSGF2aW5nIDIgcXVl
dWVzIHdpbGwgc29vbmVyIG9yIGxhdGVyIGNhdXNlIHByb2JsZW1zIHdpdGgKKyAgICAgICAgb3Jk
ZXJpbmcgb2YgdGFza3MsIHRlcm1pbmF0aW9uLCBzdXNwZW5zaW9uIGFuZCBvdGhlciB0aGluZ3Mg
dGhhdCBhbGwKKyAgICAgICAgcmVxdWlyZSBzb21lIGNvbnRyb2wgb24gaG93IHF1ZXVlcyBvcGVy
YXRlLiIKKworICAgICAgICBObyBuZXcgdGVzdHM7IHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5n
IHRvIGF2b2lkIHBvdGVudGlhbCBmdXR1cmUKKyAgICAgICAgcHJvYmxlbXMuCisKKyAgICAgICAg
KiBkb20vRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVu
dFF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRh
c2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNo
ZXJUYXNrOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OkV2
ZW50RGlzcGF0Y2hlclRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJUYXNrOjpFdmVudERpc3BhdGNoZXJUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OnJlbW92ZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50UXVldWU6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1
ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50UXVldWU6OmNhbmNlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OmNh
bmNlbFF1ZXVlZEV2ZW50cyk6CisgICAgICAgICogZG9tL0V2ZW50UXVldWUuaDoKKwogMjAxMS0w
NS0wNSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuY3Bw
CmluZGV4IDkwZjNlNWRlZGM3YzU4ZDlmMDE2MDU1MThhMjE4MDcxMDM3ZjdiOWIuLjRiYWY1MWRm
NTRjOTg0YzNjNGNmODM0MDM5ZmRkOTM2ZTEzOTZmNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1
ZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgotI2luY2x1ZGUgIlN1c3BlbmRhYmxlVGltZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIApAQCAtNDMsMjUgKzQyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGREaXNwYXRjaFNjcm9sbEV2ZW50U3luY2hyb25vdXNseShEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgcmV0dXJuIGFwcGxpY2F0aW9uSXNTYWZhcmkoKSAmJiAoZG9jdW1lbnQtPnVybCgpLnByb3Rv
Y29sSXMoImZlZWQiKSB8fCBkb2N1bWVudC0+dXJsKCkucHJvdG9jb2xJcygiZmVlZHMiKSk7CiB9
CiAKLWNsYXNzIEV2ZW50UXVldWVUaW1lciA6IHB1YmxpYyBTdXNwZW5kYWJsZVRpbWVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudFF1ZXVlVGltZXIpOwotcHVibGljOgotICAgIEV2
ZW50UXVldWVUaW1lcihFdmVudFF1ZXVlKiBldmVudFF1ZXVlLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQotICAgICAgICA6IFN1c3BlbmRhYmxlVGltZXIoY29udGV4dCkKLSAgICAg
ICAgLCBtX2V2ZW50UXVldWUoZXZlbnRRdWV1ZSkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCB2b2lkIGZpcmVkKCkgeyBtX2V2ZW50UXVldWUtPnBlbmRpbmdFdmVudFRpbWVyRmlyZWQoKTsg
fQotICAgIEV2ZW50UXVldWUqIG1fZXZlbnRRdWV1ZTsgICAgCi19OwotCiBQYXNzUmVmUHRyPEV2
ZW50UXVldWU+IEV2ZW50UXVldWU6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXZlbnRRdWV1ZShjb250ZXh0KSk7CiB9
CiAKIEV2ZW50UXVldWU6OkV2ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKLSAgICA6IG1fcGVuZGluZ0V2ZW50VGltZXIoYWRvcHRQdHIobmV3IEV2ZW50UXVldWVUaW1l
cih0aGlzLCBjb250ZXh0KSkpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4
dCkKIHsKIH0KIApAQCAtNjksMTQgKzU2LDY0IEBAIEV2ZW50UXVldWU6On5FdmVudFF1ZXVlKCkK
IHsKIH0KIAotdm9pZCBFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCitjbGFzcyBFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJUYXNrIDogcHVibGljIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEV2ZW50RGlzcGF0Y2hlclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwg
RXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRXZlbnREaXNwYXRjaGVyVGFzayhldmVudCwgZXZlbnRRdWV1ZSkpOworICAgIH0KKworICAg
IHZvaWQgZGlzcGF0Y2hFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCisgICAgeworICAgICAgICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQgPSBl
dmVudC0+dGFyZ2V0KCk7CisgICAgICAgIGlmIChldmVudFRhcmdldC0+dG9ET01XaW5kb3coKSkK
KyAgICAgICAgICAgIGV2ZW50VGFyZ2V0LT50b0RPTVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KGV2
ZW50LCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZlbnRUYXJnZXQtPmRpc3BhdGNo
RXZlbnQoZXZlbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgbV9ldmVudFF1ZXVl
LT5yZW1vdmVFdmVudChtX2V2ZW50KTsKKyAgICAgICAgaWYgKG1faXNDYW5jZWxsZWQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRpc3BhdGNoRXZlbnQoY29udGV4dCwgbV9ldmVudCk7
CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsKKyAgICAgICAgbV9pc0NhbmNlbGxl
ZCA9IHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIEV2ZW50RGlzcGF0Y2hlclRhc2soUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQsIEV2ZW50UXVldWUqIGV2ZW50UXVldWUpCisgICAgICA6IG1f
ZXZlbnQoZXZlbnQpCisgICAgICAsIG1fZXZlbnRRdWV1ZShldmVudFF1ZXVlKQorICAgICAgLCBt
X2lzQ2FuY2VsbGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEV2ZW50PiBtX2V2
ZW50OworICAgIEV2ZW50UXVldWUqIG1fZXZlbnRRdWV1ZTsKKyAgICBib29sIG1faXNDYW5jZWxs
ZWQ7Cit9OworCit2b2lkIEV2ZW50UXVldWU6OnJlbW92ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IHBycEV2ZW50KQogewotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkpOwotICAgIGJvb2wgd2Fz
QWRkZWQgPSBtX3F1ZXVlZEV2ZW50cy5hZGQoZXZlbnQpLnNlY29uZDsKLSAgICBBU1NFUlRfVU5V
U0VEKHdhc0FkZGVkLCB3YXNBZGRlZCk7IC8vIEl0IHNob3VsZCBub3QgaGF2ZSBhbHJlYWR5IGJl
ZW4gaW4gdGhlIGxpc3QuCi0gICAgCi0gICAgaWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0Fj
dGl2ZSgpKQotICAgICAgICBtX3BlbmRpbmdFdmVudFRpbWVyLT5zdGFydE9uZVNob3QoMCk7Cisg
ICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OworICAgIEV2ZW50VGFyZ2V0KiBldmVu
dFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsKKyAgICBOb2RlKiBub2RlID0gZXZlbnRUYXJnZXQt
PnRvTm9kZSgpOworICAgIGlmIChub2RlICYmIG1fbm9kZXNXaXRoUXVldWVkU2Nyb2xsRXZlbnRz
LmNvbnRhaW5zKG5vZGUpKQorICAgICAgICBtX25vZGVzV2l0aFF1ZXVlZFNjcm9sbEV2ZW50cy5y
ZW1vdmUobm9kZSk7CisgICAgaWYgKG1fZXZlbnRUYXNrTWFwLmNvbnRhaW5zKGV2ZW50KSkKKyAg
ICAgICAgbV9ldmVudFRhc2tNYXAucmVtb3ZlKGV2ZW50KTsKK30KKwordm9pZCBFdmVudFF1ZXVl
OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCit7CisgICAgUmVmUHRy
PEV2ZW50PiBldmVudCA9IHBycEV2ZW50OworICAgIE93blB0cjxFdmVudERpc3BhdGNoZXJUYXNr
PiB0YXNrID0gRXZlbnREaXNwYXRjaGVyVGFzazo6Y3JlYXRlKGV2ZW50LCB0aGlzKTsKKyAgICBt
X2V2ZW50VGFza01hcC5hZGQoZXZlbnQsIHRhc2suZ2V0KCkpOworICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2sodGFzay5yZWxlYXNlKCkpOwogfQogCiB2b2lkIEV2ZW50UXVl
dWU6OmVucXVldWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQs
IFNjcm9sbEV2ZW50VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQpAQCAtODQsNyArMTIxLDcgQEAgdm9p
ZCBFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0LCBTY3JvbGxFdmUKICAgICAvLyBQZXIgdGhlIFczQyBDU1NPTSBWaWV3IE1vZHVs
ZSwgc2Nyb2xsIGV2ZW50cyBmaXJlZCBhdCB0aGUgZG9jdW1lbnQgc2hvdWxkIGJ1YmJsZSwgb3Ro
ZXJzIHNob3VsZCBub3QuCiAgICAgYm9vbCBjYW5CdWJibGUgPSB0YXJnZXRUeXBlID09IFNjcm9s
bEV2ZW50RG9jdW1lbnRUYXJnZXQ7CiAgICAgUmVmUHRyPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBjYW5CdWJibGUsIGZhbHNlIC8q
IG5vbiBjYW5jZWxsZWFibGUgKi8pOwotICAgICAKKwogICAgIGlmIChzaG91bGREaXNwYXRjaFNj
cm9sbEV2ZW50U3luY2hyb25vdXNseSh0YXJnZXQtPmRvY3VtZW50KCkpKSB7CiAgICAgICAgIHRh
cmdldC0+ZGlzcGF0Y2hFdmVudChzY3JvbGxFdmVudC5yZWxlYXNlKCkpOwogICAgICAgICByZXR1
cm47CkBAIC05OSw1MCArMTM2LDE4IEBAIHZvaWQgRXZlbnRRdWV1ZTo6ZW5xdWV1ZU9yRGlzcGF0
Y2hTY3JvbGxFdmVudChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgU2Nyb2xsRXZlCiAKIGJvb2wg
RXZlbnRRdWV1ZTo6Y2FuY2VsRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIGJvb2wgZm91bmQg
PSBtX3F1ZXVlZEV2ZW50cy5jb250YWlucyhldmVudCk7Ci0gICAgbV9xdWV1ZWRFdmVudHMucmVt
b3ZlKGV2ZW50KTsKLSAgICBpZiAobV9xdWV1ZWRFdmVudHMuaXNFbXB0eSgpKQotICAgICAgICBt
X3BlbmRpbmdFdmVudFRpbWVyLT5zdG9wKCk7CisgICAgYm9vbCBmb3VuZCA9IG1fZXZlbnRUYXNr
TWFwLmNvbnRhaW5zKGV2ZW50KTsKKyAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgRXZlbnREaXNw
YXRjaGVyVGFzayogdGFzayA9IG1fZXZlbnRUYXNrTWFwLmdldChldmVudCk7CisgICAgICAgIHRh
c2stPmNhbmNlbCgpOworICAgIH0KICAgICByZXR1cm4gZm91bmQ7CiB9CiAKIHZvaWQgRXZlbnRR
dWV1ZTo6Y2FuY2VsUXVldWVkRXZlbnRzKCkKIHsKLSAgICBtX3BlbmRpbmdFdmVudFRpbWVyLT5z
dG9wKCk7Ci0gICAgbV9xdWV1ZWRFdmVudHMuY2xlYXIoKTsKLX0KLQotdm9pZCBFdmVudFF1ZXVl
OjpwZW5kaW5nRXZlbnRUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ0V2ZW50
VGltZXItPmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuaXNFbXB0eSgp
KTsKLQorICAgIG1fZXZlbnRUYXNrTWFwLmNsZWFyKCk7CiAgICAgbV9ub2Rlc1dpdGhRdWV1ZWRT
Y3JvbGxFdmVudHMuY2xlYXIoKTsKLQotICAgIC8vIEluc2VydCBhIG1hcmtlciBmb3Igd2hlcmUg
d2Ugc2hvdWxkIHN0b3AuCi0gICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlucygwKSk7
Ci0gICAgYm9vbCB3YXNBZGRlZCA9IG1fcXVldWVkRXZlbnRzLmFkZCgwKS5zZWNvbmQ7Ci0gICAg
QVNTRVJUX1VOVVNFRCh3YXNBZGRlZCwgd2FzQWRkZWQpOyAvLyBJdCBzaG91bGQgbm90IGhhdmUg
YWxyZWFkeSBiZWVuIGluIHRoZSBsaXN0LgotCi0gICAgUmVmUHRyPEV2ZW50UXVldWU+IHByb3Rl
Y3Rvcih0aGlzKTsKLQotICAgIHdoaWxlICghbV9xdWV1ZWRFdmVudHMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIExpc3RIYXNoU2V0PFJlZlB0cjxFdmVudD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fcXVl
dWVkRXZlbnRzLmJlZ2luKCk7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSAqaXRlcjsK
LSAgICAgICAgbV9xdWV1ZWRFdmVudHMucmVtb3ZlKGl0ZXIpOwotICAgICAgICBpZiAoIWV2ZW50
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkp
OwotICAgIH0KLX0KLQotdm9pZCBFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQotewotICAgIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IGV2ZW50LT50
YXJnZXQoKTsKLSAgICBpZiAoZXZlbnRUYXJnZXQtPnRvRE9NV2luZG93KCkpCi0gICAgICAgIGV2
ZW50VGFyZ2V0LT50b0RPTVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50LCAwKTsKLSAgICBl
bHNlCi0gICAgICAgIGV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFF1ZXVlLmgKaW5kZXggMmNiMzhmNDkwZDAxZjBjOGUzMGQ3MTg5ODRkZmYx
ZGRkNzA0NjBiYy4uZDBmNTg3NTM5MjM2MGRiZmNkMTAzM2E2MThjZjcwODBkNTg5NDkyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRRdWV1ZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEV2ZW50UXVl
dWVfaAogI2RlZmluZSBFdmVudFF1ZXVlX2gKIAorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zNiw3ICszNyw2IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEV2ZW50OwotY2xhc3MgRXZlbnRRdWV1ZVRpbWVyOwogY2xhc3MgTm9kZTsK
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKQEAgLTU4LDE0ICs1OCwxNCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEV2ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwogCi0gICAgdm9pZCBwZW5kaW5nRXZlbnRUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIHJlbW92ZUV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KTsKIAotICAgIE93blB0cjxFdmVudFF1ZXVlVGltZXI+IG1fcGVuZGlu
Z0V2ZW50VGltZXI7Ci0gICAgTGlzdEhhc2hTZXQ8UmVmUHRyPEV2ZW50PiA+IG1fcXVldWVkRXZl
bnRzOwogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbm9kZXNXaXRoUXVldWVkU2Nyb2xsRXZlbnRzOwot
ICAgIAotICAgIGZyaWVuZCBjbGFzcyBFdmVudFF1ZXVlVGltZXI7ICAgIAorICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworICAgIGNsYXNzIEV2
ZW50RGlzcGF0Y2hlclRhc2s7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxFdmVudD4sIEV2
ZW50RGlzcGF0Y2hlclRhc2sqPiBFdmVudFRhc2tNYXA7CisgICAgRXZlbnRUYXNrTWFwIG1fZXZl
bnRUYXNrTWFwOwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93497</attachid>
            <date>2011-05-13 13:18:16 -0700</date>
            <delta_ts>2011-05-18 16:49:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60790-20110513131815.patch</filename>
            <type>text/plain</type>
            <size>8242</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY0NDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MGUzMDE5YjhjZmY2ZWVi
MjlmZjIwYjcwYzNmYzE3ODI4OGY1NjM5Li5hMTJjZWNlMzVlNDYxNjkwY2ZhZGFjMTkzODNlMzdj
NjYxYTZiNjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDUtMTMgIERhdmlk
IEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRXZlbnRRdWV1ZSBwb3N0IGEgVGFzayB0byB0
aGUgdGFzayBxdWV1ZSBmb3IgZWFjaCBhc3luY2hyb25vdXMgZXZlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzkwCisKKyAgICAgICAgQ3VycmVu
dGx5IEV2ZW50UXVldWUgcXVldWVzIHVwIGV2ZW50cyB0byBiZSBmaXJlZCBhc3luY2hyb25vdXNs
eSBhbmQKKyAgICAgICAgZmlyZXMgZWFjaCBvZiB0aGVtIHdoZW4gYSBzaW5nbGUgRE9NVGltZXIg
Z29lcyBvZmYuICBJbiB0aGUgd29yZHMgb2YKKyAgICAgICAgZGltaWNoLCAiSGF2aW5nIDIgcXVl
dWVzIHdpbGwgc29vbmVyIG9yIGxhdGVyIGNhdXNlIHByb2JsZW1zIHdpdGgKKyAgICAgICAgb3Jk
ZXJpbmcgb2YgdGFza3MsIHRlcm1pbmF0aW9uLCBzdXNwZW5zaW9uIGFuZCBvdGhlciB0aGluZ3Mg
dGhhdCBhbGwKKyAgICAgICAgcmVxdWlyZSBzb21lIGNvbnRyb2wgb24gaG93IHF1ZXVlcyBvcGVy
YXRlLiIKKworICAgICAgICBObyBuZXcgdGVzdHM7IHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5n
IHRvIGF2b2lkIHBvdGVudGlhbCBmdXR1cmUKKyAgICAgICAgcHJvYmxlbXMuCisKKyAgICAgICAg
KiBkb20vRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVu
dFF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRh
c2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNo
ZXJUYXNrOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OkV2
ZW50RGlzcGF0Y2hlclRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJUYXNrOjpFdmVudERpc3BhdGNoZXJUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OnJlbW92ZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50UXVldWU6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1
ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50UXVldWU6OmNhbmNlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OmNh
bmNlbFF1ZXVlZEV2ZW50cyk6CisgICAgICAgICogZG9tL0V2ZW50UXVldWUuaDoKKwogMjAxMS0w
NS0wNSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuY3Bw
CmluZGV4IDkwZjNlNWRlZGM3YzU4ZDlmMDE2MDU1MThhMjE4MDcxMDM3ZjdiOWIuLjVmNWFhOWNl
YzJiNTBkNjEyYmIyNDQwMjk1ZTU1MzQyYWVlNTU5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1
ZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgotI2luY2x1ZGUgIlN1c3BlbmRhYmxlVGltZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIApAQCAtNDMsMjUgKzQyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGREaXNwYXRjaFNjcm9sbEV2ZW50U3luY2hyb25vdXNseShEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgcmV0dXJuIGFwcGxpY2F0aW9uSXNTYWZhcmkoKSAmJiAoZG9jdW1lbnQtPnVybCgpLnByb3Rv
Y29sSXMoImZlZWQiKSB8fCBkb2N1bWVudC0+dXJsKCkucHJvdG9jb2xJcygiZmVlZHMiKSk7CiB9
CiAKLWNsYXNzIEV2ZW50UXVldWVUaW1lciA6IHB1YmxpYyBTdXNwZW5kYWJsZVRpbWVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudFF1ZXVlVGltZXIpOwotcHVibGljOgotICAgIEV2
ZW50UXVldWVUaW1lcihFdmVudFF1ZXVlKiBldmVudFF1ZXVlLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQotICAgICAgICA6IFN1c3BlbmRhYmxlVGltZXIoY29udGV4dCkKLSAgICAg
ICAgLCBtX2V2ZW50UXVldWUoZXZlbnRRdWV1ZSkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCB2b2lkIGZpcmVkKCkgeyBtX2V2ZW50UXVldWUtPnBlbmRpbmdFdmVudFRpbWVyRmlyZWQoKTsg
fQotICAgIEV2ZW50UXVldWUqIG1fZXZlbnRRdWV1ZTsgICAgCi19OwotCiBQYXNzUmVmUHRyPEV2
ZW50UXVldWU+IEV2ZW50UXVldWU6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXZlbnRRdWV1ZShjb250ZXh0KSk7CiB9
CiAKIEV2ZW50UXVldWU6OkV2ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKLSAgICA6IG1fcGVuZGluZ0V2ZW50VGltZXIoYWRvcHRQdHIobmV3IEV2ZW50UXVldWVUaW1l
cih0aGlzLCBjb250ZXh0KSkpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4
dCkKIHsKIH0KIApAQCAtNjksMTQgKzU2LDY0IEBAIEV2ZW50UXVldWU6On5FdmVudFF1ZXVlKCkK
IHsKIH0KIAotdm9pZCBFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCitjbGFzcyBFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJUYXNrIDogcHVibGljIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEV2ZW50RGlzcGF0Y2hlclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwg
RXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRXZlbnREaXNwYXRjaGVyVGFzayhldmVudCwgZXZlbnRRdWV1ZSkpOworICAgIH0KKworICAg
IHZvaWQgZGlzcGF0Y2hFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCisgICAgeworICAgICAgICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQgPSBl
dmVudC0+dGFyZ2V0KCk7CisgICAgICAgIGlmIChldmVudFRhcmdldC0+dG9ET01XaW5kb3coKSkK
KyAgICAgICAgICAgIGV2ZW50VGFyZ2V0LT50b0RPTVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KGV2
ZW50LCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZlbnRUYXJnZXQtPmRpc3BhdGNo
RXZlbnQoZXZlbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgbV9ldmVudFF1ZXVl
LT5yZW1vdmVFdmVudChtX2V2ZW50KTsKKyAgICAgICAgaWYgKG1faXNDYW5jZWxsZWQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRpc3BhdGNoRXZlbnQoY29udGV4dCwgbV9ldmVudCk7
CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsKKyAgICAgICAgbV9pc0NhbmNlbGxl
ZCA9IHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIEV2ZW50RGlzcGF0Y2hlclRhc2soUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQsIEV2ZW50UXVldWUqIGV2ZW50UXVldWUpCisgICAgICA6IG1f
ZXZlbnQoZXZlbnQpCisgICAgICAsIG1fZXZlbnRRdWV1ZShldmVudFF1ZXVlKQorICAgICAgLCBt
X2lzQ2FuY2VsbGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEV2ZW50PiBtX2V2
ZW50OworICAgIEV2ZW50UXVldWUqIG1fZXZlbnRRdWV1ZTsKKyAgICBib29sIG1faXNDYW5jZWxs
ZWQ7Cit9OworCit2b2lkIEV2ZW50UXVldWU6OnJlbW92ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IHBycEV2ZW50KQoreworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKKyAgICBF
dmVudFRhcmdldCogZXZlbnRUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CisgICAgTm9kZSogbm9k
ZSA9IGV2ZW50VGFyZ2V0LT50b05vZGUoKTsKKyAgICBpZiAobm9kZSAmJiBtX25vZGVzV2l0aFF1
ZXVlZFNjcm9sbEV2ZW50cy5jb250YWlucyhub2RlKSkKKyAgICAgICAgbV9ub2Rlc1dpdGhRdWV1
ZWRTY3JvbGxFdmVudHMucmVtb3ZlKG5vZGUpOworICAgIGlmIChtX2V2ZW50VGFza01hcC5jb250
YWlucyhldmVudCkpCisgICAgICAgIG1fZXZlbnRUYXNrTWFwLnJlbW92ZShldmVudCk7Cit9CisK
K3ZvaWQgRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50
KQogewotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkpOwotICAgIGJvb2wgd2FzQWRkZWQgPSBt
X3F1ZXVlZEV2ZW50cy5hZGQoZXZlbnQpLnNlY29uZDsKLSAgICBBU1NFUlRfVU5VU0VEKHdhc0Fk
ZGVkLCB3YXNBZGRlZCk7IC8vIEl0IHNob3VsZCBub3QgaGF2ZSBhbHJlYWR5IGJlZW4gaW4gdGhl
IGxpc3QuCi0gICAgCi0gICAgaWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0FjdGl2ZSgpKQot
ICAgICAgICBtX3BlbmRpbmdFdmVudFRpbWVyLT5zdGFydE9uZVNob3QoMCk7CisgICAgUmVmUHRy
PEV2ZW50PiBldmVudCA9IHBycEV2ZW50OworICAgIE93blB0cjxFdmVudERpc3BhdGNoZXJUYXNr
PiB0YXNrID0gRXZlbnREaXNwYXRjaGVyVGFzazo6Y3JlYXRlKGV2ZW50LCB0aGlzKTsKKyAgICBt
X2V2ZW50VGFza01hcC5hZGQoZXZlbnQsIHRhc2suZ2V0KCkpOworICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2sodGFzay5yZWxlYXNlKCkpOwogfQogCiB2b2lkIEV2ZW50UXVl
dWU6OmVucXVldWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQs
IFNjcm9sbEV2ZW50VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQpAQCAtOTksNTAgKzEzNiwxOCBAQCB2
b2lkIEV2ZW50UXVldWU6OmVucXVldWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQoUGFzc1JlZlB0cjxO
b2RlPiB0YXJnZXQsIFNjcm9sbEV2ZQogCiBib29sIEV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2
ZW50KiBldmVudCkKIHsKLSAgICBib29sIGZvdW5kID0gbV9xdWV1ZWRFdmVudHMuY29udGFpbnMo
ZXZlbnQpOwotICAgIG1fcXVldWVkRXZlbnRzLnJlbW92ZShldmVudCk7Ci0gICAgaWYgKG1fcXVl
dWVkRXZlbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9wZW5kaW5nRXZlbnRUaW1lci0+c3RvcCgp
OworICAgIGJvb2wgZm91bmQgPSBtX2V2ZW50VGFza01hcC5jb250YWlucyhldmVudCk7CisgICAg
aWYgKGZvdW5kKSB7CisgICAgICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBtX2V2ZW50
VGFza01hcC5nZXQoZXZlbnQpOworICAgICAgICB0YXNrLT5jYW5jZWwoKTsKKyAgICB9CiAgICAg
cmV0dXJuIGZvdW5kOwogfQogCiB2b2lkIEV2ZW50UXVldWU6OmNhbmNlbFF1ZXVlZEV2ZW50cygp
CiB7Ci0gICAgbV9wZW5kaW5nRXZlbnRUaW1lci0+c3RvcCgpOwotICAgIG1fcXVldWVkRXZlbnRz
LmNsZWFyKCk7Ci19Ci0KLXZvaWQgRXZlbnRRdWV1ZTo6cGVuZGluZ0V2ZW50VGltZXJGaXJlZCgp
Ci17Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0FjdGl2ZSgpKTsKLSAgICBB
U1NFUlQoIW1fcXVldWVkRXZlbnRzLmlzRW1wdHkoKSk7Ci0KKyAgICBtX2V2ZW50VGFza01hcC5j
bGVhcigpOwogICAgIG1fbm9kZXNXaXRoUXVldWVkU2Nyb2xsRXZlbnRzLmNsZWFyKCk7Ci0KLSAg
ICAvLyBJbnNlcnQgYSBtYXJrZXIgZm9yIHdoZXJlIHdlIHNob3VsZCBzdG9wLgotICAgIEFTU0VS
VCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoMCkpOwotICAgIGJvb2wgd2FzQWRkZWQgPSBtX3F1
ZXVlZEV2ZW50cy5hZGQoMCkuc2Vjb25kOwotICAgIEFTU0VSVF9VTlVTRUQod2FzQWRkZWQsIHdh
c0FkZGVkKTsgLy8gSXQgc2hvdWxkIG5vdCBoYXZlIGFscmVhZHkgYmVlbiBpbiB0aGUgbGlzdC4K
LQotICAgIFJlZlB0cjxFdmVudFF1ZXVlPiBwcm90ZWN0b3IodGhpcyk7Ci0KLSAgICB3aGlsZSAo
IW1fcXVldWVkRXZlbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBMaXN0SGFzaFNldDxSZWZQdHI8
RXZlbnQ+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3F1ZXVlZEV2ZW50cy5iZWdpbigpOwotICAgICAg
ICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gKml0ZXI7Ci0gICAgICAgIG1fcXVldWVkRXZlbnRzLnJl
bW92ZShpdGVyKTsKLSAgICAgICAgaWYgKCFldmVudCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRXZlbnRR
dWV1ZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKLXsKLSAgICBFdmVu
dFRhcmdldCogZXZlbnRUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7Ci0gICAgaWYgKGV2ZW50VGFy
Z2V0LT50b0RPTVdpbmRvdygpKQotICAgICAgICBldmVudFRhcmdldC0+dG9ET01XaW5kb3coKS0+
ZGlzcGF0Y2hFdmVudChldmVudCwgMCk7Ci0gICAgZWxzZQotICAgICAgICBldmVudFRhcmdldC0+
ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oCmluZGV4
IDJjYjM4ZjQ5MGQwMWYwYzhlMzBkNzE4OTg0ZGZmMWRkZDcwNDYwYmMuLjNjYjljNzViYTFjOTg2
NWVlNzY2MTBlOGRlZWJlM2NmMmJlYjdhYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaApAQCAt
MjcsMTYgKzI3LDE0IEBACiAjaWZuZGVmIEV2ZW50UXVldWVfaAogI2RlZmluZSBFdmVudFF1ZXVl
X2gKIAorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBFdmVudFF1ZXVlVGltZXI7
CiBjbGFzcyBOb2RlOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIApAQCAtNTgsMTQg
KzU2LDE0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRXZlbnRRdWV1ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICB2b2lkIHBlbmRpbmdFdmVudFRpbWVyRmlyZWQo
KTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQg
cmVtb3ZlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogCi0gICAgT3duUHRyPEV2ZW50UXVldWVU
aW1lcj4gbV9wZW5kaW5nRXZlbnRUaW1lcjsKLSAgICBMaXN0SGFzaFNldDxSZWZQdHI8RXZlbnQ+
ID4gbV9xdWV1ZWRFdmVudHM7CiAgICAgSGFzaFNldDxOb2RlKj4gbV9ub2Rlc1dpdGhRdWV1ZWRT
Y3JvbGxFdmVudHM7Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNzIEV2ZW50UXVldWVUaW1lcjsgICAg
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Owor
CisgICAgY2xhc3MgRXZlbnREaXNwYXRjaGVyVGFzazsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPEV2ZW50PiwgRXZlbnREaXNwYXRjaGVyVGFzayo+IEV2ZW50VGFza01hcDsKKyAgICBFdmVu
dFRhc2tNYXAgbV9ldmVudFRhc2tNYXA7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94003</attachid>
            <date>2011-05-18 16:49:40 -0700</date>
            <delta_ts>2011-05-18 20:15:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60790-20110518164939.patch</filename>
            <type>text/plain</type>
            <size>8610</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY3NzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhOWQ0OGUyMjI1NDA4M2Qz
ODA3MWEyYWUzODE2N2Y0MTE0NDY0NDhkLi45MDgxMGUxMDE4MDZhN2JhZDZhOWQ5NWFhNzZiMDAx
YTZhZmQ3ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDUtMTMgIERhdmlk
IEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRXZlbnRRdWV1ZSBwb3N0IGEgVGFzayB0byB0
aGUgdGFzayBxdWV1ZSBmb3IgZWFjaCBhc3luY2hyb25vdXMgZXZlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzkwCisKKyAgICAgICAgQ3VycmVu
dGx5IEV2ZW50UXVldWUgcXVldWVzIHVwIGV2ZW50cyB0byBiZSBmaXJlZCBhc3luY2hyb25vdXNs
eSBhbmQKKyAgICAgICAgZmlyZXMgZWFjaCBvZiB0aGVtIHdoZW4gYSBzaW5nbGUgRE9NVGltZXIg
Z29lcyBvZmYuICBJbiB0aGUgd29yZHMgb2YKKyAgICAgICAgZGltaWNoLCAiSGF2aW5nIDIgcXVl
dWVzIHdpbGwgc29vbmVyIG9yIGxhdGVyIGNhdXNlIHByb2JsZW1zIHdpdGgKKyAgICAgICAgb3Jk
ZXJpbmcgb2YgdGFza3MsIHRlcm1pbmF0aW9uLCBzdXNwZW5zaW9uIGFuZCBvdGhlciB0aGluZ3Mg
dGhhdCBhbGwKKyAgICAgICAgcmVxdWlyZSBzb21lIGNvbnRyb2wgb24gaG93IHF1ZXVlcyBvcGVy
YXRlLiIKKworICAgICAgICBObyBuZXcgdGVzdHM7IHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5n
IHRvIGF2b2lkIHBvdGVudGlhbCBmdXR1cmUKKyAgICAgICAgcHJvYmxlbXMuCisKKyAgICAgICAg
KiBkb20vRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVu
dFF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRh
c2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNo
ZXJUYXNrOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OkV2
ZW50RGlzcGF0Y2hlclRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJUYXNrOjpFdmVudERpc3BhdGNoZXJUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OnJlbW92ZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50UXVldWU6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1
ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50UXVldWU6OmNhbmNlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OmNh
bmNlbFF1ZXVlZEV2ZW50cyk6CisgICAgICAgICogZG9tL0V2ZW50UXVldWUuaDoKKwogMjAxMS0w
NS0xOCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzYxMDc4PiBVc2UgdG9IVFRQUGlwZWxpbmluZ1ByaW9yaXR5KCkgaW4g
aW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRRdWV1ZS5jcHAKaW5kZXggOTBmM2U1ZGVkYzdjNThkOWYwMTYwNTUxOGEyMTgwNzEwMzdm
N2I5Yi4uYzdiNzhkNzg1NTM4MWVhZDEzNDJmODRmNjlhMTAyNzk2YTFjYmFhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFF1ZXVlLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKICNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU3VzcGVuZGFibGVUaW1lci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC00Myw0MCArNDIsNzYgQEAgc3RhdGljIGlu
bGluZSBib29sIHNob3VsZERpc3BhdGNoU2Nyb2xsRXZlbnRTeW5jaHJvbm91c2x5KERvY3VtZW50
KiBkb2N1bWVudCkKICAgICByZXR1cm4gYXBwbGljYXRpb25Jc1NhZmFyaSgpICYmIChkb2N1bWVu
dC0+dXJsKCkucHJvdG9jb2xJcygiZmVlZCIpIHx8IGRvY3VtZW50LT51cmwoKS5wcm90b2NvbElz
KCJmZWVkcyIpKTsKIH0KIAotY2xhc3MgRXZlbnRRdWV1ZVRpbWVyIDogcHVibGljIFN1c3BlbmRh
YmxlVGltZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50UXVldWVUaW1lcik7Ci1w
dWJsaWM6Ci0gICAgRXZlbnRRdWV1ZVRpbWVyKEV2ZW50UXVldWUqIGV2ZW50UXVldWUsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgICAgIDogU3VzcGVuZGFibGVUaW1lcihj
b250ZXh0KQotICAgICAgICAsIG1fZXZlbnRRdWV1ZShldmVudFF1ZXVlKSB7IH0KLQotcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKSB7IG1fZXZlbnRRdWV1ZS0+cGVuZGluZ0V2ZW50
VGltZXJGaXJlZCgpOyB9Ci0gICAgRXZlbnRRdWV1ZSogbV9ldmVudFF1ZXVlOyAgICAKLX07Ci0K
IFBhc3NSZWZQdHI8RXZlbnRRdWV1ZT4gRXZlbnRRdWV1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmVudFF1ZXVl
KGNvbnRleHQpKTsKIH0KIAogRXZlbnRRdWV1ZTo6RXZlbnRRdWV1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQotICAgIDogbV9wZW5kaW5nRXZlbnRUaW1lcihhZG9wdFB0cihuZXcg
RXZlbnRRdWV1ZVRpbWVyKHRoaXMsIGNvbnRleHQpKSkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dChjb250ZXh0KQogewogfQogCiBFdmVudFF1ZXVlOjp+RXZlbnRRdWV1ZSgpCiB7Cisg
ICAgY2FuY2VsUXVldWVkRXZlbnRzKCk7Cit9CisKK2NsYXNzIEV2ZW50UXVldWU6OkV2ZW50RGlz
cGF0Y2hlclRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RXZlbnREaXNwYXRjaGVyVGFzaz4gY3JlYXRlKFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFdmVudFF1ZXVlKiBldmVudFF1ZXVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFdmVudERpc3BhdGNoZXJUYXNrKGV2ZW50LCBldmVu
dFF1ZXVlKSk7CisgICAgfQorCisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKKyAgICB7CisgICAgICAgIEV2ZW50
VGFyZ2V0KiBldmVudFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsKKyAgICAgICAgaWYgKGV2ZW50
VGFyZ2V0LT50b0RPTVdpbmRvdygpKQorICAgICAgICAgICAgZXZlbnRUYXJnZXQtPnRvRE9NV2lu
ZG93KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBldmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAg
eworICAgICAgICBpZiAobV9pc0NhbmNlbGxlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9ldmVudFF1ZXVlLT5yZW1vdmVFdmVudChtX2V2ZW50LmdldCgpKTsKKyAgICAgICAgZGlz
cGF0Y2hFdmVudChjb250ZXh0LCBtX2V2ZW50KTsKKyAgICB9CisKKyAgICB2b2lkIGNhbmNlbCgp
CisgICAgeworICAgICAgICBtX2lzQ2FuY2VsbGVkID0gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgRXZlbnREaXNwYXRjaGVyVGFzayhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXZlbnRR
dWV1ZSogZXZlbnRRdWV1ZSkKKyAgICAgICAgOiBtX2V2ZW50KGV2ZW50KQorICAgICAgICAsIG1f
ZXZlbnRRdWV1ZShldmVudFF1ZXVlKQorICAgICAgICAsIG1faXNDYW5jZWxsZWQoZmFsc2UpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKKyAgICBFdmVudFF1ZXVl
KiBtX2V2ZW50UXVldWU7CisgICAgYm9vbCBtX2lzQ2FuY2VsbGVkOworfTsKKwordm9pZCBFdmVu
dFF1ZXVlOjpyZW1vdmVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKE5vZGUqIG5vZGUg
PSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpKQorICAgICAgICBtX25vZGVzV2l0aFF1ZXVlZFNj
cm9sbEV2ZW50cy5yZW1vdmUobm9kZSk7CisgICAgbV9ldmVudFRhc2tNYXAucmVtb3ZlKGV2ZW50
KTsKIH0KIAotdm9pZCBFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCit2b2lkIEV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBw
cnBFdmVudCkKIHsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKLSAgICBib29sIHdhc0Fk
ZGVkID0gbV9xdWV1ZWRFdmVudHMuYWRkKGV2ZW50KS5zZWNvbmQ7Ci0gICAgQVNTRVJUX1VOVVNF
RCh3YXNBZGRlZCwgd2FzQWRkZWQpOyAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFkeSBiZWVu
IGluIHRoZSBsaXN0LgotICAgIAotICAgIGlmICghbV9wZW5kaW5nRXZlbnRUaW1lci0+aXNBY3Rp
dmUoKSkKLSAgICAgICAgbV9wZW5kaW5nRXZlbnRUaW1lci0+c3RhcnRPbmVTaG90KDApOworICAg
IFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKKyAgICBPd25QdHI8RXZlbnREaXNwYXRj
aGVyVGFzaz4gdGFzayA9IEV2ZW50RGlzcGF0Y2hlclRhc2s6OmNyZWF0ZShldmVudCwgdGhpcyk7
CisgICAgbV9ldmVudFRhc2tNYXAuYWRkKGV2ZW50LCB0YXNrLmdldCgpKTsKKyAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKHRhc2sucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBF
dmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KFBhc3NSZWZQdHI8Tm9kZT4g
dGFyZ2V0LCBTY3JvbGxFdmVudFRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKQEAgLTk5LDUwICsxMzQs
MjIgQEAgdm9pZCBFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KFBhc3NS
ZWZQdHI8Tm9kZT4gdGFyZ2V0LCBTY3JvbGxFdmUKIAogYm9vbCBFdmVudFF1ZXVlOjpjYW5jZWxF
dmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgYm9vbCBmb3VuZCA9IG1fcXVldWVkRXZlbnRzLmNv
bnRhaW5zKGV2ZW50KTsKLSAgICBtX3F1ZXVlZEV2ZW50cy5yZW1vdmUoZXZlbnQpOwotICAgIGlm
IChtX3F1ZXVlZEV2ZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcGVuZGluZ0V2ZW50VGltZXIt
PnN0b3AoKTsKLSAgICByZXR1cm4gZm91bmQ7CisgICAgRXZlbnREaXNwYXRjaGVyVGFzayogdGFz
ayA9IG1fZXZlbnRUYXNrTWFwLmdldChldmVudCk7CisgICAgaWYgKHRhc2spIHsKKyAgICAgICAg
dGFzay0+Y2FuY2VsKCk7CisgICAgICAgIHJlbW92ZUV2ZW50KGV2ZW50KTsKKyAgICB9CisgICAg
cmV0dXJuIHRhc2s7CiB9CiAKIHZvaWQgRXZlbnRRdWV1ZTo6Y2FuY2VsUXVldWVkRXZlbnRzKCkK
IHsKLSAgICBtX3BlbmRpbmdFdmVudFRpbWVyLT5zdG9wKCk7Ci0gICAgbV9xdWV1ZWRFdmVudHMu
Y2xlYXIoKTsKLX0KLQotdm9pZCBFdmVudFF1ZXVlOjpwZW5kaW5nRXZlbnRUaW1lckZpcmVkKCkK
LXsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ0V2ZW50VGltZXItPmlzQWN0aXZlKCkpOwotICAgIEFT
U0VSVCghbV9xdWV1ZWRFdmVudHMuaXNFbXB0eSgpKTsKLQotICAgIG1fbm9kZXNXaXRoUXVldWVk
U2Nyb2xsRXZlbnRzLmNsZWFyKCk7Ci0KLSAgICAvLyBJbnNlcnQgYSBtYXJrZXIgZm9yIHdoZXJl
IHdlIHNob3VsZCBzdG9wLgotICAgIEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoMCkp
OwotICAgIGJvb2wgd2FzQWRkZWQgPSBtX3F1ZXVlZEV2ZW50cy5hZGQoMCkuc2Vjb25kOwotICAg
IEFTU0VSVF9VTlVTRUQod2FzQWRkZWQsIHdhc0FkZGVkKTsgLy8gSXQgc2hvdWxkIG5vdCBoYXZl
IGFscmVhZHkgYmVlbiBpbiB0aGUgbGlzdC4KLQotICAgIFJlZlB0cjxFdmVudFF1ZXVlPiBwcm90
ZWN0b3IodGhpcyk7Ci0KLSAgICB3aGlsZSAoIW1fcXVldWVkRXZlbnRzLmlzRW1wdHkoKSkgewot
ICAgICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RXZlbnQ+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3F1
ZXVlZEV2ZW50cy5iZWdpbigpOwotICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gKml0ZXI7
Ci0gICAgICAgIG1fcXVldWVkRXZlbnRzLnJlbW92ZShpdGVyKTsKLSAgICAgICAgaWYgKCFldmVu
dCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgp
KTsKKyAgICBmb3IgKEV2ZW50VGFza01hcDo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50VGFza01hcC5i
ZWdpbigpOyBpdCAhPSBtX2V2ZW50VGFza01hcC5lbmQoKTsgKytpdCkgeworICAgICAgICBFdmVu
dERpc3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnNlY29uZDsKKyAgICAgICAgdGFzay0+Y2FuY2Vs
KCk7CiAgICAgfQotfQotCi12b2lkIEV2ZW50UXVldWU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQpCi17Ci0gICAgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0ID0gZXZlbnQt
PnRhcmdldCgpOwotICAgIGlmIChldmVudFRhcmdldC0+dG9ET01XaW5kb3coKSkKLSAgICAgICAg
ZXZlbnRUYXJnZXQtPnRvRE9NV2luZG93KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQsIDApOwotICAg
IGVsc2UKLSAgICAgICAgZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIG1f
ZXZlbnRUYXNrTWFwLmNsZWFyKCk7CisgICAgbV9ub2Rlc1dpdGhRdWV1ZWRTY3JvbGxFdmVudHMu
Y2xlYXIoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVl
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKaW5kZXggMmNiMzhmNDkwZDAx
ZjBjOGUzMGQ3MTg5ODRkZmYxZGRkNzA0NjBiYy4uYTEzNDEzN2YxNDQ4ZjBlNjU0ZjU2NDdmMmM3
OTZmNmVkYTI3NjIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oCkBAIC0yNywxNiArMjcsMTQg
QEAKICNpZm5kZWYgRXZlbnRRdWV1ZV9oCiAjZGVmaW5lIEV2ZW50UXVldWVfaAogCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBFdmVudDsKLWNsYXNzIEV2ZW50UXVldWVUaW1lcjsKIGNsYXNzIE5vZGU7
CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCkBAIC00OCw3ICs0Niw3IEBAIHB1Ymxp
YzoKICAgICB9OwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRRdWV1ZT4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICB+RXZlbnRRdWV1ZSgpOworICAgIHZpcnR1YWwg
fkV2ZW50UXVldWUoKTsKIAogICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KTsKICAgICB2b2lkIGVucXVldWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQoUGFzc1JlZlB0cjxOb2Rl
PiwgU2Nyb2xsRXZlbnRUYXJnZXRUeXBlKTsKQEAgLTU4LDE0ICs1NiwxNCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IEV2ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwogCi0gICAgdm9pZCBwZW5kaW5nRXZlbnRUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIHJlbW92ZUV2ZW50KEV2ZW50Kik7
CiAKLSAgICBPd25QdHI8RXZlbnRRdWV1ZVRpbWVyPiBtX3BlbmRpbmdFdmVudFRpbWVyOwotICAg
IExpc3RIYXNoU2V0PFJlZlB0cjxFdmVudD4gPiBtX3F1ZXVlZEV2ZW50czsKICAgICBIYXNoU2V0
PE5vZGUqPiBtX25vZGVzV2l0aFF1ZXVlZFNjcm9sbEV2ZW50czsKLSAgICAKLSAgICBmcmllbmQg
Y2xhc3MgRXZlbnRRdWV1ZVRpbWVyOyAgICAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKyAgICBjbGFzcyBFdmVudERpc3BhdGNoZXJUYXNr
OworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RXZlbnQ+LCBFdmVudERpc3BhdGNoZXJUYXNr
Kj4gRXZlbnRUYXNrTWFwOworICAgIEV2ZW50VGFza01hcCBtX2V2ZW50VGFza01hcDsKIH07CiAK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94036</attachid>
            <date>2011-05-18 20:15:46 -0700</date>
            <delta_ts>2011-09-30 16:07:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60790-20110518201543.patch</filename>
            <type>text/plain</type>
            <size>9363</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY3NzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhOWQ0OGUyMjI1NDA4M2Qz
ODA3MWEyYWUzODE2N2Y0MTE0NDY0NDhkLi45MDgxMGUxMDE4MDZhN2JhZDZhOWQ5NWFhNzZiMDAx
YTZhZmQ3ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDUtMTMgIERhdmlk
IEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRXZlbnRRdWV1ZSBwb3N0IGEgVGFzayB0byB0
aGUgdGFzayBxdWV1ZSBmb3IgZWFjaCBhc3luY2hyb25vdXMgZXZlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzkwCisKKyAgICAgICAgQ3VycmVu
dGx5IEV2ZW50UXVldWUgcXVldWVzIHVwIGV2ZW50cyB0byBiZSBmaXJlZCBhc3luY2hyb25vdXNs
eSBhbmQKKyAgICAgICAgZmlyZXMgZWFjaCBvZiB0aGVtIHdoZW4gYSBzaW5nbGUgRE9NVGltZXIg
Z29lcyBvZmYuICBJbiB0aGUgd29yZHMgb2YKKyAgICAgICAgZGltaWNoLCAiSGF2aW5nIDIgcXVl
dWVzIHdpbGwgc29vbmVyIG9yIGxhdGVyIGNhdXNlIHByb2JsZW1zIHdpdGgKKyAgICAgICAgb3Jk
ZXJpbmcgb2YgdGFza3MsIHRlcm1pbmF0aW9uLCBzdXNwZW5zaW9uIGFuZCBvdGhlciB0aGluZ3Mg
dGhhdCBhbGwKKyAgICAgICAgcmVxdWlyZSBzb21lIGNvbnRyb2wgb24gaG93IHF1ZXVlcyBvcGVy
YXRlLiIKKworICAgICAgICBObyBuZXcgdGVzdHM7IHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5n
IHRvIGF2b2lkIHBvdGVudGlhbCBmdXR1cmUKKyAgICAgICAgcHJvYmxlbXMuCisKKyAgICAgICAg
KiBkb20vRXZlbnRRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVu
dFF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRh
c2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNo
ZXJUYXNrOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OkV2
ZW50RGlzcGF0Y2hlclRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJUYXNrOjpFdmVudERpc3BhdGNoZXJUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OnJlbW92ZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50UXVldWU6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1
ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50UXVldWU6OmNhbmNlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OmNh
bmNlbFF1ZXVlZEV2ZW50cyk6CisgICAgICAgICogZG9tL0V2ZW50UXVldWUuaDoKKwogMjAxMS0w
NS0xOCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzYxMDc4PiBVc2UgdG9IVFRQUGlwZWxpbmluZ1ByaW9yaXR5KCkgaW4g
aW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCmluZGV4IGQyNjNjOWY2ODNlOGUxMDY1ZDc3MmMxZmJhNDkyYmY0Y2JhZDQ4MjAuLjM2
MmM0NTgyYzcyOGZjOTY1MjExZjExMjY3ZTRlOGE1MTM3ZmY4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCkBAIC0xMzc0LDcgKzEzNzQsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3VzaW5nR2Vv
bG9jYXRpb247CiAKLSAgICBSZWZQdHI8RXZlbnRRdWV1ZT4gbV9ldmVudFF1ZXVlOworICAgIE93
blB0cjxFdmVudFF1ZXVlPiBtX2V2ZW50UXVldWU7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRXZWFr
UmVmZXJlbmNlPiBtX3dlYWtSZWZlcmVuY2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmNwcApp
bmRleCA5MGYzZTVkZWRjN2M1OGQ5ZjAxNjA1NTE4YTIxODA3MTAzN2Y3YjliLi5lZGYwNGY3ZmU5
MDExZjNmNWExMDQ3NTdjOTVlMWE1OGE5YzI0YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUu
Y3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKLSNpbmNsdWRlICJTdXNwZW5kYWJsZVRpbWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAKQEAgLTQzLDQwICs0Miw3NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxk
RGlzcGF0Y2hTY3JvbGxFdmVudFN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIGRvY3VtZW50KQogICAg
IHJldHVybiBhcHBsaWNhdGlvbklzU2FmYXJpKCkgJiYgKGRvY3VtZW50LT51cmwoKS5wcm90b2Nv
bElzKCJmZWVkIikgfHwgZG9jdW1lbnQtPnVybCgpLnByb3RvY29sSXMoImZlZWRzIikpOwogfQog
Ci1jbGFzcyBFdmVudFF1ZXVlVGltZXIgOiBwdWJsaWMgU3VzcGVuZGFibGVUaW1lciB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRRdWV1ZVRpbWVyKTsKLXB1YmxpYzoKLSAgICBFdmVu
dFF1ZXVlVGltZXIoRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKLSAgICAgICAgOiBTdXNwZW5kYWJsZVRpbWVyKGNvbnRleHQpCi0gICAgICAg
ICwgbV9ldmVudFF1ZXVlKGV2ZW50UXVldWUpIHsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwg
dm9pZCBmaXJlZCgpIHsgbV9ldmVudFF1ZXVlLT5wZW5kaW5nRXZlbnRUaW1lckZpcmVkKCk7IH0K
LSAgICBFdmVudFF1ZXVlKiBtX2V2ZW50UXVldWU7ICAgIAotfTsKLQotUGFzc1JlZlB0cjxFdmVu
dFF1ZXVlPiBFdmVudFF1ZXVlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKK1Bhc3NPd25QdHI8RXZlbnRRdWV1ZT4gRXZlbnRRdWV1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmVudFF1
ZXVlKGNvbnRleHQpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEV2ZW50UXVldWUoY29udGV4
dCkpOwogfQogCiBFdmVudFF1ZXVlOjpFdmVudFF1ZXVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCi0gICAgOiBtX3BlbmRpbmdFdmVudFRpbWVyKGFkb3B0UHRyKG5ldyBFdmVudFF1
ZXVlVGltZXIodGhpcywgY29udGV4dCkpKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KGNvbnRleHQpCiB7CiB9CiAKIEV2ZW50UXVldWU6On5FdmVudFF1ZXVlKCkKIHsKKyAgICBjYW5j
ZWxRdWV1ZWRFdmVudHMoKTsKIH0KIAotdm9pZCBFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCitjbGFzcyBFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJU
YXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPEV2ZW50RGlzcGF0Y2hlclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCwgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRXZlbnREaXNwYXRjaGVyVGFzayhldmVudCwgZXZlbnRRdWV1ZSkp
OworICAgIH0KKworICAgIHZvaWQgZGlzcGF0Y2hFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCisgICAgeworICAgICAgICBFdmVudFRhcmdldCog
ZXZlbnRUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CisgICAgICAgIGlmIChldmVudFRhcmdldC0+
dG9ET01XaW5kb3coKSkKKyAgICAgICAgICAgIGV2ZW50VGFyZ2V0LT50b0RPTVdpbmRvdygpLT5k
aXNwYXRjaEV2ZW50KGV2ZW50LCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZlbnRU
YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAg
ICAgaWYgKG1faXNDYW5jZWxsZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZXZl
bnRRdWV1ZS0+cmVtb3ZlRXZlbnQobV9ldmVudC5nZXQoKSk7CisgICAgICAgIGRpc3BhdGNoRXZl
bnQoY29udGV4dCwgbV9ldmVudCk7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsK
KyAgICAgICAgbV9pc0NhbmNlbGxlZCA9IHRydWU7CisgICAgICAgIG1fZXZlbnQuY2xlYXIoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgRXZlbnREaXNwYXRjaGVyVGFzayhQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCwgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSkKKyAgICAgICAgOiBtX2V2ZW50KGV2
ZW50KQorICAgICAgICAsIG1fZXZlbnRRdWV1ZShldmVudFF1ZXVlKQorICAgICAgICAsIG1faXND
YW5jZWxsZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxFdmVudD4gbV9ldmVu
dDsKKyAgICBFdmVudFF1ZXVlKiBtX2V2ZW50UXVldWU7CisgICAgYm9vbCBtX2lzQ2FuY2VsbGVk
OworfTsKKwordm9pZCBFdmVudFF1ZXVlOjpyZW1vdmVFdmVudChFdmVudCogZXZlbnQpCiB7Ci0g
ICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgYm9vbCB3YXNBZGRlZCA9IG1fcXVldWVk
RXZlbnRzLmFkZChldmVudCkuc2Vjb25kOwotICAgIEFTU0VSVF9VTlVTRUQod2FzQWRkZWQsIHdh
c0FkZGVkKTsgLy8gSXQgc2hvdWxkIG5vdCBoYXZlIGFscmVhZHkgYmVlbiBpbiB0aGUgbGlzdC4K
LSAgICAKLSAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXItPmlzQWN0aXZlKCkpCi0gICAgICAg
IG1fcGVuZGluZ0V2ZW50VGltZXItPnN0YXJ0T25lU2hvdCgwKTsKKyAgICBpZiAoTm9kZSogbm9k
ZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCkpCisgICAgICAgIG1fbm9kZXNXaXRoUXVldWVk
U2Nyb2xsRXZlbnRzLnJlbW92ZShub2RlKTsKKyAgICBtX2V2ZW50VGFza01hcC5yZW1vdmUoZXZl
bnQpOworfQorCit2b2lkIEV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBwcnBFdmVudCkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CisgICAg
T3duUHRyPEV2ZW50RGlzcGF0Y2hlclRhc2s+IHRhc2sgPSBFdmVudERpc3BhdGNoZXJUYXNrOjpj
cmVhdGUoZXZlbnQsIHRoaXMpOworICAgIG1fZXZlbnRUYXNrTWFwLmFkZChldmVudC5yZWxlYXNl
KCksIHRhc2suZ2V0KCkpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2so
dGFzay5yZWxlYXNlKCkpOwogfQogCiB2b2lkIEV2ZW50UXVldWU6OmVucXVldWVPckRpc3BhdGNo
U2Nyb2xsRXZlbnQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIFNjcm9sbEV2ZW50VGFyZ2V0VHlw
ZSB0YXJnZXRUeXBlKQpAQCAtOTksNTAgKzEzNSwyMiBAQCB2b2lkIEV2ZW50UXVldWU6OmVucXVl
dWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIFNjcm9sbEV2
ZQogCiBib29sIEV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50KiBldmVudCkKIHsKLSAgICBi
b29sIGZvdW5kID0gbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoZXZlbnQpOwotICAgIG1fcXVldWVk
RXZlbnRzLnJlbW92ZShldmVudCk7Ci0gICAgaWYgKG1fcXVldWVkRXZlbnRzLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9wZW5kaW5nRXZlbnRUaW1lci0+c3RvcCgpOwotICAgIHJldHVybiBmb3VuZDsK
KyAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0gbV9ldmVudFRhc2tNYXAuZ2V0KGV2ZW50
KTsKKyAgICBpZiAoIXRhc2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0YXNrLT5jYW5j
ZWwoKTsKKyAgICByZW1vdmVFdmVudChldmVudCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZv
aWQgRXZlbnRRdWV1ZTo6Y2FuY2VsUXVldWVkRXZlbnRzKCkKIHsKLSAgICBtX3BlbmRpbmdFdmVu
dFRpbWVyLT5zdG9wKCk7Ci0gICAgbV9xdWV1ZWRFdmVudHMuY2xlYXIoKTsKLX0KLQotdm9pZCBF
dmVudFF1ZXVlOjpwZW5kaW5nRXZlbnRUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQoIW1fcGVu
ZGluZ0V2ZW50VGltZXItPmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZWRFdmVudHMu
aXNFbXB0eSgpKTsKLQotICAgIG1fbm9kZXNXaXRoUXVldWVkU2Nyb2xsRXZlbnRzLmNsZWFyKCk7
Ci0KLSAgICAvLyBJbnNlcnQgYSBtYXJrZXIgZm9yIHdoZXJlIHdlIHNob3VsZCBzdG9wLgotICAg
IEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoMCkpOwotICAgIGJvb2wgd2FzQWRkZWQg
PSBtX3F1ZXVlZEV2ZW50cy5hZGQoMCkuc2Vjb25kOwotICAgIEFTU0VSVF9VTlVTRUQod2FzQWRk
ZWQsIHdhc0FkZGVkKTsgLy8gSXQgc2hvdWxkIG5vdCBoYXZlIGFscmVhZHkgYmVlbiBpbiB0aGUg
bGlzdC4KLQotICAgIFJlZlB0cjxFdmVudFF1ZXVlPiBwcm90ZWN0b3IodGhpcyk7Ci0KLSAgICB3
aGlsZSAoIW1fcXVldWVkRXZlbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBMaXN0SGFzaFNldDxS
ZWZQdHI8RXZlbnQ+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3F1ZXVlZEV2ZW50cy5iZWdpbigpOwot
ICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gKml0ZXI7Ci0gICAgICAgIG1fcXVldWVkRXZl
bnRzLnJlbW92ZShpdGVyKTsKLSAgICAgICAgaWYgKCFldmVudCkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKKyAgICBmb3IgKEV2ZW50VGFz
a01hcDo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50VGFza01hcC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50
VGFza01hcC5lbmQoKTsgKytpdCkgeworICAgICAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNr
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgdGFzay0+Y2FuY2VsKCk7CiAgICAgfQotfQotCi12b2lk
IEV2ZW50UXVldWU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCi17Ci0g
ICAgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpOwotICAgIGlmIChl
dmVudFRhcmdldC0+dG9ET01XaW5kb3coKSkKLSAgICAgICAgZXZlbnRUYXJnZXQtPnRvRE9NV2lu
ZG93KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQsIDApOwotICAgIGVsc2UKLSAgICAgICAgZXZlbnRU
YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIG1fZXZlbnRUYXNrTWFwLmNsZWFyKCk7
CisgICAgbV9ub2Rlc1dpdGhRdWV1ZWRTY3JvbGxFdmVudHMuY2xlYXIoKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFF1ZXVlLmgKaW5kZXggMmNiMzhmNDkwZDAxZjBjOGUzMGQ3MTg5ODRkZmYxZGRk
NzA0NjBiYy4uYmU4ZGFmZjE0MjQzYzcwMjkxNzEyOTIwYWM2OGVlNDQ4YWJiZTEwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRRdWV1ZS5oCkBAIC0yNywyNyArMjcsMjQgQEAKICNpZm5kZWYgRXZlbnRRdWV1
ZV9oCiAjZGVmaW5lIEV2ZW50UXVldWVfaAogCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OwotY2xhc3MgRXZlbnRRdWV1ZVRpbWVyOwogY2xh
c3MgTm9kZTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKLWNsYXNzIEV2ZW50UXVl
dWUgOiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudFF1ZXVlPiB7CitjbGFzcyBFdmVudFF1ZXVlIHsK
IHB1YmxpYzoKICAgICBlbnVtIFNjcm9sbEV2ZW50VGFyZ2V0VHlwZSB7CiAgICAgICAgIFNjcm9s
bEV2ZW50RG9jdW1lbnRUYXJnZXQsCiAgICAgICAgIFNjcm9sbEV2ZW50RWxlbWVudFRhcmdldAog
ICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudFF1ZXVlPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEV2ZW50UXVldWU+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgfkV2ZW50UXVldWUoKTsKIAogICAg
IHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKQEAgLTU4LDE0ICs1NSwxNCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEV2ZW50UXVldWUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwogCi0gICAgdm9pZCBwZW5kaW5nRXZlbnRUaW1lckZpcmVkKCk7Ci0gICAg
dm9pZCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIHJlbW92ZUV2
ZW50KEV2ZW50Kik7CiAKLSAgICBPd25QdHI8RXZlbnRRdWV1ZVRpbWVyPiBtX3BlbmRpbmdFdmVu
dFRpbWVyOwotICAgIExpc3RIYXNoU2V0PFJlZlB0cjxFdmVudD4gPiBtX3F1ZXVlZEV2ZW50czsK
ICAgICBIYXNoU2V0PE5vZGUqPiBtX25vZGVzV2l0aFF1ZXVlZFNjcm9sbEV2ZW50czsKLSAgICAK
LSAgICBmcmllbmQgY2xhc3MgRXZlbnRRdWV1ZVRpbWVyOyAgICAKKyAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKyAgICBjbGFzcyBFdmVudERp
c3BhdGNoZXJUYXNrOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RXZlbnQ+LCBFdmVudERp
c3BhdGNoZXJUYXNrKj4gRXZlbnRUYXNrTWFwOworICAgIEV2ZW50VGFza01hcCBtX2V2ZW50VGFz
a01hcDsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109363</attachid>
            <date>2011-09-30 16:07:10 -0700</date>
            <delta_ts>2011-09-30 16:09:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60790-20110930160709.patch</filename>
            <type>text/plain</type>
            <size>9000</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzNzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNjUxNTUxYTBjNjVkZWIx
ZGE2NGJmOGNkMDRlZWZiMzA1Nzk2YTkwLi43Mzc4MGUxNGRmOWM4NTMzNmU2MzU2ODgyMmJlMzZk
NGJmYWIzYjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDktMzAgIERhdmlk
IEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1ha2UgRXZlbnRRdWV1
ZSBzcGF3biBhIFRhc2sgZm9yIGVhY2ggYXN5bmNocm9ub3VzIGV2ZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDc5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yaW5nLCBubyBuZXcgdGVz
dHMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRXZlbnRRdWV1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRRdWV1ZTo6RXZlbnRRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFF1ZXVlOjp+RXZlbnRRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVu
dERpc3BhdGNoZXJUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRRdWV1ZTo6
RXZlbnREaXNwYXRjaGVyVGFzazo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXJUYXNrOjpjYW5jZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRRdWV1ZTo6RXZlbnREaXNwYXRjaGVyVGFzazo6RXZlbnREaXNwYXRj
aGVyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjpyZW1vdmVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRRdWV1ZTo6Y2FuY2VsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRR
dWV1ZTo6Y2xvc2UpOgorICAgICAgICAqIGRvbS9FdmVudFF1ZXVlLmg6CisKIDIwMTEtMDktMjkg
IE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtGcmVl
dHlwZV0gU29tZSB0ZXh0IGluIFBsYW5ldCBHTk9NRSByZW5kZXJzIGluIHRoZSB3cm9uZyBwbGFj
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBlN2E5MjI2ZmE5YWExMzRlZDEwZmJiYjE5ZDQ5MTFm
NjFkN2FlY2I2Li44ZGU0N2Q0NjE2OGQ1ZmU3YjJlMzg3M2NkNDY4NjBmYWYyODU1MGY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaApAQCAtMTM2OSw3ICsxMzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV91c2luZ0dlb2xvY2F0aW9uOwogCi0gICAgUmVmUHRyPEV2ZW50UXVldWU+IG1fZXZlbnRR
dWV1ZTsKKyAgICBPd25QdHI8RXZlbnRRdWV1ZT4gbV9ldmVudFF1ZXVlOwogCiAgICAgUmVmUHRy
PERvY3VtZW50V2Vha1JlZmVyZW5jZT4gbV93ZWFrUmVmZXJlbmNlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRRdWV1ZS5jcHAKaW5kZXggYjBlZTI3NzIxZjQxYjhjYzBjMWJkZmU1NzNjMjQ4MmNkOTQ5NWU3
ZC4uZDViYjJlOWMyZjNkMTZjZDdkZGQyNzA5ZmE0ZTA0ZTU0MjgyMTUzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFF1ZXVlLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU3VzcGVuZGFibGVUaW1lci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCkBAIC00Myw0NCArNDIsODAgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNob3VsZERpc3BhdGNoU2Nyb2xsRXZlbnRTeW5jaHJvbm91c2x5KERvY3VtZW50KiBk
b2N1bWVudCkKICAgICByZXR1cm4gYXBwbGljYXRpb25Jc1NhZmFyaSgpICYmIChkb2N1bWVudC0+
dXJsKCkucHJvdG9jb2xJcygiZmVlZCIpIHx8IGRvY3VtZW50LT51cmwoKS5wcm90b2NvbElzKCJm
ZWVkcyIpKTsKIH0KIAotY2xhc3MgRXZlbnRRdWV1ZVRpbWVyIDogcHVibGljIFN1c3BlbmRhYmxl
VGltZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50UXVldWVUaW1lcik7Ci1wdWJs
aWM6Ci0gICAgRXZlbnRRdWV1ZVRpbWVyKEV2ZW50UXVldWUqIGV2ZW50UXVldWUsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgICAgIDogU3VzcGVuZGFibGVUaW1lcihjb250
ZXh0KQotICAgICAgICAsIG1fZXZlbnRRdWV1ZShldmVudFF1ZXVlKSB7IH0KLQotcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKSB7IG1fZXZlbnRRdWV1ZS0+cGVuZGluZ0V2ZW50VGlt
ZXJGaXJlZCgpOyB9Ci0gICAgRXZlbnRRdWV1ZSogbV9ldmVudFF1ZXVlOyAgICAKLX07Ci0KLVBh
c3NSZWZQdHI8RXZlbnRRdWV1ZT4gRXZlbnRRdWV1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCitQYXNzT3duUHRyPEV2ZW50UXVldWU+IEV2ZW50UXVldWU6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRXZlbnRRdWV1ZShjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFdmVu
dFF1ZXVlKGNvbnRleHQpKTsKIH0KIAogRXZlbnRRdWV1ZTo6RXZlbnRRdWV1ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDogbV9wZW5kaW5nRXZlbnRUaW1lcihhZG9wdFB0
cihuZXcgRXZlbnRRdWV1ZVRpbWVyKHRoaXMsIGNvbnRleHQpKSkKKyAgICA6IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dChjb250ZXh0KQogICAgICwgbV9pc0Nsb3NlZChmYWxzZSkKIHsKIH0KIAog
RXZlbnRRdWV1ZTo6fkV2ZW50UXVldWUoKQogeworICAgIGNsb3NlKCk7Cit9CisKK2NsYXNzIEV2
ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RXZlbnREaXNwYXRj
aGVyVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFdmVudFF1ZXVlKiBldmVu
dFF1ZXVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFdmVudERpc3BhdGNo
ZXJUYXNrKGV2ZW50LCBldmVudFF1ZXVlKSk7CisgICAgfQorCisgICAgdm9pZCBkaXNwYXRjaEV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKKyAg
ICB7CisgICAgICAgIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IGV2ZW50LT50YXJnZXQoKTsK
KyAgICAgICAgaWYgKGV2ZW50VGFyZ2V0LT50b0RPTVdpbmRvdygpKQorICAgICAgICAgICAgZXZl
bnRUYXJnZXQtPnRvRE9NV2luZG93KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQsIDApOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBldmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBpZiAobV9pc0NhbmNlbGxlZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9ldmVudFF1ZXVlLT5yZW1vdmVFdmVudChtX2V2ZW50Lmdl
dCgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChjb250ZXh0LCBtX2V2ZW50KTsKKyAgICB9CisK
KyAgICB2b2lkIGNhbmNlbCgpCisgICAgeworICAgICAgICBtX2lzQ2FuY2VsbGVkID0gdHJ1ZTsK
KyAgICAgICAgbV9ldmVudC5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBFdmVudERp
c3BhdGNoZXJUYXNrKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFdmVudFF1ZXVlKiBldmVudFF1
ZXVlKQorICAgICAgICA6IG1fZXZlbnQoZXZlbnQpCisgICAgICAgICwgbV9ldmVudFF1ZXVlKGV2
ZW50UXVldWUpCisgICAgICAgICwgbV9pc0NhbmNlbGxlZChmYWxzZSkKKyAgICB7CisgICAgfQor
CisgICAgUmVmUHRyPEV2ZW50PiBtX2V2ZW50OworICAgIEV2ZW50UXVldWUqIG1fZXZlbnRRdWV1
ZTsKKyAgICBib29sIG1faXNDYW5jZWxsZWQ7Cit9OworCit2b2lkIEV2ZW50UXVldWU6OnJlbW92
ZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoTm9kZSogbm9kZSA9IGV2ZW50LT50YXJn
ZXQoKS0+dG9Ob2RlKCkpCisgICAgICAgIG1fbm9kZXNXaXRoUXVldWVkU2Nyb2xsRXZlbnRzLnJl
bW92ZShub2RlKTsKKyAgICBtX2V2ZW50VGFza01hcC5yZW1vdmUoZXZlbnQpOwogfQogCi12b2lk
IEV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQg
RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogewog
ICAgIGlmIChtX2lzQ2xvc2VkKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZXZlbnQt
PnRhcmdldCgpKTsKLSAgICBib29sIHdhc0FkZGVkID0gbV9xdWV1ZWRFdmVudHMuYWRkKGV2ZW50
KS5zZWNvbmQ7Ci0gICAgQVNTRVJUX1VOVVNFRCh3YXNBZGRlZCwgd2FzQWRkZWQpOyAvLyBJdCBz
aG91bGQgbm90IGhhdmUgYWxyZWFkeSBiZWVuIGluIHRoZSBsaXN0LgotICAgIAotICAgIGlmICgh
bV9wZW5kaW5nRXZlbnRUaW1lci0+aXNBY3RpdmUoKSkKLSAgICAgICAgbV9wZW5kaW5nRXZlbnRU
aW1lci0+c3RhcnRPbmVTaG90KDApOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVu
dDsKKyAgICBPd25QdHI8RXZlbnREaXNwYXRjaGVyVGFzaz4gdGFzayA9IEV2ZW50RGlzcGF0Y2hl
clRhc2s6OmNyZWF0ZShldmVudCwgdGhpcyk7CisgICAgbV9ldmVudFRhc2tNYXAuYWRkKGV2ZW50
LnJlbGVhc2UoKSwgdGFzay5nZXQoKSk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5w
b3N0VGFzayh0YXNrLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgRXZlbnRRdWV1ZTo6ZW5xdWV1ZU9y
RGlzcGF0Y2hTY3JvbGxFdmVudChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgU2Nyb2xsRXZlbnRU
YXJnZXRUeXBlIHRhcmdldFR5cGUpCkBAIC0xMDYsNTEgKzE0MSwyMyBAQCB2b2lkIEV2ZW50UXVl
dWU6OmVucXVldWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQs
IFNjcm9sbEV2ZQogCiBib29sIEV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50KiBldmVudCkK
IHsKLSAgICBib29sIGZvdW5kID0gbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoZXZlbnQpOwotICAg
IG1fcXVldWVkRXZlbnRzLnJlbW92ZShldmVudCk7Ci0gICAgaWYgKG1fcXVldWVkRXZlbnRzLmlz
RW1wdHkoKSkKLSAgICAgICAgbV9wZW5kaW5nRXZlbnRUaW1lci0+c3RvcCgpOwotICAgIHJldHVy
biBmb3VuZDsKKyAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0gbV9ldmVudFRhc2tNYXAu
Z2V0KGV2ZW50KTsKKyAgICBpZiAoIXRhc2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0
YXNrLT5jYW5jZWwoKTsKKyAgICByZW1vdmVFdmVudChldmVudCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHZvaWQgRXZlbnRRdWV1ZTo6Y2xvc2UoKQogewogICAgIG1faXNDbG9zZWQgPSB0cnVl
OwotICAgIG1fcGVuZGluZ0V2ZW50VGltZXItPnN0b3AoKTsKLSAgICBtX3F1ZXVlZEV2ZW50cy5j
bGVhcigpOwotfQotCi12b2lkIEV2ZW50UXVldWU6OnBlbmRpbmdFdmVudFRpbWVyRmlyZWQoKQot
ewotICAgIEFTU0VSVCghbV9wZW5kaW5nRXZlbnRUaW1lci0+aXNBY3RpdmUoKSk7Ci0gICAgQVNT
RVJUKCFtX3F1ZXVlZEV2ZW50cy5pc0VtcHR5KCkpOwotCi0gICAgbV9ub2Rlc1dpdGhRdWV1ZWRT
Y3JvbGxFdmVudHMuY2xlYXIoKTsKLQotICAgIC8vIEluc2VydCBhIG1hcmtlciBmb3Igd2hlcmUg
d2Ugc2hvdWxkIHN0b3AuCi0gICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlucygwKSk7
Ci0gICAgYm9vbCB3YXNBZGRlZCA9IG1fcXVldWVkRXZlbnRzLmFkZCgwKS5zZWNvbmQ7Ci0gICAg
QVNTRVJUX1VOVVNFRCh3YXNBZGRlZCwgd2FzQWRkZWQpOyAvLyBJdCBzaG91bGQgbm90IGhhdmUg
YWxyZWFkeSBiZWVuIGluIHRoZSBsaXN0LgotCi0gICAgUmVmUHRyPEV2ZW50UXVldWU+IHByb3Rl
Y3Rvcih0aGlzKTsKLQotICAgIHdoaWxlICghbV9xdWV1ZWRFdmVudHMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIExpc3RIYXNoU2V0PFJlZlB0cjxFdmVudD4gPjo6aXRlcmF0b3IgaXRlciA9IG1fcXVl
dWVkRXZlbnRzLmJlZ2luKCk7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSAqaXRlcjsK
LSAgICAgICAgbV9xdWV1ZWRFdmVudHMucmVtb3ZlKGl0ZXIpOwotICAgICAgICBpZiAoIWV2ZW50
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkp
OworICAgIGZvciAoRXZlbnRUYXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZlbnRUYXNrTWFwLmJl
Z2luKCk7IGl0ICE9IG1fZXZlbnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAgIEV2ZW50
RGlzcGF0Y2hlclRhc2sqIHRhc2sgPSBpdC0+c2Vjb25kOworICAgICAgICB0YXNrLT5jYW5jZWwo
KTsKICAgICB9Ci19Ci0KLXZvaWQgRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCkKLXsKLSAgICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQgPSBldmVudC0+
dGFyZ2V0KCk7Ci0gICAgaWYgKGV2ZW50VGFyZ2V0LT50b0RPTVdpbmRvdygpKQotICAgICAgICBl
dmVudFRhcmdldC0+dG9ET01XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChldmVudCwgMCk7Ci0gICAg
ZWxzZQotICAgICAgICBldmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgbV9l
dmVudFRhc2tNYXAuY2xlYXIoKTsKKyAgICBtX25vZGVzV2l0aFF1ZXVlZFNjcm9sbEV2ZW50cy5j
bGVhcigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAppbmRleCBjOTk3OTcyMDgxZWU1
ZjJhYWE1NWVjMGFjMDYxNGVkNDljOWUwMTU2Li5iNzc5NmMwZjI5ZjA1NzM3MjkxOGFjYzEzOTBj
MTA2MWYyM2E2YzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKQEAgLTI3LDI3ICsyNywyNCBA
QAogI2lmbmRlZiBFdmVudFF1ZXVlX2gKICNkZWZpbmUgRXZlbnRRdWV1ZV9oCiAKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBF
dmVudFF1ZXVlVGltZXI7CiBjbGFzcyBOb2RlOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKIAotY2xhc3MgRXZlbnRRdWV1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50UXVldWU+IHsK
K2NsYXNzIEV2ZW50UXVldWUgewogcHVibGljOgogICAgIGVudW0gU2Nyb2xsRXZlbnRUYXJnZXRU
eXBlIHsKICAgICAgICAgU2Nyb2xsRXZlbnREb2N1bWVudFRhcmdldCwKICAgICAgICAgU2Nyb2xs
RXZlbnRFbGVtZW50VGFyZ2V0CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50
UXVldWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8RXZlbnRRdWV1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICB+
RXZlbnRRdWV1ZSgpOwogCiAgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
OwpAQCAtNjAsMTUgKzU3LDE1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRXZl
bnRRdWV1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICB2b2lkIHBlbmRpbmdFdmVu
dFRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
OworICAgIHZvaWQgcmVtb3ZlRXZlbnQoRXZlbnQqKTsKIAotICAgIE93blB0cjxFdmVudFF1ZXVl
VGltZXI+IG1fcGVuZGluZ0V2ZW50VGltZXI7Ci0gICAgTGlzdEhhc2hTZXQ8UmVmUHRyPEV2ZW50
PiA+IG1fcXVldWVkRXZlbnRzOwogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbm9kZXNXaXRoUXVldWVk
U2Nyb2xsRXZlbnRzOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKICAgICBib29sIG1faXNDbG9zZWQ7CiAKLSAgICBmcmllbmQgY2xhc3MgRXZl
bnRRdWV1ZVRpbWVyOyAgICAKKyAgICBjbGFzcyBFdmVudERpc3BhdGNoZXJUYXNrOworICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWZQdHI8RXZlbnQ+LCBFdmVudERpc3BhdGNoZXJUYXNrKj4gRXZlbnRU
YXNrTWFwOworICAgIEV2ZW50VGFza01hcCBtX2V2ZW50VGFza01hcDsKIH07CiAKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>