<?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>81506</bug_id>
          
          <creation_ts>2012-03-19 03:20:01 -0700</creation_ts>
          <short_desc>Asserts in XMLHttpRequestProgressEventThrottle</short_desc>
          <delta_ts>2012-04-17 07:04:11 -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>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>46743</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>mihaip</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>581720</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 03:20:01 -0700</bug_when>
    <thetext>XMLHttpRequests when active DOM objects have been suspended will often cause asserts in  XMLHttpRequestProgressEventThrottle.

This is most easily triggered using Qt WebKit2 which suspends active DOM objects on panning, and loading a page which uses a XMLHttpRequests. For instance index.hu. The bug is not specific to this type of suspend theory, and could in theory also be triggered on pagecache or JavaScript alert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581725</commentid>
    <comment_count>1</comment_count>
      <attachid>132568</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 03:36:24 -0700</bug_when>
    <thetext>Created attachment 132568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581913</commentid>
    <comment_count>2</comment_count>
      <attachid>132568</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-19 10:28:59 -0700</bug_when>
    <thetext>Comment on attachment 132568
Patch

r- due to lack of regression test.

Please also explain why you&apos;re receiving data from network in suspended state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581988</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 11:36:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 132568 [details])
&gt; r- due to lack of regression test.
&gt; 
&gt; Please also explain why you&apos;re receiving data from network in suspended state.

Okay, I have made a test-case based on pagehide event.

Data does not need to arrive from anywhere for readystate to change. This is the incorrect assumption the current asserts make.

Something as simple as calling xmlhttprequest::open() on any URL will cause a readystate event-change (to OPENED). This is not a timed event, and has nothing to do with incoming network-traffic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582006</commentid>
    <comment_count>4</comment_count>
      <attachid>132619</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 11:52:25 -0700</bug_when>
    <thetext>Created attachment 132619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582008</commentid>
    <comment_count>5</comment_count>
      <attachid>132619</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-19 11:53:52 -0700</bug_when>
    <thetext>Comment on attachment 132619
Patch

Not suitable for review. Upload scripts collected irrelevant changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582912</commentid>
    <comment_count>6</comment_count>
      <attachid>132791</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-20 03:50:11 -0700</bug_when>
    <thetext>Created attachment 132791
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582935</commentid>
    <comment_count>7</comment_count>
      <attachid>132791</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 04:31:26 -0700</bug_when>
    <thetext>Comment on attachment 132791
Patch

Attachment 132791 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12002218

New failing tests:
fast/events/pagehide-xhr-open.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583007</commentid>
    <comment_count>8</comment_count>
      <attachid>132811</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-20 06:25:07 -0700</bug_when>
    <thetext>Created attachment 132811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583720</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-20 19:55:58 -0700</bug_when>
    <thetext>I&apos;d like to take a deep look at this, but I won&apos;t be able to in the next few days. Julien, what do you think about this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584220</commentid>
    <comment_count>10</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-21 09:30:49 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;d like to take a deep look at this, but I won&apos;t be able to in the next few days. Julien, what do you think about this change?

Sure. I had a look but I would like more explanation before being able to review that:

&gt; Something as simple as calling xmlhttprequest::open() on any URL will cause a readystate event-change (to OPENED). This is not a timed event, and has nothing to do with incoming network-traffic.

Shouldn&apos;t JS be also suspended in this case? I think I don&apos;t get why we still get some calls to XMLHttpRequestProgressThrottle after suspend() was called and an explanation along those lines would help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584257</commentid>
    <comment_count>11</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-21 10:00:11 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; I&apos;d like to take a deep look at this, but I won&apos;t be able to in the next few days. Julien, what do you think about this change?
&gt; 
&gt; Sure. I had a look but I would like more explanation before being able to review that:
&gt; 
&gt; &gt; Something as simple as calling xmlhttprequest::open() on any URL will cause a readystate event-change (to OPENED). This is not a timed event, and has nothing to do with incoming network-traffic.
&gt; 
&gt; Shouldn&apos;t JS be also suspended in this case? I think I don&apos;t get why we still get some calls to XMLHttpRequestProgressThrottle after suspend() was called and an explanation along those lines would help.

On the API layer, suspending JS and suspending ActiveDOMObjects are two different calls, so should not depend on each other. In practice though, there are as far as I know only two places only ActiveDOMObjects are suspended: While evaluating onpagehide events, and in QtWebKit2 and iOS while handling animated touch gestures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584319</commentid>
    <comment_count>12</comment_count>
      <attachid>132811</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-21 10:40:43 -0700</bug_when>
    <thetext>Comment on attachment 132811
Patch

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

Thanks Allan. In light of these explanations, I think the patch can be made better.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:55
&gt; +    if (suspended()) {
&gt; +        m_pausedEvent = XMLHttpRequestProgressEvent::create(eventNames().progressEvent, lengthComputable, loaded, total);
&gt; +        return;
&gt; +    }

You mentioned that this is not called because of network activity after suspend() so I wonder if / why this is needed. progress events should be the result of network activities only.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:-77
&gt;  void XMLHttpRequestProgressEventThrottle::dispatchEvent(PassRefPtr&lt;Event&gt; event, ProgressEventAction progressEventAction)
&gt;  {
&gt; -    ASSERT(!suspended());
&gt; -    // We should not have any pending events from a previous resume.
&gt; -    ASSERT(!m_pausedEvent);
&gt; -

I think this is a design error I made when creating the XMLHttpRequestProgressEventThrottle: XMLHttpRequest dispatches all its events through here and this is bad. Especially since I wouldn&apos;t expect this function to be called on a suspended throttle.

As you said, JS can still make us dispatch events so the right fix would keep those ASSERT around to still catch some badness, make this function private and have the XMLHttpRequest object handle the event dispatching directly (calling flushProgressEvent as needed).

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:98
&gt; +    if (m_pausedEvent) {
&gt; +        m_target-&gt;dispatchEvent(m_pausedEvent);
&gt; +        m_pausedEvent = 0;
&gt; +        return;
&gt; +    }

This really shouldn&apos;t be needed: if we are suspended(), the logic (including the one you added) should save the paused event and dispatch it during resume(). If we have a paused event, it means there is a race condition somewhere else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584386</commentid>
    <comment_count>13</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-21 11:16:12 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 132811 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132811&amp;action=review
&gt; 
&gt; Thanks Allan. In light of these explanations, I think the patch can be made better.
&gt; 
&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:55
&gt; &gt; +    if (suspended()) {
&gt; &gt; +        m_pausedEvent = XMLHttpRequestProgressEvent::create(eventNames().progressEvent, lengthComputable, loaded, total);
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; You mentioned that this is not called because of network activity after suspend() so I wonder if / why this is needed. progress events should be the result of network activities only.
&gt; 
Data does appear to arrive during suspend(), but it is not necessary for the asserts to trigger. One example is synchronous loads, and the other is when xmlhttprequest is forced to suspend even though it has an asynchronous load. Note that XMLHttpRequest::suspend makes no attempt to stop the threaded loader, and the ExecutionContext is allowed to ignore canSuspend(). Storing the latest progress-event is the best that can be done to avoid emitting timed events in these cases.

I was thinking of three ways to solve the problem:
1. Implement a pause/defer/suspend api on the threadedloader.
2. Pool all the readystatechanges trigger by new data, and only emit them later.
3. Try to keep the events as consistent as possible, if data does arrive during suspend.

Considering the case of synchronous data, I am not entirely sure it would be correct to assume data should never happen. So I went with 3. Also if the behaviour is wrong; it is a larger and different bug that just allowing readystate changes while suspended.

&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:-77
&gt; &gt;  void XMLHttpRequestProgressEventThrottle::dispatchEvent(PassRefPtr&lt;Event&gt; event, ProgressEventAction progressEventAction)
&gt; &gt;  {
&gt; &gt; -    ASSERT(!suspended());
&gt; &gt; -    // We should not have any pending events from a previous resume.
&gt; &gt; -    ASSERT(!m_pausedEvent);
&gt; &gt; -
&gt; 
&gt; I think this is a design error I made when creating the XMLHttpRequestProgressEventThrottle: XMLHttpRequest dispatches all its events through here and this is bad. Especially since I wouldn&apos;t expect this function to be called on a suspended throttle.
&gt; 
&gt; As you said, JS can still make us dispatch events so the right fix would keep those ASSERT around to still catch some badness, make this function private and have the XMLHttpRequest object handle the event dispatching directly (calling flushProgressEvent as needed).

Makes sense. I did not want to do so without your input though. Btw if XMLHttpRequestProgressEventThrottle ends up only emitting progress events, doesn&apos;t the generic dispatchEvent() become redundant, so the last code could be moved to dispatchProgressEvent?

&gt; 
&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:98
&gt; &gt; +    if (m_pausedEvent) {
&gt; &gt; +        m_target-&gt;dispatchEvent(m_pausedEvent);
&gt; &gt; +        m_pausedEvent = 0;
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; This really shouldn&apos;t be needed: if we are suspended(), the logic (including the one you added) should save the paused event and dispatch it during resume(). If we have a paused event, it means there is a race condition somewhere else.

I am not sure if it is needed either, but the existing code would emit the last progress if flushed (for instance a cancel ?), so this simply follows the same logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584409</commentid>
    <comment_count>14</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-21 11:33:37 -0700</bug_when>
    <thetext>&gt; &gt; I think this is a design error I made when creating the XMLHttpRequestProgressEventThrottle: XMLHttpRequest dispatches all its events through here and this is bad. Especially since I wouldn&apos;t expect this function to be called on a suspended throttle.
&gt; &gt; 
&gt; &gt; As you said, JS can still make us dispatch events so the right fix would keep those ASSERT around to still catch some badness, make this function private and have the XMLHttpRequest object handle the event dispatching directly (calling flushProgressEvent as needed).
&gt; 
&gt; Makes sense. I did not want to do so without your input though. 

Btw, this is bug 46743 (which has a rotten patch for that). It sounds like it could be fixed first as a stepping stone to getting rid of the ASSERTs.

&gt; Btw if XMLHttpRequestProgressEventThrottle ends up only emitting progress events, doesn&apos;t the generic dispatchEvent() become redundant, so the last code could be moved to dispatchProgressEvent?

Sounds good to me, especially since there is no need to flush pending progress events anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584443</commentid>
    <comment_count>15</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-21 11:51:43 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; &gt; I think this is a design error I made when creating the XMLHttpRequestProgressEventThrottle: XMLHttpRequest dispatches all its events through here and this is bad. Especially since I wouldn&apos;t expect this function to be called on a suspended throttle.
&gt; &gt; &gt; 
&gt; &gt; &gt; As you said, JS can still make us dispatch events so the right fix would keep those ASSERT around to still catch some badness, make this function private and have the XMLHttpRequest object handle the event dispatching directly (calling flushProgressEvent as needed).
&gt; &gt; 
&gt; &gt; Makes sense. I did not want to do so without your input though. 
&gt; 
&gt; Btw, this is bug 46743 (which has a rotten patch for that). It sounds like it could be fixed first as a stepping stone to getting rid of the ASSERTs.
&gt; 

Yes, what they that patch tries to prepare for is second solution I listed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585254</commentid>
    <comment_count>16</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-22 07:34:58 -0700</bug_when>
    <thetext>&gt; I was thinking of three ways to solve the problem:
&gt; 1. Implement a pause/defer/suspend api on the threadedloader.
&gt; 2. Pool all the readystatechanges trigger by new data, and only emit them later.
&gt; 3. Try to keep the events as consistent as possible, if data does arrive during suspend.

I think 2 is the way to go here as we can&apos;t make any assumptions on what will happen during suspend. We could implement 1. but it wouldn&apos;t get rid of the event dispatched by JavaScript which lead us in an inconsistent state from the web-app perspective (or we would have to implement 2. anyway). Please make sure that this design choice is mentioned in your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586374</commentid>
    <comment_count>17</comment_count>
      <attachid>133495</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-23 09:02:13 -0700</bug_when>
    <thetext>Created attachment 133495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587749</commentid>
    <comment_count>18</comment_count>
      <attachid>133814</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-26 08:07:48 -0700</bug_when>
    <thetext>Created attachment 133814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587750</commentid>
    <comment_count>19</comment_count>
      <attachid>133814</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-26 08:09:05 -0700</bug_when>
    <thetext>Comment on attachment 133814
Patch

Renamed pausedEvents to deferredEvents and renamed m_suspened to m_deferEvents, since it no longer indicates suspend directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588161</commentid>
    <comment_count>20</comment_count>
      <attachid>133814</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-26 14:53:27 -0700</bug_when>
    <thetext>Comment on attachment 133814
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Queues events attempted dispatched while the object is suspend. Coalescing progress and
&gt; +        readystatechange events. Events are dispatched soon after the object has been resumed,
&gt; +        but not immediately to avoid hitting a recursion issue in ScriptExecutionContext.

That&apos;s why I prefer detailed ChangeLog, this paragraph could be spread below to underline the important points. Here you would keep a summary of the change and why it&apos;s needed: JS can be enabled while being suspended and the loaders don&apos;t suspend! (I *really* would like this information included as it is paramount to understanding the new design)

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:1152
&gt; +            if (!m_progressEventThrottle.suspended())

Why do we need that? That sounds like it&apos;s counter productive and would be better pushed down to the throttle.

As a side note, I just saw that suspended() is public and I think it really shouldn&apos;t.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:99
&gt; +        m_deferredEvents.append(event);

The Vector can grow unbounded here. We should have a size limit above which we just drop the events.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:116
&gt; +        m_deferredEvents.append(m_deferredProgressEvent);

Ditto.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:218
&gt; +    startOneShot(0);

I really think this should be its own Timer with a dedicated function instead of re-using the existing logic, which feels clunky.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.h:77
&gt; +    bool m_deferEvents;

I am not super enthusiastic about renaming m_deferEvents to m_suspended (I could be convinced the contrary though but it doesn&apos;t look like a huge improvement).

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.h:78
&gt; +    bool m_dispatchDeferredEvents;

If you used a separate timer, it could act as your boolean: Timer&lt;...&gt;* m_deferredEventsTimer;

I think associating the suspended() states to this timer state (running vs non-running) is wrong. You could just flip the m_deferEvent / m_suspended bit after having dispatched all the pending events and clear the Timer.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.h:81
&gt; +    RefPtr&lt;Event&gt; m_deferredProgressEvent;
&gt; +    RefPtr&lt;Event&gt; m_deferredReadyStateChangeEvent;
&gt; +    Vector&lt;RefPtr&lt;Event&gt; &gt; m_deferredEvents;

Do we get anything from this 3 types of events logic apart from a code that is a lot more complex than it should?

I also can see some ways this could break: dispatch readyState == 2, suspend the throttle until the end of the transfer and you have never dispatched readyState == 3 and that is likely to break some web-sites. (likely would need a test as we would like to ensure we don&apos;t miss a notification)

My take would be to just keep the Vector and just stash all the events there and then dispatch all of them at once. We forget the throttle after resuming but that&apos;s good enough as a first cut.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589846</commentid>
    <comment_count>21</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-28 04:36:55 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 133814 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133814&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        Queues events attempted dispatched while the object is suspend. Coalescing progress and
&gt; &gt; +        readystatechange events. Events are dispatched soon after the object has been resumed,
&gt; &gt; +        but not immediately to avoid hitting a recursion issue in ScriptExecutionContext.
&gt; 
&gt; That&apos;s why I prefer detailed ChangeLog, this paragraph could be spread below to underline the important points. Here you would keep a summary of the change and why it&apos;s needed: JS can be enabled while being suspended and the loaders don&apos;t suspend! (I *really* would like this information included as it is paramount to understanding the new design)
&gt; 

I will expand the comments and the ChangeLog. Most of what you write below are things I should have explained better.

&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:1152
&gt; &gt; +            if (!m_progressEventThrottle.suspended())
&gt; 
&gt; Why do we need that? That sounds like it&apos;s counter productive and would be better pushed down to the throttle.
&gt; 
&gt; As a side note, I just saw that suspended() is public and I think it really shouldn&apos;t.
&gt; 
Suspended is public because it is part of the ActiveDOMObject API. The code here can be safely removed as the throttle already do handle the same thing. This is just an earlier and cheaper place to make the check.


&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:218
&gt; &gt; +    startOneShot(0);
&gt; 
&gt; I really think this should be its own Timer with a dedicated function instead of re-using the existing logic, which feels clunky.
&gt; 
That is a good idea.

&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.h:77
&gt; &gt; +    bool m_deferEvents;
&gt; 
&gt; I am not super enthusiastic about renaming m_deferEvents to m_suspended (I could be convinced the contrary though but it doesn&apos;t look like a huge improvement).
&gt; 
The reason is that m_deferEvents no longer represent the suspended state in the ActiveDOMObject sense. Therefore I renamed the flag to something that explicitly state what it handles.

&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.h:81
&gt; &gt; +    RefPtr&lt;Event&gt; m_deferredProgressEvent;
&gt; &gt; +    RefPtr&lt;Event&gt; m_deferredReadyStateChangeEvent;
&gt; &gt; +    Vector&lt;RefPtr&lt;Event&gt; &gt; m_deferredEvents;
&gt; 
&gt; Do we get anything from this 3 types of events logic apart from a code that is a lot more complex than it should?
&gt; 
&gt; I also can see some ways this could break: dispatch readyState == 2, suspend the throttle until the end of the transfer and you have never dispatched readyState == 3 and that is likely to break some web-sites. (likely would need a test as we would like to ensure we don&apos;t miss a notification)
&gt; 
The problem is that there is no such thing as a dispatch readyState == 2. The readyStateChange events does not contain the new readyState. This means they are all 100% identical.

Therefore readystatechange events are combined so only one is send on resume. Since anything else is redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590036</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-28 09:26:00 -0700</bug_when>
    <thetext>&gt; Suspended is public because it is part of the ActiveDOMObject API.

A function that is public in base class can be made private in a subclass when it&apos;s expected that it&apos;s only called through base class interface. In fact, it&apos;s something we strongly prefer in WebKit code base - everything that doesn&apos;t need to be public should not be.

That is a huge aid for refactoring, as you don&apos;t need to hunt down uses of every function in a class just to get the big picture of what interface it really offers to clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590169</commentid>
    <comment_count>23</comment_count>
      <attachid>133814</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-28 11:15:10 -0700</bug_when>
    <thetext>Comment on attachment 133814
Patch

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

&gt;&gt;&gt; Source/WebCore/xml/XMLHttpRequest.cpp:1152
&gt;&gt;&gt; +            if (!m_progressEventThrottle.suspended())
&gt;&gt; 
&gt;&gt; Why do we need that? That sounds like it&apos;s counter productive and would be better pushed down to the throttle.
&gt;&gt; 
&gt;&gt; As a side note, I just saw that suspended() is public and I think it really shouldn&apos;t.
&gt; 
&gt; Suspended is public because it is part of the ActiveDOMObject API. The code here can be safely removed as the throttle already do handle the same thing. This is just an earlier and cheaper place to make the check.

XMLHttpRequest is an ActiveDOMObject, not XMLHttpRequestProgressEventThrottle. Alexei has a point too.

&gt;&gt;&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.h:81
&gt;&gt;&gt; +    Vector&lt;RefPtr&lt;Event&gt; &gt; m_deferredEvents;
&gt;&gt; 
&gt;&gt; Do we get anything from this 3 types of events logic apart from a code that is a lot more complex than it should?
&gt;&gt; 
&gt;&gt; I also can see some ways this could break: dispatch readyState == 2, suspend the throttle until the end of the transfer and you have never dispatched readyState == 3 and that is likely to break some web-sites. (likely would need a test as we would like to ensure we don&apos;t miss a notification)
&gt;&gt; 
&gt;&gt; My take would be to just keep the Vector and just stash all the events there and then dispatch all of them at once. We forget the throttle after resuming but that&apos;s good enough as a first cut.
&gt; 
&gt; The problem is that there is no such thing as a dispatch readyState == 2. The readyStateChange events does not contain the new readyState. This means they are all 100% identical.
&gt; 
&gt; Therefore readystatechange events are combined so only one is send on resume. Since anything else is redundant.

Indeed, I forgot that the event doesn&apos;t have the readyState information. I fear this will break some web-developers&apos; assumptions here but I don&apos;t see a good way of handling that.

Is there a reason why you also coalesce progress events?

Note that the downside of your approach doesn&apos;t guarantee the ordering of events due to coalescing them. I think the ordering is important to keep which is why I am pushing towards a single Vector (it also makes the logic more simple). You could easily keep track of the last readyStateChanged event and only dispatch this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592089</commentid>
    <comment_count>24</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-03-30 05:28:44 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Is there a reason why you also coalesce progress events?
&gt; 
There entire throttle class is meant to coalesce progress events. And if they can be throttled during normal run to only be delivered with timed intervals, I thought it made best sense to keep throttling them when timed events are completely disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593410</commentid>
    <comment_count>25</comment_count>
      <attachid>135083</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-04-02 06:15:22 -0700</bug_when>
    <thetext>Created attachment 135083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594890</commentid>
    <comment_count>26</comment_count>
      <attachid>135083</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-03 14:26:51 -0700</bug_when>
    <thetext>Comment on attachment 135083
Patch

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

I like the new change. I would like to see the next round but the direction is very cool.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Defers events attempted dispatched while the object is suspend. Coalescing progress and

Can we please have real English here? Usually sentences have a conjugated verb.

&gt; Source/WebCore/ChangeLog:11
&gt; +        to avoid hitting a recursion assert in ScriptExecutionContext.

I would like the &apos;why&apos; / context to be explained as requested 2 times now. The condition of this bug got 3 people in the original bug and those *need* to appear somewhere.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:92
&gt; +        if (m_deferredEvents.size() &gt; 1
&gt; +            &amp;&amp; event-&gt;type() == eventNames().readystatechangeEvent
&gt; +            &amp;&amp; m_deferredEvents.last()-&gt;type() == eventNames().readystatechangeEvent)

Those should be on the same line.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:93
&gt; +            return; // Readystatechange events are state-less so don&apos;t repeat two identical events in a row on resume.

Nit: Normally we place comment on a line by themselves. This isn&apos;t documented or particularly enforced but it arguably looks nicer. If you do change that, you need some curly braces around the statement.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:131
&gt; +    ASSERT(m_deferEvents);

We usually check that our timer is the right timer:

ASSERT_UNUSED(timer, timer == &amp;m_dispatchDeferredEventsTimer);

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:136
&gt; +    Vector&lt;RefPtr&lt;Event&gt; &gt;::const_iterator it = m_deferredEvents.begin();
&gt; +    const Vector&lt;RefPtr&lt;Event&gt; &gt;::const_iterator end = m_deferredEvents.end();
&gt; +    for (; it != end; ++it)

We usually prefer to put the iterator |it| in the |for| loop.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:137
&gt; +        dispatchEvent(*it);

Note that if JavaScript can interact with our associated XHR, maybe even triggering a suspend(). I really wonder if we shouldn&apos;t just swap our m_deferredEvents Vector before the loop to avoid any possible changes while iterating.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:173
&gt; +        m_dispatchDeferredEventsTimer.stop();

We should add, in case something goes wrong:

ASSERT(m_deferEvents);

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:177
&gt; +    ASSERT(m_deferredEvents.isEmpty());

And the matching ASSERT(!m_deferEvents) here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595362</commentid>
    <comment_count>27</comment_count>
      <attachid>135545</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-04-04 03:12:44 -0700</bug_when>
    <thetext>Created attachment 135545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595368</commentid>
    <comment_count>28</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-04-04 03:16:50 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 135083 [details])
&gt; I would like the &apos;why&apos; / context to be explained as requested 2 times now. The condition of this bug got 3 people in the original bug and those *need* to appear somewhere.
&gt; 
I have improved the changelog text.

&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:136
&gt; &gt; +    Vector&lt;RefPtr&lt;Event&gt; &gt;::const_iterator it = m_deferredEvents.begin();
&gt; &gt; +    const Vector&lt;RefPtr&lt;Event&gt; &gt;::const_iterator end = m_deferredEvents.end();
&gt; &gt; +    for (; it != end; ++it)
&gt; 
&gt; We usually prefer to put the iterator |it| in the |for| loop.
&gt; 
I prefer them separate because long lines are much harder to read.

&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:137
&gt; &gt; +        dispatchEvent(*it);
&gt; 
&gt; Note that if JavaScript can interact with our associated XHR, maybe even triggering a suspend(). I really wonder if we shouldn&apos;t just swap our m_deferredEvents Vector before the loop to avoid any possible changes while iterating.
&gt; 
Good observation. I have taken local ownership of the deferred events in the new patch.

&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:173
&gt; &gt; +        m_dispatchDeferredEventsTimer.stop();
&gt; 
&gt; We should add, in case something goes wrong:
&gt; 
&gt; ASSERT(m_deferEvents);
&gt; 
&gt; &gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:177
&gt; &gt; +    ASSERT(m_deferredEvents.isEmpty());
&gt; 
&gt; And the matching ASSERT(!m_deferEvents) here too.

Check and check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595523</commentid>
    <comment_count>29</comment_count>
      <attachid>135545</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-04 07:34:28 -0700</bug_when>
    <thetext>Comment on attachment 135545
Patch

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

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

Note that you still don&apos;t explain the context here and merely describe what you are doing. As I can&apos;t get myself understood, please add the following to the ChangeLog (preferably at the beginning) before landing:

The issue is that suspending active DOM objects (which suspends the XMLHttpRequestProgressEventThrottle) doesn&apos;t stop JavaScript from running or suspend any running loader we may have. The previous code would assume those 2 cases were impossible (thus the ASSERTs triggering) and the code was modified to handle them.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:92
&gt; +        if (m_deferredEvents.size() &gt; 1 &amp;&amp; event-&gt;type() == eventNames().readystatechangeEvent &amp;&amp; event-&gt;type() == m_deferredEvents.last()-&gt;type())
&gt; +            // Readystatechange events are state-less so avoid repeating two identical events in a row on resume.
&gt; +            return;

There should be curly brace around that statement per our coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603972</commentid>
    <comment_count>30</comment_count>
      <attachid>137525</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-04-17 06:20:25 -0700</bug_when>
    <thetext>Created attachment 137525
Patch for landing

Updated changelog as requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603997</commentid>
    <comment_count>31</comment_count>
      <attachid>137525</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-17 07:04:04 -0700</bug_when>
    <thetext>Comment on attachment 137525
Patch for landing

Clearing flags on attachment: 137525

Committed r114374: &lt;http://trac.webkit.org/changeset/114374&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603998</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-17 07:04:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132568</attachid>
            <date>2012-03-19 03:36:24 -0700</date>
            <delta_ts>2012-03-19 11:52:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81506-20120319113623.patch</filename>
            <type>text/plain</type>
            <size>3939</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdlOTg1MmVmOTFhZTU2
YzNhNjIwMzk2NDQyNDhhZTE5Y2E0MzY4Ny4uOWY4YmYzNDIyNGQwMWRmMWJkMWNlYzhjNmZjMGJi
ODgyNDJjNmU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTE5ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEFz
c2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGluY29ycmVjdCBhc3Nl
cnRzLCBhbmQgY2hhbmdlIHN1c3BlbmQgbG9naWMgdG8gb25seSBzdXNwZW5kIHRpbWVkIGV2ZW50
cywgYnV0IHN0aWxsCisgICAgICAgIGVtaXQgc3RhdGUgY2hhbmdlIGV2ZW50cy4KKworICAgICAg
ICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICBXaGVuIHN1c3BlbmRlZCwgZG8gbm90IGVt
aXQgc3RhdGUtY2hhbmdlIHVubGVzcyB0aGUgc3RhdGUgcmVhbGx5IGRpZCBjaGFuZ2UuCisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRj
aFByb2dyZXNzRXZlbnQpOgorICAgICAgICBEbyBub3QgZW1pdCBwcm9ncmVzcyBldmVudHMgd2hp
bGUgc3VzcGVuZGVkLCBidXQgdXBkYXRlIHRoZSBwYXVzZWQgcHJvZ3Jlc3MgZXZlbnQuCisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgIFJlbW92ZSBhc3NlcnRzLCBzaW5jZSBub3JtYWwgZXZlbnRzIGNh
biBiZSBkaXNwYXRjaGVkIHdoaWxlIHN1c3BlbmRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZlbnQpOgorICAg
ICAgICBGbHVzaCB0aGUgcGF1c2VkIHByb2dyZXNzIGV2ZW50IGlmIG5lZWRlZC4KKwogMjAxMi0w
My0xMyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAg
ICBFbmFibGUgYW5pbVZhbCBzdXBwb3J0IGZvciBTVkdMZW5ndGhMaXN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCBlM2ZiOWQxYzAwM2E2M2UwNTNmMjgwZWRmODE1OTlm
OWIxMTlhODk0Li5iYzM1MmI3NmM1NjM3NmRhYjM3OTM2NDU5ZDU1NTcyZTlhNzQwNmQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTExNDksOCArMTE0OSw5IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW4pCiAgICAgICAgIGlmIChtX3N0YXRlICE9IExPQURJTkcpCiAgICAgICAgICAgICBjaGFuZ2VT
dGF0ZShMT0FESU5HKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gRmlyZWZveCBjYWxs
cyByZWFkeVN0YXRlQ2hhbmdlZCBldmVyeSB0aW1lIGl0IHJlY2VpdmVzIGRhdGEsIDQ0NDk0NDIK
LSAgICAgICAgICAgIGNhbGxSZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKTsKKyAgICAgICAgICAg
IGlmICghbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuc3VzcGVuZGVkKCkpCisgICAgICAgICAgICAg
ICAgLy8gRmlyZWZveCBjYWxscyByZWFkeVN0YXRlQ2hhbmdlZCBldmVyeSB0aW1lIGl0IHJlY2Vp
dmVzIGRhdGEsIDQ0NDk0NDIKKyAgICAgICAgICAgICAgICBjYWxsUmVhZHlTdGF0ZUNoYW5nZUxp
c3RlbmVyKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcAppbmRleCAzYmM4YzMwMWI0
NjA2ZGEwNzExMDljOTBiOTNkNTRmNDBhNjZiMzIxLi42ZGZiMzY2MTAwMmZlYmYyZGRiZWE2YzM1
ZGJkZDAwNzBiNDFkZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKQEAgLTQ5LDcgKzQ5LDExIEBA
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjp+WE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUoKQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRo
cm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhDb21wdXRhYmxlLCB1bnNp
Z25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWwpCiB7Ci0gICAg
QVNTRVJUKCFzdXNwZW5kZWQoKSk7CisgICAgaWYgKHN1c3BlbmRlZCgpKSB7CisgICAgICAgIG1f
cGF1c2VkRXZlbnQgPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkucHJvZ3Jlc3NFdmVudCwgbGVuZ3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0b3RhbCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIWlzQWN0aXZlKCkpIHsKICAgICAgICAg
Ly8gVGhlIHRpbWVyIGlzIG5vdCBhY3RpdmUgc28gdGhlIGxlYXN0IGZyZXF1ZW50IGV2ZW50IGZv
ciBub3cgaXMgZXZlcnkgYnl0ZS4KICAgICAgICAgLy8gSnVzdCBnbyBhaGVhZCBhbmQgZGlzcGF0
Y2ggdGhlIGV2ZW50LgpAQCAtNzEsMTAgKzc1LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGJvb2wgbGVuZ3RoQ29tcHUK
IAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2
ZW50QWN0aW9uKQogewotICAgIEFTU0VSVCghc3VzcGVuZGVkKCkpOwotICAgIC8vIFdlIHNob3Vs
ZCBub3QgaGF2ZSBhbnkgcGVuZGluZyBldmVudHMgZnJvbSBhIHByZXZpb3VzIHJlc3VtZS4KLSAg
ICBBU1NFUlQoIW1fcGF1c2VkRXZlbnQpOwotCiAgICAgaWYgKHByb2dyZXNzRXZlbnRBY3Rpb24g
PT0gRmx1c2hQcm9ncmVzc0V2ZW50KQogICAgICAgICBmbHVzaFByb2dyZXNzRXZlbnQoKTsKIApA
QCAtOTEsNiArOTEsMTIgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZTo6ZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoUGFzc1JlZlB0cjxFdmUKIAogdm9pZCBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KCkKIHsKKyAg
ICBpZiAobV9wYXVzZWRFdmVudCkgeworICAgICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudCht
X3BhdXNlZEV2ZW50KTsKKyAgICAgICAgbV9wYXVzZWRFdmVudCA9IDA7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpZiAoIWhhc0V2ZW50VG9EaXNwYXRjaCgpKQogICAgICAgICByZXR1
cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132619</attachid>
            <date>2012-03-19 11:52:25 -0700</date>
            <delta_ts>2012-03-20 03:50:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81506-20120319195224.patch</filename>
            <type>text/plain</type>
            <size>8584</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNThiYWVkMzAxNTUwNTA5
ZWYzMWJhZTI3ZjcyMTUxZmFkZTBjZDc2NS4uN2Q3OWJhODQzNjM3OTlmNjExMzU5MTRmNmUxYzUw
MjkyY2IwMzRhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4IEBACiAyMDEyLTAzLTE5ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCisgICAgICAgIEFz
c2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGluY29ycmVjdCBhc3Nl
cnRzLCBhbmQgY2hhbmdlIHN1c3BlbmQgbG9naWMgdG8gb25seSBzdXNwZW5kIHRpbWVkIGV2ZW50
cywgYnV0IHN0aWxsCisgICAgICAgIGVtaXQgc3RhdGUgY2hhbmdlIGV2ZW50cy4KKworICAgICAg
ICBUZXN0OiBmYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sCisKKyAgICAgICAgKiB4
bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgV2hlbiBzdXNwZW5kZWQsIGRvIG5vdCBlbWl0IHN0
YXRlLWNoYW5nZSB1bmxlc3MgdGhlIHN0YXRlIHJlYWxseSBkaWQgY2hhbmdlLgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9n
cmVzc0V2ZW50KToKKyAgICAgICAgRG8gbm90IGVtaXQgcHJvZ3Jlc3MgZXZlbnRzIHdoaWxlIHN1
c3BlbmRlZCwgYnV0IHVwZGF0ZSB0aGUgcGF1c2VkIHByb2dyZXNzIGV2ZW50LgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZl
bnQpOgorICAgICAgICBSZW1vdmUgYXNzZXJ0cywgc2luY2Ugbm9ybWFsIGV2ZW50cyBjYW4gYmUg
ZGlzcGF0Y2hlZCB3aGlsZSBzdXNwZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KToKKyAgICAgICAg
Rmx1c2ggdGhlIHBhdXNlZCBwcm9ncmVzcyBldmVudCBpZiBuZWVkZWQuCisKKzIwMTItMDMtMTkg
IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKICAgICAg
ICAgU2VsZWN0IGJlc3QgdGFyZ2V0IGZvciB0YXAgZ2VzdHVyZS4KICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODAxCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKaW5kZXggNjNhNDlkZGU4Y2Q0NzI0MTQ3NDEzZDNkZWZjOTAxMDQwNGM0NGJjZi4uODI4
NTRlMTA2OWU4YmQ3ZDZiOTc4YTFkZTMwNjJmNGE3Njc3M2RlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5jcHAKQEAgLTI0Niw3ICsyNDYsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFn
ZSkKICNlbmRpZgogICAgICwgbV9wZXJUaWxlRHJhd2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBt
X3BhcnRpYWxTd2FwRW5hYmxlZChmYWxzZSkKLSAgICAsIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JF
bmFibGVkKGZhbHNlKQorICAgICwgbV9zY3JvbGxpbmdDb29yZGluYXRvckVuYWJsZWQodHJ1ZSkK
ICAgICAsIG1fbm90aWZpY2F0aW9uc0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fbmVlZHNJc0xvYWRp
bmdJbkFQSVNlbnNlUXVpcmsoZmFsc2UpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcAppbmRleCBmYTM0MTMwMjFmM2IyZDg2MmU4
YWE2NjRjYjZhYzJmOWU1MDNhZWU4Li4xZjY1MWIyMGUzMzc1Y2YwZmYxMWFkNjRlYTE1ZGY2ZDNl
MDc1MWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCBlM2ZiOWQx
YzAwM2E2M2UwNTNmMjgwZWRmODE1OTlmOWIxMTlhODk0Li5iYzM1MmI3NmM1NjM3NmRhYjM3OTM2
NDU5ZDU1NTcyZTlhNzQwNmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
QEAgLTExNDksOCArMTE0OSw5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiAgICAgICAgIGlmIChtX3N0YXRlICE9IExPQURJ
TkcpCiAgICAgICAgICAgICBjaGFuZ2VTdGF0ZShMT0FESU5HKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgLy8gRmlyZWZveCBjYWxscyByZWFkeVN0YXRlQ2hhbmdlZCBldmVyeSB0aW1lIGl0
IHJlY2VpdmVzIGRhdGEsIDQ0NDk0NDIKLSAgICAgICAgICAgIGNhbGxSZWFkeVN0YXRlQ2hhbmdl
TGlzdGVuZXIoKTsKKyAgICAgICAgICAgIGlmICghbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuc3Vz
cGVuZGVkKCkpCisgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBjYWxscyByZWFkeVN0YXRlQ2hh
bmdlZCBldmVyeSB0aW1lIGl0IHJlY2VpdmVzIGRhdGEsIDQ0NDk0NDIKKyAgICAgICAgICAgICAg
ICBjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlLmNwcAppbmRleCAzYmM4YzMwMWI0NjA2ZGEwNzExMDljOTBiOTNkNTRmNDBhNjZiMzIxLi42
ZGZiMzY2MTAwMmZlYmYyZGRiZWE2YzM1ZGJkZDAwNzBiNDFkZmFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZS5jcHAKQEAgLTQ5LDcgKzQ5LDExIEBAIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlOjp+WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoKQogCiB2b2lkIFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9v
bCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWwpCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7CisgICAgaWYgKHN1
c3BlbmRlZCgpKSB7CisgICAgICAgIG1fcGF1c2VkRXZlbnQgPSBYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgbGVuZ3RoQ29tcHV0
YWJsZSwgbG9hZGVkLCB0b3RhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
IWlzQWN0aXZlKCkpIHsKICAgICAgICAgLy8gVGhlIHRpbWVyIGlzIG5vdCBhY3RpdmUgc28gdGhl
IGxlYXN0IGZyZXF1ZW50IGV2ZW50IGZvciBub3cgaXMgZXZlcnkgYnl0ZS4KICAgICAgICAgLy8g
SnVzdCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2ggdGhlIGV2ZW50LgpAQCAtNzEsMTAgKzc1LDYgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9ncmVz
c0V2ZW50KGJvb2wgbGVuZ3RoQ29tcHUKIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUHJvZ3Jl
c3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0aW9uKQogewotICAgIEFTU0VSVCghc3VzcGVu
ZGVkKCkpOwotICAgIC8vIFdlIHNob3VsZCBub3QgaGF2ZSBhbnkgcGVuZGluZyBldmVudHMgZnJv
bSBhIHByZXZpb3VzIHJlc3VtZS4KLSAgICBBU1NFUlQoIW1fcGF1c2VkRXZlbnQpOwotCiAgICAg
aWYgKHByb2dyZXNzRXZlbnRBY3Rpb24gPT0gRmx1c2hQcm9ncmVzc0V2ZW50KQogICAgICAgICBm
bHVzaFByb2dyZXNzRXZlbnQoKTsKIApAQCAtOTEsNiArOTEsMTIgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoUGFzc1Jl
ZlB0cjxFdmUKIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1
c2hQcm9ncmVzc0V2ZW50KCkKIHsKKyAgICBpZiAobV9wYXVzZWRFdmVudCkgeworICAgICAgICBt
X3RhcmdldC0+ZGlzcGF0Y2hFdmVudChtX3BhdXNlZEV2ZW50KTsKKyAgICAgICAgbV9wYXVzZWRF
dmVudCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIWhhc0V2ZW50VG9E
aXNwYXRjaCgpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2YmU5YjUxYTU3OTAxNDM2Zjkw
OGEwMjIzYTFmZGEyYzllY2NiOTFjLi5jOTQyZTdjYTBkMDY0ODMyNWFkYjA4ODM2MjE3YTI5MDVi
MzBmMWJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTcgQEAKIDIwMTItMDMtMTkgIEFsbGFuIFNhbmRmZWxk
IEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKKyAgICAgICAgQXNzZXJ0cyBpbiBY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MDYKKworICAgICAgICBUZXN0cyB0aGF0IHht
bGh0dHByZXF1ZXN0Lm9wZW4gZG9lcyBub3QgYXNzZXJ0IGluIHdoZW4gY2FsbGVkIGZyb20gb25w
YWdlaGlkZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGZhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZXZlbnRzL3Jlc291cmNlcy9zdWJmcmFtZS14bWxodHRwcmVxdWVzdC5odG1sOiBBZGRl
ZC4KKworMjAxMi0wMy0xOSAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5v
a2lhLmNvbT4KKwogICAgICAgICBTZWxlY3QgYmVzdCB0YXJnZXQgZm9yIHRhcCBnZXN0dXJlLgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MDEKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNDM5MmZkMTVlMDdkNjFlZGViOTE0MjQ0YjhhMDdjM2Iz
NzFlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlk
ZS14aHItb3Blbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDY6IFhNTEh0dHBSZXF1ZXN0IGluIHN1YmZyYW1lLTEgY3JlYXRlZAorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDU6IExvYWRlZCBwYWdlaGlkZS10aW1lb3V0LWdvLWJhY2suaHRtbCwgZ29p
bmcgYmFjaworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE3OiBSZXN0b3JlZCBwYWdlIGZyb20gcGFn
ZSBjYWNoZS4KK1RyaWVzIHRvIHRyaWdnZXIgYW4gYXNzZXJ0IGluIHhtbGh0dHByZXF1ZXN0IGR1
cmluZyBwYWdlaGlkZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUyZTMz
YzlmYTM3ZGYyNGZhNDhhZjUwMTNlMDA0ZTJhN2NiZjVkZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwKQEAgLTAsMCArMSwz
NCBAQAorPGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxib2R5PgorCis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3N1YmZyYW1lLXht
bGh0dHByZXF1ZXN0Lmh0bWwiIGlkPSJhLWZyYW1lIj48L2lmcmFtZT4gPGlmcmFtZSBzcmM9InJl
c291cmNlcy9zdXNwZW5kLXN1YmZyYW1lLTIuaHRtbCIgaWQ9ImItZnJhbWUiPjwvaWZyYW1lPgor
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbignVHJpZXMgdG8g
dHJpZ2dlciBhbiBhc3NlcnQgaW4geG1saHR0cHJlcXVlc3QgZHVyaW5nIHBhZ2VoaWRlLicpOwor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgnV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVuY2VLZXkn
LCAxKTsKKworCitvbnBhZ2VzaG93ID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAgaWYgKGV2ZW50
LnBlcnNpc3RlZCkgeworICAgICAgICBjb25zb2xlLmxvZygnUmVzdG9yZWQgcGFnZSBmcm9tIHBh
Z2UgY2FjaGUuJyk7CisgICAgICAgIGlmICghd2luZG93Lndhc0ZpbmlzaEpTVGVzdENhbGxlZCkK
KyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30KKworb25sb2FkID0gZnVuY3Rp
b24oKQoreworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGxvY2F0aW9uLmhy
ZWYgPSAncmVzb3VyY2VzL3BhZ2VoaWRlLXRpbWVvdXQtZ28tYmFjay5odG1sJzsKKyAgICB9LCAw
KTsKK30KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwordmFyIGpzVGVzdElzQXN5bmMg
PSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9zdWJmcmFtZS14bWxodHRwcmVxdWVz
dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYwYzNlNzA2N2Q0ZWNhZDkwMmI0MjIyYzdiNjczZWZmNTI4M2M4
Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMv
c3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gdGVz
dCgpIHsKKyAgICAgICAgICAgIHdpbmRvdy50b3AuY29uc29sZS5sb2coJ1hNTEh0dHBSZXF1ZXN0
IGluIHN1YmZyYW1lLTEgY3JlYXRlZCcpOworICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxI
dHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsICdhYm91dDplbXB0eScs
IHRydWUpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK0kgYW0g
c3ViZnJhbWUtMS5odG1sCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132791</attachid>
            <date>2012-03-20 03:50:11 -0700</date>
            <delta_ts>2012-03-20 06:25:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81506-20120320115009.patch</filename>
            <type>text/plain</type>
            <size>7494</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA2M2U1OWM5NWQ2NjA5
MTBhYjliMDJjYjZkNWE2ZmEwNDEwYzI2My4uOGFiZTI0N2JkZWZiNmExZWYyZjRkY2YzYmQ0MjRm
ZTcxZGRkNGNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTE5ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEFz
c2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGluY29ycmVjdCBhc3Nl
cnRzLCBhbmQgY2hhbmdlIHN1c3BlbmQgbG9naWMgdG8gb25seSBzdXNwZW5kIHRpbWVkIGV2ZW50
cywgYnV0IHN0aWxsCisgICAgICAgIGVtaXQgc3RhdGUgY2hhbmdlIGV2ZW50cy4KKworICAgICAg
ICBUZXN0OiBmYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sCisKKyAgICAgICAgKiB4
bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgV2hlbiBzdXNwZW5kZWQsIGRvIG5vdCBlbWl0IHN0
YXRlLWNoYW5nZSB1bmxlc3MgdGhlIHN0YXRlIHJlYWxseSBkaWQgY2hhbmdlLgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9n
cmVzc0V2ZW50KToKKyAgICAgICAgRG8gbm90IGVtaXQgcHJvZ3Jlc3MgZXZlbnRzIHdoaWxlIHN1
c3BlbmRlZCwgYnV0IHVwZGF0ZSB0aGUgcGF1c2VkIHByb2dyZXNzIGV2ZW50LgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZl
bnQpOgorICAgICAgICBSZW1vdmUgYXNzZXJ0cywgc2luY2Ugbm9ybWFsIGV2ZW50cyBjYW4gYmUg
ZGlzcGF0Y2hlZCB3aGlsZSBzdXNwZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KToKKyAgICAgICAg
Rmx1c2ggdGhlIHBhdXNlZCBwcm9ncmVzcyBldmVudCBpZiBuZWVkZWQuCisKIDIwMTItMDMtMTkg
IFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAgICAgTWVkaWFT
dHJlYW0gQVBJIChKU0VQKTogSW50cm9kdWNpbmcgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGUzZmI5ZDFjMDAzYTYzZTA1M2Yy
ODBlZGY4MTU5OWY5YjExOWE4OTQuLmJjMzUyYjc2YzU2Mzc2ZGFiMzc5MzY0NTlkNTU1NzJlOWE3
NDA2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTE0OSw4ICsx
MTQ5LDkgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbikKICAgICAgICAgaWYgKG1fc3RhdGUgIT0gTE9BRElORykKICAgICAgICAg
ICAgIGNoYW5nZVN0YXRlKExPQURJTkcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBG
aXJlZm94IGNhbGxzIHJlYWR5U3RhdGVDaGFuZ2VkIGV2ZXJ5IHRpbWUgaXQgcmVjZWl2ZXMgZGF0
YSwgNDQ0OTQ0MgotICAgICAgICAgICAgY2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpOwor
ICAgICAgICAgICAgaWYgKCFtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5zdXNwZW5kZWQoKSkKKyAg
ICAgICAgICAgICAgICAvLyBGaXJlZm94IGNhbGxzIHJlYWR5U3RhdGVDaGFuZ2VkIGV2ZXJ5IHRp
bWUgaXQgcmVjZWl2ZXMgZGF0YSwgNDQ0OTQ0MgorICAgICAgICAgICAgICAgIGNhbGxSZWFkeVN0
YXRlQ2hhbmdlTGlzdGVuZXIoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCmluZGV4
IDNiYzhjMzAxYjQ2MDZkYTA3MTEwOWM5MGI5M2Q1NGY0MGE2NmIzMjEuLjZkZmIzNjYxMDAyZmVi
ZjJkZGJlYTZjMzVkYmRkMDA3MGI0MWRmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApAQCAtNDks
NyArNDksMTEgQEAgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6On5YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSgpCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudChib29sIGxlbmd0aENvbXB1
dGFibGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3Rh
bCkKIHsKLSAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsKKyAgICBpZiAoc3VzcGVuZGVkKCkpIHsK
KyAgICAgICAgbV9wYXVzZWRFdmVudCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBsZW5ndGhDb21wdXRhYmxlLCBsb2FkZWQs
IHRvdGFsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICghaXNBY3RpdmUoKSkg
ewogICAgICAgICAvLyBUaGUgdGltZXIgaXMgbm90IGFjdGl2ZSBzbyB0aGUgbGVhc3QgZnJlcXVl
bnQgZXZlbnQgZm9yIG5vdyBpcyBldmVyeSBieXRlLgogICAgICAgICAvLyBKdXN0IGdvIGFoZWFk
IGFuZCBkaXNwYXRjaCB0aGUgZXZlbnQuCkBAIC03MSwxMCArNzUsNiBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBs
ZW5ndGhDb21wdQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9u
IHByb2dyZXNzRXZlbnRBY3Rpb24pCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7Ci0gICAg
Ly8gV2Ugc2hvdWxkIG5vdCBoYXZlIGFueSBwZW5kaW5nIGV2ZW50cyBmcm9tIGEgcHJldmlvdXMg
cmVzdW1lLgotICAgIEFTU0VSVCghbV9wYXVzZWRFdmVudCk7Ci0KICAgICBpZiAocHJvZ3Jlc3NF
dmVudEFjdGlvbiA9PSBGbHVzaFByb2dyZXNzRXZlbnQpCiAgICAgICAgIGZsdXNoUHJvZ3Jlc3NF
dmVudCgpOwogCkBAIC05MSw2ICs5MSwxMiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlOjpkaXNwYXRjaEV2ZW50QW5kTG9hZEVuZChQYXNzUmVmUHRyPEV2ZQogCiB2
b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZl
bnQoKQogeworICAgIGlmIChtX3BhdXNlZEV2ZW50KSB7CisgICAgICAgIG1fdGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KG1fcGF1c2VkRXZlbnQpOworICAgICAgICBtX3BhdXNlZEV2ZW50ID0gMDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICghaGFzRXZlbnRUb0Rpc3BhdGNoKCkpCiAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDAwODY1NGIzNTFlYTExNDQ1MDFmY2JjZWI2NDVlYzMx
OWQ1Y2RlMDAuLjg5MWNkZDFkOTU2MjMyNmZiYWVkZTdjYzI2NjJhZmQ4OTNiYzU5NGUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAxMi0wMy0xOSAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxs
YW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBBc3NlcnRzIGluIFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MTUwNgorCisgICAgICAgIFRlc3RzIHRoYXQgeG1saHR0cHJlcXVlc3Qu
b3BlbiBkb2VzIG5vdCBhc3NlcnQgaW4gd2hlbiBjYWxsZWQgZnJvbSBvbnBhZ2VoaWRlLgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9ldmVu
dHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMv
cGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbDogQWRkZWQuCisKIDIw
MTItMDMtMTkgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJ
bmRleGVkREI6IExheW91dFRlc3RzIGRvbid0IG5lZWQgZXhwbGljaXQgY29uc29sZSBkaXYKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMzQzOTJmZDE1ZTA3ZDYxZWRlYjkxNDI0NGI4YTA3YzNiMzcx
ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUt
eGhyLW9wZW4tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA2OiBYTUxIdHRwUmVxdWVzdCBpbiBzdWJmcmFtZS0xIGNyZWF0ZWQKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA1OiBMb2FkZWQgcGFnZWhpZGUtdGltZW91dC1nby1iYWNrLmh0bWwsIGdvaW5n
IGJhY2sKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNzogUmVzdG9yZWQgcGFnZSBmcm9tIHBhZ2Ug
Y2FjaGUuCitUcmllcyB0byB0cmlnZ2VyIGFuIGFzc2VydCBpbiB4bWxodHRwcmVxdWVzdCBkdXJp
bmcgcGFnZWhpZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1MmUzM2M5
ZmEzN2RmMjRmYTQ4YWY1MDEzZTAwNGUyYTdjYmY1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sCkBAIC0wLDAgKzEsMzQg
QEAKKzxodG1sPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8Ym9keT4KKworPGlmcmFtZSBzcmM9InJlc291cmNlcy9zdWJmcmFtZS14bWxo
dHRwcmVxdWVzdC5odG1sIiBpZD0iYS1mcmFtZSI+PC9pZnJhbWU+IDxpZnJhbWUgc3JjPSJyZXNv
dXJjZXMvc3VzcGVuZC1zdWJmcmFtZS0yLmh0bWwiIGlkPSJiLWZyYW1lIj48L2lmcmFtZT4KKwor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3JpcHRpb24oJ1RyaWVzIHRvIHRy
aWdnZXIgYW4gYXNzZXJ0IGluIHhtbGh0dHByZXF1ZXN0IGR1cmluZyBwYWdlaGlkZS4nKTsKKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5vdmVycmlkZVByZWZlcmVuY2UoJ1dlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5Jywg
MSk7CisKKworb25wYWdlc2hvdyA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIGlmIChldmVudC5w
ZXJzaXN0ZWQpIHsKKyAgICAgICAgY29uc29sZS5sb2coJ1Jlc3RvcmVkIHBhZ2UgZnJvbSBwYWdl
IGNhY2hlLicpOworICAgICAgICBpZiAoIXdpbmRvdy53YXNGaW5pc2hKU1Rlc3RDYWxsZWQpCisg
ICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9Cit9CisKK29ubG9hZCA9IGZ1bmN0aW9u
KCkKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBsb2NhdGlvbi5ocmVm
ID0gJ3Jlc291cmNlcy9wYWdlaGlkZS10aW1lb3V0LWdvLWJhY2suaHRtbCc7CisgICAgfSwgMCk7
Cit9Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK3ZhciBqc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL3N1YmZyYW1lLXhtbGh0dHByZXF1ZXN0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3Qu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yYjUwZjMyNDVmZjMwN2I4ZmQ1MjMzNzM5ZWE3NzYxMzU5Mjc2M2Ri
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL3N1
YmZyYW1lLXhtbGh0dHByZXF1ZXN0Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIHRlc3Qo
KSB7CisgICAgICAgICAgICB3aW5kb3cudG9wLmNvbnNvbGUubG9nKCdYTUxIdHRwUmVxdWVzdCBp
biBzdWJmcmFtZS0xIGNyZWF0ZWQnKTsKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCAnYWJvdXQ6ZW1wdHknLCB0
cnVlKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CitJIGFtIHN1
YmZyYW1lLTEKKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132811</attachid>
            <date>2012-03-20 06:25:07 -0700</date>
            <delta_ts>2012-03-23 09:02:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81506-20120320142506.patch</filename>
            <type>text/plain</type>
            <size>8412</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjA2M2U1OWM5NWQ2NjA5
MTBhYjliMDJjYjZkNWE2ZmEwNDEwYzI2My4uOGFiZTI0N2JkZWZiNmExZWYyZjRkY2YzYmQ0MjRm
ZTcxZGRkNGNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTE5ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEFz
c2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGluY29ycmVjdCBhc3Nl
cnRzLCBhbmQgY2hhbmdlIHN1c3BlbmQgbG9naWMgdG8gb25seSBzdXNwZW5kIHRpbWVkIGV2ZW50
cywgYnV0IHN0aWxsCisgICAgICAgIGVtaXQgc3RhdGUgY2hhbmdlIGV2ZW50cy4KKworICAgICAg
ICBUZXN0OiBmYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sCisKKyAgICAgICAgKiB4
bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgV2hlbiBzdXNwZW5kZWQsIGRvIG5vdCBlbWl0IHN0
YXRlLWNoYW5nZSB1bmxlc3MgdGhlIHN0YXRlIHJlYWxseSBkaWQgY2hhbmdlLgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9n
cmVzc0V2ZW50KToKKyAgICAgICAgRG8gbm90IGVtaXQgcHJvZ3Jlc3MgZXZlbnRzIHdoaWxlIHN1
c3BlbmRlZCwgYnV0IHVwZGF0ZSB0aGUgcGF1c2VkIHByb2dyZXNzIGV2ZW50LgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZl
bnQpOgorICAgICAgICBSZW1vdmUgYXNzZXJ0cywgc2luY2Ugbm9ybWFsIGV2ZW50cyBjYW4gYmUg
ZGlzcGF0Y2hlZCB3aGlsZSBzdXNwZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KToKKyAgICAgICAg
Rmx1c2ggdGhlIHBhdXNlZCBwcm9ncmVzcyBldmVudCBpZiBuZWVkZWQuCisKIDIwMTItMDMtMTkg
IFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAgICAgTWVkaWFT
dHJlYW0gQVBJIChKU0VQKTogSW50cm9kdWNpbmcgUGVlckNvbm5lY3Rpb24wMEhhbmRsZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGUzZmI5ZDFjMDAzYTYzZTA1M2Yy
ODBlZGY4MTU5OWY5YjExOWE4OTQuLmJjMzUyYjc2YzU2Mzc2ZGFiMzc5MzY0NTlkNTU1NzJlOWE3
NDA2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTE0OSw4ICsx
MTQ5LDkgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbikKICAgICAgICAgaWYgKG1fc3RhdGUgIT0gTE9BRElORykKICAgICAgICAg
ICAgIGNoYW5nZVN0YXRlKExPQURJTkcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBG
aXJlZm94IGNhbGxzIHJlYWR5U3RhdGVDaGFuZ2VkIGV2ZXJ5IHRpbWUgaXQgcmVjZWl2ZXMgZGF0
YSwgNDQ0OTQ0MgotICAgICAgICAgICAgY2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpOwor
ICAgICAgICAgICAgaWYgKCFtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5zdXNwZW5kZWQoKSkKKyAg
ICAgICAgICAgICAgICAvLyBGaXJlZm94IGNhbGxzIHJlYWR5U3RhdGVDaGFuZ2VkIGV2ZXJ5IHRp
bWUgaXQgcmVjZWl2ZXMgZGF0YSwgNDQ0OTQ0MgorICAgICAgICAgICAgICAgIGNhbGxSZWFkeVN0
YXRlQ2hhbmdlTGlzdGVuZXIoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCmluZGV4
IDNiYzhjMzAxYjQ2MDZkYTA3MTEwOWM5MGI5M2Q1NGY0MGE2NmIzMjEuLjZkZmIzNjYxMDAyZmVi
ZjJkZGJlYTZjMzVkYmRkMDA3MGI0MWRmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApAQCAtNDks
NyArNDksMTEgQEAgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6On5YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSgpCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudChib29sIGxlbmd0aENvbXB1
dGFibGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3Rh
bCkKIHsKLSAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsKKyAgICBpZiAoc3VzcGVuZGVkKCkpIHsK
KyAgICAgICAgbV9wYXVzZWRFdmVudCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBsZW5ndGhDb21wdXRhYmxlLCBsb2FkZWQs
IHRvdGFsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICghaXNBY3RpdmUoKSkg
ewogICAgICAgICAvLyBUaGUgdGltZXIgaXMgbm90IGFjdGl2ZSBzbyB0aGUgbGVhc3QgZnJlcXVl
bnQgZXZlbnQgZm9yIG5vdyBpcyBldmVyeSBieXRlLgogICAgICAgICAvLyBKdXN0IGdvIGFoZWFk
IGFuZCBkaXNwYXRjaCB0aGUgZXZlbnQuCkBAIC03MSwxMCArNzUsNiBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBs
ZW5ndGhDb21wdQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9u
IHByb2dyZXNzRXZlbnRBY3Rpb24pCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7Ci0gICAg
Ly8gV2Ugc2hvdWxkIG5vdCBoYXZlIGFueSBwZW5kaW5nIGV2ZW50cyBmcm9tIGEgcHJldmlvdXMg
cmVzdW1lLgotICAgIEFTU0VSVCghbV9wYXVzZWRFdmVudCk7Ci0KICAgICBpZiAocHJvZ3Jlc3NF
dmVudEFjdGlvbiA9PSBGbHVzaFByb2dyZXNzRXZlbnQpCiAgICAgICAgIGZsdXNoUHJvZ3Jlc3NF
dmVudCgpOwogCkBAIC05MSw2ICs5MSwxMiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlOjpkaXNwYXRjaEV2ZW50QW5kTG9hZEVuZChQYXNzUmVmUHRyPEV2ZQogCiB2
b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZl
bnQoKQogeworICAgIGlmIChtX3BhdXNlZEV2ZW50KSB7CisgICAgICAgIG1fdGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KG1fcGF1c2VkRXZlbnQpOworICAgICAgICBtX3BhdXNlZEV2ZW50ID0gMDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICghaGFzRXZlbnRUb0Rpc3BhdGNoKCkpCiAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDAwODY1NGIzNTFlYTExNDQ1MDFmY2JjZWI2NDVlYzMx
OWQ1Y2RlMDAuLjg5MWNkZDFkOTU2MjMyNmZiYWVkZTdjYzI2NjJhZmQ4OTNiYzU5NGUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAxMi0wMy0xOSAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxs
YW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBBc3NlcnRzIGluIFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MTUwNgorCisgICAgICAgIFRlc3RzIHRoYXQgeG1saHR0cHJlcXVlc3Qu
b3BlbiBkb2VzIG5vdCBhc3NlcnQgaW4gd2hlbiBjYWxsZWQgZnJvbSBvbnBhZ2VoaWRlLgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9ldmVu
dHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMv
cGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbDogQWRkZWQuCisKIDIw
MTItMDMtMTkgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJ
bmRleGVkREI6IExheW91dFRlc3RzIGRvbid0IG5lZWQgZXhwbGljaXQgY29uc29sZSBkaXYKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMzQzOTJmZDE1ZTA3ZDYxZWRlYjkxNDI0NGI4YTA3YzNiMzcx
ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUt
eGhyLW9wZW4tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA2OiBYTUxIdHRwUmVxdWVzdCBpbiBzdWJmcmFtZS0xIGNyZWF0ZWQKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA1OiBMb2FkZWQgcGFnZWhpZGUtdGltZW91dC1nby1iYWNrLmh0bWwsIGdvaW5n
IGJhY2sKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNzogUmVzdG9yZWQgcGFnZSBmcm9tIHBhZ2Ug
Y2FjaGUuCitUcmllcyB0byB0cmlnZ2VyIGFuIGFzc2VydCBpbiB4bWxodHRwcmVxdWVzdCBkdXJp
bmcgcGFnZWhpZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1MmUzM2M5
ZmEzN2RmMjRmYTQ4YWY1MDEzZTAwNGUyYTdjYmY1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sCkBAIC0wLDAgKzEsMzQg
QEAKKzxodG1sPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8Ym9keT4KKworPGlmcmFtZSBzcmM9InJlc291cmNlcy9zdWJmcmFtZS14bWxo
dHRwcmVxdWVzdC5odG1sIiBpZD0iYS1mcmFtZSI+PC9pZnJhbWU+IDxpZnJhbWUgc3JjPSJyZXNv
dXJjZXMvc3VzcGVuZC1zdWJmcmFtZS0yLmh0bWwiIGlkPSJiLWZyYW1lIj48L2lmcmFtZT4KKwor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3JpcHRpb24oJ1RyaWVzIHRvIHRy
aWdnZXIgYW4gYXNzZXJ0IGluIHhtbGh0dHByZXF1ZXN0IGR1cmluZyBwYWdlaGlkZS4nKTsKKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5vdmVycmlkZVByZWZlcmVuY2UoJ1dlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5Jywg
MSk7CisKKworb25wYWdlc2hvdyA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIGlmIChldmVudC5w
ZXJzaXN0ZWQpIHsKKyAgICAgICAgY29uc29sZS5sb2coJ1Jlc3RvcmVkIHBhZ2UgZnJvbSBwYWdl
IGNhY2hlLicpOworICAgICAgICBpZiAoIXdpbmRvdy53YXNGaW5pc2hKU1Rlc3RDYWxsZWQpCisg
ICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9Cit9CisKK29ubG9hZCA9IGZ1bmN0aW9u
KCkKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBsb2NhdGlvbi5ocmVm
ID0gJ3Jlc291cmNlcy9wYWdlaGlkZS10aW1lb3V0LWdvLWJhY2suaHRtbCc7CisgICAgfSwgMCk7
Cit9Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKK3ZhciBqc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL3N1YmZyYW1lLXhtbGh0dHByZXF1ZXN0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3Qu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yYjUwZjMyNDVmZjMwN2I4ZmQ1MjMzNzM5ZWE3NzYxMzU5Mjc2M2Ri
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL3N1
YmZyYW1lLXhtbGh0dHByZXF1ZXN0Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIHRlc3Qo
KSB7CisgICAgICAgICAgICB3aW5kb3cudG9wLmNvbnNvbGUubG9nKCdYTUxIdHRwUmVxdWVzdCBp
biBzdWJmcmFtZS0xIGNyZWF0ZWQnKTsKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCAnYWJvdXQ6ZW1wdHknLCB0
cnVlKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CitJIGFtIHN1
YmZyYW1lLTEKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCA2N2QyN2Y4MmQ0OTE5Mjc4YjQ2
MDZlMWM0MjEwMGNjMjk0ZTQ1MTgxLi4xMTM1MzU0N2VmZmRmNGJlYjUxYzhiMzFiZmIwZTVjODc2
ODk5ZDkyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CkBAIC0yMjAsNiArMjIwLDcgQEAgQlVHQ1IxMDg3OTggTElOVVggV0lO
IDogZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLmh0bWwgPSBDUkFT
SAogLy8gb24gd2hpY2ggcmVuZGVyZXIgcHJvY2VzcyB0byB1c2UgZm9yIGVhY2ggb2YgdGhlbS4K
IFdPTlRGSVggU0tJUCA6IGZhc3QvZG9tL1dpbmRvdy90aW1lci1yZXN1bWUtb24tbmF2aWdhdGlv
bi1iYWNrLmh0bWwgPSBUSU1FT1VUIEZBSUwKIFdPTlRGSVggU0tJUCA6IGZhc3QvZXZlbnRzL3Bh
Z2VoaWRlLXRpbWVvdXQuaHRtbCA9IFRJTUVPVVQKK1dPTlRGSVggU0tJUCA6IGZhc3QvZXZlbnRz
L3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwgPSBUSU1FT1VUCiBXT05URklYIFNLSVAgOiBmYXN0L2V2
ZW50cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNrLWNhY2hlZC13aXRoLWZyYW1lcy5odG1sID0g
VElNRU9VVAogV09OVEZJWCBTS0lQIDogZmFzdC9ldmVudHMvcGFnZXNob3ctcGFnZWhpZGUtb24t
YmFjay1jYWNoZWQuaHRtbCA9IFRJTUVPVVQgRkFJTAogV09OVEZJWCBTS0lQIDogZmFzdC9ldmVu
dHMvc3VzcGVuZC10aW1lcnMuaHRtbCA9IFRJTUVPVVQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133495</attachid>
            <date>2012-03-23 09:02:13 -0700</date>
            <delta_ts>2012-03-26 08:07:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81506-20120323170211.patch</filename>
            <type>text/plain</type>
            <size>14726</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBjM2UyMTM4M2RkNzE1
NTljMzA0MTY1ZTIxZTBiY2NhZGNhYjk2Ni4uMjA4OTI4NGRkMGJjYTExN2RiNzZlZWU1YjI1ZmVj
NWZkZmJiZGFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTIzICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEFz
c2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXVldWVzIGV2ZW50cyBhdHRlbXB0
ZWQgZGlzcGF0Y2hlZCB3aGlsZSB0aGUgb2JqZWN0IGlzIHN1c3BlbmQuIENvYWxlc2NpbmcgcHJv
Z3Jlc3MgYW5kCisgICAgICAgIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnRzLiBFdmVudHMgYXJlIGRp
c3BhdGNoZWQgc29vbiBhZnRlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHJlc3VtZWQsCisgICAgICAg
IGJ1dCBub3QgaW1tZWRpYXRlbHkgdG8gYXZvaWQgaGl0dGluZyBhIHJlY3Vyc2lvbiBpc3N1ZSBp
biBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3Bh
Z2VoaWRlLXhoci1vcGVuLmh0bWwKKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6WE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlz
cGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZsdXNoUHJvZ3Jlc3NF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJv
dHRsZTo6ZGlzcGF0Y2hQYXVzZWRFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpzdXNwZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpyZXN1bWUpOgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OnN1c3BlbmRl
ZCk6CisgICAgICAgIChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSk6CisKIDIw
MTItMDMtMjMgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAg
ICAgVGhlIEpTQyBjb2RlIGdlbmVyYXRvciBjYW4ndCBoYW5kbGUgYm9vbGVhbiBhcmd1bWVudHMg
Zm9yIENhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggNzEy
MjAwY2U2OTNjOWQ1ZGFiMTgwYTA3MTVmZWI3YTFmOWY2MzUzMy4uNjRhY2U4OWQ0M2ZkNTc0NDFj
ZGM0NmIxMGQ3YjljM2NjMzY0N2NlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCkBAIC0xMTQ5LDggKzExNDksOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZl
RGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQogICAgICAgICBpZiAobV9zdGF0ZSAhPSBM
T0FESU5HKQogICAgICAgICAgICAgY2hhbmdlU3RhdGUoTE9BRElORyk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIC8vIEZpcmVmb3ggY2FsbHMgcmVhZHlTdGF0ZUNoYW5nZWQgZXZlcnkgdGlt
ZSBpdCByZWNlaXZlcyBkYXRhLCA0NDQ5NDQyCi0gICAgICAgICAgICBjYWxsUmVhZHlTdGF0ZUNo
YW5nZUxpc3RlbmVyKCk7CisgICAgICAgICAgICBpZiAoIW1fcHJvZ3Jlc3NFdmVudFRocm90dGxl
LnN1c3BlbmRlZCgpKQorICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggY2FsbHMgcmVhZHlTdGF0
ZUNoYW5nZWQgZXZlcnkgdGltZSBpdCByZWNlaXZlcyBkYXRhLCA0NDQ5NDQyCisgICAgICAgICAg
ICAgICAgY2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZS5jcHAKaW5kZXggN2JiMjdmZjg0MDM4YjNmZTJkNzk3ZDMyZTRhMDdiMmZlZTQzZTZl
Mi4uNzVjMDg5MzVkNTg4YTQ1OWI4NWI5MDI1ODdlZjlkOTQ0Y2ExZTdjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhy
b3R0bGUuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBKdWxp
ZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+Ci0gKiBBbGwgcmlnaHQgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3
ZWJraXQub3JnPiAgQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBAIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZShFdmVu
dFRhCiAgICAgLCBtX2xvYWRlZCgwKQogICAgICwgbV90b3RhbCgwKQogICAgICwgbV9zdXNwZW5k
ZWQoZmFsc2UpCisgICAgLCBtX2Rpc3BhdGNoUGF1c2VkRXZlbnRzKGZhbHNlKQogewogICAgIEFT
U0VSVCh0YXJnZXQpOwogfQpAQCAtNDksNyArNTAsMTIgQEAgWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGU6On5YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSgpCiAK
IHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jl
c3NFdmVudChib29sIGxlbmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkZWQs
IHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbCkKIHsKLSAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsK
KyAgICBpZiAobV9zdXNwZW5kZWQpIHsKKyAgICAgICAgLy8gT25seSBzdG9yZSB0aGUgbGF0ZXN0
IHByb2dyZXNzIGV2ZW50IHdoaWxlIHN1c3BlbmRlZC4KKyAgICAgICAgbV9wYXVzZWRQcm9ncmVz
c0V2ZW50ID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnByb2dyZXNzRXZlbnQsIGxlbmd0aENvbXB1dGFibGUsIGxvYWRlZCwgdG90YWwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKCFpc0FjdGl2ZSgpKSB7CiAgICAgICAgIC8vIFRo
ZSB0aW1lciBpcyBub3QgYWN0aXZlIHNvIHRoZSBsZWFzdCBmcmVxdWVudCBldmVudCBmb3Igbm93
IGlzIGV2ZXJ5IGJ5dGUuCiAgICAgICAgIC8vIEp1c3QgZ28gYWhlYWQgYW5kIGRpc3BhdGNoIHRo
ZSBldmVudC4KQEAgLTcxLDYgKzc3LDEyIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudChib29sIGxlbmd0aENvbXB1CiAKIHZv
aWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0
ZUNoYW5nZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9u
IHByb2dyZXNzRXZlbnRBY3Rpb24pCiB7CisgICAgaWYgKG1fc3VzcGVuZGVkICYmIHByb2dyZXNz
RXZlbnRBY3Rpb24gIT0gRmx1c2hQcm9ncmVzc0V2ZW50KSB7CisgICAgICAgIC8vIFJlYWR5U3Rh
dGVDaGFuZ2UgZXZlbnRzIGFyZSBzdGF0ZS1sZXNzIHNvIGRvbid0IHF1ZXVlIG1vcmUgdGhhbiBv
bmUuCisgICAgICAgIG1fcGF1c2VkUmVhZHlTdGF0ZUNoYW5nZUV2ZW50ID0gZXZlbnQ7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAocHJvZ3Jlc3NFdmVudEFjdGlvbiA9PSBGbHVz
aFByb2dyZXNzRXZlbnQpCiAgICAgICAgIGZsdXNoUHJvZ3Jlc3NFdmVudCgpOwogCkBAIC03OSwx
MSArOTEsMTEgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlz
cGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoUGFzc1JlZlAKIAogdm9pZCBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKIHsKLSAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsKLSAgICAvLyBXZSBzaG91bGQgbm90
IGhhdmUgYW55IHBlbmRpbmcgZXZlbnRzIGZyb20gYSBwcmV2aW91cyByZXN1bWUuCi0gICAgQVNT
RVJUKCFtX3BhdXNlZEV2ZW50KTsKLQotICAgIG1fdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50
KTsKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIGlmIChtX3N1c3BlbmRlZCkKKyAgICAgICAgbV9w
YXVzZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIG1fdGFyZ2V0LT5k
aXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCkBAIC05Niw2ICsxMDgsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZTo6ZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoUGFzc1JlZlB0cjxFdmUKIAogdm9pZCBY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KCkK
IHsKKyAgICBpZiAobV9zdXNwZW5kZWQgJiYgbV9wYXVzZWRQcm9ncmVzc0V2ZW50KSB7CisgICAg
ICAgIC8vIE1vdmUgdGhlIHByb2dyZXNzIGV2ZW50IHRvIHRoZSBxdWV1ZSwgdG8gZ2V0IGl0IGlu
IHRoZSByaWdodCBvcmRlciBvbiByZXN1bWUuCisgICAgICAgIG1fcGF1c2VkRXZlbnRzLmFwcGVu
ZChtX3BhdXNlZFByb2dyZXNzRXZlbnQpOworICAgICAgICBtX3BhdXNlZFByb2dyZXNzRXZlbnQg
PSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKCFoYXNFdmVudFRvRGlzcGF0
Y2goKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDksMjEgKzEyOCwzOSBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZlbnQoKQogICAg
IGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlOjpkaXNwYXRjaFBhdXNlZEV2ZW50KCkKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUGF1c2VkRXZlbnRzKCkKIHsKLSAgICBBU1NF
UlQoIXN1c3BlbmRlZCgpKTsKLSAgICBpZiAoIW1fcGF1c2VkRXZlbnQpCi0gICAgICAgIHJldHVy
bjsKKyAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKKyAgICBBU1NFUlQobV9kaXNwYXRjaFBhdXNl
ZEV2ZW50cyk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGF1c2VkRXZlbnRzLmJlZ2luKCk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxFdmVu
dD4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYXVzZWRFdmVudHMuZW5kKCk7CisgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqaXQpOwogCi0gICAg
ZGlzcGF0Y2hFdmVudChtX3BhdXNlZEV2ZW50KTsKLSAgICBtX3BhdXNlZEV2ZW50ID0gMDsKKyAg
ICBtX3BhdXNlZEV2ZW50cy5jbGVhcigpOworCisgICAgaWYgKG1fcGF1c2VkUHJvZ3Jlc3NFdmVu
dCkgeworICAgICAgICBkaXNwYXRjaEV2ZW50KG1fcGF1c2VkUHJvZ3Jlc3NFdmVudCk7CisgICAg
ICAgIG1fcGF1c2VkUHJvZ3Jlc3NFdmVudCA9IDA7CisgICAgfQorICAgIGlmIChtX3BhdXNlZFJl
YWR5U3RhdGVDaGFuZ2VFdmVudCkgeworICAgICAgICBkaXNwYXRjaEV2ZW50KG1fcGF1c2VkUmVh
ZHlTdGF0ZUNoYW5nZUV2ZW50KTsKKyAgICAgICAgbV9wYXVzZWRSZWFkeVN0YXRlQ2hhbmdlRXZl
bnQgPSAwOworICAgIH0KKyAgICBtX2Rpc3BhdGNoUGF1c2VkRXZlbnRzID0gZmFsc2U7CiB9CiAK
IHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZpcmVkKCkKIHsKKyAg
ICBpZiAobV9kaXNwYXRjaFBhdXNlZEV2ZW50cykgeworICAgICAgICBtX3N1c3BlbmRlZCA9IGZh
bHNlOworICAgICAgICBkaXNwYXRjaFBhdXNlZEV2ZW50cygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsK
LSAgICBBU1NFUlQoIW1fcGF1c2VkRXZlbnQpOworICAgIEFTU0VSVCghbV9wYXVzZWRQcm9ncmVz
c0V2ZW50ICYmICFtX3BhdXNlZFJlYWR5U3RhdGVDaGFuZ2VFdmVudCk7CiAgICAgaWYgKCFoYXNF
dmVudFRvRGlzcGF0Y2goKSkgewogICAgICAgICAvLyBObyBwcm9ncmVzcyBldmVudCB3YXMgcXVl
dWVkIHNpbmNlIHRoZSBwcmV2aW91cyBkaXNwYXRjaCwgd2UgY2FuIHNhZmVseSBzdG9wIHRoZSB0
aW1lci4KICAgICAgICAgc3RvcCgpOwpAQCAtMTQyLDEzICsxNzksMjIgQEAgYm9vbCBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6aGFzRXZlbnRUb0Rpc3BhdGNoKCkgY29uc3QK
IAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6c3VzcGVuZCgpCiB7
Ci0gICAgQVNTRVJUKCFtX3BhdXNlZEV2ZW50KTsKKyAgICAvLyBJZiByZS1zdXNwZW5kZWQgYmVm
b3JlIHBhdXNlZCBldmVudHMgaGF2ZSBiZWVuIGRpc3BhdGNoZWQsIGp1c3Qgc3RvcCB0aGUgZGlz
cGF0Y2gKKyAgICAvLyBhbmQgY29udGludWUgdGhlIGxhc3Qgc3VzcGVuZC4KKyAgICBpZiAobV9k
aXNwYXRjaFBhdXNlZEV2ZW50cykgeworICAgICAgICBtX2Rpc3BhdGNoUGF1c2VkRXZlbnRzID0g
ZmFsc2U7CisgICAgICAgIHN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NF
UlQoIW1fcGF1c2VkUHJvZ3Jlc3NFdmVudCk7CisgICAgQVNTRVJUKCFtX3BhdXNlZFJlYWR5U3Rh
dGVDaGFuZ2VFdmVudCk7CisgICAgQVNTRVJUKG1fcGF1c2VkRXZlbnRzLmlzRW1wdHkoKSk7CiAK
ICAgICBtX3N1c3BlbmRlZCA9IHRydWU7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIHByb2dyZXNzIGV2
ZW50IHdhaXRpbmcgdG8gYmUgZGlzcGF0Y2hlZCwKICAgICAvLyBqdXN0IHF1ZXVlIGl0LgogICAg
IGlmIChoYXNFdmVudFRvRGlzcGF0Y2goKSkgewotICAgICAgICBtX3BhdXNlZEV2ZW50ID0gWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dyZXNzRXZl
bnQsIG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwpOworICAgICAgICBtX3Bh
dXNlZFByb2dyZXNzRXZlbnQgPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgbV9sZW5ndGhDb21wdXRhYmxlLCBtX2xvYWRlZCwg
bV90b3RhbCk7CiAgICAgICAgIG1fdG90YWwgPSAwOwogICAgICAgICBtX2xvYWRlZCA9IDA7CiAg
ICAgfQpAQCAtMTYwLDggKzIwNiwxMSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpyZXN1bWUoKQogICAgIEFTU0VSVCghbV9sb2FkZWQpOwogICAgIEFTU0VSVCgh
bV90b3RhbCk7CiAKLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotICAgIGRpc3BhdGNoUGF1c2Vk
RXZlbnQoKTsKKyAgICAvLyBEbyBub3QgZGlzcGF0Y2ggZXZlbnRzIGlubGluZSBoZXJlLCBzaW5j
ZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGlzIGl0ZXJhdGluZyBvdmVyIHRoZSBsaXN0IG9mIGFj
dGl2ZSBET00gb2JqZWN0cworICAgIC8vIHRvIHJlc3VtZSB0aGVtIGFuZCBhbnkgYWN0aXZhdGVk
IEpTIGNvdWxkIGluc2VydCBuZXcgYWN0aXZlIERPTSBvYmplY3RzLgorICAgIG1fZGlzcGF0Y2hQ
YXVzZWRFdmVudHMgPSB0cnVlOworICAgIC8vIG1fc3VzcGVuZCBpcyBrZXB0IHRydWUgaGVyZSB0
byBtYWtlIHN1cmUgd2UgY29udGludWUgdG8gcXVldWUgZXZlbnRzIHVudGlsIHRoZSBwYXVzZWQg
aGF2ZSBiZWVuIGRpc3BhdGNoZWQuCisgICAgc3RhcnRPbmVTaG90KDApOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCmluZGV4IDQxZjM3NDczMTNjYjdmZGQ5Njdj
Mjg5MGFiNWJkYjcwNmVlMTUyZDUuLjMxZTlmMGRkYzM4MjkwYjA4MTk0YmRlMDdjMTk5NzhiOTdh
YjQ2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnRUaHJvdHRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCkBAIC01NiwxMyArNTYsMTMgQEAgcHVibGljOgogICAg
IHZvaWQgc3VzcGVuZCgpOwogICAgIHZvaWQgcmVzdW1lKCk7CiAKLSAgICBib29sIHN1c3BlbmRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZGVkOyB9CisgICAgYm9vbCBzdXNwZW5kZWQoKSBj
b25zdCB7IHJldHVybiBtX3N1c3BlbmRlZCAmJiAhbV9kaXNwYXRjaFBhdXNlZEV2ZW50czsgfQog
CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVByb2dyZXNzRXZlbnRE
aXNwYXRjaGluZ0ludGVydmFsSW5TZWNvbmRzOwogCiAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7
Ci0gICAgdm9pZCBkaXNwYXRjaFBhdXNlZEV2ZW50KCk7CisgICAgdm9pZCBkaXNwYXRjaFBhdXNl
ZEV2ZW50cygpOwogICAgIHZvaWQgZmx1c2hQcm9ncmVzc0V2ZW50KCk7CiAKICAgICBib29sIGhh
c0V2ZW50VG9EaXNwYXRjaCgpIGNvbnN0OwpAQCAtNzUsNyArNzUsMTAgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgbV90b3RhbDsKIAogICAgIGJvb2wgbV9zdXNwZW5kZWQ7Ci0g
ICAgUmVmUHRyPEV2ZW50PiBtX3BhdXNlZEV2ZW50OworICAgIGJvb2wgbV9kaXNwYXRjaFBhdXNl
ZEV2ZW50czsKKyAgICBSZWZQdHI8RXZlbnQ+IG1fcGF1c2VkUHJvZ3Jlc3NFdmVudDsKKyAgICBS
ZWZQdHI8RXZlbnQ+IG1fcGF1c2VkUmVhZHlTdGF0ZUNoYW5nZUV2ZW50OworICAgIFZlY3RvcjxS
ZWZQdHI8RXZlbnQ+ID4gbV9wYXVzZWRFdmVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggMTdkYTMzZDViZjdiNDhmNDE0Y2QyYjA0M2VlNjkwNTQ5MTI3OWZiNi4uYTFi
NTJlOGQ1OTZlZjQ2ZWU0MmMwYzdmY2NiYmQxZDYxMGRhMmM2NSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5
IEBACiAyMDEyLTAzLTIzICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9r
aWEuY29tPgogCisgICAgICAgIEFzc2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgxNTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdHMgdGhhdCB4bWxodHRwcmVxdWVzdC5vcGVuIGRvZXMgbm90IGFzc2VydCBpbiB3aGVuIGNh
bGxlZCBmcm9tIG9ucGFnZWhpZGUuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9wYWdlaGlkZS14
aHItb3Blbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3BhZ2Vo
aWRlLXhoci1vcGVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNl
cy9zdWJmcmFtZS14bWxodHRwcmVxdWVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKKzIwMTItMDMtMjMgIEFsbGFuIFNh
bmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKICAgICAgICAgVG91Y2gg
YWRqdXN0bWVudCBmb3JnZXRzIHNvbWUgc3VidGFyZ2V0IHF1YWRzLgogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIwNDQKIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMzNDM5MmZkMTVlMDdkNjFlZGViOTE0MjQ0YjhhMDdjM2IzNzFlM2IKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDY6IFhNTEh0
dHBSZXF1ZXN0IGluIHN1YmZyYW1lLTEgY3JlYXRlZAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDU6
IExvYWRlZCBwYWdlaGlkZS10aW1lb3V0LWdvLWJhY2suaHRtbCwgZ29pbmcgYmFjaworQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDE3OiBSZXN0b3JlZCBwYWdlIGZyb20gcGFnZSBjYWNoZS4KK1RyaWVz
IHRvIHRyaWdnZXIgYW4gYXNzZXJ0IGluIHhtbGh0dHByZXF1ZXN0IGR1cmluZyBwYWdlaGlkZS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUyZTMzYzlmYTM3ZGYyNGZhNDhh
ZjUwMTNlMDA0ZTJhN2NiZjVkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwKQEAgLTAsMCArMSwzNCBAQAorPGh0bWw+Cis8
c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxi
b2R5PgorCis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3N1YmZyYW1lLXhtbGh0dHByZXF1ZXN0Lmh0
bWwiIGlkPSJhLWZyYW1lIj48L2lmcmFtZT4gPGlmcmFtZSBzcmM9InJlc291cmNlcy9zdXNwZW5k
LXN1YmZyYW1lLTIuaHRtbCIgaWQ9ImItZnJhbWUiPjwvaWZyYW1lPgorCis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbignVHJpZXMgdG8gdHJpZ2dlciBhbiBhc3Nl
cnQgaW4geG1saHR0cHJlcXVlc3QgZHVyaW5nIHBhZ2VoaWRlLicpOworCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJl
ZmVyZW5jZSgnV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVuY2VLZXknLCAxKTsKKworCitvbnBh
Z2VzaG93ID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LnBlcnNpc3RlZCkgewor
ICAgICAgICBjb25zb2xlLmxvZygnUmVzdG9yZWQgcGFnZSBmcm9tIHBhZ2UgY2FjaGUuJyk7Cisg
ICAgICAgIGlmICghd2luZG93Lndhc0ZpbmlzaEpTVGVzdENhbGxlZCkKKyAgICAgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0KK30KKworb25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2Vz
L3BhZ2VoaWRlLXRpbWVvdXQtZ28tYmFjay5odG1sJzsKKyAgICB9LCAwKTsKK30KK3ZhciBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3Jlc291cmNlcy9zdWJmcmFtZS14bWxodHRwcmVxdWVzdC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJiNTBmMzI0NWZmMzA3YjhmZDUyMzM3MzllYTc3NjEzNTkyNzYzZGIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0
cHJlcXVlc3QuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAg
ICAgIHdpbmRvdy50b3AuY29uc29sZS5sb2coJ1hNTEh0dHBSZXF1ZXN0IGluIHN1YmZyYW1lLTEg
Y3JlYXRlZCcpOworICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwor
ICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsICdhYm91dDplbXB0eScsIHRydWUpOworICAgICAg
ICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK0kgYW0gc3ViZnJhbWUtMQorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0CmluZGV4IDg3ZDdlYjJmNzdhNGNhZTg2ZmMwMzc3Nzc5OTZiOGJm
OWYwOThjMDQuLjJlNmEyYTcyMTE0N2QzYTY5YjU2YjlmNWMyN2ViZDlhYzNlNWRkOTcgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQKQEAgLTQ4Nyw2ICs0ODcsNyBAQCBCVUdDUjEwODc5OCBMSU5VWCBXSU4gOiBmYXN0L2ZpbGVz
eXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1ldmVudHMuaHRtbCA9IENSQVNICiAvLyBvbiB3aGlj
aCByZW5kZXJlciBwcm9jZXNzIHRvIHVzZSBmb3IgZWFjaCBvZiB0aGVtLgogV09OVEZJWCBTS0lQ
IDogZmFzdC9kb20vV2luZG93L3RpbWVyLXJlc3VtZS1vbi1uYXZpZ2F0aW9uLWJhY2suaHRtbCA9
IFRJTUVPVVQgRkFJTAogV09OVEZJWCBTS0lQIDogZmFzdC9ldmVudHMvcGFnZWhpZGUtdGltZW91
dC5odG1sID0gVElNRU9VVAorV09OVEZJWCBTS0lQIDogZmFzdC9ldmVudHMvcGFnZWhpZGUteGhy
LW9wZW4uaHRtbCA9IFRJTUVPVVQKIFdPTlRGSVggU0tJUCA6IGZhc3QvZXZlbnRzL3BhZ2VzaG93
LXBhZ2VoaWRlLW9uLWJhY2stY2FjaGVkLXdpdGgtZnJhbWVzLmh0bWwgPSBUSU1FT1VUCiBXT05U
RklYIFNLSVAgOiBmYXN0L2V2ZW50cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNrLWNhY2hlZC5o
dG1sID0gVElNRU9VVCBGQUlMCiBXT05URklYIFNLSVAgOiBmYXN0L2V2ZW50cy9zdXNwZW5kLXRp
bWVycy5odG1sID0gVElNRU9VVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133814</attachid>
            <date>2012-03-26 08:07:48 -0700</date>
            <delta_ts>2012-04-02 06:15:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81506-20120326170746.patch</filename>
            <type>text/plain</type>
            <size>15124</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM3MTJjYWVkYTViOWI4
ZWJkYjE4MWJlNGUxZWU5Zjk3N2ZiNDQwZi4uNDljZmIzNGJlY2ZlY2M3MTUxNmMzMGRmMGZiZGEw
Mzg0ZTk0ZDVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTIzICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEFz
c2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXVldWVzIGV2ZW50cyBhdHRlbXB0
ZWQgZGlzcGF0Y2hlZCB3aGlsZSB0aGUgb2JqZWN0IGlzIHN1c3BlbmQuIENvYWxlc2NpbmcgcHJv
Z3Jlc3MgYW5kCisgICAgICAgIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnRzLiBFdmVudHMgYXJlIGRp
c3BhdGNoZWQgc29vbiBhZnRlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHJlc3VtZWQsCisgICAgICAg
IGJ1dCBub3QgaW1tZWRpYXRlbHkgdG8gYXZvaWQgaGl0dGluZyBhIHJlY3Vyc2lvbiBpc3N1ZSBp
biBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3Bh
Z2VoaWRlLXhoci1vcGVuLmh0bWwKKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6WE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlz
cGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZsdXNoUHJvZ3Jlc3NF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJv
dHRsZTo6ZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OnN1c3BlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OnJlc3VtZSk6Cisg
ICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6c3VzcGVu
ZGVkKToKKyAgICAgICAgKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlKToKKwog
MjAxMi0wMy0yNiAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtSRUdSRVNTSU9OXSBXb3JrYXJvdW5kcyBmb3Igc2VjdXJp
dHkgY2hlY2tzIHdoZW4gcmV0cmlldmluZyBzdHlsZXNoZWV0IHJ1bGUgbGlzdHMgYXJlIGJyb2tl
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggNzEyMjAwY2U2OTNjOWQ1
ZGFiMTgwYTA3MTVmZWI3YTFmOWY2MzUzMy4uNjRhY2U4OWQ0M2ZkNTc0NDFjZGM0NmIxMGQ3Yjlj
M2NjMzY0N2NlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0xMTQ5
LDggKzExNDksOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuKQogICAgICAgICBpZiAobV9zdGF0ZSAhPSBMT0FESU5HKQogICAg
ICAgICAgICAgY2hhbmdlU3RhdGUoTE9BRElORyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IC8vIEZpcmVmb3ggY2FsbHMgcmVhZHlTdGF0ZUNoYW5nZWQgZXZlcnkgdGltZSBpdCByZWNlaXZl
cyBkYXRhLCA0NDQ5NDQyCi0gICAgICAgICAgICBjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVy
KCk7CisgICAgICAgICAgICBpZiAoIW1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLnN1c3BlbmRlZCgp
KQorICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggY2FsbHMgcmVhZHlTdGF0ZUNoYW5nZWQgZXZl
cnkgdGltZSBpdCByZWNlaXZlcyBkYXRhLCA0NDQ5NDQyCisgICAgICAgICAgICAgICAgY2FsbFJl
YWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAK
aW5kZXggN2JiMjdmZjg0MDM4YjNmZTJkNzk3ZDMyZTRhMDdiMmZlZTQzZTZlMi4uNGI3MDZhMjgz
OTgzNDk4N2UyMDNlODY0NmM5NDJkNjg3NDQ4NzU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCkBA
IC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBKdWxpZW4gQ2hhZmZyYWl4
IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+Ci0gKiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPiAg
QWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOCw3ICszOCw4IEBAIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZShFdmVudFRhCiAgICAgOiBt
X3RhcmdldCh0YXJnZXQpCiAgICAgLCBtX2xvYWRlZCgwKQogICAgICwgbV90b3RhbCgwKQotICAg
ICwgbV9zdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2RlZmVyRXZlbnRzKGZhbHNlKQorICAgICwg
bV9kaXNwYXRjaERlZmVycmVkRXZlbnRzKGZhbHNlKQogewogICAgIEFTU0VSVCh0YXJnZXQpOwog
fQpAQCAtNDksNyArNTAsMTIgQEAgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6
On5YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSgpCiAKIHZvaWQgWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudChib29sIGxl
bmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkZWQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbCkKIHsKLSAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsKKyAgICBpZiAobV9kZWZl
ckV2ZW50cykgeworICAgICAgICAvLyBPbmx5IHN0b3JlIHRoZSBsYXRlc3QgcHJvZ3Jlc3MgZXZl
bnQgd2hpbGUgc3VzcGVuZGVkLgorICAgICAgICBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2
ZW50LCBsZW5ndGhDb21wdXRhYmxlLCBsb2FkZWQsIHRvdGFsKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmICghaXNBY3RpdmUoKSkgewogICAgICAgICAvLyBUaGUgdGltZXIgaXMg
bm90IGFjdGl2ZSBzbyB0aGUgbGVhc3QgZnJlcXVlbnQgZXZlbnQgZm9yIG5vdyBpcyBldmVyeSBi
eXRlLgogICAgICAgICAvLyBKdXN0IGdvIGFoZWFkIGFuZCBkaXNwYXRjaCB0aGUgZXZlbnQuCkBA
IC03MSw2ICs3NywxNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
OjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhDb21wdQogCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2
ZW50QWN0aW9uKQogeworICAgIGlmIChtX2RlZmVyRXZlbnRzKSB7CisgICAgICAgIGlmIChwcm9n
cmVzc0V2ZW50QWN0aW9uICE9IEZsdXNoUHJvZ3Jlc3NFdmVudCkgeworICAgICAgICAgICAgLy8g
UmVhZHlTdGF0ZUNoYW5nZSBldmVudHMgYXJlIHN0YXRlLWxlc3Mgc28gZG9uJ3QgcXVldWUgbW9y
ZSB0aGFuIG9uZS4KKyAgICAgICAgICAgIG1fZGVmZXJyZWRSZWFkeVN0YXRlQ2hhbmdlRXZlbnQg
PSBldmVudDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2RlZmVy
cmVkUmVhZHlTdGF0ZUNoYW5nZUV2ZW50ID0gMDsKKyAgICB9CisKICAgICBpZiAocHJvZ3Jlc3NF
dmVudEFjdGlvbiA9PSBGbHVzaFByb2dyZXNzRXZlbnQpCiAgICAgICAgIGZsdXNoUHJvZ3Jlc3NF
dmVudCgpOwogCkBAIC03OSwxMSArOTQsMTEgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoUGFzc1JlZlAKIAog
dm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKLSAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsKLSAg
ICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHBlbmRpbmcgZXZlbnRzIGZyb20gYSBwcmV2aW91
cyByZXN1bWUuCi0gICAgQVNTRVJUKCFtX3BhdXNlZEV2ZW50KTsKLQotICAgIG1fdGFyZ2V0LT5k
aXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIGlmIChtX2RlZmVy
RXZlbnRzKQorICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgZWxz
ZQorICAgICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIHZvaWQgWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5k
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQpAQCAtOTYsNiArMTExLDEzIEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFBh
c3NSZWZQdHI8RXZlCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6
OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiB7CisgICAgaWYgKG1fZGVmZXJFdmVudHMgJiYgbV9kZWZl
cnJlZFByb2dyZXNzRXZlbnQpIHsKKyAgICAgICAgLy8gTW92ZSB0aGUgcHJvZ3Jlc3MgZXZlbnQg
dG8gdGhlIHF1ZXVlLCB0byBnZXQgaXQgaW4gdGhlIHJpZ2h0IG9yZGVyIG9uIHJlc3VtZS4KKyAg
ICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQobV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOwor
ICAgICAgICBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IDA7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBpZiAoIWhhc0V2ZW50VG9EaXNwYXRjaCgpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTEwOSwyMSArMTMxLDM5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhy
b3R0bGU6OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9
CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUGF1
c2VkRXZlbnQoKQordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlz
cGF0Y2hEZWZlcnJlZEV2ZW50cygpCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7Ci0gICAg
aWYgKCFtX3BhdXNlZEV2ZW50KQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFtX2RlZmVy
RXZlbnRzKTsKKyAgICBBU1NFUlQobV9kaXNwYXRjaERlZmVycmVkRXZlbnRzKTsKKworICAgIFZl
Y3RvcjxSZWZQdHI8RXZlbnQ+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kZWZlcnJlZEV2ZW50
cy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fZGVmZXJyZWRFdmVudHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqaXQpOwogCi0gICAgZGlzcGF0Y2hFdmVudCht
X3BhdXNlZEV2ZW50KTsKLSAgICBtX3BhdXNlZEV2ZW50ID0gMDsKKyAgICBtX2RlZmVycmVkRXZl
bnRzLmNsZWFyKCk7CisKKyAgICBpZiAobV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpIHsKKyAgICAg
ICAgZGlzcGF0Y2hFdmVudChtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCk7CisgICAgICAgIG1fZGVm
ZXJyZWRQcm9ncmVzc0V2ZW50ID0gMDsKKyAgICB9CisgICAgaWYgKG1fZGVmZXJyZWRSZWFkeVN0
YXRlQ2hhbmdlRXZlbnQpIHsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChtX2RlZmVycmVkUmVhZHlT
dGF0ZUNoYW5nZUV2ZW50KTsKKyAgICAgICAgbV9kZWZlcnJlZFJlYWR5U3RhdGVDaGFuZ2VFdmVu
dCA9IDA7CisgICAgfQorICAgIG1fZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cyA9IGZhbHNlOwogfQog
CiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCgpCiB7Cisg
ICAgaWYgKG1fZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cykgeworICAgICAgICBtX2RlZmVyRXZlbnRz
ID0gZmFsc2U7CisgICAgICAgIGRpc3BhdGNoRGVmZXJyZWRFdmVudHMoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKCFzdXNwZW5k
ZWQoKSk7Ci0gICAgQVNTRVJUKCFtX3BhdXNlZEV2ZW50KTsKKyAgICBBU1NFUlQoIW1fZGVmZXJy
ZWRQcm9ncmVzc0V2ZW50ICYmICFtX2RlZmVycmVkUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KTsKICAg
ICBpZiAoIWhhc0V2ZW50VG9EaXNwYXRjaCgpKSB7CiAgICAgICAgIC8vIE5vIHByb2dyZXNzIGV2
ZW50IHdhcyBxdWV1ZWQgc2luY2UgdGhlIHByZXZpb3VzIGRpc3BhdGNoLCB3ZSBjYW4gc2FmZWx5
IHN0b3AgdGhlIHRpbWVyLgogICAgICAgICBzdG9wKCk7CkBAIC0xNDIsMTMgKzE4MiwyMiBAQCBi
b29sIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpoYXNFdmVudFRvRGlzcGF0
Y2goKSBjb25zdAogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpz
dXNwZW5kKCkKIHsKLSAgICBBU1NFUlQoIW1fcGF1c2VkRXZlbnQpOworICAgIC8vIElmIHJlLXN1
c3BlbmRlZCBiZWZvcmUgZGVmZXJyZWQgZXZlbnRzIGhhdmUgYmVlbiBkaXNwYXRjaGVkLCBqdXN0
IHN0b3AgdGhlIGRpc3BhdGNoCisgICAgLy8gYW5kIGNvbnRpbnVlIHRoZSBsYXN0IHN1c3BlbmQu
CisgICAgaWYgKG1fZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cykgeworICAgICAgICBtX2Rpc3BhdGNo
RGVmZXJyZWRFdmVudHMgPSBmYWxzZTsKKyAgICAgICAgc3RvcCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEFTU0VSVCghbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOworICAgIEFTU0VS
VCghbV9kZWZlcnJlZFJlYWR5U3RhdGVDaGFuZ2VFdmVudCk7CisgICAgQVNTRVJUKG1fZGVmZXJy
ZWRFdmVudHMuaXNFbXB0eSgpKTsKIAotICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKKyAgICBtX2Rl
ZmVyRXZlbnRzID0gdHJ1ZTsKICAgICAvLyBJZiB3ZSBoYXZlIGEgcHJvZ3Jlc3MgZXZlbnQgd2Fp
dGluZyB0byBiZSBkaXNwYXRjaGVkLAotICAgIC8vIGp1c3QgcXVldWUgaXQuCisgICAgLy8ganVz
dCBkZWZlciBpdC4KICAgICBpZiAoaGFzRXZlbnRUb0Rpc3BhdGNoKCkpIHsKLSAgICAgICAgbV9w
YXVzZWRFdmVudCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5wcm9ncmVzc0V2ZW50LCBtX2xlbmd0aENvbXB1dGFibGUsIG1fbG9hZGVkLCBtX3RvdGFs
KTsKKyAgICAgICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgbV9sZW5ndGhDb21w
dXRhYmxlLCBtX2xvYWRlZCwgbV90b3RhbCk7CiAgICAgICAgIG1fdG90YWwgPSAwOwogICAgICAg
ICBtX2xvYWRlZCA9IDA7CiAgICAgfQpAQCAtMTYwLDggKzIwOSwxMyBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpyZXN1bWUoKQogICAgIEFTU0VSVCghbV9sb2Fk
ZWQpOwogICAgIEFTU0VSVCghbV90b3RhbCk7CiAKLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwot
ICAgIGRpc3BhdGNoUGF1c2VkRXZlbnQoKTsKKyAgICAvLyBEbyBub3QgZGlzcGF0Y2ggZXZlbnRz
IGlubGluZSBoZXJlLCBzaW5jZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGlzIGl0ZXJhdGluZyBv
dmVyCisgICAgLy8gdGhlIGxpc3Qgb2YgYWN0aXZlIERPTSBvYmplY3RzIHRvIHJlc3VtZSB0aGVt
LCBhbmQgYW55IGFjdGl2YXRlZCBKUyBldmVudC1oYW5kbGVyCisgICAgLy8gY291bGQgaW5zZXJ0
IG5ldyBhY3RpdmUgRE9NIG9iamVjdHMgdG8gdGhlIGxpc3QuCisgICAgbV9kaXNwYXRjaERlZmVy
cmVkRXZlbnRzID0gdHJ1ZTsKKyAgICAvLyBtX2RlZmVyRXZlbnRzIGlzIGtlcHQgdHJ1ZSBoZXJl
IHRvIG1ha2Ugc3VyZSB3ZSBjb250aW51ZSB0byBkZWZlciBldmVudHMgdW50aWwgYWxsCisgICAg
Ly8gZGVmZXJyZWQgZXZlbnRzIGhhdmUgYmVlbiBkaXNwYXRjaGVkLgorICAgIHN0YXJ0T25lU2hv
dCgwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaAppbmRleCA0
MWYzNzQ3MzEzY2I3ZmRkOTY3YzI4OTBhYjViZGI3MDZlZTE1MmQ1Li44MDMzNDZkMTZjYzVjNzI0
MTBkZWZiNDRiMzZjYjAxM2YwMzM2MGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaApAQCAtNTYsMTMgKzU2
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHN1c3BlbmQoKTsKICAgICB2b2lkIHJlc3VtZSgpOwog
Ci0gICAgYm9vbCBzdXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQorICAg
IGJvb2wgc3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlckV2ZW50cyAmJiAhbV9kaXNw
YXRjaERlZmVycmVkRXZlbnRzOyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBtaW5pbXVtUHJvZ3Jlc3NFdmVudERpc3BhdGNoaW5nSW50ZXJ2YWxJblNlY29uZHM7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZmlyZWQoKTsKLSAgICB2b2lkIGRpc3BhdGNoUGF1c2VkRXZlbnQoKTsK
KyAgICB2b2lkIGRpc3BhdGNoRGVmZXJyZWRFdmVudHMoKTsKICAgICB2b2lkIGZsdXNoUHJvZ3Jl
c3NFdmVudCgpOwogCiAgICAgYm9vbCBoYXNFdmVudFRvRGlzcGF0Y2goKSBjb25zdDsKQEAgLTc0
LDggKzc0LDExIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fbG9hZGVkOwog
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3RvdGFsOwogCi0gICAgYm9vbCBtX3N1c3BlbmRlZDsK
LSAgICBSZWZQdHI8RXZlbnQ+IG1fcGF1c2VkRXZlbnQ7CisgICAgYm9vbCBtX2RlZmVyRXZlbnRz
OworICAgIGJvb2wgbV9kaXNwYXRjaERlZmVycmVkRXZlbnRzOworICAgIFJlZlB0cjxFdmVudD4g
bV9kZWZlcnJlZFByb2dyZXNzRXZlbnQ7CisgICAgUmVmUHRyPEV2ZW50PiBtX2RlZmVycmVkUmVh
ZHlTdGF0ZUNoYW5nZUV2ZW50OworICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gbV9kZWZlcnJl
ZEV2ZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MWRmNGVkOWU4
ZjZkZTJkMzdjM2YwZGFkOTI5MTljMWRkMzQ2OWMxLi4xN2MxYWYzZWY1YzlkMmNkNTliZDZhNmEx
Mzc3NDM1YjJiOTJkNzE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDMtMjMgIEFsbGFu
IFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAgQXNz
ZXJ0cyBpbiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MDYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyB0aGF0IHhtbGh0dHByZXF1
ZXN0Lm9wZW4gZG9lcyBub3QgYXNzZXJ0IGluIHdoZW4gY2FsbGVkIGZyb20gb25wYWdlaGlkZS4K
KworICAgICAgICAqIGZhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL3N1YmZyYW1lLXhtbGh0dHByZXF1
ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dDoKKwogMjAxMi0wMy0yNiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IFtjaHJvbWl1bV0gcmViYXNlbGluaW5n
IGNvbXBvc2l0aW5nL3BsdWdpbnMvY29tcG9zaXRlZC1wbHVnaW4uCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzM0MzkyZmQxNWUwN2Q2MWVkZWI5MTQyNDRiOGEwN2MzYjM3MWUzYgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNjogWE1MSHR0
cFJlcXVlc3QgaW4gc3ViZnJhbWUtMSBjcmVhdGVkCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNTog
TG9hZGVkIHBhZ2VoaWRlLXRpbWVvdXQtZ28tYmFjay5odG1sLCBnb2luZyBiYWNrCitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgMTc6IFJlc3RvcmVkIHBhZ2UgZnJvbSBwYWdlIGNhY2hlLgorVHJpZXMg
dG8gdHJpZ2dlciBhbiBhc3NlcnQgaW4geG1saHR0cHJlcXVlc3QgZHVyaW5nIHBhZ2VoaWRlLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
cGFnZWhpZGUteGhyLW9wZW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTJlMzNjOWZhMzdkZjI0ZmE0OGFm
NTAxM2UwMDRlMmE3Y2JmNWRkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbApAQCAtMCwwICsxLDM0IEBACis8aHRtbD4KKzxz
Y3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPGJv
ZHk+CisKKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRt
bCIgaWQ9ImEtZnJhbWUiPjwvaWZyYW1lPiA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3N1c3BlbmQt
c3ViZnJhbWUtMi5odG1sIiBpZD0iYi1mcmFtZSI+PC9pZnJhbWU+CisKKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCdUcmllcyB0byB0cmlnZ2VyIGFuIGFzc2Vy
dCBpbiB4bWxodHRwcmVxdWVzdCBkdXJpbmcgcGFnZWhpZGUuJyk7CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVm
ZXJlbmNlKCdXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleScsIDEpOworCisKK29ucGFn
ZXNob3cgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICBpZiAoZXZlbnQucGVyc2lzdGVkKSB7Cisg
ICAgICAgIGNvbnNvbGUubG9nKCdSZXN0b3JlZCBwYWdlIGZyb20gcGFnZSBjYWNoZS4nKTsKKyAg
ICAgICAgaWYgKCF3aW5kb3cud2FzRmluaXNoSlNUZXN0Q2FsbGVkKQorICAgICAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgfQorfQorCitvbmxvYWQgPSBmdW5jdGlvbigpCit7CisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgbG9jYXRpb24uaHJlZiA9ICdyZXNvdXJjZXMv
cGFnZWhpZGUtdGltZW91dC1nby1iYWNrLmh0bWwnOworICAgIH0sIDApOworfQordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7Cit2YXIganNUZXN0SXNBc3luYyA9IHRydWU7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3Jlc291cmNlcy9zdWJmcmFtZS14bWxodHRwcmVxdWVzdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvcmVzb3VyY2VzL3N1YmZyYW1lLXhtbGh0dHByZXF1ZXN0Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmI1MGYzMjQ1ZmYzMDdiOGZkNTIzMzczOWVhNzc2MTM1OTI3NjNkYgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9zdWJmcmFtZS14bWxodHRw
cmVxdWVzdC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeworICAgICAgICAg
ICAgd2luZG93LnRvcC5jb25zb2xlLmxvZygnWE1MSHR0cFJlcXVlc3QgaW4gc3ViZnJhbWUtMSBj
cmVhdGVkJyk7CisgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cisg
ICAgICAgICAgICB4aHIub3BlbignR0VUJywgJ2Fib3V0OmVtcHR5JywgdHJ1ZSk7CisgICAgICAg
IH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorSSBhbSBzdWJmcmFtZS0xCis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggNjcxMjJhZDZmMzM1MjI2OTdmMDM5ODFlZWIyNGE3NWRh
OGY2NWIyOS4uY2JmZDMwZDY2MjkxNjFjMTQzY2Y1ZmExOGJiMGYzMzQyNGRmZDE2NyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dApAQCAtNDk3LDYgKzQ5Nyw3IEBAIEJVR0NSMTA4Nzk4IExJTlVYIFdJTiA6IGZhc3QvZmlsZXN5
c3RlbS93b3JrZXJzL2ZpbGUtd3JpdGVyLWV2ZW50cy5odG1sID0gQ1JBU0gKIC8vIG9uIHdoaWNo
IHJlbmRlcmVyIHByb2Nlc3MgdG8gdXNlIGZvciBlYWNoIG9mIHRoZW0uCiBXT05URklYIFNLSVAg
OiBmYXN0L2RvbS9XaW5kb3cvdGltZXItcmVzdW1lLW9uLW5hdmlnYXRpb24tYmFjay5odG1sID0g
VElNRU9VVCBGQUlMCiBXT05URklYIFNLSVAgOiBmYXN0L2V2ZW50cy9wYWdlaGlkZS10aW1lb3V0
Lmh0bWwgPSBUSU1FT1VUCitXT05URklYIFNLSVAgOiBmYXN0L2V2ZW50cy9wYWdlaGlkZS14aHIt
b3Blbi5odG1sID0gVElNRU9VVAogV09OVEZJWCBTS0lQIDogZmFzdC9ldmVudHMvcGFnZXNob3ct
cGFnZWhpZGUtb24tYmFjay1jYWNoZWQtd2l0aC1mcmFtZXMuaHRtbCA9IFRJTUVPVVQKIFdPTlRG
SVggU0tJUCA6IGZhc3QvZXZlbnRzL3BhZ2VzaG93LXBhZ2VoaWRlLW9uLWJhY2stY2FjaGVkLmh0
bWwgPSBUSU1FT1VUIEZBSUwKIFdPTlRGSVggU0tJUCA6IGZhc3QvZXZlbnRzL3N1c3BlbmQtdGlt
ZXJzLmh0bWwgPSBUSU1FT1VUCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135083</attachid>
            <date>2012-04-02 06:15:22 -0700</date>
            <delta_ts>2012-04-04 03:12:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81506-20120402151539.patch</filename>
            <type>text/plain</type>
            <size>13508</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyODU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjcyZDc2Y2JkZWM3ZWE4
NjhiMTAwMWEyNmZkYjZlZGI0ZWQwNDEyYS4uOGUyMWQ0ZGJhYmIxYzRmMmM1OGNmOWZhOTMyZGUw
OTIzMmEzMTUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTAyICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEFz
c2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmZXJzIGV2ZW50cyBhdHRlbXB0
ZWQgZGlzcGF0Y2hlZCB3aGlsZSB0aGUgb2JqZWN0IGlzIHN1c3BlbmQuIENvYWxlc2NpbmcgcHJv
Z3Jlc3MgYW5kCisgICAgICAgIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnRzLiBEZWZlcnJlZCBldmVu
dHMgYXJlIGRpc3BhdGNoZWQgc29vbiBhZnRlciB0aGUgb2JqZWN0IGhhcyBiZWVuCisgICAgICAg
IHJlc3VtZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBnZW5lcmF0ZWQuIFRoZSBldmVudHMgYXJl
IG5vdCBkaXNwYXRjaGVkIGltbWVkaWF0ZWx5IHRob3VnaAorICAgICAgICB0byBhdm9pZCBoaXR0
aW5nIGEgcmVjdXJzaW9uIGFzc2VydCBpbiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwKKworICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6WE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJv
dHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaERlZmVycmVkRXZlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6
c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZTo6cmVzdW1lKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGUuaDoKKyAgICAgICAgKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlKToKKwogMjAxMi0wNC0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1ha2UgZGlzdGNoZWNrIGlzc3Vlcy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGUuY3BwCmluZGV4IDdiYjI3ZmY4NDAzOGIzZmUyZDc5N2QzMmU0YTA3YjJm
ZWU0M2U2ZTIuLmZmNjBiNGFiZGRkODQ0ZTdiZjIzMGUyOTc0ZjViMWM5ODg1YjI3NzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJv
dHRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgotICogQWxsIHJpZ2h0
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEp1bGllbiBDaGFmZnJhaXggPGpjaGFm
ZnJhaXhAd2Via2l0Lm9yZz4gIEFsbCByaWdodCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsOCBAQCBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0
bGUoRXZlbnRUYQogICAgIDogbV90YXJnZXQodGFyZ2V0KQogICAgICwgbV9sb2FkZWQoMCkKICAg
ICAsIG1fdG90YWwoMCkKLSAgICAsIG1fc3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9kZWZlckV2
ZW50cyhmYWxzZSkKKyAgICAsIG1fZGlzcGF0Y2hEZWZlcnJlZEV2ZW50c1RpbWVyKHRoaXMsICZY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hEZWZlcnJlZEV2ZW50
cykKIHsKICAgICBBU1NFUlQodGFyZ2V0KTsKIH0KQEAgLTQ5LDcgKzUwLDEyIEBAIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjp+WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGUoKQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpk
aXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb25n
IGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWwpCiB7Ci0gICAgQVNTRVJUKCFz
dXNwZW5kZWQoKSk7CisgICAgaWYgKG1fZGVmZXJFdmVudHMpIHsKKyAgICAgICAgLy8gT25seSBz
dG9yZSB0aGUgbGF0ZXN0IHByb2dyZXNzIGV2ZW50IHdoaWxlIHN1c3BlbmRlZC4KKyAgICAgICAg
bV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgbGVuZ3RoQ29tcHV0YWJsZSwgbG9hZGVk
LCB0b3RhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIWlzQWN0aXZlKCkp
IHsKICAgICAgICAgLy8gVGhlIHRpbWVyIGlzIG5vdCBhY3RpdmUgc28gdGhlIGxlYXN0IGZyZXF1
ZW50IGV2ZW50IGZvciBub3cgaXMgZXZlcnkgYnl0ZS4KICAgICAgICAgLy8gSnVzdCBnbyBhaGVh
ZCBhbmQgZGlzcGF0Y2ggdGhlIGV2ZW50LgpAQCAtNzksMTEgKzg1LDE1IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2
ZW50KFBhc3NSZWZQCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7Ci0gICAgQVNTRVJUKCFz
dXNwZW5kZWQoKSk7Ci0gICAgLy8gV2Ugc2hvdWxkIG5vdCBoYXZlIGFueSBwZW5kaW5nIGV2ZW50
cyBmcm9tIGEgcHJldmlvdXMgcmVzdW1lLgotICAgIEFTU0VSVCghbV9wYXVzZWRFdmVudCk7Ci0K
LSAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgQVNTRVJUKGV2ZW50KTsK
KyAgICBpZiAobV9kZWZlckV2ZW50cykgeworICAgICAgICBpZiAobV9kZWZlcnJlZEV2ZW50cy5z
aXplKCkgPiAxCisgICAgICAgICAgICAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5y
ZWFkeXN0YXRlY2hhbmdlRXZlbnQKKyAgICAgICAgICAgICYmIG1fZGVmZXJyZWRFdmVudHMubGFz
dCgpLT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCkKKyAgICAg
ICAgICAgIHJldHVybjsgLy8gUmVhZHlzdGF0ZWNoYW5nZSBldmVudHMgYXJlIHN0YXRlLWxlc3Mg
c28gZG9uJ3QgcmVwZWF0IHR3byBpZGVudGljYWwgZXZlbnRzIGluIGEgcm93IG9uIHJlc3VtZS4K
KyAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIH0gZWxzZQorICAg
ICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQpAQCAtOTYsNiArMTA2LDEzIEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFBhc3NSZWZQ
dHI8RXZlCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZsdXNo
UHJvZ3Jlc3NFdmVudCgpCiB7CisgICAgaWYgKG1fZGVmZXJFdmVudHMgJiYgbV9kZWZlcnJlZFBy
b2dyZXNzRXZlbnQpIHsKKyAgICAgICAgLy8gTW92ZSB0aGUgcHJvZ3Jlc3MgZXZlbnQgdG8gdGhl
IHF1ZXVlLCB0byBnZXQgaXQgaW4gdGhlIHJpZ2h0IG9yZGVyIG9uIHJlc3VtZS4KKyAgICAgICAg
bV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQobV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOworICAgICAg
ICBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBpZiAoIWhhc0V2ZW50VG9EaXNwYXRjaCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEw
OSwyMSArMTI2LDI5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6
OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKLXZv
aWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUGF1c2VkRXZl
bnQoKQordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hE
ZWZlcnJlZEV2ZW50cyhUaW1lcjxYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZT4q
KQogewotICAgIEFTU0VSVCghc3VzcGVuZGVkKCkpOwotICAgIGlmICghbV9wYXVzZWRFdmVudCkK
LSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2RlZmVyRXZlbnRzKTsKKyAgICBtX2RlZmVy
RXZlbnRzID0gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGVmZXJyZWRFdmVudHMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPEV2ZW50PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2RlZmVycmVkRXZlbnRzLmVuZCgp
OworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGRpc3BhdGNoRXZlbnQoKml0
KTsKKworICAgIG1fZGVmZXJyZWRFdmVudHMuY2xlYXIoKTsKIAotICAgIGRpc3BhdGNoRXZlbnQo
bV9wYXVzZWRFdmVudCk7Ci0gICAgbV9wYXVzZWRFdmVudCA9IDA7CisgICAgLy8gVGhlIHByb2dy
ZXNzIGV2ZW50IHdpbGwgYmUgaW4gdGhlIG1fZGVmZXJyZWRFdmVudHMgdmVjdG9yIGlmIHRoZSBs
b2FkIHdhcyBmaW5pc2hlZCB3aGlsZSBzdXNwZW5kZWQuCisgICAgLy8gSWYgbm90LCBqdXN0IHNl
bmQgdGhlIG1vc3QgdXAtdG8tZGF0ZSBwcm9ncmVzcyBvbiByZXN1bWUuCisgICAgaWYgKG1fZGVm
ZXJyZWRQcm9ncmVzc0V2ZW50KSB7CisgICAgICAgIGRpc3BhdGNoRXZlbnQobV9kZWZlcnJlZFBy
b2dyZXNzRXZlbnQpOworICAgICAgICBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IDA7CisgICAg
fQogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCgp
CiB7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghc3VzcGVuZGVkKCkpOwot
ICAgIEFTU0VSVCghbV9wYXVzZWRFdmVudCk7CiAgICAgaWYgKCFoYXNFdmVudFRvRGlzcGF0Y2go
KSkgewogICAgICAgICAvLyBObyBwcm9ncmVzcyBldmVudCB3YXMgcXVldWVkIHNpbmNlIHRoZSBw
cmV2aW91cyBkaXNwYXRjaCwgd2UgY2FuIHNhZmVseSBzdG9wIHRoZSB0aW1lci4KICAgICAgICAg
c3RvcCgpOwpAQCAtMTQyLDEzICsxNjcsMjAgQEAgYm9vbCBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6aGFzRXZlbnRUb0Rpc3BhdGNoKCkgY29uc3QKIAogdm9pZCBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6c3VzcGVuZCgpCiB7Ci0gICAgQVNTRVJUKCFt
X3BhdXNlZEV2ZW50KTsKKyAgICAvLyBJZiByZS1zdXNwZW5kZWQgYmVmb3JlIGRlZmVycmVkIGV2
ZW50cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZCwganVzdCBzdG9wIHRoZSBkaXNwYXRjaAorICAgIC8v
IGFuZCBjb250aW51ZSB0aGUgbGFzdCBzdXNwZW5kLgorICAgIGlmIChtX2Rpc3BhdGNoRGVmZXJy
ZWRFdmVudHNUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIG1fZGlzcGF0Y2hEZWZlcnJlZEV2
ZW50c1RpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoIW1f
ZGVmZXJyZWRQcm9ncmVzc0V2ZW50KTsKKyAgICBBU1NFUlQobV9kZWZlcnJlZEV2ZW50cy5pc0Vt
cHR5KCkpOwogCi0gICAgbV9zdXNwZW5kZWQgPSB0cnVlOworICAgIG1fZGVmZXJFdmVudHMgPSB0
cnVlOwogICAgIC8vIElmIHdlIGhhdmUgYSBwcm9ncmVzcyBldmVudCB3YWl0aW5nIHRvIGJlIGRp
c3BhdGNoZWQsCi0gICAgLy8ganVzdCBxdWV1ZSBpdC4KKyAgICAvLyBqdXN0IGRlZmVyIGl0Lgog
ICAgIGlmIChoYXNFdmVudFRvRGlzcGF0Y2goKSkgewotICAgICAgICBtX3BhdXNlZEV2ZW50ID0g
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dyZXNz
RXZlbnQsIG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwpOworICAgICAgICBt
X2RlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBtX2xlbmd0aENvbXB1dGFibGUsIG1fbG9h
ZGVkLCBtX3RvdGFsKTsKICAgICAgICAgbV90b3RhbCA9IDA7CiAgICAgICAgIG1fbG9hZGVkID0g
MDsKICAgICB9CkBAIC0xNjAsOCArMTkyLDExIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGU6OnJlc3VtZSgpCiAgICAgQVNTRVJUKCFtX2xvYWRlZCk7CiAgICAgQVNT
RVJUKCFtX3RvdGFsKTsKIAotICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Ci0gICAgZGlzcGF0Y2hQ
YXVzZWRFdmVudCgpOworICAgIC8vIERvIG5vdCBkaXNwYXRjaCBldmVudHMgaW5saW5lIGhlcmUs
IHNpbmNlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgaXRlcmF0aW5nIG92ZXIKKyAgICAvLyB0
aGUgbGlzdCBvZiBhY3RpdmUgRE9NIG9iamVjdHMgdG8gcmVzdW1lIHRoZW0sIGFuZCBhbnkgYWN0
aXZhdGVkIEpTIGV2ZW50LWhhbmRsZXIKKyAgICAvLyBjb3VsZCBpbnNlcnQgbmV3IGFjdGl2ZSBE
T00gb2JqZWN0cyB0byB0aGUgbGlzdC4KKyAgICAvLyBtX2RlZmVyRXZlbnRzIGlzIGtlcHQgdHJ1
ZSB1bnRpbCBhbGwgZGVmZXJyZWQgZXZlbnRzIGhhdmUgYmVlbiBkaXNwYXRjaGVkLgorICAgIG1f
ZGlzcGF0Y2hEZWZlcnJlZEV2ZW50c1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaAppbmRleCA0MWYzNzQ3MzEzY2I3ZmRkOTY3
YzI4OTBhYjViZGI3MDZlZTE1MmQ1Li41MzhmZDBiZDllNDIzYzk2OTRmYWI5YzQ4NjM3MzkyYTVj
NWM0Y2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaApAQCAtNTYsMTMgKzU2LDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHN1c3BlbmQoKTsKICAgICB2b2lkIHJlc3VtZSgpOwogCi0gICAgYm9vbCBzdXNwZW5k
ZWQoKSBjb25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQotCiBwcml2YXRlOgogICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgbWluaW11bVByb2dyZXNzRXZlbnREaXNwYXRjaGluZ0ludGVydmFsSW5T
ZWNvbmRzOwogCiAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7Ci0gICAgdm9pZCBkaXNwYXRjaFBh
dXNlZEV2ZW50KCk7CisgICAgdm9pZCBkaXNwYXRjaERlZmVycmVkRXZlbnRzKFRpbWVyPFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlPiopOwogICAgIHZvaWQgZmx1c2hQcm9ncmVz
c0V2ZW50KCk7CiAKICAgICBib29sIGhhc0V2ZW50VG9EaXNwYXRjaCgpIGNvbnN0OwpAQCAtNzQs
OCArNzIsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9sb2FkZWQ7CiAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIG1fdG90YWw7CiAKLSAgICBib29sIG1fc3VzcGVuZGVkOwot
ICAgIFJlZlB0cjxFdmVudD4gbV9wYXVzZWRFdmVudDsKKyAgICBib29sIG1fZGVmZXJFdmVudHM7
CisgICAgUmVmUHRyPEV2ZW50PiBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudDsKKyAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50PiA+IG1fZGVmZXJyZWRFdmVudHM7CisgICAgVGltZXI8WE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU+IG1fZGlzcGF0Y2hEZWZlcnJlZEV2ZW50c1RpbWVyOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFiYjNkNjkwOGQwYTBhZjEyYTk4
OWE2N2JjMzZiNDc5NDhhNzFhMzUuLmYyMzc3Y2FlN2Q0ZGUzZmEyZmIwMWYwNDU2MmI0YWU4NTdi
Mjk1OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNC0wMiAgQWxsYW4gU2FuZGZlbGQg
SmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBBc3NlcnRzIGluIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTUwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIHRoYXQgeG1saHR0cHJlcXVlc3Qub3BlbiBk
b2VzIG5vdCBhc3NlcnQgaW4gd2hlbiBjYWxsZWQgZnJvbSBvbnBhZ2VoaWRlLgorCisgICAgICAg
ICogZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0
OgorCiAyMDEyLTA0LTAyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCBza2lwcGluZyBvbmUgbW9yZSBjcmFzaGluZyBzdmcgdGVz
dCBpbiBHVEsgYmVjYXVzZSBvZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
cGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
cGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNDM5MmZkMTVlMDdk
NjFlZGViOTE0MjQ0YjhhMDdjM2IzNzFlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
MiBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDY6IFhNTEh0dHBSZXF1ZXN0IGluIHN1YmZyYW1l
LTEgY3JlYXRlZAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDU6IExvYWRlZCBwYWdlaGlkZS10aW1l
b3V0LWdvLWJhY2suaHRtbCwgZ29pbmcgYmFjaworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE3OiBS
ZXN0b3JlZCBwYWdlIGZyb20gcGFnZSBjYWNoZS4KK1RyaWVzIHRvIHRyaWdnZXIgYW4gYXNzZXJ0
IGluIHhtbGh0dHByZXF1ZXN0IGR1cmluZyBwYWdlaGlkZS4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhy
LW9wZW4uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjUyZTMzYzlmYTM3ZGYyNGZhNDhhZjUwMTNlMDA0ZTJhN2NiZjVkZAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1v
cGVuLmh0bWwKQEAgLTAsMCArMSwzNCBAQAorPGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxib2R5PgorCis8aWZyYW1lIHNyYz0i
cmVzb3VyY2VzL3N1YmZyYW1lLXhtbGh0dHByZXF1ZXN0Lmh0bWwiIGlkPSJhLWZyYW1lIj48L2lm
cmFtZT4gPGlmcmFtZSBzcmM9InJlc291cmNlcy9zdXNwZW5kLXN1YmZyYW1lLTIuaHRtbCIgaWQ9
ImItZnJhbWUiPjwvaWZyYW1lPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Citk
ZXNjcmlwdGlvbignVHJpZXMgdG8gdHJpZ2dlciBhbiBhc3NlcnQgaW4geG1saHR0cHJlcXVlc3Qg
ZHVyaW5nIHBhZ2VoaWRlLicpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgnV2ViS2l0VXNlc1Bh
Z2VDYWNoZVByZWZlcmVuY2VLZXknLCAxKTsKKworCitvbnBhZ2VzaG93ID0gZnVuY3Rpb24oZXZl
bnQpCit7CisgICAgaWYgKGV2ZW50LnBlcnNpc3RlZCkgeworICAgICAgICBjb25zb2xlLmxvZygn
UmVzdG9yZWQgcGFnZSBmcm9tIHBhZ2UgY2FjaGUuJyk7CisgICAgICAgIGlmICghd2luZG93Lndh
c0ZpbmlzaEpTVGVzdENhbGxlZCkKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0K
K30KKworb25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAncmVzb3VyY2VzL3BhZ2VoaWRlLXRpbWVvdXQtZ28t
YmFjay5odG1sJzsKKyAgICB9LCAwKTsKK30KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OwordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUt
eG1saHR0cHJlcXVlc3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9z
dWJmcmFtZS14bWxodHRwcmVxdWVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiNTBmMzI0NWZmMzA3Yjhm
ZDUyMzM3MzllYTc3NjEzNTkyNzYzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbApAQCAtMCww
ICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4K
KyAgICAgICAgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgICAgIHdpbmRvdy50b3AuY29uc29s
ZS5sb2coJ1hNTEh0dHBSZXF1ZXN0IGluIHN1YmZyYW1lLTEgY3JlYXRlZCcpOworICAgICAgICAg
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9wZW4o
J0dFVCcsICdhYm91dDplbXB0eScsIHRydWUpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KK0kgYW0gc3ViZnJhbWUtMQorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0Cmlu
ZGV4IDU3ZmNlNTlmNmExZTc0ZThlODQyNDhiNzliMmE1MGQ3OWU2NzVjOGYuLmU0OTY5OTdjNmU3
YTRmMTJlZTNhZGY4NzI0ZDg1OWIwMTI4NjQ5ZGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTUwMCw2ICs1MDAsNyBA
QCBCVUdDUjEwODc5OCBMSU5VWCBXSU4gOiBmYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdy
aXRlci1ldmVudHMuaHRtbCA9IENSQVNICiAvLyBvbiB3aGljaCByZW5kZXJlciBwcm9jZXNzIHRv
IHVzZSBmb3IgZWFjaCBvZiB0aGVtLgogV09OVEZJWCBTS0lQIDogZmFzdC9kb20vV2luZG93L3Rp
bWVyLXJlc3VtZS1vbi1uYXZpZ2F0aW9uLWJhY2suaHRtbCA9IFRJTUVPVVQgRkFJTAogV09OVEZJ
WCBTS0lQIDogZmFzdC9ldmVudHMvcGFnZWhpZGUtdGltZW91dC5odG1sID0gVElNRU9VVAorV09O
VEZJWCBTS0lQIDogZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbCA9IFRJTUVPVVQK
IFdPTlRGSVggU0tJUCA6IGZhc3QvZXZlbnRzL3BhZ2VzaG93LXBhZ2VoaWRlLW9uLWJhY2stY2Fj
aGVkLXdpdGgtZnJhbWVzLmh0bWwgPSBUSU1FT1VUCiBXT05URklYIFNLSVAgOiBmYXN0L2V2ZW50
cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNrLWNhY2hlZC5odG1sID0gVElNRU9VVCBGQUlMCiBX
T05URklYIFNLSVAgOiBmYXN0L2V2ZW50cy9zdXNwZW5kLXRpbWVycy5odG1sID0gVElNRU9VVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135545</attachid>
            <date>2012-04-04 03:12:44 -0700</date>
            <delta_ts>2012-04-17 06:20:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81506-20120404121306.patch</filename>
            <type>text/plain</type>
            <size>13997</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmZmYWI1MGQ5YTk5OTU1
YWYwM2M3YmY3NGY2ZjBkNTZhY2UwOTVlZC4uZDc5MGMxODg2MTIyYmJmNzI5ZDQ3OTVjM2VlZTU1
NDhlMTFkMjQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA0LTAyICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEFz
c2VydHMgaW4gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBYbWxIdHRwUmVxdWVzdDo6
b3BlbiBpcyBjYWxsZWQgb3IgZGF0YSBpcyByZWNlaXZlZCB3aGlsZSB0aGUgWG1sSHR0cFJlcXVl
c3Qgb2JqZWN0CisgICAgICAgIGlzIHN1c3BlbmRlZCB0aGUgb2JqZWN0IG1heSBhdHRlbXB0IHRv
IGRpc3BhdGNoIGV2ZW50cy4gVGhpcyBwYXRjaCBkZWZlcnMgdGhlIGV2ZW50cworICAgICAgICB1
bnRpbCB0aGUgb2JqZWN0IGlzIHJlc3VtZWQuCisKKyAgICAgICAgUHJvZ3Jlc3MgZXZlbnRzIGFy
ZSBjb2FsZXNjZWQgc2ltaWxhciB0byBub3JtYWwgdGhyb3R0bGluZywgYW5kIHJlYWR5c3RhdGUt
Y2hhbmdlIGV2ZW50cworICAgICAgICBhcmUgY29hbGVzY2VkIHRvIGF2b2lkIGlkZW50aWNhbCBl
dmVudHMgZW1pdHRlZCByaWdodCBhZnRlciBlYWNob3RoZXIuCisKKyAgICAgICAgT24gcmVzdW1l
IHRoZSBldmVudHMgYXJlIGRpc3BhdGNoZWQgYWZ0ZXIgYSB0aW1lciB0byBhdm9pZCBpbnRlcmZl
cmluZyB3aXRoIAorICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHdoaWNoIGlzIGl0ZXJh
dGluZyBvdmVyIHN1c3BlbmRlZCBvYmplY3RzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRz
L3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwKKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0
bGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0
bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlOjpkaXNwYXRjaERlZmVycmVkRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6c3VzcGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6cmVzdW1lKToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaDoKKyAgICAg
ICAgKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlKToKKwogMjAxMi0wNC0wNCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExMzE0OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCmluZGV4IDdi
YjI3ZmY4NDAzOGIzZmUyZDc5N2QzMmU0YTA3YjJmZWU0M2U2ZTIuLjBmMTg1NmJhMzI4YWJlOTBk
YWVhMTE3NDQ3ZmZlOTgyZDMyN2MyZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApAQCAtMSw2ICsx
LDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZm
cmFpeEB3ZWJraXQub3JnPgotICogQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4gIEFsbCByaWdo
dCByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzgsNyArMzgsOCBAQCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6WE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoRXZlbnRUYQogICAgIDogbV90YXJnZXQo
dGFyZ2V0KQogICAgICwgbV9sb2FkZWQoMCkKICAgICAsIG1fdG90YWwoMCkKLSAgICAsIG1fc3Vz
cGVuZGVkKGZhbHNlKQorICAgICwgbV9kZWZlckV2ZW50cyhmYWxzZSkKKyAgICAsIG1fZGlzcGF0
Y2hEZWZlcnJlZEV2ZW50c1RpbWVyKHRoaXMsICZYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZTo6ZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cykKIHsKICAgICBBU1NFUlQodGFyZ2V0KTsK
IH0KQEAgLTQ5LDcgKzUwLDEyIEBAIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
Ojp+WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoKQogCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBs
ZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25n
IGxvbmcgdG90YWwpCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7CisgICAgaWYgKG1fZGVm
ZXJFdmVudHMpIHsKKyAgICAgICAgLy8gT25seSBzdG9yZSB0aGUgbGF0ZXN0IHByb2dyZXNzIGV2
ZW50IHdoaWxlIHN1c3BlbmRlZC4KKyAgICAgICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NF
dmVudCwgbGVuZ3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0b3RhbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBpZiAoIWlzQWN0aXZlKCkpIHsKICAgICAgICAgLy8gVGhlIHRpbWVyIGlz
IG5vdCBhY3RpdmUgc28gdGhlIGxlYXN0IGZyZXF1ZW50IGV2ZW50IGZvciBub3cgaXMgZXZlcnkg
Ynl0ZS4KICAgICAgICAgLy8gSnVzdCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2ggdGhlIGV2ZW50LgpA
QCAtNzksMTEgKzg1LDE0IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0
bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFBhc3NSZWZQCiAKIHZvaWQgWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7Ci0gICAgLy8gV2Ugc2hv
dWxkIG5vdCBoYXZlIGFueSBwZW5kaW5nIGV2ZW50cyBmcm9tIGEgcHJldmlvdXMgcmVzdW1lLgot
ICAgIEFTU0VSVCghbV9wYXVzZWRFdmVudCk7Ci0KLSAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVu
dChldmVudCk7CisgICAgQVNTRVJUKGV2ZW50KTsKKyAgICBpZiAobV9kZWZlckV2ZW50cykgewor
ICAgICAgICBpZiAobV9kZWZlcnJlZEV2ZW50cy5zaXplKCkgPiAxICYmIGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCAmJiBldmVudC0+dHlwZSgpID09
IG1fZGVmZXJyZWRFdmVudHMubGFzdCgpLT50eXBlKCkpCisgICAgICAgICAgICAvLyBSZWFkeXN0
YXRlY2hhbmdlIGV2ZW50cyBhcmUgc3RhdGUtbGVzcyBzbyBhdm9pZCByZXBlYXRpbmcgdHdvIGlk
ZW50aWNhbCBldmVudHMgaW4gYSByb3cgb24gcmVzdW1lLgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQpCkBAIC05Niw2ICsxMDUsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoUGFzc1JlZlB0
cjxFdmUKIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQ
cm9ncmVzc0V2ZW50KCkKIHsKKyAgICBpZiAobV9kZWZlckV2ZW50cyAmJiBtX2RlZmVycmVkUHJv
Z3Jlc3NFdmVudCkgeworICAgICAgICAvLyBNb3ZlIHRoZSBwcm9ncmVzcyBldmVudCB0byB0aGUg
cXVldWUsIHRvIGdldCBpdCBpbiB0aGUgcmlnaHQgb3JkZXIgb24gcmVzdW1lLgorICAgICAgICBt
X2RlZmVycmVkRXZlbnRzLmFwcGVuZChtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCk7CisgICAgICAg
IG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIGlmICghaGFzRXZlbnRUb0Rpc3BhdGNoKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTA5
LDIxICsxMjUsMzMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6
Zmx1c2hQcm9ncmVzc0V2ZW50KCkKICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAotdm9p
ZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQYXVzZWRFdmVu
dCgpCit2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaERl
ZmVycmVkRXZlbnRzKFRpbWVyPFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlPiog
dGltZXIpCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7Ci0gICAgaWYgKCFtX3BhdXNlZEV2
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkaXNwYXRjaEV2ZW50KG1fcGF1c2VkRXZlbnQp
OwotICAgIG1fcGF1c2VkRXZlbnQgPSAwOworICAgIEFTU0VSVF9VTlVTRUQodGltZXIsIHRpbWVy
ID09ICZtX2Rpc3BhdGNoRGVmZXJyZWRFdmVudHNUaW1lcik7CisgICAgQVNTRVJUKG1fZGVmZXJF
dmVudHMpOworICAgIG1fZGVmZXJFdmVudHMgPSBmYWxzZTsKKworICAgIC8vIFRha2Ugb3ZlciB0
aGUgZGVmZXJyZWQgZXZlbnRzIGJlZm9yZSBkaXNwYXRjaGluZyB0aGVtIHdoaWNoIGNhbiBwb3Rl
bnRpYWxseSBhZGQgbW9yZS4KKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IGRlZmVycmVkRXZl
bnRzOworICAgIG1fZGVmZXJyZWRFdmVudHMuc3dhcChkZWZlcnJlZEV2ZW50cyk7CisKKyAgICBS
ZWZQdHI8RXZlbnQ+IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IG1fZGVmZXJyZWRQcm9ncmVzc0V2
ZW50OworICAgIG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gMDsKKworICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnQ+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGVmZXJyZWRFdmVudHMuYmVnaW4oKTsK
KyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBk
ZWZlcnJlZEV2ZW50cy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBkaXNwYXRjaEV2ZW50KCppdCk7CisKKyAgICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgd2lsbCBi
ZSBpbiB0aGUgbV9kZWZlcnJlZEV2ZW50cyB2ZWN0b3IgaWYgdGhlIGxvYWQgd2FzIGZpbmlzaGVk
IHdoaWxlIHN1c3BlbmRlZC4KKyAgICAvLyBJZiBub3QsIGp1c3Qgc2VuZCB0aGUgbW9zdCB1cC10
by1kYXRlIHByb2dyZXNzIG9uIHJlc3VtZS4KKyAgICBpZiAoZGVmZXJyZWRQcm9ncmVzc0V2ZW50
KQorICAgICAgICBkaXNwYXRjaEV2ZW50KGRlZmVycmVkUHJvZ3Jlc3NFdmVudCk7CiB9CiAKIHZv
aWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZpcmVkKCkKIHsKICAgICBB
U1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7Ci0gICAgQVNTRVJU
KCFtX3BhdXNlZEV2ZW50KTsKICAgICBpZiAoIWhhc0V2ZW50VG9EaXNwYXRjaCgpKSB7CiAgICAg
ICAgIC8vIE5vIHByb2dyZXNzIGV2ZW50IHdhcyBxdWV1ZWQgc2luY2UgdGhlIHByZXZpb3VzIGRp
c3BhdGNoLCB3ZSBjYW4gc2FmZWx5IHN0b3AgdGhlIHRpbWVyLgogICAgICAgICBzdG9wKCk7CkBA
IC0xNDIsMTMgKzE3MCwyMiBAQCBib29sIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlOjpoYXNFdmVudFRvRGlzcGF0Y2goKSBjb25zdAogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlOjpzdXNwZW5kKCkKIHsKLSAgICBBU1NFUlQoIW1fcGF1c2VkRXZl
bnQpOworICAgIC8vIElmIHJlLXN1c3BlbmRlZCBiZWZvcmUgZGVmZXJyZWQgZXZlbnRzIGhhdmUg
YmVlbiBkaXNwYXRjaGVkLCBqdXN0IHN0b3AgdGhlIGRpc3BhdGNoCisgICAgLy8gYW5kIGNvbnRp
bnVlIHRoZSBsYXN0IHN1c3BlbmQuCisgICAgaWYgKG1fZGlzcGF0Y2hEZWZlcnJlZEV2ZW50c1Rp
bWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fZGVmZXJFdmVudHMpOworICAgICAg
ICBtX2Rpc3BhdGNoRGVmZXJyZWRFdmVudHNUaW1lci5zdG9wKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgQVNTRVJUKCFtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCk7CisgICAgQVNTRVJU
KG1fZGVmZXJyZWRFdmVudHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fZGVmZXJFdmVudHMp
OwogCi0gICAgbV9zdXNwZW5kZWQgPSB0cnVlOworICAgIG1fZGVmZXJFdmVudHMgPSB0cnVlOwog
ICAgIC8vIElmIHdlIGhhdmUgYSBwcm9ncmVzcyBldmVudCB3YWl0aW5nIHRvIGJlIGRpc3BhdGNo
ZWQsCi0gICAgLy8ganVzdCBxdWV1ZSBpdC4KKyAgICAvLyBqdXN0IGRlZmVyIGl0LgogICAgIGlm
IChoYXNFdmVudFRvRGlzcGF0Y2goKSkgewotICAgICAgICBtX3BhdXNlZEV2ZW50ID0gWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQs
IG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwpOworICAgICAgICBtX2RlZmVy
cmVkUHJvZ3Jlc3NFdmVudCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBtX2xlbmd0aENvbXB1dGFibGUsIG1fbG9hZGVkLCBt
X3RvdGFsKTsKICAgICAgICAgbV90b3RhbCA9IDA7CiAgICAgICAgIG1fbG9hZGVkID0gMDsKICAg
ICB9CkBAIC0xNjAsOCArMTk3LDExIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGU6OnJlc3VtZSgpCiAgICAgQVNTRVJUKCFtX2xvYWRlZCk7CiAgICAgQVNTRVJUKCFt
X3RvdGFsKTsKIAotICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Ci0gICAgZGlzcGF0Y2hQYXVzZWRF
dmVudCgpOworICAgIC8vIERvIG5vdCBkaXNwYXRjaCBldmVudHMgaW5saW5lIGhlcmUsIHNpbmNl
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgaXRlcmF0aW5nIG92ZXIKKyAgICAvLyB0aGUgbGlz
dCBvZiBhY3RpdmUgRE9NIG9iamVjdHMgdG8gcmVzdW1lIHRoZW0sIGFuZCBhbnkgYWN0aXZhdGVk
IEpTIGV2ZW50LWhhbmRsZXIKKyAgICAvLyBjb3VsZCBpbnNlcnQgbmV3IGFjdGl2ZSBET00gb2Jq
ZWN0cyB0byB0aGUgbGlzdC4KKyAgICAvLyBtX2RlZmVyRXZlbnRzIGlzIGtlcHQgdHJ1ZSB1bnRp
bCBhbGwgZGVmZXJyZWQgZXZlbnRzIGhhdmUgYmVlbiBkaXNwYXRjaGVkLgorICAgIG1fZGlzcGF0
Y2hEZWZlcnJlZEV2ZW50c1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaAppbmRleCA0MWYzNzQ3MzEzY2I3ZmRkOTY3YzI4OTBh
YjViZGI3MDZlZTE1MmQ1Li41MzhmZDBiZDllNDIzYzk2OTRmYWI5YzQ4NjM3MzkyYTVjNWM0Y2Rk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuaApAQCAtNTYsMTMgKzU2LDExIEBAIHB1YmxpYzoKICAgICB2b2lk
IHN1c3BlbmQoKTsKICAgICB2b2lkIHJlc3VtZSgpOwogCi0gICAgYm9vbCBzdXNwZW5kZWQoKSBj
b25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQotCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25z
dCBkb3VibGUgbWluaW11bVByb2dyZXNzRXZlbnREaXNwYXRjaGluZ0ludGVydmFsSW5TZWNvbmRz
OwogCiAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7Ci0gICAgdm9pZCBkaXNwYXRjaFBhdXNlZEV2
ZW50KCk7CisgICAgdm9pZCBkaXNwYXRjaERlZmVycmVkRXZlbnRzKFRpbWVyPFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlPiopOwogICAgIHZvaWQgZmx1c2hQcm9ncmVzc0V2ZW50
KCk7CiAKICAgICBib29sIGhhc0V2ZW50VG9EaXNwYXRjaCgpIGNvbnN0OwpAQCAtNzQsOCArNzIs
MTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9sb2FkZWQ7CiAgICAgdW5z
aWduZWQgbG9uZyBsb25nIG1fdG90YWw7CiAKLSAgICBib29sIG1fc3VzcGVuZGVkOwotICAgIFJl
ZlB0cjxFdmVudD4gbV9wYXVzZWRFdmVudDsKKyAgICBib29sIG1fZGVmZXJFdmVudHM7CisgICAg
UmVmUHRyPEV2ZW50PiBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudDsKKyAgICBWZWN0b3I8UmVmUHRy
PEV2ZW50PiA+IG1fZGVmZXJyZWRFdmVudHM7CisgICAgVGltZXI8WE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGU+IG1fZGlzcGF0Y2hEZWZlcnJlZEV2ZW50c1RpbWVyOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdmZTkxOTY5ZTcxNDBmNWIwYTg1ODlkNzMw
MDBhN2U2NDU0ODE1NTAuLjEyNDU5MzMwMmE1OTYxZTdkODMyNDQ4ODBmYTA4MGE4OTc3ZmExYjYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNC0wMiAgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
ICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBBc3NlcnRzIGluIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04MTUwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3RzIHRoYXQgeG1saHR0cHJlcXVlc3Qub3BlbiBkb2VzIG5v
dCBhc3NlcnQgaW4gd2hlbiBjYWxsZWQgZnJvbSBvbnBhZ2VoaWRlLgorCisgICAgICAgICogZmFz
dC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorCiAy
MDEyLTA0LTA0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIE5vdCByZXZpZXdlZDogZXhwZWN0YXRpb25zIHVwZGF0ZWQgZm9yIGNocm9taXVtLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMzNDM5MmZkMTVlMDdkNjFlZGViOTE0MjQ0YjhhMDdjM2IzNzFl
M2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14
aHItb3Blbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDY6IFhNTEh0dHBSZXF1ZXN0IGluIHN1YmZyYW1lLTEgY3JlYXRlZAorQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDU6IExvYWRlZCBwYWdlaGlkZS10aW1lb3V0LWdvLWJhY2suaHRtbCwgZ29pbmcg
YmFjaworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE3OiBSZXN0b3JlZCBwYWdlIGZyb20gcGFnZSBj
YWNoZS4KK1RyaWVzIHRvIHRyaWdnZXIgYW4gYXNzZXJ0IGluIHhtbGh0dHByZXF1ZXN0IGR1cmlu
ZyBwYWdlaGlkZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUyZTMzYzlm
YTM3ZGYyNGZhNDhhZjUwMTNlMDA0ZTJhN2NiZjVkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwKQEAgLTAsMCArMSwzNCBA
QAorPGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxib2R5PgorCis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3N1YmZyYW1lLXhtbGh0
dHByZXF1ZXN0Lmh0bWwiIGlkPSJhLWZyYW1lIj48L2lmcmFtZT4gPGlmcmFtZSBzcmM9InJlc291
cmNlcy9zdXNwZW5kLXN1YmZyYW1lLTIuaHRtbCIgaWQ9ImItZnJhbWUiPjwvaWZyYW1lPgorCis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbignVHJpZXMgdG8gdHJp
Z2dlciBhbiBhc3NlcnQgaW4geG1saHR0cHJlcXVlc3QgZHVyaW5nIHBhZ2VoaWRlLicpOworCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm92ZXJyaWRlUHJlZmVyZW5jZSgnV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVuY2VLZXknLCAx
KTsKKworCitvbnBhZ2VzaG93ID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LnBl
cnNpc3RlZCkgeworICAgICAgICBjb25zb2xlLmxvZygnUmVzdG9yZWQgcGFnZSBmcm9tIHBhZ2Ug
Y2FjaGUuJyk7CisgICAgICAgIGlmICghd2luZG93Lndhc0ZpbmlzaEpTVGVzdENhbGxlZCkKKyAg
ICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30KKworb25sb2FkID0gZnVuY3Rpb24o
KQoreworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGxvY2F0aW9uLmhyZWYg
PSAncmVzb3VyY2VzL3BhZ2VoaWRlLXRpbWVvdXQtZ28tYmFjay5odG1sJzsKKyAgICB9LCAwKTsK
K30KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwordmFyIGpzVGVzdElzQXN5bmMgPSB0
cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy9zdWJmcmFtZS14bWxodHRwcmVxdWVzdC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJiNTBmMzI0NWZmMzA3YjhmZDUyMzM3MzllYTc3NjEzNTkyNzYzZGIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3Vi
ZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gdGVzdCgp
IHsKKyAgICAgICAgICAgIHdpbmRvdy50b3AuY29uc29sZS5sb2coJ1hNTEh0dHBSZXF1ZXN0IGlu
IHN1YmZyYW1lLTEgY3JlYXRlZCcpOworICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRw
UmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsICdhYm91dDplbXB0eScsIHRy
dWUpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK0kgYW0gc3Vi
ZnJhbWUtMQorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IGU3N2M2ODk3MWQyNDM3MjE4MTQ2
NDkwN2QwOTgxMWFjMjlmNDAyY2UuLjA2ZWI0MTllZjUwYmEzNzE3ZWI5NDFiM2ViNjQ5OTM0OTgy
NDI5ZWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhw
ZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQKQEAgLTUwMyw2ICs1MDMsNyBAQCBCVUdDUjEwODc5OCBMSU5VWCBXSU4g
OiBmYXN0L2ZpbGVzeXN0ZW0vd29ya2Vycy9maWxlLXdyaXRlci1ldmVudHMuaHRtbCA9IENSQVNI
CiAvLyBvbiB3aGljaCByZW5kZXJlciBwcm9jZXNzIHRvIHVzZSBmb3IgZWFjaCBvZiB0aGVtLgog
V09OVEZJWCBTS0lQIDogZmFzdC9kb20vV2luZG93L3RpbWVyLXJlc3VtZS1vbi1uYXZpZ2F0aW9u
LWJhY2suaHRtbCA9IFRJTUVPVVQgRkFJTAogV09OVEZJWCBTS0lQIDogZmFzdC9ldmVudHMvcGFn
ZWhpZGUtdGltZW91dC5odG1sID0gVElNRU9VVAorV09OVEZJWCBTS0lQIDogZmFzdC9ldmVudHMv
cGFnZWhpZGUteGhyLW9wZW4uaHRtbCA9IFRJTUVPVVQKIFdPTlRGSVggU0tJUCA6IGZhc3QvZXZl
bnRzL3BhZ2VzaG93LXBhZ2VoaWRlLW9uLWJhY2stY2FjaGVkLXdpdGgtZnJhbWVzLmh0bWwgPSBU
SU1FT1VUCiBXT05URklYIFNLSVAgOiBmYXN0L2V2ZW50cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1i
YWNrLWNhY2hlZC5odG1sID0gVElNRU9VVCBGQUlMCiBXT05URklYIFNLSVAgOiBmYXN0L2V2ZW50
cy9zdXNwZW5kLXRpbWVycy5odG1sID0gVElNRU9VVAo=
</data>
<flag name="review"
          id="140078"
          type_id="1"
          status="+"
          setter="jchaffraix"
    />
    <flag name="commit-queue"
          id="140142"
          type_id="3"
          status="-"
          setter="jchaffraix"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137525</attachid>
            <date>2012-04-17 06:20:25 -0700</date>
            <delta_ts>2012-04-17 07:04:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>PatchForLanding</filename>
            <type>text/plain</type>
            <size>13815</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MjllOGEwLi45YmFjNGJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDQt
MDIgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAg
ICAgICAgQXNzZXJ0cyBpbiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MDYKKworICAg
ICAgICBSZXZpZXdlZCBieSBKdWxpZW4gQ2hhZmZyYWl4LgorCisgICAgICAgIFRlc3RzIHRoYXQg
eG1saHR0cHJlcXVlc3Qub3BlbiBkb2VzIG5vdCBhc3NlcnQgaW4gd2hlbiBjYWxsZWQgZnJvbSBv
bnBhZ2VoaWRlLgorCisgICAgICAgICogZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Bl
bi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3ViZnJhbWUt
eG1saHR0cHJlcXVlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0OgorCiAyMDEyLTA0LTE3ICBNYXJpbyBTYW5jaGV6IFByYWRh
ICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggd3Jvbmcg
cGF0aHMgdG8gSlMgcmVzb3VyY2VzIGluIEdUSyB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzQzOTJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4tZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTIgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA2OiBYTUxIdHRwUmVxdWVzdCBpbiBz
dWJmcmFtZS0xIGNyZWF0ZWQKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1OiBMb2FkZWQgcGFnZWhp
ZGUtdGltZW91dC1nby1iYWNrLmh0bWwsIGdvaW5nIGJhY2sKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAxNzogUmVzdG9yZWQgcGFnZSBmcm9tIHBhZ2UgY2FjaGUuCitUcmllcyB0byB0cmlnZ2VyIGFu
IGFzc2VydCBpbiB4bWxodHRwcmVxdWVzdCBkdXJpbmcgcGFnZWhpZGUuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2Vo
aWRlLXhoci1vcGVuLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHIt
b3Blbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MmUzM2MKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Bl
bi5odG1sCkBAIC0wLDAgKzEsMzQgQEAKKzxodG1sPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8Ym9keT4KKworPGlmcmFtZSBzcmM9InJl
c291cmNlcy9zdWJmcmFtZS14bWxodHRwcmVxdWVzdC5odG1sIiBpZD0iYS1mcmFtZSI+PC9pZnJh
bWU+IDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvc3VzcGVuZC1zdWJmcmFtZS0yLmh0bWwiIGlkPSJi
LWZyYW1lIj48L2lmcmFtZT4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVz
Y3JpcHRpb24oJ1RyaWVzIHRvIHRyaWdnZXIgYW4gYXNzZXJ0IGluIHhtbGh0dHByZXF1ZXN0IGR1
cmluZyBwYWdlaGlkZS4nKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoJ1dlYktpdFVzZXNQYWdl
Q2FjaGVQcmVmZXJlbmNlS2V5JywgMSk7CisKKworb25wYWdlc2hvdyA9IGZ1bmN0aW9uKGV2ZW50
KQoreworICAgIGlmIChldmVudC5wZXJzaXN0ZWQpIHsKKyAgICAgICAgY29uc29sZS5sb2coJ1Jl
c3RvcmVkIHBhZ2UgZnJvbSBwYWdlIGNhY2hlLicpOworICAgICAgICBpZiAoIXdpbmRvdy53YXNG
aW5pc2hKU1Rlc3RDYWxsZWQpCisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9Cit9
CisKK29ubG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor
ICAgICAgICBsb2NhdGlvbi5ocmVmID0gJ3Jlc291cmNlcy9wYWdlaGlkZS10aW1lb3V0LWdvLWJh
Y2suaHRtbCc7CisgICAgfSwgMCk7Cit9Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
K3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL3N1YmZyYW1lLXht
bGh0dHByZXF1ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvc3Vi
ZnJhbWUteG1saHR0cHJlcXVlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yYjUwZjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
cmVzb3VyY2VzL3N1YmZyYW1lLXhtbGh0dHByZXF1ZXN0Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1
bmN0aW9uIHRlc3QoKSB7CisgICAgICAgICAgICB3aW5kb3cudG9wLmNvbnNvbGUubG9nKCdYTUxI
dHRwUmVxdWVzdCBpbiBzdWJmcmFtZS0xIGNyZWF0ZWQnKTsKKyAgICAgICAgICAgIHZhciB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCAnYWJv
dXQ6ZW1wdHknLCB0cnVlKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CitJIGFtIHN1YmZyYW1lLTEKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCA5NTI0Yjhk
Li4wYTU5NmZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0CkBAIC01MTEsNiArNTExLDcgQEAgQlVHQ1IxMDg3OTggTElOVVgg
V0lOIDogZmFzdC9maWxlc3lzdGVtL3dvcmtlcnMvZmlsZS13cml0ZXItZXZlbnRzLmh0bWwgPSBD
UkFTSAogLy8gb24gd2hpY2ggcmVuZGVyZXIgcHJvY2VzcyB0byB1c2UgZm9yIGVhY2ggb2YgdGhl
bS4KIFdPTlRGSVggU0tJUCA6IGZhc3QvZG9tL1dpbmRvdy90aW1lci1yZXN1bWUtb24tbmF2aWdh
dGlvbi1iYWNrLmh0bWwgPSBUSU1FT1VUIEZBSUwKIFdPTlRGSVggU0tJUCA6IGZhc3QvZXZlbnRz
L3BhZ2VoaWRlLXRpbWVvdXQuaHRtbCA9IFRJTUVPVVQKK1dPTlRGSVggU0tJUCA6IGZhc3QvZXZl
bnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwgPSBUSU1FT1VUCiBXT05URklYIFNLSVAgOiBmYXN0
L2V2ZW50cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNrLWNhY2hlZC13aXRoLWZyYW1lcy5odG1s
ID0gVElNRU9VVAogV09OVEZJWCBTS0lQIDogZmFzdC9ldmVudHMvcGFnZXNob3ctcGFnZWhpZGUt
b24tYmFjay1jYWNoZWQuaHRtbCA9IFRJTUVPVVQgRkFJTAogV09OVEZJWCBTS0lQIDogZmFzdC9l
dmVudHMvc3VzcGVuZC10aW1lcnMuaHRtbCA9IFRJTUVPVVQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1OTYxY2Ri
Li4yZmRhMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTItMDQtMDIgIEFsbGFu
IFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CisKKyAgICAgICAgQXNz
ZXJ0cyBpbiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MDYKKworICAgICAgICBSZXZp
ZXdlZCBieSBKdWxpZW4gQ2hhZmZyYWl4LgorCisgICAgICAgIFRoZSBhc3NlcnRzIHdlcmUgaW5j
b3JyZWN0bHkgdHJpZ2dlcmVkIGJlY2F1c2Ugc3VzcGVuZGluZyBhY3RpdmUgRE9NIG9iamVjdHMK
KyAgICAgICAgKHdoaWNoIHN1c3BlbmRzIHRoZSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZSkgZG9lc24ndCBzdG9wIEphdmFTY3JpcHQKKyAgICAgICAgZnJvbSBydW5uaW5nIG9y
IHN1c3BlbmQgYW55IHJ1bm5pbmcgbG9hZGVyIHdlIG1heSBoYXZlLiBUaGUgcHJldmlvdXMgY29k
ZSB3b3VsZAorICAgICAgICBhc3N1bWUgdGhvc2UgMiBjYXNlcyB3ZXJlIGltcG9zc2libGUuCisK
KyAgICAgICAgV2hlbiBYbWxIdHRwUmVxdWVzdDo6b3BlbiBpcyBjYWxsZWQgb3IgZGF0YSBpcyBy
ZWNlaXZlZCB3aGlsZSB0aGUgWG1sSHR0cFJlcXVlc3Qgb2JqZWN0CisgICAgICAgIGlzIHN1c3Bl
bmRlZCB0aGUgb2JqZWN0IG1heSBhdHRlbXB0IHRvIGRpc3BhdGNoIGV2ZW50cy4gVGhpcyBwYXRj
aCBkZWZlcnMgdGhlc2UgZXZlbnRzCisgICAgICAgIHVudGlsIHRoZSBvYmplY3QgaXMgcmVzdW1l
ZC4KKworICAgICAgICBQcm9ncmVzcyBldmVudHMgYXJlIGNvYWxlc2NlZCBzaW1pbGFyIHRvIG5v
cm1hbCB0aHJvdHRsaW5nLCBhbmQgcmVhZHlzdGF0ZS1jaGFuZ2UgZXZlbnRzCisgICAgICAgIGFy
ZSBjb2FsZXNjZWQgdG8gYXZvaWQgaWRlbnRpY2FsIGV2ZW50cyBlbWl0dGVkIHJpZ2h0IGFmdGVy
IGVhY2hvdGhlci4KKworICAgICAgICBPbiByZXN1bWUgdGhlIGV2ZW50cyBhcmUgZGlzcGF0Y2hl
ZCBhZnRlciBhIHRpbWVyIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggCisgICAgICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgd2hpY2ggaXMgaXRlcmF0aW5nIG92ZXIgc3VzcGVuZGVkIG9iamVj
dHMuCisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbAor
CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRGVmZXJyZWRFdmVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0
bGU6OmZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlOjpyZXN1bWUpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oOgorICAgICAgICAoWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGUpOgorCiAyMDEyLTA0LTE3ICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFy
aXVzei5nQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gRml4IGJ1aWxkIGJyZWFr
IHdoZW4gQ09OVEVYVF9NRU5VUyBpcyBkaXNhYmxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCmluZGV4
IDdiYjI3ZmYuLjEzZTBjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApAQCAtMSw2ICsxLDYgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3
ZWJraXQub3JnPgotICogQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4gIEFsbCByaWdodCByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgs
NyArMzgsOCBAQCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6WE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoRXZlbnRUYQogICAgIDogbV90YXJnZXQodGFyZ2V0
KQogICAgICwgbV9sb2FkZWQoMCkKICAgICAsIG1fdG90YWwoMCkKLSAgICAsIG1fc3VzcGVuZGVk
KGZhbHNlKQorICAgICwgbV9kZWZlckV2ZW50cyhmYWxzZSkKKyAgICAsIG1fZGlzcGF0Y2hEZWZl
cnJlZEV2ZW50c1RpbWVyKHRoaXMsICZYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZTo6ZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cykKIHsKICAgICBBU1NFUlQodGFyZ2V0KTsKIH0KQEAg
LTQ5LDcgKzUwLDEyIEBAIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjp+WE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoKQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhD
b21wdXRhYmxlLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxvbmcg
dG90YWwpCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7CisgICAgaWYgKG1fZGVmZXJFdmVu
dHMpIHsKKyAgICAgICAgLy8gT25seSBzdG9yZSB0aGUgbGF0ZXN0IHByb2dyZXNzIGV2ZW50IHdo
aWxlIHN1c3BlbmRlZC4KKyAgICAgICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwg
bGVuZ3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0b3RhbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBpZiAoIWlzQWN0aXZlKCkpIHsKICAgICAgICAgLy8gVGhlIHRpbWVyIGlzIG5vdCBh
Y3RpdmUgc28gdGhlIGxlYXN0IGZyZXF1ZW50IGV2ZW50IGZvciBub3cgaXMgZXZlcnkgYnl0ZS4K
ICAgICAgICAgLy8gSnVzdCBnbyBhaGVhZCBhbmQgZGlzcGF0Y2ggdGhlIGV2ZW50LgpAQCAtNzks
MTEgKzg1LDE1IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRp
c3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFBhc3NSZWZQCiAKIHZvaWQgWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCiB7Ci0gICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7Ci0gICAgLy8gV2Ugc2hvdWxkIG5v
dCBoYXZlIGFueSBwZW5kaW5nIGV2ZW50cyBmcm9tIGEgcHJldmlvdXMgcmVzdW1lLgotICAgIEFT
U0VSVCghbV9wYXVzZWRFdmVudCk7Ci0KLSAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7CisgICAgQVNTRVJUKGV2ZW50KTsKKyAgICBpZiAobV9kZWZlckV2ZW50cykgeworICAgICAg
ICBpZiAobV9kZWZlcnJlZEV2ZW50cy5zaXplKCkgPiAxICYmIGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCAmJiBldmVudC0+dHlwZSgpID09IG1fZGVm
ZXJyZWRFdmVudHMubGFzdCgpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIC8vIFJlYWR5c3RhdGVj
aGFuZ2UgZXZlbnRzIGFyZSBzdGF0ZS1sZXNzIHNvIGF2b2lkIHJlcGVhdGluZyB0d28gaWRlbnRp
Y2FsIGV2ZW50cyBpbiBhIHJvdyBvbiByZXN1bWUuCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIH0gZWxz
ZQorICAgICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIHZvaWQgWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5k
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQpAQCAtOTYsNiArMTA2LDEzIEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFBh
c3NSZWZQdHI8RXZlCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6
OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiB7CisgICAgaWYgKG1fZGVmZXJFdmVudHMgJiYgbV9kZWZl
cnJlZFByb2dyZXNzRXZlbnQpIHsKKyAgICAgICAgLy8gTW92ZSB0aGUgcHJvZ3Jlc3MgZXZlbnQg
dG8gdGhlIHF1ZXVlLCB0byBnZXQgaXQgaW4gdGhlIHJpZ2h0IG9yZGVyIG9uIHJlc3VtZS4KKyAg
ICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQobV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOwor
ICAgICAgICBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IDA7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBpZiAoIWhhc0V2ZW50VG9EaXNwYXRjaCgpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTEwOSwyMSArMTI2LDMzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhy
b3R0bGU6OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9
CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUGF1
c2VkRXZlbnQoKQordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlz
cGF0Y2hEZWZlcnJlZEV2ZW50cyhUaW1lcjxYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJv
dHRsZT4qIHRpbWVyKQogewotICAgIEFTU0VSVCghc3VzcGVuZGVkKCkpOwotICAgIGlmICghbV9w
YXVzZWRFdmVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGlzcGF0Y2hFdmVudChtX3BhdXNl
ZEV2ZW50KTsKLSAgICBtX3BhdXNlZEV2ZW50ID0gMDsKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVy
LCB0aW1lciA9PSAmbV9kaXNwYXRjaERlZmVycmVkRXZlbnRzVGltZXIpOworICAgIEFTU0VSVCht
X2RlZmVyRXZlbnRzKTsKKyAgICBtX2RlZmVyRXZlbnRzID0gZmFsc2U7CisKKyAgICAvLyBUYWtl
IG92ZXIgdGhlIGRlZmVycmVkIGV2ZW50cyBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlbSB3aGljaCBj
YW4gcG90ZW50aWFsbHkgYWRkIG1vcmUuCisgICAgVmVjdG9yPFJlZlB0cjxFdmVudD4gPiBkZWZl
cnJlZEV2ZW50czsKKyAgICBtX2RlZmVycmVkRXZlbnRzLnN3YXAoZGVmZXJyZWRFdmVudHMpOwor
CisgICAgUmVmUHRyPEV2ZW50PiBkZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBtX2RlZmVycmVkUHJv
Z3Jlc3NFdmVudDsKKyAgICBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IDA7CisKKyAgICBWZWN0
b3I8UmVmUHRyPEV2ZW50PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRlZmVycmVkRXZlbnRzLmJl
Z2luKCk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxFdmVudD4gPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gZGVmZXJyZWRFdmVudHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgZGlzcGF0Y2hFdmVudCgqaXQpOworCisgICAgLy8gVGhlIHByb2dyZXNzIGV2ZW50
IHdpbGwgYmUgaW4gdGhlIG1fZGVmZXJyZWRFdmVudHMgdmVjdG9yIGlmIHRoZSBsb2FkIHdhcyBm
aW5pc2hlZCB3aGlsZSBzdXNwZW5kZWQuCisgICAgLy8gSWYgbm90LCBqdXN0IHNlbmQgdGhlIG1v
c3QgdXAtdG8tZGF0ZSBwcm9ncmVzcyBvbiByZXN1bWUuCisgICAgaWYgKGRlZmVycmVkUHJvZ3Jl
c3NFdmVudCkKKyAgICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJlZFByb2dyZXNzRXZlbnQpOwog
fQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCgpCiB7
CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghc3VzcGVuZGVkKCkpOwotICAg
IEFTU0VSVCghbV9wYXVzZWRFdmVudCk7CiAgICAgaWYgKCFoYXNFdmVudFRvRGlzcGF0Y2goKSkg
ewogICAgICAgICAvLyBObyBwcm9ncmVzcyBldmVudCB3YXMgcXVldWVkIHNpbmNlIHRoZSBwcmV2
aW91cyBkaXNwYXRjaCwgd2UgY2FuIHNhZmVseSBzdG9wIHRoZSB0aW1lci4KICAgICAgICAgc3Rv
cCgpOwpAQCAtMTQyLDEzICsxNzEsMjIgQEAgYm9vbCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZTo6aGFzRXZlbnRUb0Rpc3BhdGNoKCkgY29uc3QKIAogdm9pZCBYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6c3VzcGVuZCgpCiB7Ci0gICAgQVNTRVJUKCFtX3Bh
dXNlZEV2ZW50KTsKKyAgICAvLyBJZiByZS1zdXNwZW5kZWQgYmVmb3JlIGRlZmVycmVkIGV2ZW50
cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZCwganVzdCBzdG9wIHRoZSBkaXNwYXRjaAorICAgIC8vIGFu
ZCBjb250aW51ZSB0aGUgbGFzdCBzdXNwZW5kLgorICAgIGlmIChtX2Rpc3BhdGNoRGVmZXJyZWRF
dmVudHNUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVChtX2RlZmVyRXZlbnRzKTsK
KyAgICAgICAgbV9kaXNwYXRjaERlZmVycmVkRXZlbnRzVGltZXIuc3RvcCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOworICAg
IEFTU0VSVChtX2RlZmVycmVkRXZlbnRzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX2RlZmVy
RXZlbnRzKTsKIAotICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKKyAgICBtX2RlZmVyRXZlbnRzID0g
dHJ1ZTsKICAgICAvLyBJZiB3ZSBoYXZlIGEgcHJvZ3Jlc3MgZXZlbnQgd2FpdGluZyB0byBiZSBk
aXNwYXRjaGVkLAotICAgIC8vIGp1c3QgcXVldWUgaXQuCisgICAgLy8ganVzdCBkZWZlciBpdC4K
ICAgICBpZiAoaGFzRXZlbnRUb0Rpc3BhdGNoKCkpIHsKLSAgICAgICAgbV9wYXVzZWRFdmVudCA9
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wcm9ncmVz
c0V2ZW50LCBtX2xlbmd0aENvbXB1dGFibGUsIG1fbG9hZGVkLCBtX3RvdGFsKTsKKyAgICAgICAg
bV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgbV9sZW5ndGhDb21wdXRhYmxlLCBtX2xv
YWRlZCwgbV90b3RhbCk7CiAgICAgICAgIG1fdG90YWwgPSAwOwogICAgICAgICBtX2xvYWRlZCA9
IDA7CiAgICAgfQpAQCAtMTYwLDggKzE5OCwxMSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlOjpyZXN1bWUoKQogICAgIEFTU0VSVCghbV9sb2FkZWQpOwogICAgIEFT
U0VSVCghbV90b3RhbCk7CiAKLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotICAgIGRpc3BhdGNo
UGF1c2VkRXZlbnQoKTsKKyAgICAvLyBEbyBub3QgZGlzcGF0Y2ggZXZlbnRzIGlubGluZSBoZXJl
LCBzaW5jZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGlzIGl0ZXJhdGluZyBvdmVyCisgICAgLy8g
dGhlIGxpc3Qgb2YgYWN0aXZlIERPTSBvYmplY3RzIHRvIHJlc3VtZSB0aGVtLCBhbmQgYW55IGFj
dGl2YXRlZCBKUyBldmVudC1oYW5kbGVyCisgICAgLy8gY291bGQgaW5zZXJ0IG5ldyBhY3RpdmUg
RE9NIG9iamVjdHMgdG8gdGhlIGxpc3QuCisgICAgLy8gbV9kZWZlckV2ZW50cyBpcyBrZXB0IHRy
dWUgdW50aWwgYWxsIGRlZmVycmVkIGV2ZW50cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZC4KKyAgICBt
X2Rpc3BhdGNoRGVmZXJyZWRFdmVudHNUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgKaW5kZXggNDFmMzc0Ny4uNTM4ZmQwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlLmgKQEAgLTU2LDEzICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
dXNwZW5kKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKIAotICAgIGJvb2wgc3VzcGVuZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9zdXNwZW5kZWQ7IH0KLQogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIG1pbmltdW1Qcm9ncmVzc0V2ZW50RGlzcGF0Y2hpbmdJbnRlcnZhbEluU2Vjb25kczsK
IAogICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpOwotICAgIHZvaWQgZGlzcGF0Y2hQYXVzZWRFdmVu
dCgpOworICAgIHZvaWQgZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cyhUaW1lcjxYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZT4qKTsKICAgICB2b2lkIGZsdXNoUHJvZ3Jlc3NFdmVudCgp
OwogCiAgICAgYm9vbCBoYXNFdmVudFRvRGlzcGF0Y2goKSBjb25zdDsKQEAgLTc0LDggKzcyLDEw
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fbG9hZGVkOwogICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBtX3RvdGFsOwogCi0gICAgYm9vbCBtX3N1c3BlbmRlZDsKLSAgICBSZWZQ
dHI8RXZlbnQ+IG1fcGF1c2VkRXZlbnQ7CisgICAgYm9vbCBtX2RlZmVyRXZlbnRzOworICAgIFJl
ZlB0cjxFdmVudD4gbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQ7CisgICAgVmVjdG9yPFJlZlB0cjxF
dmVudD4gPiBtX2RlZmVycmVkRXZlbnRzOworICAgIFRpbWVyPFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlPiBtX2Rpc3BhdGNoRGVmZXJyZWRFdmVudHNUaW1lcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>