<?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>79701</bug_id>
          
          <creation_ts>2012-02-27 14:11:48 -0800</creation_ts>
          <short_desc>Add playback state for AudioBufferSourceNode and add number of active nodes</short_desc>
          <delta_ts>2012-03-20 00:57:31 -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>Web Audio</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond Toy">rtoy</reporter>
          <assigned_to name="Raymond Toy">rtoy</assigned_to>
          <cc>abarth</cc>
    
    <cc>crogers</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>565971</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-27 14:11:48 -0800</bug_when>
    <thetext>Add playback state for AudioBufferSourceNode and add number of active nodes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565978</commentid>
    <comment_count>1</comment_count>
      <attachid>129098</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-27 14:20:38 -0800</bug_when>
    <thetext>Created attachment 129098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566013</commentid>
    <comment_count>2</comment_count>
      <attachid>129098</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-27 15:13:55 -0800</bug_when>
    <thetext>Comment on attachment 129098
Patch

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

New failing tests:
css3/filters/effect-invert-hw.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566128</commentid>
    <comment_count>3</comment_count>
      <attachid>129098</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-27 16:58:37 -0800</bug_when>
    <thetext>Comment on attachment 129098
Patch

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

The test is starting to look good.  A few comments below:

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:54
&gt; +unsigned int AudioBufferSourceNode::m_activeSourceCount = 0;

&quot;unsigned int&quot; -&gt; &quot;unsigned&quot;

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:133
&gt; +            ++AudioBufferSourceNode::m_activeSourceCount;

no need to use namespace &quot;AudioBufferSourceNode::&quot; here

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:46
&gt; +    // These must be defined as in the .idl file.

I think it would be worth a comment describing the valid state-transitions.  I know they&apos;re simple, but best to spell this out.

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:47
&gt; +    enum playbackState_t {

WebKit style: please don&apos;t use &quot;UNIX hacker&quot; style for this type -- should be PlaybackState

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:49
&gt; +        INITIAL = 0,

WebKit style: enum values should use camel-casing, for example:

InitialState
ScheduledState
PlayingState
FinishedState

Also, InitialState would be better as UnscheduledState

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:52
&gt; +        // SCHEDULED state, silence is actually being played.)

I would remove the &quot;Note&quot; because this is a detail which can be optimized -- let&apos;s try to keep the description of the states minimal

(Note that in the SCHEDULED state, silence is actually being played.)

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:55
&gt; +        // Currently playing.

Comment does not add much value.  Maybe mention that scheduled time &lt;= context time

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:58
&gt; +        // Finished playing.

Comment does not add value.  Please describe what &quot;finished&quot; means.

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:88
&gt; +    // Get and reset the number of sources that are currently playing.

I would split this comment into two comments, one for each method

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:89
&gt; +    static unsigned int activeSourceCount() { return AudioBufferSourceNode::m_activeSourceCount; }

&quot;unsigned int&quot; -&gt; &quot;unsigned&quot;

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:160
&gt; +    enum playbackState_t m_playbackState;

&quot;enum playbackState_t&quot; -&gt; PlaybackState

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:163
&gt; +    static unsigned int m_activeSourceCount;

&quot;unsigned int&quot; -&gt; &quot;unsigned&quot;

Also, use the &quot;s_&quot; prefix for static members instead of &quot;m_&quot;

Actually, come to think of it, this can&apos;t be a static member variable of AudioBufferSourceNode --- what if there are multiple contexts??
Instead, this will have to be a member variable of the AudioContext

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.idl:34
&gt; +        const unsigned short INITIAL = 0;

INITIAL -&gt; UNSCHEDULED

Please add &quot;_STATE&quot; to all the constants -- for example, UNSCHEDULED_STATE

&gt; LayoutTests/webaudio/audiobuffersource-activeSourceCount.html:37
&gt; +function playbackStateString(state)

This function seems to be unused please remove to make this test shorter.

&gt; LayoutTests/webaudio/audiobuffersource-activeSourceCount.html:100
&gt; +    var suffixMessage = &quot; after &quot; + renderTime + &quot; sec.&quot;;

could you please spell out the complete word &quot;seconds&quot; or &quot;second&quot;  here and elsewhere in the test

&gt; LayoutTests/webaudio/audiobuffersource-activeSourceCount.html:159
&gt; +    // Test PLAYING state for looping source. Create .5 sec source starting at time 1.25 and looping

nit: you use 0.5 below, but .5 here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566901</commentid>
    <comment_count>4</comment_count>
      <attachid>129098</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-28 11:21:49 -0800</bug_when>
    <thetext>Comment on attachment 129098
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:163
&gt;&gt; +    static unsigned int m_activeSourceCount;
&gt; 
&gt; &quot;unsigned int&quot; -&gt; &quot;unsigned&quot;
&gt; 
&gt; Also, use the &quot;s_&quot; prefix for static members instead of &quot;m_&quot;
&gt; 
&gt; Actually, come to think of it, this can&apos;t be a static member variable of AudioBufferSourceNode --- what if there are multiple contexts??
&gt; Instead, this will have to be a member variable of the AudioContext

After implementing this, I was wondering if it would be better to have it in the AudioContext, because it is an audio context item, not an audio buffer source node item.

With multiple contexts, it&apos;s clear that it should be in the context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567006</commentid>
    <comment_count>5</comment_count>
      <attachid>129098</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-28 13:03:36 -0800</bug_when>
    <thetext>Comment on attachment 129098
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:49
&gt;&gt; +        INITIAL = 0,
&gt; 
&gt; WebKit style: enum values should use camel-casing, for example:
&gt; 
&gt; InitialState
&gt; ScheduledState
&gt; PlayingState
&gt; FinishedState
&gt; 
&gt; Also, InitialState would be better as UnscheduledState

But don&apos;t these names need to match the names used in the idl?  Or are you also proposing that the idl use camel case names. (This doesn&apos;t match the existing idl naming in other nodes.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567715</commentid>
    <comment_count>6</comment_count>
      <attachid>129472</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 10:30:39 -0800</bug_when>
    <thetext>Created attachment 129472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567718</commentid>
    <comment_count>7</comment_count>
      <attachid>129098</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 10:36:44 -0800</bug_when>
    <thetext>Comment on attachment 129098
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:54
&gt;&gt; +unsigned int AudioBufferSourceNode::m_activeSourceCount = 0;
&gt; 
&gt; &quot;unsigned int&quot; -&gt; &quot;unsigned&quot;

Changed to int so we can prevent count from wrapping around from 0 to a very large number.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:133
&gt;&gt; +            ++AudioBufferSourceNode::m_activeSourceCount;
&gt; 
&gt; no need to use namespace &quot;AudioBufferSourceNode::&quot; here

Changed because source count is now in the AudioContext.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:46
&gt;&gt; +    // These must be defined as in the .idl file.
&gt; 
&gt; I think it would be worth a comment describing the valid state-transitions.  I know they&apos;re simple, but best to spell this out.

Comments added.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:47
&gt;&gt; +    enum playbackState_t {
&gt; 
&gt; WebKit style: please don&apos;t use &quot;UNIX hacker&quot; style for this type -- should be PlaybackState

Done.

&gt;&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:49
&gt;&gt;&gt; +        INITIAL = 0,
&gt;&gt; 
&gt;&gt; WebKit style: enum values should use camel-casing, for example:
&gt;&gt; 
&gt;&gt; InitialState
&gt;&gt; ScheduledState
&gt;&gt; PlayingState
&gt;&gt; FinishedState
&gt;&gt; 
&gt;&gt; Also, InitialState would be better as UnscheduledState
&gt; 
&gt; But don&apos;t these names need to match the names used in the idl?  Or are you also proposing that the idl use camel case names. (This doesn&apos;t match the existing idl naming in other nodes.)

Changed to match IDL names.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:52
&gt;&gt; +        // SCHEDULED state, silence is actually being played.)
&gt; 
&gt; I would remove the &quot;Note&quot; because this is a detail which can be optimized -- let&apos;s try to keep the description of the states minimal
&gt; 
&gt; (Note that in the SCHEDULED state, silence is actually being played.)

Removed.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:55
&gt;&gt; +        // Currently playing.
&gt; 
&gt; Comment does not add much value.  Maybe mention that scheduled time &lt;= context time

Removed.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:58
&gt;&gt; +        // Finished playing.
&gt; 
&gt; Comment does not add value.  Please describe what &quot;finished&quot; means.

Removed.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:88
&gt;&gt; +    // Get and reset the number of sources that are currently playing.
&gt; 
&gt; I would split this comment into two comments, one for each method

Removed because the count is in context.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:89
&gt;&gt; +    static unsigned int activeSourceCount() { return AudioBufferSourceNode::m_activeSourceCount; }
&gt; 
&gt; &quot;unsigned int&quot; -&gt; &quot;unsigned&quot;

Removed because the count is in the context.

&gt;&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:163
&gt;&gt;&gt; +    static unsigned int m_activeSourceCount;
&gt;&gt; 
&gt;&gt; &quot;unsigned int&quot; -&gt; &quot;unsigned&quot;
&gt;&gt; 
&gt;&gt; Also, use the &quot;s_&quot; prefix for static members instead of &quot;m_&quot;
&gt;&gt; 
&gt;&gt; Actually, come to think of it, this can&apos;t be a static member variable of AudioBufferSourceNode --- what if there are multiple contexts??
&gt;&gt; Instead, this will have to be a member variable of the AudioContext
&gt; 
&gt; After implementing this, I was wondering if it would be better to have it in the AudioContext, because it is an audio context item, not an audio buffer source node item.
&gt; 
&gt; With multiple contexts, it&apos;s clear that it should be in the context.

Moved from here to AudioContext.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.idl:34
&gt;&gt; +        const unsigned short INITIAL = 0;
&gt; 
&gt; INITIAL -&gt; UNSCHEDULED
&gt; 
&gt; Please add &quot;_STATE&quot; to all the constants -- for example, UNSCHEDULED_STATE

Done.

&gt;&gt; LayoutTests/webaudio/audiobuffersource-activeSourceCount.html:37
&gt;&gt; +function playbackStateString(state)
&gt; 
&gt; This function seems to be unused please remove to make this test shorter.

Removed.

&gt;&gt; LayoutTests/webaudio/audiobuffersource-activeSourceCount.html:100
&gt;&gt; +    var suffixMessage = &quot; after &quot; + renderTime + &quot; sec.&quot;;
&gt; 
&gt; could you please spell out the complete word &quot;seconds&quot; or &quot;second&quot;  here and elsewhere in the test

Done.

&gt;&gt; LayoutTests/webaudio/audiobuffersource-activeSourceCount.html:159
&gt;&gt; +    // Test PLAYING state for looping source. Create .5 sec source starting at time 1.25 and looping
&gt; 
&gt; nit: you use 0.5 below, but .5 here

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570892</commentid>
    <comment_count>8</comment_count>
      <attachid>130169</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-05 11:44:19 -0800</bug_when>
    <thetext>Created attachment 130169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570900</commentid>
    <comment_count>9</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-05 11:47:56 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=130169) [details]
&gt; Patch

Small update to use atomic increments and decrements of the active source count.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579840</commentid>
    <comment_count>10</comment_count>
      <attachid>130169</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-15 16:01:08 -0700</bug_when>
    <thetext>Comment on attachment 130169
Patch

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

Looks good overall:

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:117
&gt; +            || (m_playbackState == FINISHED_STATE)

I think the logic in 116:117 can be made more clear if you simply check for (m_playbackState == UNSCHEDULED_STATE || m_playbackState == FINISHED_STATE)

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:128
&gt; +            // SCHEDULED_STATE state to the PLAYING_STATE state.

&quot;the SCHEDULED_STATE state to the PLAYING_STATE state&quot; -&gt; &quot;SCHEDULED_STATE to PLAYING_STATE&quot;

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:356
&gt; +        // Finished playing, so decrement the active source count.

WebKit style is to avoid redundant comments.

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:402
&gt; +    if (m_playbackState == SCHEDULED_STATE || m_playbackState == PLAYING_STATE)

shouldn&apos;t this be:

if (m_playbackState != UNSCHEDULED_STATE)

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:415
&gt; +    if (m_playbackState == SCHEDULED_STATE || m_playbackState == PLAYING_STATE)

same comment as for noteOn() above

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:49
&gt; +    // UNSCHEDULED_STATE - Initial playback state. Node created, but not yet scheduled.

&quot;Node created&quot; -&gt; &quot;Created&quot;

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:51
&gt; +    // PLAYING_STATE - The buffer source is currently playing

&quot;The buffer source is currently playing&quot; -&gt; &quot;Generating sound.&quot;

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:52
&gt; +    // FINISHED_STATE - The buffer source has finished playing

&quot;The buffer source has finished playing&quot; -&gt; &quot;Finished generating sound.&quot;

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:87
&gt; +    // Playback state

WebKit style is to avoid redundant comments such as this

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:162
&gt; +    // Playback state.  

WebKit style is to avoid redundant comments such as this

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:163
&gt; +    enum PlaybackState m_playbackState;

the &quot;enum&quot; keyword is not needed here

&gt; Source/WebCore/webaudio/AudioContext.h:99
&gt; +    unsigned int activeSourceCount() { return static_cast&lt;unsigned&gt;(m_activeSourceCount); }

&quot;unsigned int&quot; -&gt; &quot;unsigned long&quot;

&gt; Source/WebCore/webaudio/AudioContext.idl:50
&gt; +        readonly attribute unsigned int activeSourceCount;

&quot;unsigned int&quot; -&gt; &quot;unsigned long&quot;

&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:98
&gt; +    // Test unscheduled state. Create 3 second source, but don&apos;t schedule it.

These tests look great, but it looks like there&apos;s an awful lot of boilerplate copy/paste here.  I think it would be better to create a function which takes:
* impulse buffer duration
* noteOn time -- if any
* expected state

I think it&apos;s probably overkill to hand-code/construct separate PASS/FAIL messages.  It&apos;s obvious to see if the test passed or failed (since it outputs PASS or FAIL already) and
we should be able to construct a generic message that makes sense for either case in the function I&apos;m proposing above.

If a function is used as I propose then I think this code becomes a lot easier to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580678</commentid>
    <comment_count>11</comment_count>
      <attachid>130169</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-16 10:56:42 -0700</bug_when>
    <thetext>Comment on attachment 130169
Patch

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

Just a few questions; other suggested changes in progress....

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:402
&gt;&gt; +    if (m_playbackState == SCHEDULED_STATE || m_playbackState == PLAYING_STATE)
&gt; 
&gt; shouldn&apos;t this be:
&gt; 
&gt; if (m_playbackState != UNSCHEDULED_STATE)

What if the state is FINISHED_STATE?  What if we call noteOn, wait some time until after the source has played out and call noteOn again?  Should we play the note again?

I was trying to follow the original logic as closely as possible where m_isPlaying is equivalent to SCHEDULED_STATE or PLAYING_STATE.

&gt;&gt; Source/WebCore/webaudio/AudioContext.h:99
&gt;&gt; +    unsigned int activeSourceCount() { return static_cast&lt;unsigned&gt;(m_activeSourceCount); }
&gt; 
&gt; &quot;unsigned int&quot; -&gt; &quot;unsigned long&quot;

Aren&apos;t 4 billion active sources enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580751</commentid>
    <comment_count>12</comment_count>
      <attachid>130169</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-16 11:55:35 -0700</bug_when>
    <thetext>Comment on attachment 130169
Patch

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

&gt;&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:402
&gt;&gt;&gt; +    if (m_playbackState == SCHEDULED_STATE || m_playbackState == PLAYING_STATE)
&gt;&gt; 
&gt;&gt; shouldn&apos;t this be:
&gt;&gt; 
&gt;&gt; if (m_playbackState != UNSCHEDULED_STATE)
&gt; 
&gt; What if the state is FINISHED_STATE?  What if we call noteOn, wait some time until after the source has played out and call noteOn again?  Should we play the note again?
&gt; 
&gt; I was trying to follow the original logic as closely as possible where m_isPlaying is equivalent to SCHEDULED_STATE or PLAYING_STATE.

Good point, probably best to keep your version then.

&gt;&gt;&gt; Source/WebCore/webaudio/AudioContext.h:99
&gt;&gt;&gt; +    unsigned int activeSourceCount() { return static_cast&lt;unsigned&gt;(m_activeSourceCount); }
&gt;&gt; 
&gt;&gt; &quot;unsigned int&quot; -&gt; &quot;unsigned long&quot;
&gt; 
&gt; Aren&apos;t 4 billion active sources enough?

I was just trying to keep this exactly consistent with the .idl file which is &quot;unsigned long&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580975</commentid>
    <comment_count>13</comment_count>
      <attachid>132384</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-16 14:36:37 -0700</bug_when>
    <thetext>Created attachment 132384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580976</commentid>
    <comment_count>14</comment_count>
      <attachid>130169</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-16 14:37:42 -0700</bug_when>
    <thetext>Comment on attachment 130169
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:117
&gt;&gt; +            || (m_playbackState == FINISHED_STATE)
&gt; 
&gt; I think the logic in 116:117 can be made more clear if you simply check for (m_playbackState == UNSCHEDULED_STATE || m_playbackState == FINISHED_STATE)

Done.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:128
&gt;&gt; +            // SCHEDULED_STATE state to the PLAYING_STATE state.
&gt; 
&gt; &quot;the SCHEDULED_STATE state to the PLAYING_STATE state&quot; -&gt; &quot;SCHEDULED_STATE to PLAYING_STATE&quot;

Done.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:356
&gt;&gt; +        // Finished playing, so decrement the active source count.
&gt; 
&gt; WebKit style is to avoid redundant comments.

Done.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:49
&gt;&gt; +    // UNSCHEDULED_STATE - Initial playback state. Node created, but not yet scheduled.
&gt; 
&gt; &quot;Node created&quot; -&gt; &quot;Created&quot;

Done.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:51
&gt;&gt; +    // PLAYING_STATE - The buffer source is currently playing
&gt; 
&gt; &quot;The buffer source is currently playing&quot; -&gt; &quot;Generating sound.&quot;

Done.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:52
&gt;&gt; +    // FINISHED_STATE - The buffer source has finished playing
&gt; 
&gt; &quot;The buffer source has finished playing&quot; -&gt; &quot;Finished generating sound.&quot;

Done.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:87
&gt;&gt; +    // Playback state
&gt; 
&gt; WebKit style is to avoid redundant comments such as this

Done.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:162
&gt;&gt; +    // Playback state.  
&gt; 
&gt; WebKit style is to avoid redundant comments such as this

Done.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:163
&gt;&gt; +    enum PlaybackState m_playbackState;
&gt; 
&gt; the &quot;enum&quot; keyword is not needed here

Done.

&gt;&gt;&gt;&gt; Source/WebCore/webaudio/AudioContext.h:99
&gt;&gt;&gt;&gt; +    unsigned int activeSourceCount() { return static_cast&lt;unsigned&gt;(m_activeSourceCount); }
&gt;&gt;&gt; 
&gt;&gt;&gt; &quot;unsigned int&quot; -&gt; &quot;unsigned long&quot;
&gt;&gt; 
&gt;&gt; Aren&apos;t 4 billion active sources enough?
&gt; 
&gt; I was just trying to keep this exactly consistent with the .idl file which is &quot;unsigned long&quot;

Done.

&gt;&gt; Source/WebCore/webaudio/AudioContext.idl:50
&gt;&gt; +        readonly attribute unsigned int activeSourceCount;
&gt; 
&gt; &quot;unsigned int&quot; -&gt; &quot;unsigned long&quot;

Done.

&gt;&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:98
&gt;&gt; +    // Test unscheduled state. Create 3 second source, but don&apos;t schedule it.
&gt; 
&gt; These tests look great, but it looks like there&apos;s an awful lot of boilerplate copy/paste here.  I think it would be better to create a function which takes:
&gt; * impulse buffer duration
&gt; * noteOn time -- if any
&gt; * expected state
&gt; 
&gt; I think it&apos;s probably overkill to hand-code/construct separate PASS/FAIL messages.  It&apos;s obvious to see if the test passed or failed (since it outputs PASS or FAIL already) and
&gt; we should be able to construct a generic message that makes sense for either case in the function I&apos;m proposing above.
&gt; 
&gt; If a function is used as I propose then I think this code becomes a lot easier to follow.

Common code factored out, and messages simplified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581007</commentid>
    <comment_count>15</comment_count>
      <attachid>132384</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-16 15:07:38 -0700</bug_when>
    <thetext>Comment on attachment 132384
Patch

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

Looks pretty good overall - a few more comments:

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:126
&gt; +            // PLAYING_STATE.

unnecessary line wrapping.

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:399
&gt; +    if (m_playbackState == SCHEDULED_STATE || m_playbackState == PLAYING_STATE)

Sorry, but I misunderstood your response before, so I stick with my original comment (because it is *not* allowed to issue multiple noteOn() calls - for example after a note has finished playing the first time -- a 2nd time is not allowed)
In fact this is explicitly stated in the header file:
// The state can only transition to the next state, except for the FINISHED_STATE which can
// never be changed.

shouldn&apos;t this be:
if (m_playbackState != UNSCHEDULED_STATE)

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:412
&gt; +    if (m_playbackState == SCHEDULED_STATE || m_playbackState == PLAYING_STATE)

Sorry, but I misunderstood your response before, so I stick with my original comment (because it is *not* allowed to issue multiple noteOn() calls - for example after a note has finished playing the first time -- a 2nd time is not allowed)

shouldn&apos;t this be:
if (m_playbackState != UNSCHEDULED_STATE)

&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:50
&gt; +    // SCHEDULED_STATE - Scheduled to play (via noteOn or noteGrainOn), but not yet playing.

noteOn -&gt; noteOn()
noteGrainOn -&gt; noteGrainOn()

&gt; LayoutTests/webaudio/audiobuffersource-playbackState-expected.txt:1
&gt; +Test AudioContext activeStateCount and AudioBufferSourceNode playbackState.

activeStateCount -&gt; activeSourceCount

&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:13
&gt; +description(&quot;Test AudioContext activeStateCount and AudioBufferSourceNode playbackState.&quot;);

activeStateCount -&gt; activeSourceCount

&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:46
&gt; +    // For each source, verify that the playback state matches our expected play back state.

&quot;play back&quot; -&gt; &quot;playback&quot;

&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:84
&gt; +//

Lines 83:84 can be removed -- in any case the function is called createTest()

&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:163
&gt; +    // second.  This will finish before rendering is complete.

This comment looks wrong

&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:181
&gt; +    // looping afterwards.  This will still be playing when rendering is complete.

This comment looks wrong -- I&apos;m inclined to just remove all of these comments since it&apos;s easier to just look at the arguments passed to createTest() to understand what&apos;s happening.
The comments add clutter/redundancy and are easy to get wrong (causing confusion)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581035</commentid>
    <comment_count>16</comment_count>
      <attachid>132397</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-16 15:28:29 -0700</bug_when>
    <thetext>Created attachment 132397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581036</commentid>
    <comment_count>17</comment_count>
      <attachid>132384</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-16 15:28:50 -0700</bug_when>
    <thetext>Comment on attachment 132384
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:126
&gt;&gt; +            // PLAYING_STATE.
&gt; 
&gt; unnecessary line wrapping.

Fixed.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:399
&gt;&gt; +    if (m_playbackState == SCHEDULED_STATE || m_playbackState == PLAYING_STATE)
&gt; 
&gt; Sorry, but I misunderstood your response before, so I stick with my original comment (because it is *not* allowed to issue multiple noteOn() calls - for example after a note has finished playing the first time -- a 2nd time is not allowed)
&gt; In fact this is explicitly stated in the header file:
&gt; // The state can only transition to the next state, except for the FINISHED_STATE which can
&gt; // never be changed.
&gt; 
&gt; shouldn&apos;t this be:
&gt; if (m_playbackState != UNSCHEDULED_STATE)

Fixed.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.cpp:412
&gt;&gt; +    if (m_playbackState == SCHEDULED_STATE || m_playbackState == PLAYING_STATE)
&gt; 
&gt; Sorry, but I misunderstood your response before, so I stick with my original comment (because it is *not* allowed to issue multiple noteOn() calls - for example after a note has finished playing the first time -- a 2nd time is not allowed)
&gt; 
&gt; shouldn&apos;t this be:
&gt; if (m_playbackState != UNSCHEDULED_STATE)

Fixed.

&gt;&gt; Source/WebCore/webaudio/AudioBufferSourceNode.h:50
&gt;&gt; +    // SCHEDULED_STATE - Scheduled to play (via noteOn or noteGrainOn), but not yet playing.
&gt; 
&gt; noteOn -&gt; noteOn()
&gt; noteGrainOn -&gt; noteGrainOn()

Done.

&gt;&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:13
&gt;&gt; +description(&quot;Test AudioContext activeStateCount and AudioBufferSourceNode playbackState.&quot;);
&gt; 
&gt; activeStateCount -&gt; activeSourceCount

Done.  Expected results updated accordingly.

&gt;&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:46
&gt;&gt; +    // For each source, verify that the playback state matches our expected play back state.
&gt; 
&gt; &quot;play back&quot; -&gt; &quot;playback&quot;

Done.

&gt;&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:84
&gt;&gt; +//
&gt; 
&gt; Lines 83:84 can be removed -- in any case the function is called createTest()

Done.

&gt;&gt; LayoutTests/webaudio/audiobuffersource-playbackState.html:181
&gt;&gt; +    // looping afterwards.  This will still be playing when rendering is complete.
&gt; 
&gt; This comment looks wrong -- I&apos;m inclined to just remove all of these comments since it&apos;s easier to just look at the arguments passed to createTest() to understand what&apos;s happening.
&gt; The comments add clutter/redundancy and are easy to get wrong (causing confusion)

Comments removed here and elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582118</commentid>
    <comment_count>18</comment_count>
      <attachid>132397</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-19 13:15:31 -0700</bug_when>
    <thetext>Comment on attachment 132397
Patch

Thanks Raymond, looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582125</commentid>
    <comment_count>19</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-19 13:19:41 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 132397 [details])
&gt; Thanks Raymond, looks good.

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582194</commentid>
    <comment_count>20</comment_count>
      <attachid>132397</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 13:55:07 -0700</bug_when>
    <thetext>Comment on attachment 132397
Patch

Clearing flags on attachment: 132397

Committed r111239: &lt;http://trac.webkit.org/changeset/111239&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582195</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 13:55:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582837</commentid>
    <comment_count>22</comment_count>
      <attachid>130169</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-20 00:57:31 -0700</bug_when>
    <thetext>Comment on attachment 130169
Patch

Cleared review? from obsolete attachment 130169 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129098</attachid>
            <date>2012-02-27 14:20:38 -0800</date>
            <delta_ts>2012-02-29 10:36:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79701-20120227142037.patch</filename>
            <type>text/plain</type>
            <size>23390</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTAwMGU4YjM3MTYwNGZl
MmU5NDMwNTQ4NjZlNDc3NjFkYzkwYTUxMy4uNzA5M2RhMDdkYzY1N2EzNGE2ZDlhY2VjZjNhNGJk
M2FiMjE4MTI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTAyLTI3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgcGxheWJhY2sgc3RhdGUg
Zm9yIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBhbmQgYWRkIG51bWJlciBvZiBhY3RpdmUgbm9kZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzAxCisK
KyAgICAgICAgQWRkIGEgcGxheWJhY2sgc3RhdGUgdG8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHNv
IHRoYXQgdGhlIHVzZXIgY2FuCisgICAgICAgIHRlbGwgaWYgdGhlIG5vZGUgaXMgc2NoZWR1bGVk
LCBwbGF5aW5nLCBvciBmaW5pc2hlZC4KKworICAgICAgICBBbHNvIGFkZCBhIGNvdW50IG9mIHRo
ZSBudW1iZXIgb2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlJ3MgdGhhdCBhcmUKKyAgICAgICAgYWN0
aXZlIChwbGF5aW5nIGF1ZGlvKS4KKworICAgICAgICBEZWxldGVkIG1faXNQbGF5aW5nIGFuZCBt
X2hhc0ZpbmlzaGVkLiBGb3IgdGhlIHJlY29yZCwgbV9pc1BsYXlpbmcKKyAgICAgICAgaXMgdGhl
IHNhbWUgYXMgYSBwbGF5YmFja1N0YXRlIG9mIFNDSEVEVUxFRCBvciBQTEFZSU5HLgorICAgICAg
ICBtX2hhc0ZpbmlzaGVkIGlzIGVxdWl2YWxlbnQgdG8gYSBwbGF5YmFja1N0YXRlIG9mIEZJTklT
SEVELgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdDogd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtYWN0aXZlU291cmNlQ291bnQu
aHRtbAorCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2Rl
OjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJT
b3VyY2VOb2RlOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6cmVuZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVPbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1
ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFpbk9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVm
ZmVyU291cmNlTm9kZTo6bm90ZU9mZik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNv
dXJjZU5vZGU6OnNldExvb3BpbmcpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyU291
cmNlTm9kZS5oOgorICAgICAgICAoQXVkaW9CdWZmZXJTb3VyY2VOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cGxheWJhY2tTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmFjdGl2ZVNvdXJjZUNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVzZXRBY3RpdmVTb3VyY2VDb3Vu
dCk6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbDoKKyAgICAg
ICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0Ojpjb25zdHJ1Y3RDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0
OjphY3RpdmVTb3VyY2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQ29udGV4dDo6cmVzZXRBY3RpdmVTb3VyY2VDb3VudCk6CisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAgICAgIChBdWRpb0NvbnRleHQpOgorICAgICAgICAq
IHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGw6CisKIDIwMTItMDItMjMgIExldmkgV2VpbnRyYXVi
ICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN3aXRjaCBkcmF3TGluZUZvckJveFNp
ZGUgdG8gdXNlIGludGVnZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmNwcAppbmRleCBkYjlkM2VkM2JmZWE2MDZjMjcwNmI0N2ExNThkODVl
ZGFhNjY2NjViLi5iNWFjOTc3NDBkY2QzZjhlNjcyYTliNjFhNDA2Njg1MzdjZDYxMjE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAK
QEAgLTUwLDYgKzUwLDkgQEAgY29uc3QgZG91YmxlIFVua25vd25UaW1lID0gLTE7CiAvLyB0byBt
aW5pbWl6ZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBhbGlhc2luZy4KIGNvbnN0IGRvdWJsZSBNYXhS
YXRlID0gMTAyNDsKIAorLy8gTnVtYmVyIG9mIGFjdGl2ZSAocGxheWluZykgQXVkaW9CdWZmZXJT
b3VyY2VOb2Rlcy4KK3Vuc2lnbmVkIGludCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om1fYWN0aXZl
U291cmNlQ291bnQgPSAwOworCiBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gQXVk
aW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBz
YW1wbGVSYXRlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZmZXJTb3VyY2VO
b2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKQEAgLTU4LDkgKzYxLDcgQEAgUGFzc1JlZlB0cjxB
dWRpb0J1ZmZlclNvdXJjZU5vZGU+IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6Y3JlYXRlKEF1ZGlv
Q29udGV4dCogY28KIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2Rl
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICA6IEF1ZGlvU291
cmNlTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQogICAgICwgbV9idWZmZXIoMCkKLSAgICAsIG1f
aXNQbGF5aW5nKGZhbHNlKQogICAgICwgbV9pc0xvb3BpbmcoZmFsc2UpCi0gICAgLCBtX2hhc0Zp
bmlzaGVkKGZhbHNlKQogICAgICwgbV9zdGFydFRpbWUoMC4wKQogICAgICwgbV9lbmRUaW1lKFVu
a25vd25UaW1lKQogICAgICwgbV92aXJ0dWFsUmVhZEluZGV4KDApCkBAIC02OSw2ICs3MCw3IEBA
IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlKEF1ZGlvQ29udGV4
dCogY29udGV4dCwgZmxvYXQgc2FtcGxlCiAgICAgLCBtX2dyYWluRHVyYXRpb24oRGVmYXVsdEdy
YWluRHVyYXRpb24pCiAgICAgLCBtX2xhc3RHYWluKDEuMCkKICAgICAsIG1fcGFubmVyTm9kZSgw
KQorICAgICwgbV9wbGF5YmFja1N0YXRlKElOSVRJQUwpCiB7CiAgICAgc2V0Tm9kZVR5cGUoTm9k
ZVR5cGVBdWRpb0J1ZmZlclNvdXJjZSk7CiAKQEAgLTExMCwxOCArMTEyLDI3IEBAIHZvaWQgQXVk
aW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAKICAg
ICAgICAgLy8gSWYgd2Uga25vdyB0aGUgZW5kIHRpbWUgYW5kIGl0J3MgYWxyZWFkeSBwYXNzZWQs
IHRoZW4gZG9uJ3QgYm90aGVyIGRvaW5nIGFueSBtb3JlIHJlbmRlcmluZyB0aGlzIGN5Y2xlLgog
ICAgICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1lICYmIGVuZEZyYW1lIDw9IHF1YW50
dW1TdGFydEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogICAgICAg
ICAgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKICAgICAgICAgICAgIGZpbmlzaCgpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIW1faXNQbGF5aW5nIHx8IG1faGFzRmluaXNo
ZWQgfHwgIWJ1ZmZlcigpIHx8IHN0YXJ0RnJhbWUgPj0gcXVhbnR1bUVuZEZyYW1lKSB7CisgICAg
ICAgIGlmICghKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRUQgfHwgbV9wbGF5YmFja1N0YXRl
ID09IFBMQVlJTkcpCisgICAgICAgICAgICB8fCAobV9wbGF5YmFja1N0YXRlID09IEZJTklTSEVE
KQorICAgICAgICAgICAgfHwgIWJ1ZmZlcigpCisgICAgICAgICAgICB8fCBzdGFydEZyYW1lID49
IHF1YW50dW1FbmRGcmFtZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IGNhbiBvcHRpbWl6ZSBo
ZXJlIGJ5IHByb3BhZ2F0aW5nIHNpbGVudCBoaW50IGluc3RlYWQgb2YgZm9yY2luZyB0aGUgd2hv
bGUgY2hhaW4gdG8gcHJvY2VzcyBzaWxlbmNlLgogICAgICAgICAgICAgb3V0cHV0QnVzLT56ZXJv
KCk7CiAgICAgICAgICAgICBtX3Byb2Nlc3NMb2NrLnVubG9jaygpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVM
RUQpIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgYWN0aXZlIHNvdXJjZSBjb3VudCBv
bmx5IGlmIHdlJ3JlIHRyYW5zaXRpb25pbmcgZnJvbSB0aGUgU0NIRURVTEVECisgICAgICAgICAg
ICAvLyBzdGF0ZSB0byB0aGUgUExBWUlORyBzdGF0ZS4KKyAgICAgICAgICAgIG1fcGxheWJhY2tT
dGF0ZSA9IFBMQVlJTkc7CisgICAgICAgICAgICArK0F1ZGlvQnVmZmVyU291cmNlTm9kZTo6bV9h
Y3RpdmVTb3VyY2VDb3VudDsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc2l6ZV90IHF1
YW50dW1GcmFtZU9mZnNldCA9IHN0YXJ0RnJhbWUgPiBxdWFudHVtU3RhcnRGcmFtZSA/IHN0YXJ0
RnJhbWUgLSBxdWFudHVtU3RhcnRGcmFtZSA6IDA7CiAgICAgICAgIHF1YW50dW1GcmFtZU9mZnNl
dCA9IG1pbihxdWFudHVtRnJhbWVPZmZzZXQsIGZyYW1lc1RvUHJvY2Vzcyk7IC8vIGNsYW1wIHRv
IHZhbGlkIHJhbmdlCiAgICAgICAgIHNpemVfdCBidWZmZXJGcmFtZXNUb1Byb2Nlc3MgPSBmcmFt
ZXNUb1Byb2Nlc3MgLSBxdWFudHVtRnJhbWVPZmZzZXQ7CkBAIC0xNDcsOCArMTU4LDggQEAgdm9p
ZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
ICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KG91dHB1dEJ1cy0+Y2hhbm5lbChpKS0+bXV0YWJs
ZURhdGEoKSArIHplcm9TdGFydEZyYW1lLCAwLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9aZXJv
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKICAg
ICAgICAgICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IDA7CisKICAgICAgICAgICAgIGZpbmlzaCgp
OwogICAgICAgICB9CiAKQEAgLTE2NCw3ICsxNzUsNiBAQCBib29sIEF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6cmVuZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyhmbG9hdCogZGVzdGluYXRp
bwogewogICAgIGlmICghbG9vcCgpKSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBsb29waW5n
LCB0aGVuIHN0b3AgcGxheWluZyB3aGVuIHdlIGdldCB0byB0aGUgZW5kLgotICAgICAgICBtX2lz
UGxheWluZyA9IGZhbHNlOwogCiAgICAgICAgIGlmIChmcmFtZXNUb1Byb2Nlc3MgPiAwKSB7CiAg
ICAgICAgICAgICAvLyBXZSdyZSBub3QgbG9vcGluZyBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZW5k
IG9mIHRoZSBzYW1wbGUgZGF0YSwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gcHJvdmlkZSBtb3JlIG91
dHB1dCwKQEAgLTM1OSwxMCArMzY5LDEyIEBAIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpy
ZXNldCgpCiAKIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpmaW5pc2goKQogewotICAgIGlm
ICghbV9oYXNGaW5pc2hlZCkgeworICAgIGlmIChtX3BsYXliYWNrU3RhdGUgIT0gRklOSVNIRUQp
IHsKICAgICAgICAgLy8gTGV0IHRoZSBjb250ZXh0IGRlcmVmZXJlbmNlIHRoaXMgQXVkaW9Ob2Rl
LgogICAgICAgICBjb250ZXh0KCktPm5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcodGhpcyk7
Ci0gICAgICAgIG1faGFzRmluaXNoZWQgPSB0cnVlOworICAgICAgICAvLyBGaW5pc2hlZCBwbGF5
aW5nLCBzbyBkZWNyZW1lbnQgdGhlIGFjdGl2ZSBzb3VyY2UgY291bnQuCisgICAgICAgIG1fcGxh
eWJhY2tTdGF0ZSA9IEZJTklTSEVEOworICAgICAgICAtLUF1ZGlvQnVmZmVyU291cmNlTm9kZTo6
bV9hY3RpdmVTb3VyY2VDb3VudDsKICAgICB9CiB9CiAKQEAgLTQwMCwxOSArNDEyLDIwIEBAIHVu
c2lnbmVkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bnVtYmVyT2ZDaGFubmVscygpCiB2b2lkIEF1
ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZU9uKGRvdWJsZSB3aGVuKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1faXNQbGF5aW5nKQorICAgIGlmIChtX3BsYXliYWNr
U3RhdGUgPT0gU0NIRURVTEVEIHx8IG1fcGxheWJhY2tTdGF0ZSA9PSBQTEFZSU5HKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2lzR3JhaW4gPSBmYWxzZTsKICAgICBtX3N0YXJ0VGltZSA9IHdo
ZW47CiAgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKLSAgICBtX2lzUGxheWluZyA9IHRydWU7
CisgICAgbV9wbGF5YmFja1N0YXRlID0gU0NIRURVTEVEOwogfQogCiB2b2lkIEF1ZGlvQnVmZmVy
U291cmNlTm9kZTo6bm90ZUdyYWluT24oZG91YmxlIHdoZW4sIGRvdWJsZSBncmFpbk9mZnNldCwg
ZG91YmxlIGdyYWluRHVyYXRpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBpZiAobV9pc1BsYXlpbmcpCisKKyAgICBpZiAobV9wbGF5YmFja1N0YXRlID09IFNDSEVEVUxF
RCB8fCBtX3BsYXliYWNrU3RhdGUgPT0gUExBWUlORykKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKCFidWZmZXIoKSkKQEAgLTQ0MiwxMyArNDU1LDEzIEBAIHZvaWQgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjpub3RlR3JhaW5Pbihkb3VibGUgd2hlbiwgZG91YmxlIGdyYWluT2Zmc2V0LCBkb3Vi
bGUKICAgICAvLyBTaW5jZSBwbGF5YmFja1JhdGUgPT0gMSBpcyB2ZXJ5IGNvbW1vbiwgaXQncyB3
b3J0aCBjb25zaWRlcmluZyBxdWFsaXR5LgogICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IEF1ZGlv
VXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShtX2dyYWluT2Zmc2V0LCBidWZmZXIoKS0+c2Ft
cGxlUmF0ZSgpKTsKICAgICAKLSAgICBtX2lzUGxheWluZyA9IHRydWU7CisgICAgbV9wbGF5YmFj
a1N0YXRlID0gU0NIRURVTEVEOwogfQogCiB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90
ZU9mZihkb3VibGUgd2hlbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
ICghbV9pc1BsYXlpbmcpCisgICAgaWYgKCEobV9wbGF5YmFja1N0YXRlID09IFNDSEVEVUxFRCB8
fCBtX3BsYXliYWNrU3RhdGUgPT0gUExBWUlORykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICB3aGVuID0gbWF4KDAuMCwgd2hlbik7CkBAIC01MDYsNyArNTE5LDYgQEAgdm9pZCBBdWRpb0J1
ZmZlclNvdXJjZU5vZGU6OnNldExvb3BpbmcoYm9vbCBsb29waW5nKQogCiAgICAgbV9pc0xvb3Bp
bmcgPSBsb29waW5nOwogfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9CdWZmZXJTb3VyY2VOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZl
clNvdXJjZU5vZGUuaAppbmRleCA0OTA5MWMwMTdiMzZkMTJjZTJiNWU0M2FiN2JlODJjYWY0ODM1
ZjRiLi4xNGZiMjkyMDRmMDg2NzM5MThkOThmYzE3MzMzN2VmY2MxNDc1Mjk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaApAQCAtNDMsNiAr
NDMsMjIgQEAgY2xhc3MgQXVkaW9Db250ZXh0OwogCiBjbGFzcyBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGUgOiBwdWJsaWMgQXVkaW9Tb3VyY2VOb2RlIHsKIHB1YmxpYzoKKyAgICAvLyBUaGVzZSBtdXN0
IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZS4KKyAgICBlbnVtIHBsYXliYWNrU3RhdGVf
dCB7CisgICAgICAgIC8vIEluaXRpYWwgcGxheWJhY2sgc3RhdGUuIE5vZGUgY3JlYXRlZCwgYnV0
IG5vdCB5ZXQgc2NoZWR1bGVkLgorICAgICAgICBJTklUSUFMID0gMCwKKworICAgICAgICAvLyBT
Y2hlZHVsZWQgdG8gcGxheSAodmlhIG5vdGVPbiBvciBub3RlR3JhaW5PbiksIGJ1dCBub3QgeWV0
IHBsYXlpbmcuIChOb3RlIHRoYXQgaW4gdGhlCisgICAgICAgIC8vIFNDSEVEVUxFRCBzdGF0ZSwg
c2lsZW5jZSBpcyBhY3R1YWxseSBiZWluZyBwbGF5ZWQuKQorICAgICAgICBTQ0hFRFVMRUQgPSAx
LAorCisgICAgICAgIC8vIEN1cnJlbnRseSBwbGF5aW5nLgorICAgICAgICBQTEFZSU5HID0gMiwK
KworICAgICAgICAvLyBGaW5pc2hlZCBwbGF5aW5nLgorICAgICAgICBGSU5JU0hFRCA9IDMKKyAg
ICB9OworICAgIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4g
Y3JlYXRlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCiAgICAgdmlydHVhbCB+
QXVkaW9CdWZmZXJTb3VyY2VOb2RlKCk7CkBAIC02Niw2ICs4MiwxMyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBub3RlR3JhaW5Pbihkb3VibGUgd2hlbiwgZG91YmxlIGdyYWluT2Zmc2V0LCBkb3VibGUg
Z3JhaW5EdXJhdGlvbik7CiAgICAgdm9pZCBub3RlT2ZmKGRvdWJsZSB3aGVuKTsKIAorICAgIC8v
IFBsYXliYWNrIHN0YXRlCisgICAgdW5zaWduZWQgc2hvcnQgcGxheWJhY2tTdGF0ZSgpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihtX3BsYXliYWNrU3RhdGUpOyB9CisKKyAg
ICAvLyBHZXQgYW5kIHJlc2V0IHRoZSBudW1iZXIgb2Ygc291cmNlcyB0aGF0IGFyZSBjdXJyZW50
bHkgcGxheWluZy4KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGFjdGl2ZVNvdXJjZUNvdW50KCkg
eyByZXR1cm4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjptX2FjdGl2ZVNvdXJjZUNvdW50OyB9Cisg
ICAgc3RhdGljIHZvaWQgcmVzZXRBY3RpdmVTb3VyY2VDb3VudCgpIHsgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjptX2FjdGl2ZVNvdXJjZUNvdW50ID0gMDsgfQorICAgIAogICAgIC8vIE5vdGU6IHRo
ZSBhdHRyaWJ1dGUgd2FzIG9yaWdpbmFsbHkgZXhwb3NlZCBhcyAubG9vcGluZywgYnV0IHRvIGJl
IG1vcmUgY29uc2lzdGVudCBpbiBuYW1pbmcgd2l0aCA8YXVkaW8+CiAgICAgLy8gYW5kIHdpdGgg
aG93IGl0J3MgZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGUgcHJvcGVyIGF0dHJp
YnV0ZSBuYW1lIGlzIC5sb29wCiAgICAgLy8gVGhlIG9sZCBhdHRyaWJ1dGUgaXMga2VwdCBmb3Ig
YmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCkBAIC05NiwxNyArMTE5LDEwIEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPEF1ZGlvR2Fpbj4gbV9nYWluOwogICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3Bs
YXliYWNrUmF0ZTsKIAotICAgIC8vIG1faXNQbGF5aW5nIGlzIHNldCB0byB0cnVlIHdoZW4gbm90
ZU9uKCkgb3Igbm90ZUdyYWluT24oKSBpcyBjYWxsZWQuCi0gICAgYm9vbCBtX2lzUGxheWluZzsK
LQogICAgIC8vIElmIG1faXNMb29waW5nIGlzIGZhbHNlLCB0aGVuIHRoaXMgbm9kZSB3aWxsIGJl
IGRvbmUgcGxheWluZyBhbmQgYmVjb21lIGluYWN0aXZlIGFmdGVyIGl0IHJlYWNoZXMgdGhlIGVu
ZCBvZiB0aGUgc2FtcGxlIGRhdGEgaW4gdGhlIGJ1ZmZlci4KICAgICAvLyBJZiB0cnVlLCBpdCB3
aWxsIHdyYXAgYXJvdW5kIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIGVhY2ggdGltZSBpdCBy
ZWFjaGVzIHRoZSBlbmQuCiAgICAgYm9vbCBtX2lzTG9vcGluZzsKIAotICAgIC8vIFRoaXMgbm9k
ZSBpcyBjb25zaWRlcmVkIGZpbmlzaGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBi
dWZmZXIncyBzYW1wbGUgZGF0YSBhZnRlciBub3RlT24oKSBoYXMgYmVlbiBjYWxsZWQuCi0gICAg
Ly8gVGhpcyB3aWxsIG9ubHkgYmUgc2V0IHRvIHRydWUgaWYgbV9pc0xvb3BpbmcgPT0gZmFsc2Uu
Ci0gICAgYm9vbCBtX2hhc0ZpbmlzaGVkOwotCiAgICAgLy8gbV9zdGFydFRpbWUgaXMgdGhlIHRp
bWUgdG8gc3RhcnQgcGxheWluZyBiYXNlZCBvbiB0aGUgY29udGV4dCdzIHRpbWVsaW5lICgwLjAg
b3IgYSB0aW1lIGxlc3MgdGhhbiB0aGUgY29udGV4dCdzIGN1cnJlbnQgdGltZSBtZWFucyAibm93
IikuCiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOyAvLyBpbiBzZWNvbmRzCiAKQEAgLTEzOSw2ICsx
NTUsMTIgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhhbmRsZXMgdGhlIHRpbWUgd2hlbiB3ZSByZWFj
aCB0aGUgZW5kIG9mIHNhbXBsZSBkYXRhIChub24tbG9vcGluZykgb3IgdGhlIG5vdGVPZmYoKSB0
aW1lIGhhcyBiZWVuIHJlYWNoZWQuCiAgICAgdm9pZCBmaW5pc2goKTsKKworICAgIC8vIFBsYXli
YWNrIHN0YXRlLiAgCisgICAgZW51bSBwbGF5YmFja1N0YXRlX3QgbV9wbGF5YmFja1N0YXRlOwor
ICAgIAorICAgIC8vIE51bWJlciBvZiBBdWRpb0J1ZmZlclNvdXJjZU5vZGUncyB0aGF0IGFyZSBj
dXJyZW50bHkgcGxheWluZyAoaW4gdGhlIHBsYXlpbmcgc3RhdGUpLgorICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgbV9hY3RpdmVTb3VyY2VDb3VudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUu
aWRsCmluZGV4IGVlZGIwY2I3MDk5MTBiMjJjZDAxOWQ3MTEyNTlhOWNlOTQxMTcyNGIuLmRmYmIz
MDEzNDMxYzY4MDNmYzNhNWM4MmM0ZDQzNTk0ODVhMzJjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbApAQCAtMzEsNiArMzEsMTMg
QEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgYXR0cmlidXRlIFtDdXN0b21TZXR0ZXJdIEF1ZGlv
QnVmZmVyIGJ1ZmZlcgogICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
IAorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBJTklUSUFMID0gMDsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgU0NIRURVTEVEID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgUExBWUlORyA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZJTklTSEVE
ID0gMzsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcGxheWJh
Y2tTdGF0ZTsKKwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9HYWluIGdhaW47CiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHBsYXliYWNrUmF0ZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggYWZjODExMzBiMTQ5MTcw
MDYyNDdhZDkyNTJlMWUxNjNlN2I2MWY0Yy4uZGRiNGE5M2YzZDBlZWU5Y2Y5ZDIxYjQyYjY0NDIw
ZjM3MmFjYzZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBA
IC0xNzYsNiArMTc2LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmNvbnN0cnVjdENvbW1vbigpCiAg
ICAgRkZURnJhbWU6OmluaXRpYWxpemUoKTsKICAgICAKICAgICBtX2xpc3RlbmVyID0gQXVkaW9M
aXN0ZW5lcjo6Y3JlYXRlKCk7CisKKyAgICByZXNldEFjdGl2ZVNvdXJjZUNvdW50KCk7CiB9CiAK
IEF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpCkBAIC03NzMsNiArNzc1LDE2IEBAIHZvaWQg
QXVkaW9Db250ZXh0OjpmaXJlQ29tcGxldGlvbkV2ZW50KCkKICAgICB9CiB9CiAKK3Vuc2lnbmVk
IGludCBBdWRpb0NvbnRleHQ6OmFjdGl2ZVNvdXJjZUNvdW50KCkKK3sKKyAgICByZXR1cm4gQXVk
aW9CdWZmZXJTb3VyY2VOb2RlOjphY3RpdmVTb3VyY2VDb3VudCgpOworfQorCit2b2lkIEF1ZGlv
Q29udGV4dDo6cmVzZXRBY3RpdmVTb3VyY2VDb3VudCgpCit7CisgICAgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjpyZXNldEFjdGl2ZVNvdXJjZUNvdW50KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCmluZGV4IDc5MTE1MTliMzgwM2RkOWE3MmJkOTI1Zjg4MWFlYzIxZjY0
OTIyYjMuLmU2M2YyZmE1ZjNmZGExNDhhMGY2MzYzMzMwMmUzMTBkZTQxYmZlZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC05Niw3ICs5Niw4IEBAIHB1YmxpYzoK
ICAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5v
ZGUtPmN1cnJlbnRTYW1wbGVGcmFtZSgpOyB9CiAgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRUaW1lKCk7IH0KICAgICBmbG9hdCBzYW1w
bGVSYXRlKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKTsgfQotCisg
ICAgdW5zaWduZWQgaW50IGFjdGl2ZVNvdXJjZUNvdW50KCk7CisgICAgCiAgICAgUGFzc1JlZlB0
cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNp
emVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciosIGJv
b2wgbWl4VG9Nb25vLCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTIyMiw2ICsyMjMsNyBAQCBwcml2
YXRlOgogICAgIEF1ZGlvQ29udGV4dChEb2N1bWVudCopOwogICAgIEF1ZGlvQ29udGV4dChEb2N1
bWVudCosIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywg
ZmxvYXQgc2FtcGxlUmF0ZSk7CiAgICAgdm9pZCBjb25zdHJ1Y3RDb21tb24oKTsKKyAgICB2b2lk
IHJlc2V0QWN0aXZlU291cmNlQ291bnQoKTsKIAogICAgIHZvaWQgbGF6eUluaXRpYWxpemUoKTsK
ICAgICB2b2lkIHVuaW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5pZGwKaW5kZXggZWY2OTM1NTI2ZmIyNmQ0MzE5MzJhN2ZhY2MwMjE4MjgwZWMyZDFkMi4u
ODM5YTMyMTQzMWQ2OTkzN2RhNDFiOWFmODEzZjg4NjQ2ZTk3Yjk0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCkBAIC00NSw2ICs0NSw5IEBAIG1vZHVsZSB3ZWJh
dWRpbyB7CiAgICAgICAgIC8vIEFsbCBwYW5uaW5nIGlzIHJlbGF0aXZlIHRvIHRoaXMgbGlzdGVu
ZXIuCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0xpc3RlbmVyIGxpc3RlbmVyOwog
CisgICAgICAgIC8vIE51bWJlciBvZiBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzIHRoYXQgYXJlIGN1
cnJlbnRseSBwbGF5aW5nLgorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgaW50
IGFjdGl2ZVNvdXJjZUNvdW50OworICAgICAgICAKICAgICAgICAgQXVkaW9CdWZmZXIgY3JlYXRl
QnVmZmVyKGluIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFubmVscywgaW4gdW5zaWduZWQgbG9u
ZyBudW1iZXJPZkZyYW1lcywgaW4gZmxvYXQgc2FtcGxlUmF0ZSkKICAgICAgICAgICAgIHJhaXNl
cyhET01FeGNlcHRpb24pOwogICAgICAgICBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoaW4gQXJy
YXlCdWZmZXIgYnVmZmVyLCBpbiBib29sZWFuIG1peFRvTW9ubykKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiYWY2Mjc1ODAx
MGE2OWY4NGNkNThhZjBmZDNjN2I1ZWFkNGI1NTgyLi4wYzkxY2M4NTZjN2FjZDA3OTViYjM1OTNj
YWMxYTg3NTNmNmEzNDhlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDItMjcgIFJheW1v
bmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBwbGF5YmFjayBzdGF0ZSBm
b3IgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGFuZCBhZGQgbnVtYmVyIG9mIGFjdGl2ZSBub2Rlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3MDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmF1ZGlv
L2F1ZGlvYnVmZmVyc291cmNlLWFjdGl2ZVNvdXJjZUNvdW50LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtYWN0aXZlU291cmNlQ291bnQu
aHRtbDogQWRkZWQuCisKIDIwMTItMDItMjMgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgdGVzdCBmaXggYWZ0ZXIgcjEwODY5OS4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWFjdGl2
ZVNvdXJjZUNvdW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVm
ZmVyc291cmNlLWFjdGl2ZVNvdXJjZUNvdW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTk2
ZDYxNDM0NDFiZjMwMDZkZDI5MmNhYzUzMWIwOWE1YjhmZGY1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtYWN0aXZlU291cmNlQ291bnQt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgQXVkaW9Db250ZXh0IGFjdGl2ZVN0
YXRlQ291bnQgYW5kIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBwbGF5YmFja1N0YXRlLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgU291cmNlIDA6IGlzIGluaXRpYWxpemVkLgor
UEFTUyBTb3VyY2UgMTogaXMgc2NoZWR1bGVkIHRvIHN0YXJ0IGF0IHRpbWUgMyBhbmQgaGFzIG5v
dCBzdGFydGVkIHBsYXlpbmcgYWZ0ZXIgMiBzZWMuCitQQVNTIFNvdXJjZSAyOiAxLjI1IHNlYyBz
b3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAwIGhhcyBmaW5pc2hlZCBwbGF5aW5nIGFmdGVyIDIgc2Vj
LgorUEFTUyBTb3VyY2UgMzogMiBzZWMgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMSBpcyBwbGF5
aW5nIGFmdGVyIDIgc2VjLgorUEFTUyBTb3VyY2UgNDogMSBzZWMgZ3JhaW4gc3RhcnRpbmcgYXQg
dGltZSAwLjUgaGFzIGZpbmlzaGVkIHBsYXlpbmcgYWZ0ZXIgMiBzZWMuCitQQVNTIFNvdXJjZSA1
OiBhIGxvb3BpbmcgMC41IHNlYyBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxLjI1IGlzIHBsYXlp
bmcgYWZ0ZXIgMiBzZWMuCitQQVNTIDIgYXJlIGN1cnJlbnRseSBwbGF5aW5nLgorUEFTUyBhY3Rp
dmVTb3VyY2VDb3VudCBhbmQgcGxheWJhY2tTdGF0ZSB0ZXN0cyBzdWNjZWVkZWQuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtYWN0aXZlU291cmNlQ291bnQu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLWFjdGl2ZVNvdXJj
ZUNvdW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM2YjU2NDMyYzExMzUxM2Q2ODMwNzNkYTA3MTg3ZWQ1
OTUxMmMyNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVm
ZmVyc291cmNlLWFjdGl2ZVNvdXJjZUNvdW50Lmh0bWwKQEAgLTAsMCArMSwxODIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9u
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRlc3QgQXVkaW9Db250ZXh0IGFjdGl2ZVN0YXRlQ291bnQgYW5kIEF1ZGlvQnVmZmVyU291
cmNlTm9kZSBwbGF5YmFja1N0YXRlLiIpOworCisvLyBDcmVhdGUgYSBmZXcgc291cmNlcyB0aGF0
IHN0YXJ0IGFuZCBlbmQgcGxheWluZyBhdCB2YXJpb3VzIHRpbWVzLiAgQWZ0ZXIgcmVuZGVyaW5n
LCBjaGVjayB0aGF0CisvLyBlYWNoIHNvdXJjZSBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSBhbmQg
dGhhdCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBzb3VyY2VzIGlzIGNvcnJlY3QuCisKK3ZhciBzYW1w
bGVSYXRlID0gNDgwMDA7CisKKy8vIFJlbmRlciBmb3IgdGhpcyBsb25nLgordmFyIHJlbmRlclRp
bWUgPSAyOwordmFyIHJlbmRlckxlbmd0aCA9IHRpbWVUb1NhbXBsZUZyYW1lKHJlbmRlclRpbWUs
IHNhbXBsZVJhdGUpOworCit2YXIgY29udGV4dDsKKworLy8gTGlzdCBvZiBBdWRpb0J1ZmZlclNv
dXJjZU5vZGVzIHNvdXJjZXMuCit2YXIgc291cmNlcyA9IFtdOworCisvLyBMaXN0IG9mIG1lc3Nh
Z2VzIHRoYXQgd2lsbCBiZSBwcmludGVkIG91dCBvbiBzdWNjZXNzIChvciBmYWlsdXJlKS4gIE1l
c3NhZ2VzIGFyZSBpbiB0aGUgc2FtZQorLy8gb3JkZXIgYXMgdGhlIHNvdXJjZXMgbGlzdCBhYm92
ZS4KK3ZhciBzb3VyY2VNZXNzYWdlcyA9IFtdOworCisvLyBMaXN0IG9mIHRoZSBleHBlY3RlZCBw
bGF5YmFjayBzdGF0ZSBmb3IgZWFjaCBzb3VyY2UuICBJbiB0aGUgc2FtZSBvcmRlciBhIHNvdXJj
ZXMgbGlzdCBhYm92ZS4KK3ZhciBzb3VyY2VFeHBlY3RlZFN0YXRlcyA9IFtdOworCisvLyBSZXR1
cm4gYSBuaWNlIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwbGF5YmFjayBzdGF0ZS4KK2Z1
bmN0aW9uIHBsYXliYWNrU3RhdGVTdHJpbmcoc3RhdGUpCit7CisgICAgdmFyIHN0cmluZzsKKyAg
ICAgIAorICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHN0cmluZyA9
ICJJTklUSUFMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBzdHJpbmcg
PSAiU0NIRURVTEVEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBzdHJp
bmcgPSAiUExBWUlORyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgc3Ry
aW5nID0gIkZJTklTSEVEIjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3RyaW5nID0gIlVOS05PV04gU1RBVEUgIiArIHN0YXRlOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHN0cmluZzsKK30KKworZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQpCit7
CisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgLy8gRm9yIGVhY2ggc291cmNlLCB2ZXJp
ZnkgdGhhdCB0aGUgcGxheWJhY2sgc3RhdGUgbWF0Y2hlcyBvdXIgZXhwZWN0ZWQgcGxheSBiYWNr
IHN0YXRlLgorICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc291cmNlcy5sZW5ndGg7ICsraykgewor
ICAgICAgICBpZiAoc291cmNlc1trXS5wbGF5YmFja1N0YXRlID09IHNvdXJjZUV4cGVjdGVkU3Rh
dGVzW2tdKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJTb3VyY2UgIiArIGsgKyAiOiAiICsg
c291cmNlTWVzc2FnZXNba10ucGFzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0
ZXN0UGFzc2VkKCJTb3VyY2UgIiArIGsgKyAiOiAiICsgc291cmNlTWVzc2FnZXNba10uZmFpbCk7
CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoY29udGV4dC5hY3RpdmVTb3VyY2VDb3VudCA9PSAyKSB7CisgICAgICAgIHRlc3RQYXNzZWQo
Y29udGV4dC5hY3RpdmVTb3VyY2VDb3VudCArICIgYXJlIGN1cnJlbnRseSBwbGF5aW5nLiIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoY29udGV4dC5hY3RpdmVTb3VyY2VDb3Vu
dCArICIgYXJlIGN1cnJlbnRseSBwbGF5aW5nLCBidXQgZXhwZWN0ZWQgMi4iKTsKKyAgICAgICAg
c3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoImFjdGl2ZVNvdXJjZUNvdW50IGFuZCBwbGF5YmFja1N0YXRlIHRlc3RzIHN1Y2Nl
ZWRlZC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJhY3RpdmVTb3VyY2VD
b3VudCBhbmQgcGxheWJhY2tTdGF0ZSB0ZXN0cyBkaWQgbm90IHN1Y2NlZWQuIik7CisgICAgfQor
CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgfQorCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisg
ICAgdmFyIHN1ZmZpeE1lc3NhZ2UgPSAiIGFmdGVyICIgKyByZW5kZXJUaW1lICsgIiBzZWMuIjsK
KyAgICAgIAorICAgIHZhciBzb3VyY2U7CisKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBj
b250ZXh0LiAgV2Ugd2lsbCByZW5kZXIgZm9yIHJlbmRlclRpbWUgc2VjLgorICAgIGNvbnRleHQg
PSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHRpbWVUb1NhbXBsZUZyYW1lKHJlbmRlclRpbWUs
IHNhbXBsZVJhdGUpLCBzYW1wbGVSYXRlKTsKKworICAgIC8vIFRlc3QgSU5JVElBTCBzdGF0ZS4g
Q3JlYXRlIDMgc2VjIHNvdXJjZSwgYnV0IGRvbid0IHNjaGVkdWxlIGl0LgorICAgIHNvdXJjZSA9
IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgc291cmNlLmJ1ZmZlciA9IGNyZWF0
ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJhbWUoMywgc2FtcGxlUmF0ZSkp
OworICAgIHNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIHNvdXJjZXMu
cHVzaChzb3VyY2UpOworICAgIHNvdXJjZU1lc3NhZ2VzLnB1c2goe3Bhc3M6ICJpcyBpbml0aWFs
aXplZC4iLCBmYWlsOiAiaXMgbm90IGluaXRpYWxpemVkLiJ9KTsKKyAgICBzb3VyY2VFeHBlY3Rl
ZFN0YXRlcy5wdXNoKHNvdXJjZS5JTklUSUFMKTsKKworICAgIC8vIFRlc3QgU0NIRURVTEVEIHN0
YXRlLiBDcmVhdGUgMyBzZWMgc291cmNlLCBzdGFydGluZyBhZnRlciB3ZSBmaW5pc2ggcmVuZGVy
aW5nLgorICAgIHNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgc291
cmNlLmJ1ZmZlciA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJh
bWUoMywgc2FtcGxlUmF0ZSkpOworICAgIHNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRp
b24pOworICAgIHNvdXJjZS5ub3RlT24ocmVuZGVyVGltZSArIDEpOworICAgIHNvdXJjZXMucHVz
aChzb3VyY2UpOworICAgIHNvdXJjZU1lc3NhZ2VzLnB1c2goe3Bhc3M6ICJpcyBzY2hlZHVsZWQg
dG8gc3RhcnQgYXQgdGltZSAiICsgKHJlbmRlclRpbWUgKyAxKSArICIgYW5kIGhhcyBub3Qgc3Rh
cnRlZCBwbGF5aW5nIiArIHN1ZmZpeE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFpbDogImlzIG5vdCBpbiB0aGUgU0NIRURVTEVEIHN0YXRlLiJ9KTsKKyAgICBzb3VyY2VFeHBl
Y3RlZFN0YXRlcy5wdXNoKHNvdXJjZS5TQ0hFRFVMRUQpOworCisgICAgLy8gVGVzdCBGSU5JU0hF
RCBzdGF0ZS4gQ3JlYXRlIGEgMS4yNSBzZWMgc291cmNlLCBzdGFydGluZyBpbW1lZGlhdGVseS4g
IFRoaXMgd2lsbCBmaW5pc2ggYmVmb3JlCisgICAgLy8gcmVuZGVyaW5nIGlzIGNvbXBsZXRlLgor
ICAgIHNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgc291cmNlLmJ1
ZmZlciA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJhbWUoMS4y
NSwgc2FtcGxlUmF0ZSkpOworICAgIHNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24p
OworICAgIHNvdXJjZS5ub3RlT24oMCk7CisgICAgc291cmNlcy5wdXNoKHNvdXJjZSk7CisgICAg
c291cmNlTWVzc2FnZXMucHVzaCh7cGFzczogIjEuMjUgc2VjIHNvdXJjZSBzdGFydGluZyBhdCB0
aW1lIDAgaGFzIGZpbmlzaGVkIHBsYXlpbmciICsgc3VmZml4TWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWlsOiAiMS4yNSBzZWMgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMCBo
YXMgbm90IGZpbmlzaGVkIHBsYXlpbmcuIn0pOworICAgIHNvdXJjZUV4cGVjdGVkU3RhdGVzLnB1
c2goc291cmNlLkZJTklTSEVEKTsKKworICAgIC8vIFRlc3QgUExBWUlORyBzdGF0ZS4gQ3JlYXRl
IGEgMiBzZWMgc291cmNlLCBzdGFydGluZyBpbiBvbmUgc2VjLiAgVGhpcyBzaG91bGQgc3RpbGwg
YmUgcGxheWluZworICAgIC8vIHdoZW4gcmVuZGVyaW5nIGlzIGRvbmUuCisgICAgc291cmNlID0g
Y29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBzb3VyY2UuYnVmZmVyID0gY3JlYXRl
SW1wdWxzZUJ1ZmZlcihjb250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZSgyLCBzYW1wbGVSYXRlKSk7
CisgICAgc291cmNlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgc291cmNlLm5v
dGVPbigxKTsKKyAgICBzb3VyY2VzLnB1c2goc291cmNlKTsKKyAgICBzb3VyY2VNZXNzYWdlcy5w
dXNoKHtwYXNzOiAiMiBzZWMgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMSBpcyBwbGF5aW5nIiAr
IHN1ZmZpeE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbDogIjIgc2VjIHNv
dXJjZSBzdGFydGluZyBhdCB0aW1lIDEgaXMgbm90IHBsYXlpbmcuIn0pOworICAgICAgCisgICAg
c291cmNlRXhwZWN0ZWRTdGF0ZXMucHVzaChzb3VyY2UuUExBWUlORyk7CisKKyAgICAvLyBUZXN0
IEZJTklTSEVEIHN0YXRlLCBidXQgdXNpbmcgbm90ZUdyYWluT24uIENyZWF0ZSAzIHNlYyBzb3Vy
Y2UsIHN0YXJ0aW5nIGluIDEvMiBzZWMsIGJ1dAorICAgIC8vIG9ubHkgbGFzdGluZyAxIHNlYy4g
IFRoaXMgd2lsbCBmaW5pc2ggYmVmb3JlIHJlbmRlcmluZyBpcyBjb21wbGV0ZS4KKyAgICBzb3Vy
Y2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIHNvdXJjZS5idWZmZXIgPSBj
cmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHRpbWVUb1NhbXBsZUZyYW1lKDMsIHNhbXBsZVJh
dGUpKTsKKyAgICBzb3VyY2UuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICBzb3Vy
Y2Uubm90ZUdyYWluT24oMC41LCAwLCAxKTsKKyAgICBzb3VyY2VzLnB1c2goc291cmNlKTsKKyAg
ICBzb3VyY2VNZXNzYWdlcy5wdXNoKHtwYXNzOiAiMSBzZWMgZ3JhaW4gc3RhcnRpbmcgYXQgdGlt
ZSAwLjUgaGFzIGZpbmlzaGVkIHBsYXlpbmciICsgc3VmZml4TWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWlsOiAiMSBzZWMgZ3JhaW4gc3RhcnRpbmcgYXQgdGltZSAwLjUgaGFz
IG5vdCBmaW5pc2hlZCBwbGF5aW5nLiJ9KTsKKyAgICBzb3VyY2VFeHBlY3RlZFN0YXRlcy5wdXNo
KHNvdXJjZS5GSU5JU0hFRCk7CisgICAgICAKKyAgICAvLyBUZXN0IFBMQVlJTkcgc3RhdGUgZm9y
IGxvb3Bpbmcgc291cmNlLiBDcmVhdGUgLjUgc2VjIHNvdXJjZSBzdGFydGluZyBhdCB0aW1lIDEu
MjUgYW5kIGxvb3BpbmcKKyAgICAvLyBhZnRlcndhcmRzLiAgVGhpcyB3aWxsIHN0aWxsIGJlIHBs
YXlpbmcgd2hlbiByZW5kZXJpbmcgaXMgY29tcGxldGUuCisgICAgc291cmNlID0gY29udGV4dC5j
cmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBzb3VyY2UuYnVmZmVyID0gY3JlYXRlSW1wdWxzZUJ1
ZmZlcihjb250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZSgwLjUsIHNhbXBsZVJhdGUpKTsKKyAgICBz
b3VyY2UubG9vcCA9IHRydWU7CisgICAgc291cmNlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlv
bik7CisgICAgc291cmNlLm5vdGVPbigxLjUpOworICAgIHNvdXJjZXMucHVzaChzb3VyY2UpOwor
ICAgIHNvdXJjZU1lc3NhZ2VzLnB1c2goe3Bhc3M6ICJhIGxvb3BpbmcgMC41IHNlYyBzb3VyY2Ug
c3RhcnRpbmcgYXQgdGltZSAxLjI1IGlzIHBsYXlpbmciICsgc3VmZml4TWVzc2FnZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWlsOiAiYSBsb29waW5nIDAuNSBzZWMgc291cmNlIHN0YXJ0
aW5nIGF0IHRpbWUgMS4yNSBpcyBub3QgcGxheWluZy4ifSk7CisgICAgc291cmNlRXhwZWN0ZWRT
dGF0ZXMucHVzaChzb3VyY2UuUExBWUlORyk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBj
aGVja1Jlc3VsdDsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisgICAgICAKK3J1
blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgIAorPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129472</attachid>
            <date>2012-02-29 10:30:39 -0800</date>
            <delta_ts>2012-03-05 11:44:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79701-20120229103038.patch</filename>
            <type>text/plain</type>
            <size>26270</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQxNGE2ZDIxMjMxZmNl
ZTgzZDU0OWQ4MTg3ODMwODIxMjE5MTdkZC4uOGJmZDFhZjVlMTVkMTUxMDAwMWY2MDRmNjAwY2Mz
NzE4NGM1YjFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAyLTI3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgcGxheWJhY2sgc3RhdGUg
Zm9yIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBhbmQgYWRkIG51bWJlciBvZiBhY3RpdmUgbm9kZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzAxCisK
KyAgICAgICAgQWRkIGEgcGxheWJhY2sgc3RhdGUgdG8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHNv
IHRoYXQgdGhlIHVzZXIgY2FuCisgICAgICAgIHRlbGwgaWYgdGhlIG5vZGUgaXMgc2NoZWR1bGVk
LCBwbGF5aW5nLCBvciBmaW5pc2hlZC4KKworICAgICAgICBGb3IgYW4gQXVkaW9Db250ZXh0LCBh
ZGQgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mCisgICAgICAgIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZSdzIHRoYXQgYXJlIGFjdGl2ZSAocGxheWluZyBhdWRpbykuCisKKyAgICAgICAgRGVsZXRlZCBt
X2lzUGxheWluZyBhbmQgbV9oYXNGaW5pc2hlZC4gRm9yIHRoZSByZWNvcmQsIG1faXNQbGF5aW5n
CisgICAgICAgIGlzIHRoZSBzYW1lIGFzIGEgcGxheWJhY2tTdGF0ZSBvZiBTQ0hFRFVMRURfU1RB
VEUgb3IgUExBWUlOR19TVEFURS4KKyAgICAgICAgbV9oYXNGaW5pc2hlZCBpcyBlcXVpdmFsZW50
IHRvIGEgcGxheWJhY2tTdGF0ZSBvZiBGSU5JU0hFRF9TVEFURS4KKyAgICAgICAgCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmF1ZGlvL2F1
ZGlvYnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbAorCisgICAgICAgICogd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUpOgor
ICAgICAgICBpbml0aWFsaXplIHBsYXliYWNrU3RhdGUsIHJlbW92ZSBtX2lzUGxheWluZywgbV9o
YXNGaW5pc2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJv
Y2Vzcyk6IFVwZGF0ZSBwbGF5YmFja1N0YXRlCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OmZpbmlzaCk6IFVwZGF0ZSBwbGF5YmFja1N0YXRlCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVPbik6IFVwZGF0ZSBwbGF5YmFja1N0YXRl
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFpbk9uKTog
VXBkYXRlIHBsYXliYWNrU3RhdGUKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6bm90ZU9mZik6IFVzZSBwbGF5YmFja1N0YXRlIAorICAgICAgICAqIHdlYmF1ZGlvL0F1
ZGlvQnVmZmVyU291cmNlTm9kZS5oOgorICAgICAgICAoQXVkaW9CdWZmZXJTb3VyY2VOb2RlKTog
RGVmaW5lIHN0YXRlcywgcmVtb3ZlIG1faXNQbGF5aW5nLCBtX2hhc0ZpbmlzaGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwbGF5YmFja1N0YXRlKTogQWRkZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbDogRGVmaW5lIGNv
bnN0YW50cyBmb3IgdGhlCisgICAgICAgIHBsYXliYWNrIHN0YXRlLCBhZGQgYXR0cmlidXRlIHBs
YXliYWNrU3RhdGUuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6YWN0aXZlU291cmNlQ291bnQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6dXBkYXRlQWN0aXZlU291cmNlQ291bnQpOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKEF1ZGlv
Q29udGV4dCk6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbDogQWRkIGF0dHJp
YnV0ZSBhY3RpdmVTb3VyY2VDb3VudC4KKwogMjAxMi0wMi0yNyAgSWx5YSBUaWtob25vdnNreSAg
PGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW2Nocm9taXVt
XSBQcm9maWxlcyAtIFRvb2x0aXAgd2l0aCBvYmplY3QvcHJvcGVydHkgdHlwZXMgc3RheXMgb24g
c2NyZWVuIHdoZW4gYW5vdGhlciB0YWIgc2VsZWN0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCmluZGV4IGRiOWQzZWQzYmZlYTYwNmMy
NzA2YjQ3YTE1OGQ4NWVkYWE2NjY2NWIuLjAxNDgwMTc0Y2QzOWViZDRlYmM5NzdjNzA2ZTZhNjI2
ZTRkMjZmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
U291cmNlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmNwcApAQCAtNTgsOSArNTgsNyBAQCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291
cmNlTm9kZT4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0KiBjbwog
QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0
KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Tb3VyY2VOb2RlKGNvbnRl
eHQsIHNhbXBsZVJhdGUpCiAgICAgLCBtX2J1ZmZlcigwKQotICAgICwgbV9pc1BsYXlpbmcoZmFs
c2UpCiAgICAgLCBtX2lzTG9vcGluZyhmYWxzZSkKLSAgICAsIG1faGFzRmluaXNoZWQoZmFsc2Up
CiAgICAgLCBtX3N0YXJ0VGltZSgwLjApCiAgICAgLCBtX2VuZFRpbWUoVW5rbm93blRpbWUpCiAg
ICAgLCBtX3ZpcnR1YWxSZWFkSW5kZXgoMCkKQEAgLTY5LDYgKzY3LDcgQEAgQXVkaW9CdWZmZXJT
b3VyY2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBm
bG9hdCBzYW1wbGUKICAgICAsIG1fZ3JhaW5EdXJhdGlvbihEZWZhdWx0R3JhaW5EdXJhdGlvbikK
ICAgICAsIG1fbGFzdEdhaW4oMS4wKQogICAgICwgbV9wYW5uZXJOb2RlKDApCisgICAgLCBtX3Bs
YXliYWNrU3RhdGUoVU5TQ0hFRFVMRURfU1RBVEUpCiB7CiAgICAgc2V0Tm9kZVR5cGUoTm9kZVR5
cGVBdWRpb0J1ZmZlclNvdXJjZSk7CiAKQEAgLTExMCwxOCArMTA5LDI3IEBAIHZvaWQgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAKICAgICAg
ICAgLy8gSWYgd2Uga25vdyB0aGUgZW5kIHRpbWUgYW5kIGl0J3MgYWxyZWFkeSBwYXNzZWQsIHRo
ZW4gZG9uJ3QgYm90aGVyIGRvaW5nIGFueSBtb3JlIHJlbmRlcmluZyB0aGlzIGN5Y2xlLgogICAg
ICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1lICYmIGVuZEZyYW1lIDw9IHF1YW50dW1T
dGFydEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogICAgICAgICAg
ICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKICAgICAgICAgICAgIGZpbmlzaCgpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIW1faXNQbGF5aW5nIHx8IG1faGFzRmluaXNoZWQg
fHwgIWJ1ZmZlcigpIHx8IHN0YXJ0RnJhbWUgPj0gcXVhbnR1bUVuZEZyYW1lKSB7CisgICAgICAg
IGlmICghKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRURfU1RBVEUgfHwgbV9wbGF5YmFja1N0
YXRlID09IFBMQVlJTkdfU1RBVEUpCisgICAgICAgICAgICB8fCAobV9wbGF5YmFja1N0YXRlID09
IEZJTklTSEVEX1NUQVRFKQorICAgICAgICAgICAgfHwgIWJ1ZmZlcigpCisgICAgICAgICAgICB8
fCBzdGFydEZyYW1lID49IHF1YW50dW1FbmRGcmFtZSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IGNhbiBvcHRpbWl6ZSBoZXJlIGJ5IHByb3BhZ2F0aW5nIHNpbGVudCBoaW50IGluc3RlYWQgb2Yg
Zm9yY2luZyB0aGUgd2hvbGUgY2hhaW4gdG8gcHJvY2VzcyBzaWxlbmNlLgogICAgICAgICAgICAg
b3V0cHV0QnVzLT56ZXJvKCk7CiAgICAgICAgICAgICBtX3Byb2Nlc3NMb2NrLnVubG9jaygpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fcGxheWJhY2tT
dGF0ZSA9PSBTQ0hFRFVMRURfU1RBVEUpIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUg
YWN0aXZlIHNvdXJjZSBjb3VudCBvbmx5IGlmIHdlJ3JlIHRyYW5zaXRpb25pbmcgZnJvbSB0aGUK
KyAgICAgICAgICAgIC8vIFNDSEVEVUxFRF9TVEFURSBzdGF0ZSB0byB0aGUgUExBWUlOR19TVEFU
RSBzdGF0ZS4KKyAgICAgICAgICAgIG1fcGxheWJhY2tTdGF0ZSA9IFBMQVlJTkdfU1RBVEU7Cisg
ICAgICAgICAgICBjb250ZXh0KCktPnVwZGF0ZUFjdGl2ZVNvdXJjZUNvdW50KDEpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBzaXplX3QgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gc3RhcnRG
cmFtZSA+IHF1YW50dW1TdGFydEZyYW1lID8gc3RhcnRGcmFtZSAtIHF1YW50dW1TdGFydEZyYW1l
IDogMDsKICAgICAgICAgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gbWluKHF1YW50dW1GcmFtZU9mZnNl
dCwgZnJhbWVzVG9Qcm9jZXNzKTsgLy8gY2xhbXAgdG8gdmFsaWQgcmFuZ2UKICAgICAgICAgc2l6
ZV90IGJ1ZmZlckZyYW1lc1RvUHJvY2VzcyA9IGZyYW1lc1RvUHJvY2VzcyAtIHF1YW50dW1GcmFt
ZU9mZnNldDsKQEAgLTE0Nyw4ICsxNTUsOCBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgICAgICAgICAgICAgICAgICBtZW1z
ZXQob3V0cHV0QnVzLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpICsgemVyb1N0YXJ0RnJhbWUs
IDAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1plcm8pOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogICAgICAgICAgICAgbV92aXJ0dWFsUmVhZElu
ZGV4ID0gMDsKKwogICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgIH0KIApAQCAtMTY0LDcg
KzE3Miw2IEBAIGJvb2wgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZW5kZXJTaWxlbmNlQW5kRmlu
aXNoSWZOb3RMb29waW5nKGZsb2F0KiBkZXN0aW5hdGlvCiB7CiAgICAgaWYgKCFsb29wKCkpIHsK
ICAgICAgICAgLy8gSWYgd2UncmUgbm90IGxvb3BpbmcsIHRoZW4gc3RvcCBwbGF5aW5nIHdoZW4g
d2UgZ2V0IHRvIHRoZSBlbmQuCi0gICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CiAKICAgICAg
ICAgaWYgKGZyYW1lc1RvUHJvY2VzcyA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBs
b29waW5nIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNhbXBsZSBkYXRhLCBidXQg
d2Ugc3RpbGwgbmVlZCB0byBwcm92aWRlIG1vcmUgb3V0cHV0LApAQCAtMzU5LDEwICszNjYsMTIg
QEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnJlc2V0KCkKIAogdm9pZCBBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OmZpbmlzaCgpCiB7Ci0gICAgaWYgKCFtX2hhc0ZpbmlzaGVkKSB7CisgICAg
aWYgKG1fcGxheWJhY2tTdGF0ZSAhPSBGSU5JU0hFRF9TVEFURSkgewogICAgICAgICAvLyBMZXQg
dGhlIGNvbnRleHQgZGVyZWZlcmVuY2UgdGhpcyBBdWRpb05vZGUuCiAgICAgICAgIGNvbnRleHQo
KS0+bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyh0aGlzKTsKLSAgICAgICAgbV9oYXNGaW5p
c2hlZCA9IHRydWU7CisgICAgICAgIC8vIEZpbmlzaGVkIHBsYXlpbmcsIHNvIGRlY3JlbWVudCB0
aGUgYWN0aXZlIHNvdXJjZSBjb3VudC4KKyAgICAgICAgbV9wbGF5YmFja1N0YXRlID0gRklOSVNI
RURfU1RBVEU7CisgICAgICAgIGNvbnRleHQoKS0+dXBkYXRlQWN0aXZlU291cmNlQ291bnQoLTEp
OwogICAgIH0KIH0KIApAQCAtNDAwLDE5ICs0MDksMjAgQEAgdW5zaWduZWQgQXVkaW9CdWZmZXJT
b3VyY2VOb2RlOjpudW1iZXJPZkNoYW5uZWxzKCkKIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
Ojpub3RlT24oZG91YmxlIHdoZW4pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBpZiAobV9pc1BsYXlpbmcpCisgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRURf
U1RBVEUgfHwgbV9wbGF5YmFja1N0YXRlID09IFBMQVlJTkdfU1RBVEUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1faXNHcmFpbiA9IGZhbHNlOwogICAgIG1fc3RhcnRUaW1lID0gd2hlbjsKICAg
ICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwotICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKKyAgICBt
X3BsYXliYWNrU3RhdGUgPSBTQ0hFRFVMRURfU1RBVEU7CiB9CiAKIHZvaWQgQXVkaW9CdWZmZXJT
b3VyY2VOb2RlOjpub3RlR3JhaW5Pbihkb3VibGUgd2hlbiwgZG91YmxlIGdyYWluT2Zmc2V0LCBk
b3VibGUgZ3JhaW5EdXJhdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IGlmIChtX2lzUGxheWluZykKKworICAgIGlmIChtX3BsYXliYWNrU3RhdGUgPT0gU0NIRURVTEVE
X1NUQVRFIHx8IG1fcGxheWJhY2tTdGF0ZSA9PSBQTEFZSU5HX1NUQVRFKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIWJ1ZmZlcigpKQpAQCAtNDQyLDEzICs0NTIsMTMgQEAgdm9pZCBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5P
ZmZzZXQsIGRvdWJsZQogICAgIC8vIFNpbmNlIHBsYXliYWNrUmF0ZSA9PSAxIGlzIHZlcnkgY29t
bW9uLCBpdCdzIHdvcnRoIGNvbnNpZGVyaW5nIHF1YWxpdHkuCiAgICAgbV92aXJ0dWFsUmVhZElu
ZGV4ID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKG1fZ3JhaW5PZmZzZXQsIGJ1
ZmZlcigpLT5zYW1wbGVSYXRlKCkpOwogICAgIAotICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKKyAg
ICBtX3BsYXliYWNrU3RhdGUgPSBTQ0hFRFVMRURfU1RBVEU7CiB9CiAKIHZvaWQgQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlOjpub3RlT2ZmKGRvdWJsZSB3aGVuKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKCFtX2lzUGxheWluZykKKyAgICBpZiAoIShtX3BsYXliYWNrU3Rh
dGUgPT0gU0NIRURVTEVEX1NUQVRFIHx8IG1fcGxheWJhY2tTdGF0ZSA9PSBQTEFZSU5HX1NUQVRF
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHdoZW4gPSBtYXgoMC4wLCB3aGVuKTsKQEAg
LTUwNiw3ICs1MTYsNiBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0TG9vcGluZyhi
b29sIGxvb3BpbmcpCiAKICAgICBtX2lzTG9vcGluZyA9IGxvb3Bpbmc7CiB9Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCmluZGV4IDQ5MDkxYzAx
N2IzNmQxMmNlMmI1ZTQzYWI3YmU4MmNhZjQ4MzVmNGIuLjQ0Y2JjY2NmYjMyZDVlMDBiNDA5ZWQ2
NmNkMDAzYjQ4MmFhZTY0MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyU291cmNlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5oCkBAIC00Myw2ICs0MywyMyBAQCBjbGFzcyBBdWRpb0NvbnRleHQ7
CiAKIGNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb1NvdXJjZU5vZGUg
ewogcHVibGljOgorICAgIC8vIFRoZXNlIGFyZSB0aGUgcG9zc2libGUgc3RhdGVzIGFuIEF1ZGlv
QnVmZmVyU291cmNlTm9kZSBjYW4gYmUgaW46CisgICAgLy8KKyAgICAvLyBVTlNDSEVEVUxFRF9T
VEFURSAtIEluaXRpYWwgcGxheWJhY2sgc3RhdGUuIE5vZGUgY3JlYXRlZCwgYnV0IG5vdCB5ZXQg
c2NoZWR1bGVkLgorICAgIC8vIFNDSEVEVUxFRF9TVEFURSAtIFNjaGVkdWxlZCB0byBwbGF5ICh2
aWEgbm90ZU9uIG9yIG5vdGVHcmFpbk9uKSwgYnV0IG5vdCB5ZXQgcGxheWluZy4KKyAgICAvLyBQ
TEFZSU5HX1NUQVRFIC0gVGhlIGJ1ZmZlciBzb3VyY2UgaXMgY3VycmVudGx5IHBsYXlpbmcKKyAg
ICAvLyBGSU5JU0hFRF9TVEFURSAtIFRoZSBidWZmZXIgc291cmNlIGhhcyBmaW5pc2hlZCBwbGF5
aW5nCisgICAgLy8KKyAgICAvLyBUaGUgc3RhdGUgY2FuIG9ubHkgdHJhbnNpdGlvbiB0byB0aGUg
bmV4dCBzdGF0ZSwgZXhjZXB0IGZvciB0aGUgRklOSVNIRURfU1RBVEUgd2hpY2ggY2FuCisgICAg
Ly8gbmV2ZXIgYmUgY2hhbmdlZC4KKyAgICBlbnVtIFBsYXliYWNrU3RhdGUgeworICAgICAgICAv
LyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgd2l0aCB0aGUgc2FtZSBuYW1lcyBhbmQgdmFsdWVzIGFz
IGluIHRoZSAuaWRsIGZpbGUuCisgICAgICAgIFVOU0NIRURVTEVEX1NUQVRFID0gMCwKKyAgICAg
ICAgU0NIRURVTEVEX1NUQVRFID0gMSwKKyAgICAgICAgUExBWUlOR19TVEFURSA9IDIsCisgICAg
ICAgIEZJTklTSEVEX1NUQVRFID0gMworICAgIH07CisgICAgCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2Ft
cGxlUmF0ZSk7CiAKICAgICB2aXJ0dWFsIH5BdWRpb0J1ZmZlclNvdXJjZU5vZGUoKTsKQEAgLTY2
LDYgKzgzLDkgQEAgcHVibGljOgogICAgIHZvaWQgbm90ZUdyYWluT24oZG91YmxlIHdoZW4sIGRv
dWJsZSBncmFpbk9mZnNldCwgZG91YmxlIGdyYWluRHVyYXRpb24pOwogICAgIHZvaWQgbm90ZU9m
Zihkb3VibGUgd2hlbik7CiAKKyAgICAvLyBQbGF5YmFjayBzdGF0ZQorICAgIHVuc2lnbmVkIHNo
b3J0IHBsYXliYWNrU3RhdGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
bV9wbGF5YmFja1N0YXRlKTsgfQorCiAgICAgLy8gTm90ZTogdGhlIGF0dHJpYnV0ZSB3YXMgb3Jp
Z2luYWxseSBleHBvc2VkIGFzIC5sb29waW5nLCBidXQgdG8gYmUgbW9yZSBjb25zaXN0ZW50IGlu
IG5hbWluZyB3aXRoIDxhdWRpbz4KICAgICAvLyBhbmQgd2l0aCBob3cgaXQncyBkZXNjcmliZWQg
aW4gdGhlIHNwZWNpZmljYXRpb24sIHRoZSBwcm9wZXIgYXR0cmlidXRlIG5hbWUgaXMgLmxvb3AK
ICAgICAvLyBUaGUgb2xkIGF0dHJpYnV0ZSBpcyBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJp
bGl0eS4KQEAgLTk2LDE3ICsxMTYsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8QXVkaW9HYWlu
PiBtX2dhaW47CiAgICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGxheWJhY2tSYXRlOwogCi0gICAg
Ly8gbV9pc1BsYXlpbmcgaXMgc2V0IHRvIHRydWUgd2hlbiBub3RlT24oKSBvciBub3RlR3JhaW5P
bigpIGlzIGNhbGxlZC4KLSAgICBib29sIG1faXNQbGF5aW5nOwotCiAgICAgLy8gSWYgbV9pc0xv
b3BpbmcgaXMgZmFsc2UsIHRoZW4gdGhpcyBub2RlIHdpbGwgYmUgZG9uZSBwbGF5aW5nIGFuZCBi
ZWNvbWUgaW5hY3RpdmUgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBzYW1wbGUgZGF0
YSBpbiB0aGUgYnVmZmVyLgogICAgIC8vIElmIHRydWUsIGl0IHdpbGwgd3JhcCBhcm91bmQgdG8g
dGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgZWFjaCB0aW1lIGl0IHJlYWNoZXMgdGhlIGVuZC4KICAg
ICBib29sIG1faXNMb29waW5nOwogCi0gICAgLy8gVGhpcyBub2RlIGlzIGNvbnNpZGVyZWQgZmlu
aXNoZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcidzIHNhbXBsZSBkYXRh
IGFmdGVyIG5vdGVPbigpIGhhcyBiZWVuIGNhbGxlZC4KLSAgICAvLyBUaGlzIHdpbGwgb25seSBi
ZSBzZXQgdG8gdHJ1ZSBpZiBtX2lzTG9vcGluZyA9PSBmYWxzZS4KLSAgICBib29sIG1faGFzRmlu
aXNoZWQ7Ci0KICAgICAvLyBtX3N0YXJ0VGltZSBpcyB0aGUgdGltZSB0byBzdGFydCBwbGF5aW5n
IGJhc2VkIG9uIHRoZSBjb250ZXh0J3MgdGltZWxpbmUgKDAuMCBvciBhIHRpbWUgbGVzcyB0aGFu
IHRoZSBjb250ZXh0J3MgY3VycmVudCB0aW1lIG1lYW5zICJub3ciKS4KICAgICBkb3VibGUgbV9z
dGFydFRpbWU7IC8vIGluIHNlY29uZHMKIApAQCAtMTM5LDYgKzE1Miw5IEBAIHByaXZhdGU6CiAK
ICAgICAvLyBIYW5kbGVzIHRoZSB0aW1lIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiBzYW1wbGUg
ZGF0YSAobm9uLWxvb3BpbmcpIG9yIHRoZSBub3RlT2ZmKCkgdGltZSBoYXMgYmVlbiByZWFjaGVk
LgogICAgIHZvaWQgZmluaXNoKCk7CisKKyAgICAvLyBQbGF5YmFjayBzdGF0ZS4gIAorICAgIGVu
dW0gUGxheWJhY2tTdGF0ZSBtX3BsYXliYWNrU3RhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VO
b2RlLmlkbAppbmRleCBlZWRiMGNiNzA5OTEwYjIyY2QwMTlkNzExMjU5YTljZTk0MTE3MjRiLi5h
ZTZhZjkzZThhOGY4M2VjNDQ1MmQ3YWFkZTE2ZTQwODY3NmVjOTk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKQEAgLTMxLDYgKzMx
LDEzIEBAIG1vZHVsZSBhdWRpbyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0dGVyXSBB
dWRpb0J1ZmZlciBidWZmZXIKICAgICAgICAgICAgIHNldHRlciByYWlzZXMgKERPTUV4Y2VwdGlv
bik7CiAKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVU5TQ0hFRFVMRURfU1RBVEUgPSAw
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTQ0hFRFVMRURfU1RBVEUgPSAxOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQTEFZSU5HX1NUQVRFID0gMjsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgRklOSVNIRURfU1RBVEUgPSAzOworCisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBwbGF5YmFja1N0YXRlOworCiAgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gZ2FpbjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEF1ZGlvUGFyYW0gcGxheWJhY2tSYXRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcAppbmRleCBhZmM4MTEzMGIxNDkxNzAwNjI0N2FkOTI1MmUxZTE2M2U3YjYxZjRj
Li5jOWFjYzkwMDM4ZjNmNDRhMGQ3NGY0OWFmYTlhYjU3YmY0ZmI5NTJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTEzNyw2ICsxMzcsNyBAQCBBdWRpb0Nv
bnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgLCBtX2F1ZGlvVGhy
ZWFkKDApCiAgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmll
cikKICAgICAsIG1faXNPZmZsaW5lQ29udGV4dChmYWxzZSkKKyAgICAsIG1fYWN0aXZlU291cmNl
Q291bnQoMCkKIHsKICAgICBjb25zdHJ1Y3RDb21tb24oKTsKIApAQCAtMTYwLDYgKzE2MSw3IEBA
IEF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQg
bnVtYmVyT2ZDaGFubmVscywgc2l6ZV90CiAgICAgLCBtX2F1ZGlvVGhyZWFkKDApCiAgICAgLCBt
X2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKICAgICAsIG1faXNP
ZmZsaW5lQ29udGV4dCh0cnVlKQorICAgICwgbV9hY3RpdmVTb3VyY2VDb3VudCgwKQogewogICAg
IGNvbnN0cnVjdENvbW1vbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5o
CmluZGV4IDc5MTE1MTliMzgwM2RkOWE3MmJkOTI1Zjg4MWFlYzIxZjY0OTIyYjMuLmViMzVkN2Vl
M2JlNGUwMzg2MjU2YWYyZDU0MGJiODhjNTc2NTAzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCkBAIC05Niw3ICs5NiwxMSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGN1
cnJlbnRTYW1wbGVGcmFtZSgpIHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2Ft
cGxlRnJhbWUoKTsgfQogICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIHsgcmV0dXJuIG1fZGVzdGlu
YXRpb25Ob2RlLT5jdXJyZW50VGltZSgpOyB9CiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIHsgcmV0
dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCk7IH0KKyAgICB1bnNpZ25lZCBpbnQg
YWN0aXZlU291cmNlQ291bnQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9hY3Rp
dmVTb3VyY2VDb3VudCk7IH0KIAorICAgIC8vIEFkZCB8YW1vdW50fCB0byB0aGUgYWN0aXZlIHNv
dXJjZSBjb3VudC4KKyAgICB2b2lkIHVwZGF0ZUFjdGl2ZVNvdXJjZUNvdW50KGludCBhbW91bnQp
IHsgbV9hY3RpdmVTb3VyY2VDb3VudCA9IHN0ZDo6bWF4KDAsIG1fYWN0aXZlU291cmNlQ291bnQg
KyBhbW91bnQpOyB9CisgICAgCiAgICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVm
ZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxv
YXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciosIGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRpb25D
b2RlJik7CiAKQEAgLTIyMiw2ICsyMjYsNyBAQCBwcml2YXRlOgogICAgIEF1ZGlvQ29udGV4dChE
b2N1bWVudCopOwogICAgIEF1ZGlvQ29udGV4dChEb2N1bWVudCosIHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7CiAgICAg
dm9pZCBjb25zdHJ1Y3RDb21tb24oKTsKKyAgICB2b2lkIHJlc2V0QWN0aXZlU291cmNlQ291bnQo
KTsKIAogICAgIHZvaWQgbGF6eUluaXRpYWxpemUoKTsKICAgICB2b2lkIHVuaW5pdGlhbGl6ZSgp
OwpAQCAtMzAzLDYgKzMwOCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzT2ZmbGluZUNvbnRl
eHQ7CiAKICAgICBBc3luY0F1ZGlvRGVjb2RlciBtX2F1ZGlvRGVjb2RlcjsKKworICAgIC8vIE51
bWJlciBvZiBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzIHRoYXQgYXJlIGFjdGl2ZSAocGxheWluZyku
CisgICAgaW50IG1fYWN0aXZlU291cmNlQ291bnQ7CiB9OwogCiB9IC8vIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCmluZGV4IGVmNjkzNTUyNmZiMjZkNDMx
OTMyYTdmYWNjMDIxODI4MGVjMmQxZDIuLjgzOWEzMjE0MzFkNjk5MzdkYTQxYjlhZjgxM2Y4ODY0
NmU5N2I5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbApAQCAt
NDUsNiArNDUsOSBAQCBtb2R1bGUgd2ViYXVkaW8gewogICAgICAgICAvLyBBbGwgcGFubmluZyBp
cyByZWxhdGl2ZSB0byB0aGlzIGxpc3RlbmVyLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
QXVkaW9MaXN0ZW5lciBsaXN0ZW5lcjsKIAorICAgICAgICAvLyBOdW1iZXIgb2YgQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgcGxheWluZy4KKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGludCBhY3RpdmVTb3VyY2VDb3VudDsKKyAgICAgICAgCiAg
ICAgICAgIEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1ZmZlcihpbiB1bnNpZ25lZCBsb25nIG51bWJlck9m
Q2hhbm5lbHMsIGluIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIGluIGZsb2F0IHNhbXBs
ZVJhdGUpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgQXVkaW9C
dWZmZXIgY3JlYXRlQnVmZmVyKGluIEFycmF5QnVmZmVyIGJ1ZmZlciwgaW4gYm9vbGVhbiBtaXhU
b01vbm8pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggNjIzZTVhMmJhZDIyZWM2YWUxM2ViNjY4ZjBjNzExODE5Y2QwYTVmOS4u
Y2MxYjY1OTQ5NTYyZmU1MWM1OGIxNzM0OGFkNGZlNzU2Y2Q5YjQ1ZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDEyLTAyLTI3ICBSYXltb25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBBZGQgcGxheWJhY2sgc3RhdGUgZm9yIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBhbmQgYWRk
IG51bWJlciBvZiBhY3RpdmUgbm9kZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc5NzAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1wbGF5YmFja1N0YXRl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9idWZmZXJzb3Vy
Y2UtcGxheWJhY2tTdGF0ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0yNyAgTU9SSVRBIEhhamlt
ZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZW1vdmluZyA8dWw+LCA8bGk+IGlu
c2lkZSBzaGFkb3cgRE9NIHRyaWdnZXJzIGFzc2VydGlvbiBpbiB1cGRhdGVMaXN0TWFya2VyTnVt
YmVycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2Ut
cGxheWJhY2tTdGF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1
ZmZlcnNvdXJjZS1wbGF5YmFja1N0YXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzQ4MmRk
OGJhMWE4ZTNmMDc1ZTYzN2NkNTc5MWJkNzJjMTk1NDIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdCBBdWRpb0NvbnRleHQgYWN0aXZlU3RhdGVDb3Vu
dCBhbmQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHBsYXliYWNrU3RhdGUuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworUEFTUyBVTlNDSEVEVUxFRF9TVEFURTogU291cmNlIDA6IGlzIGlu
IHRoZSBVTlNDSEVEVUxFRF9TVEFURS4KK1BBU1MgU0NIRURVTEVEX1NUQVRFOiAgIFNvdXJjZSAx
OiBpcyBzY2hlZHVsZWQgdG8gc3RhcnQgYXQgdGltZSAzIGFuZCBoYXMgbm90IHN0YXJ0ZWQgcGxh
eWluZyBhZnRlciAyIHNlY29uZHMKK1BBU1MgUExBWUlOR19TVEFURTogICAgIFNvdXJjZSAyOiAy
IHNlY29uZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxIGlzIHBsYXlpbmcgYWZ0ZXIgMiBzZWNv
bmRzCitQQVNTIEZJTklTSEVEX1NUQVRFOiAgICBTb3VyY2UgMzogMS4yNSBzZWNvbmQgc291cmNl
IHN0YXJ0aW5nIGF0IHRpbWUgMCBoYXMgZmluaXNoZWQgcGxheWluZyBhZnRlciAyIHNlY29uZHMK
K1BBU1MgU0NIRURVTEVEX1NUQVRFOiAgIFNvdXJjZSA0OiAxIHNlY29uZCBncmFpbiBzY2hlZHVs
ZWQgdG8gc3RhcnQgdGltZSAzIGhhcyBub3Qgc3RhcnRlZCBwbGF5aW5nIGFmdGVyIDIgc2Vjb25k
cworUEFTUyBQTEFZSU5HX1NUQVRFOiAgICAgU291cmNlIDU6IDIgc2Vjb25kIGdyYWluIHN0YXJ0
aW5nIGF0IHRpbWUgMC41IGlzIHBsYXlpbmcgYWZ0ZXIgMiBzZWNvbmRzCitQQVNTIEZJTklTSEVE
X1NUQVRFOiAgICBTb3VyY2UgNjogMSBzZWNvbmQgZ3JhaW4gc3RhcnRpbmcgYXQgdGltZSAwLjUg
aGFzIGZpbmlzaGVkIHBsYXlpbmcgYWZ0ZXIgMiBzZWNvbmRzCitQQVNTIFNDSEVEVUxFRF9TVEFU
RTogICBTb3VyY2UgNzogYSBsb29waW5nIDAuNSBzZWNvbmQgc291cmNlIHNjaGVkdWxlZCBhdCB0
aW1lIDMgaGFzIG5vdCBzdGFydGVkIHBsYXlpbmcgYWZ0ZXIgMiBzZWNvbmRzCitQQVNTIFBMQVlJ
TkdfU1RBVEU6ICAgICBTb3VyY2UgODogYSBsb29waW5nIDAuNSBzZWNvbmQgc291cmNlIHN0YXJ0
aW5nIGF0IHRpbWUgMS4yNSBpcyBwbGF5aW5nIGFmdGVyIDIgc2Vjb25kcworUEFTUyAzIGFyZSBj
dXJyZW50bHkgcGxheWluZy4KK1BBU1MgYWN0aXZlU291cmNlQ291bnQgYW5kIHBsYXliYWNrU3Rh
dGUgdGVzdHMgc3VjY2VlZGVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVm
ZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlv
YnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWI4ZDUzZjBmODFm
NTFjZmIzOTBiN2U4ZmI3ZGU1MmI3NzUwY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS5odG1sCkBAIC0wLDAg
KzEsMjA1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBU
cmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvQ29udGV4dCBhY3RpdmVTdGF0ZUNvdW50IGFu
ZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgcGxheWJhY2tTdGF0ZS4iKTsKKworLy8gQ3JlYXRlIGEg
ZmV3IHNvdXJjZXMgdGhhdCBzdGFydCBhbmQgZW5kIHBsYXlpbmcgYXQgdmFyaW91cyB0aW1lcy4g
IEFmdGVyIHJlbmRlcmluZywgY2hlY2sgdGhhdAorLy8gZWFjaCBzb3VyY2UgaXMgaW4gdGhlIGNv
cnJlY3Qgc3RhdGUgYW5kIHRoYXQgdGhlIG51bWJlciBvZiBhY3RpdmUgc291cmNlcyBpcyBjb3Jy
ZWN0LgorCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwOworCisvLyBSZW5kZXIgZm9yIHRoaXMgbG9u
Zy4KK3ZhciByZW5kZXJUaW1lID0gMjsKK3ZhciByZW5kZXJMZW5ndGggPSB0aW1lVG9TYW1wbGVG
cmFtZShyZW5kZXJUaW1lLCBzYW1wbGVSYXRlKTsKKworLy8gTnVtYmVyIG9mIHNvdXJjZXMgZXhw
ZWN0ZWQgdG8gYmUgYWN0aXZlIGF0IHRoZSBlbmQgb2YgdGhlIHJlbmRlcmluZyB0aW1lLgordmFy
IGV4cGVjdGVkQWN0aXZlQ291bnQgPSAzOyAgICAgIAorCit2YXIgY29udGV4dDsKKworLy8gTGlz
dCBvZiBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzIHNvdXJjZXMuCit2YXIgc291cmNlcyA9IFtdOwor
CisvLyBMaXN0IG9mIG1lc3NhZ2VzIHRoYXQgd2lsbCBiZSBwcmludGVkIG91dCBvbiBzdWNjZXNz
IChvciBmYWlsdXJlKS4gIE1lc3NhZ2VzIGFyZSBpbiB0aGUgc2FtZQorLy8gb3JkZXIgYXMgdGhl
IHNvdXJjZXMgbGlzdCBhYm92ZS4KK3ZhciBzb3VyY2VNZXNzYWdlcyA9IFtdOworCisvLyBMaXN0
IG9mIHRoZSBleHBlY3RlZCBwbGF5YmFjayBzdGF0ZSBmb3IgZWFjaCBzb3VyY2UuICBJbiB0aGUg
c2FtZSBvcmRlciBhIHNvdXJjZXMgbGlzdCBhYm92ZS4KK3ZhciBzb3VyY2VFeHBlY3RlZFN0YXRl
cyA9IFtdOworCisvLyBBcnJheSBtYXBwaW5nIHRoZSBwbGF5YmFjayBzdGF0ZSB0byBhIHN0cmlu
Zy4KK3ZhciBwbGF5YmFja1N0YXRlTmFtZSA9IFsiVU5TQ0hFRFVMRURfU1RBVEU6ICIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIlNDSEVEVUxFRF9TVEFURTogICAiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICJQTEFZSU5HX1NUQVRFOiAgICAgIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAiRklOSVNIRURfU1RBVEU6ICAgICJdOworCitmdW5jdGlvbiBjaGVja1Jlc3VsdChldmVu
dCkKK3sKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisKKyAgICAvLyBGb3IgZWFjaCBzb3VyY2Us
IHZlcmlmeSB0aGF0IHRoZSBwbGF5YmFjayBzdGF0ZSBtYXRjaGVzIG91ciBleHBlY3RlZCBwbGF5
IGJhY2sgc3RhdGUuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzb3VyY2VzLmxlbmd0aDsgKytr
KSB7CisgICAgICAgIGlmIChzb3VyY2VzW2tdLnBsYXliYWNrU3RhdGUgPT0gc291cmNlRXhwZWN0
ZWRTdGF0ZXNba10pIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQocGxheWJhY2tTdGF0ZU5hbWVb
c291cmNlRXhwZWN0ZWRTdGF0ZXNba11dICsgIlNvdXJjZSAiICsgayArICI6ICIgKyBzb3VyY2VN
ZXNzYWdlc1trXS5wYXNzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWls
ZWQocGxheWJhY2tTdGF0ZU5hbWVbc291cmNlRXhwZWN0ZWRTdGF0ZXNba11dICsgIlNvdXJjZSAi
ICsgayArICI6ICIgKyBzb3VyY2VNZXNzYWdlc1trXS5mYWlsICsgIiBTdGF0ZSA9ICIgKyBwbGF5
YmFja1N0YXRlTmFtZVtzb3VyY2VzW2tdLnBsYXliYWNrU3RhdGVdKTsKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb250ZXh0LmFjdGl2
ZVNvdXJjZUNvdW50ID09IGV4cGVjdGVkQWN0aXZlQ291bnQpIHsKKyAgICAgICAgdGVzdFBhc3Nl
ZChjb250ZXh0LmFjdGl2ZVNvdXJjZUNvdW50ICsgIiBhcmUgY3VycmVudGx5IHBsYXlpbmcuIik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZChjb250ZXh0LmFjdGl2ZVNvdXJjZUNv
dW50ICsgIiBhcmUgY3VycmVudGx5IHBsYXlpbmcsIGJ1dCBleHBlY3RlZCAiICsgZXhwZWN0ZWRB
Y3RpdmVDb3VudCArICIuIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoc3VjY2VzcykgeworICAgICAgICB0ZXN0UGFzc2VkKCJhY3RpdmVTb3VyY2VDb3VudCBh
bmQgcGxheWJhY2tTdGF0ZSB0ZXN0cyBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdGVzdEZhaWxlZCgiYWN0aXZlU291cmNlQ291bnQgYW5kIHBsYXliYWNrU3RhdGUgdGVzdHMg
ZGlkIG5vdCBzdWNjZWVkLiIpOworICAgIH0KKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIHZhciBzdWZmaXhNZXNzYWdlID0gIiBhZnRl
ciAiICsgcmVuZGVyVGltZSArICIgc2Vjb25kcyI7CisgICAgICAKKyAgICB2YXIgc291cmNlOwor
CisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4gIFdlIHdpbGwgcmVuZGVyIGZv
ciByZW5kZXJUaW1lIHNlY29uZHMKKyAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4
dCgyLCB0aW1lVG9TYW1wbGVGcmFtZShyZW5kZXJUaW1lLCBzYW1wbGVSYXRlKSwgc2FtcGxlUmF0
ZSk7CisKKyAgICAvLyBUZXN0IHVuc2NoZWR1bGVkIHN0YXRlLiBDcmVhdGUgMyBzZWNvbmQgc291
cmNlLCBidXQgZG9uJ3Qgc2NoZWR1bGUgaXQuCisgICAgc291cmNlID0gY29udGV4dC5jcmVhdGVC
dWZmZXJTb3VyY2UoKTsKKyAgICBzb3VyY2UuYnVmZmVyID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihj
b250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZSgzLCBzYW1wbGVSYXRlKSk7CisgICAgc291cmNlLmNv
bm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgc291cmNlcy5wdXNoKHNvdXJjZSk7Cisg
ICAgc291cmNlTWVzc2FnZXMucHVzaCh7cGFzczogImlzIGluIHRoZSBVTlNDSEVEVUxFRF9TVEFU
RS4iLCBmYWlsOiAiaXMgbm90IGluIHRoZSBVTlNDSEVEVUxFRF9TVEFURS4ifSk7CisgICAgc291
cmNlRXhwZWN0ZWRTdGF0ZXMucHVzaChzb3VyY2UuVU5TQ0hFRFVMRURfU1RBVEUpOworCisgICAg
Ly8gVGVzdCBub3RlT24uCisKKyAgICAvLyBUZXN0IHNjaGVkdWxlZCBzdGF0ZS4gQ3JlYXRlIDMg
c2Vjb25kIHNvdXJjZSwgc3RhcnRpbmcgYWZ0ZXIgd2UgZmluaXNoIHJlbmRlcmluZy4KKyAgICBz
b3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIHNvdXJjZS5idWZmZXIg
PSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHRpbWVUb1NhbXBsZUZyYW1lKDMsIHNhbXBs
ZVJhdGUpKTsKKyAgICBzb3VyY2UuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICBz
b3VyY2Uubm90ZU9uKHJlbmRlclRpbWUgKyAxKTsKKyAgICBzb3VyY2VzLnB1c2goc291cmNlKTsK
KyAgICBzb3VyY2VNZXNzYWdlcy5wdXNoKHtwYXNzOiAiaXMgc2NoZWR1bGVkIHRvIHN0YXJ0IGF0
IHRpbWUgIiArIChyZW5kZXJUaW1lICsgMSkgKyAiIGFuZCBoYXMgbm90IHN0YXJ0ZWQgcGxheWlu
ZyIgKyBzdWZmaXhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6ICJpcyBu
b3QgaW4gdGhlIFNDSEVEVUxFRF9TVEFURS4ifSk7CisgICAgc291cmNlRXhwZWN0ZWRTdGF0ZXMu
cHVzaChzb3VyY2UuU0NIRURVTEVEX1NUQVRFKTsKKworICAgIC8vIFRlc3QgcGxheWluZyBzdGF0
ZS4gQ3JlYXRlIGEgMiBzZWNvbmQgc291cmNlLCBzdGFydGluZyBpbiBvbmUgc2Vjb25kLiAgVGhp
cyBzaG91bGQgc3RpbGwgYmUKKyAgICAvLyBwbGF5aW5nIHdoZW4gcmVuZGVyaW5nIGlzIGRvbmUu
CisgICAgc291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBzb3VyY2Uu
YnVmZmVyID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZSgy
LCBzYW1wbGVSYXRlKSk7CisgICAgc291cmNlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7
CisgICAgc291cmNlLm5vdGVPbigxKTsKKyAgICBzb3VyY2VzLnB1c2goc291cmNlKTsKKyAgICBz
b3VyY2VNZXNzYWdlcy5wdXNoKHtwYXNzOiAiMiBzZWNvbmQgc291cmNlIHN0YXJ0aW5nIGF0IHRp
bWUgMSBpcyBwbGF5aW5nIiArIHN1ZmZpeE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFpbDogIjIgc2Vjb25kIHNvdXJjZSBzdGFydGluZyBhdCB0aW1lIDEgaXMgbm90IHBsYXlp
bmcuIn0pOworICAgIHNvdXJjZUV4cGVjdGVkU3RhdGVzLnB1c2goc291cmNlLlBMQVlJTkdfU1RB
VEUpOworCisgICAgLy8gVGVzdCBmaW5pc2hlZCBzdGF0ZS4gQ3JlYXRlIGEgMS4yNSBzZWNvbmQg
c291cmNlLCBzdGFydGluZyBpbW1lZGlhdGVseS4gIFRoaXMgd2lsbCBmaW5pc2gKKyAgICAvLyBi
ZWZvcmUgcmVuZGVyaW5nIGlzIGNvbXBsZXRlLgorICAgIHNvdXJjZSA9IGNvbnRleHQuY3JlYXRl
QnVmZmVyU291cmNlKCk7CisgICAgc291cmNlLmJ1ZmZlciA9IGNyZWF0ZUltcHVsc2VCdWZmZXIo
Y29udGV4dCwgdGltZVRvU2FtcGxlRnJhbWUoMS4yNSwgc2FtcGxlUmF0ZSkpOworICAgIHNvdXJj
ZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIHNvdXJjZS5ub3RlT24oMCk7Cisg
ICAgc291cmNlcy5wdXNoKHNvdXJjZSk7CisgICAgc291cmNlTWVzc2FnZXMucHVzaCh7cGFzczog
IjEuMjUgc2Vjb25kIHNvdXJjZSBzdGFydGluZyBhdCB0aW1lIDAgaGFzIGZpbmlzaGVkIHBsYXlp
bmciICsgc3VmZml4TWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsOiAiMS4y
NSBzZWNvbmQgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMCBoYXMgbm90IGZpbmlzaGVkIHBsYXlp
bmcuIn0pOworICAgIHNvdXJjZUV4cGVjdGVkU3RhdGVzLnB1c2goc291cmNlLkZJTklTSEVEX1NU
QVRFKTsKKworICAgIC8vIFRlc3Qgbm90ZUdyYWluT24uCisKKyAgICAvLyBUZXN0IHNjaGVkdWxl
ZCBzdGF0ZS4gIEdyYWluIHN0YXJ0cyBhZnRlciBvdXIgcmVuZGVyaW5nIHRpbWUuCisgICAgc291
cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBzb3VyY2UuYnVmZmVyID0g
Y3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZSgzLCBzYW1wbGVS
YXRlKSk7CisgICAgc291cmNlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgc291
cmNlLm5vdGVHcmFpbk9uKHJlbmRlclRpbWUgKyAxLCAwLCAxKTsKKyAgICBzb3VyY2VzLnB1c2go
c291cmNlKTsKKyAgICBzb3VyY2VNZXNzYWdlcy5wdXNoKHtwYXNzOiAiMSBzZWNvbmQgZ3JhaW4g
c2NoZWR1bGVkIHRvIHN0YXJ0IHRpbWUgIiArIChyZW5kZXJUaW1lICsgMSkgKyAiIGhhcyBub3Qg
c3RhcnRlZCBwbGF5aW5nIiArIHN1ZmZpeE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFpbDogIjEgc2Vjb25kIGdyYWluIHNjaGVkdWxlZCB0byBzdGFydCB0aW1lICIgKyAocmVu
ZGVyVGltZSArIDEpICsgIiBpcyBub3Qgc2NoZWR1bGVkLiJ9KTsKKyAgICBzb3VyY2VFeHBlY3Rl
ZFN0YXRlcy5wdXNoKHNvdXJjZS5TQ0hFRFVMRURfU1RBVEUpOworCisgICAgLy8gVGVzdCBwbGF5
aW5nIHN0YXRlLiBDcmVhdGUgMyBzZWNvbmQgc291cmNlLCBzdGFydGluZyBpbiAxLzIgc2Vjb25k
LCBidXQgb25seSBsYXN0aW5nIDEKKyAgICAvLyBzZWNvbmQuICBUaGlzIHdpbGwgZmluaXNoIGJl
Zm9yZSByZW5kZXJpbmcgaXMgY29tcGxldGUuCisgICAgc291cmNlID0gY29udGV4dC5jcmVhdGVC
dWZmZXJTb3VyY2UoKTsKKyAgICBzb3VyY2UuYnVmZmVyID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihj
b250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZSgzLCBzYW1wbGVSYXRlKSk7CisgICAgc291cmNlLmNv
bm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgc291cmNlLm5vdGVHcmFpbk9uKDAuNSwg
MCwgMik7CisgICAgc291cmNlcy5wdXNoKHNvdXJjZSk7CisgICAgc291cmNlTWVzc2FnZXMucHVz
aCh7cGFzczogIjIgc2Vjb25kIGdyYWluIHN0YXJ0aW5nIGF0IHRpbWUgMC41IGlzIHBsYXlpbmci
ICsgc3VmZml4TWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsOiAiMiBzZWNv
bmQgZ3JhaW4gc3RhcnRpbmcgYXQgdGltZSAwLjUgaXMgbm90IHBsYXlpbmcuIn0pOworICAgIHNv
dXJjZUV4cGVjdGVkU3RhdGVzLnB1c2goc291cmNlLlBMQVlJTkdfU1RBVEUpOworCisgICAgLy8g
VGVzdCBmaW5pc2hlZCBzdGF0ZS4gQ3JlYXRlIDMgc2Vjb25kIHNvdXJjZSwgc3RhcnRpbmcgaW4g
MS8yIHNlY29uZCwgYnV0IG9ubHkgbGFzdGluZyAxCisgICAgLy8gc2Vjb25kLiAgVGhpcyB3aWxs
IGZpbmlzaCBiZWZvcmUgcmVuZGVyaW5nIGlzIGNvbXBsZXRlLgorICAgIHNvdXJjZSA9IGNvbnRl
eHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgc291cmNlLmJ1ZmZlciA9IGNyZWF0ZUltcHVs
c2VCdWZmZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJhbWUoMywgc2FtcGxlUmF0ZSkpOworICAg
IHNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIHNvdXJjZS5ub3RlR3Jh
aW5PbigwLjUsIDAsIDEpOworICAgIHNvdXJjZXMucHVzaChzb3VyY2UpOworICAgIHNvdXJjZU1l
c3NhZ2VzLnB1c2goe3Bhc3M6ICIxIHNlY29uZCBncmFpbiBzdGFydGluZyBhdCB0aW1lIDAuNSBo
YXMgZmluaXNoZWQgcGxheWluZyIgKyBzdWZmaXhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhaWw6ICIxIHNlY29uZCBncmFpbiBzdGFydGluZyBhdCB0aW1lIDAuNSBoYXMgbm90
IGZpbmlzaGVkIHBsYXlpbmcuIn0pOworICAgIHNvdXJjZUV4cGVjdGVkU3RhdGVzLnB1c2goc291
cmNlLkZJTklTSEVEX1NUQVRFKTsKKyAgICAgIAorICAgIC8vIFRlc3QgbG9vcGluZyBzb3VyY2UK
KworICAgIC8vIFRlc3Qgc2NoZWR1bGVkIHN0YXRlIGZvciBsb29waW5nIHNvdXJjZS4gQ3JlYXRl
IDAuNSBzZWNvbmQgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMS4yNSBhbmQKKyAgICAvLyBsb29w
aW5nIGFmdGVyd2FyZHMuICBUaGlzIHdpbGwgc3RpbGwgYmUgcGxheWluZyB3aGVuIHJlbmRlcmlu
ZyBpcyBjb21wbGV0ZS4KKyAgICBzb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgp
OworICAgIHNvdXJjZS5idWZmZXIgPSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHRpbWVU
b1NhbXBsZUZyYW1lKDAuNSwgc2FtcGxlUmF0ZSkpOworICAgIHNvdXJjZS5sb29wID0gdHJ1ZTsK
KyAgICBzb3VyY2UuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICBzb3VyY2Uubm90
ZU9uKHJlbmRlclRpbWUgKyAxKTsKKyAgICBzb3VyY2VzLnB1c2goc291cmNlKTsKKyAgICBzb3Vy
Y2VNZXNzYWdlcy5wdXNoKHtwYXNzOiAiYSBsb29waW5nIDAuNSBzZWNvbmQgc291cmNlIHNjaGVk
dWxlZCBhdCB0aW1lICIgKyAocmVuZGVyVGltZSArIDEpICsKKyAgICAiIGhhcyBub3Qgc3RhcnRl
ZCBwbGF5aW5nIiArIHN1ZmZpeE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmFp
bDogImEgbG9vcGluZyAwLjUgc2Vjb25kIHNvdXJjZSBzY2hlZHVsZWQgYXQgdGltZSAiICsgKHJl
bmRlclRpbWUgKyAxKSArICIgaXMgbm90IHNjaGVkdWxlZC4ifSk7CisgICAgc291cmNlRXhwZWN0
ZWRTdGF0ZXMucHVzaChzb3VyY2UuU0NIRURVTEVEX1NUQVRFKTsKKworICAgIC8vIFRlc3QgcGxh
eWluZyBzdGF0ZSBmb3IgbG9vcGluZyBzb3VyY2UuIENyZWF0ZSAwLjUgc2Vjb25kIHNvdXJjZSBz
dGFydGluZyBhdCB0aW1lIDEuMjUgYW5kCisgICAgLy8gbG9vcGluZyBhZnRlcndhcmRzLiAgVGhp
cyB3aWxsIHN0aWxsIGJlIHBsYXlpbmcgd2hlbiByZW5kZXJpbmcgaXMgY29tcGxldGUuCisgICAg
c291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBzb3VyY2UuYnVmZmVy
ID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZSgwLjUsIHNh
bXBsZVJhdGUpKTsKKyAgICBzb3VyY2UubG9vcCA9IHRydWU7CisgICAgc291cmNlLmNvbm5lY3Qo
Y29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgc291cmNlLm5vdGVPbigxLjUpOworICAgIHNvdXJj
ZXMucHVzaChzb3VyY2UpOworICAgIHNvdXJjZU1lc3NhZ2VzLnB1c2goe3Bhc3M6ICJhIGxvb3Bp
bmcgMC41IHNlY29uZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxLjI1IGlzIHBsYXlpbmciICsg
c3VmZml4TWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsOiAiYSBsb29waW5n
IDAuNSBzZWNvbmQgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMS4yNSBpcyBub3QgcGxheWluZy4i
fSk7CisgICAgc291cmNlRXhwZWN0ZWRTdGF0ZXMucHVzaChzb3VyY2UuUExBWUlOR19TVEFURSk7
CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jlc3VsdDsKKyAgICBjb250ZXh0LnN0
YXJ0UmVuZGVyaW5nKCk7Cit9CisgICAgICAKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CisgIAorPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130169</attachid>
            <date>2012-03-05 11:44:19 -0800</date>
            <delta_ts>2012-03-20 00:57:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79701-20120305114418.patch</filename>
            <type>text/plain</type>
            <size>26616</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NjM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY3MzEzOGRjYTg4ZGY4
MzMzYjhlN2Y5ZmYwZDYyNmUyZTk3NmY3MC4uYmY5YTAwODg2OTJlMGVmZmIyZDU5YjM3YWQ3OTM3
Mzc2NTFhMjI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTI3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgcGxheWJhY2sgc3RhdGUg
Zm9yIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBhbmQgYWRkIG51bWJlciBvZiBhY3RpdmUgbm9kZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzAxCisK
KyAgICAgICAgQWRkIGEgcGxheWJhY2sgc3RhdGUgdG8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHNv
IHRoYXQgdGhlIHVzZXIgY2FuCisgICAgICAgIHRlbGwgaWYgdGhlIG5vZGUgaXMgc2NoZWR1bGVk
LCBwbGF5aW5nLCBvciBmaW5pc2hlZC4KKworICAgICAgICBGb3IgYW4gQXVkaW9Db250ZXh0LCBh
ZGQgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mCisgICAgICAgIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZSdzIHRoYXQgYXJlIGFjdGl2ZSAocGxheWluZyBhdWRpbykuCisKKyAgICAgICAgRGVsZXRlZCBt
X2lzUGxheWluZyBhbmQgbV9oYXNGaW5pc2hlZC4gRm9yIHRoZSByZWNvcmQsIG1faXNQbGF5aW5n
CisgICAgICAgIGlzIHRoZSBzYW1lIGFzIGEgcGxheWJhY2tTdGF0ZSBvZiBTQ0hFRFVMRURfU1RB
VEUgb3IgUExBWUlOR19TVEFURS4KKyAgICAgICAgbV9oYXNGaW5pc2hlZCBpcyBlcXVpdmFsZW50
IHRvIGEgcGxheWJhY2tTdGF0ZSBvZiBGSU5JU0hFRF9TVEFURS4KKyAgICAgICAgCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmF1ZGlvL2F1
ZGlvYnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbAorCisgICAgICAgICogd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUpOgor
ICAgICAgICBpbml0aWFsaXplIHBsYXliYWNrU3RhdGUsIHJlbW92ZSBtX2lzUGxheWluZywgbV9o
YXNGaW5pc2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJv
Y2Vzcyk6IFVwZGF0ZSBwbGF5YmFja1N0YXRlCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OmZpbmlzaCk6IFVwZGF0ZSBwbGF5YmFja1N0YXRlCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVPbik6IFVwZGF0ZSBwbGF5YmFja1N0YXRl
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFpbk9uKTog
VXBkYXRlIHBsYXliYWNrU3RhdGUKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6bm90ZU9mZik6IFVzZSBwbGF5YmFja1N0YXRlIAorICAgICAgICAqIHdlYmF1ZGlvL0F1
ZGlvQnVmZmVyU291cmNlTm9kZS5oOgorICAgICAgICAoQXVkaW9CdWZmZXJTb3VyY2VOb2RlKTog
RGVmaW5lIHN0YXRlcywgcmVtb3ZlIG1faXNQbGF5aW5nLCBtX2hhc0ZpbmlzaGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwbGF5YmFja1N0YXRlKTogQWRkZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbDogRGVmaW5lIGNv
bnN0YW50cyBmb3IgdGhlCisgICAgICAgIHBsYXliYWNrIHN0YXRlLCBhZGQgYXR0cmlidXRlIHBs
YXliYWNrU3RhdGUuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6YWN0aXZlU291cmNlQ291bnQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aW5jcmVtZW50QWN0aXZlU291cmNlQ291bnQp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6ZGVjcmVtZW50QWN0aXZl
U291cmNlQ291bnQpOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoK
KyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmlkbDogQWRkIGF0dHJpYnV0ZSBhY3RpdmVTb3VyY2VDb3VudC4KKwogMjAxMi0wMy0wMSAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2hyb21lIDE4IGZhaWxzIGh0
bWw1dGVzdC5jb20gWEhSIEJsb2IgcmVzcG9uc2UgdGVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAKaW5kZXggNDg4MTEzMWE0ZGYxMzJl
NzBkNTY3Y2UxMDljNmU5NjE5ODRhNzc2My4uMzY0NGE3ODAzMGIyMWQwYjQ0ZTE1ZDhjZTlhZTI0
ZmNjNWFmNDNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZl
clNvdXJjZU5vZGUuY3BwCkBAIC01OCw5ICs1OCw3IEBAIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJT
b3VyY2VOb2RlPiBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNv
CiBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgOiBBdWRpb1NvdXJjZU5vZGUoY29u
dGV4dCwgc2FtcGxlUmF0ZSkKICAgICAsIG1fYnVmZmVyKDApCi0gICAgLCBtX2lzUGxheWluZyhm
YWxzZSkKICAgICAsIG1faXNMb29waW5nKGZhbHNlKQotICAgICwgbV9oYXNGaW5pc2hlZChmYWxz
ZSkKICAgICAsIG1fc3RhcnRUaW1lKDAuMCkKICAgICAsIG1fZW5kVGltZShVbmtub3duVGltZSkK
ICAgICAsIG1fdmlydHVhbFJlYWRJbmRleCgwKQpAQCAtNjksNiArNjcsNyBAQCBBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQs
IGZsb2F0IHNhbXBsZQogICAgICwgbV9ncmFpbkR1cmF0aW9uKERlZmF1bHRHcmFpbkR1cmF0aW9u
KQogICAgICwgbV9sYXN0R2FpbigxLjApCiAgICAgLCBtX3Bhbm5lck5vZGUoMCkKKyAgICAsIG1f
cGxheWJhY2tTdGF0ZShVTlNDSEVEVUxFRF9TVEFURSkKIHsKICAgICBzZXROb2RlVHlwZShOb2Rl
VHlwZUF1ZGlvQnVmZmVyU291cmNlKTsKIApAQCAtMTEwLDE4ICsxMDksMjcgQEAgdm9pZCBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIAogICAg
ICAgICAvLyBJZiB3ZSBrbm93IHRoZSBlbmQgdGltZSBhbmQgaXQncyBhbHJlYWR5IHBhc3NlZCwg
dGhlbiBkb24ndCBib3RoZXIgZG9pbmcgYW55IG1vcmUgcmVuZGVyaW5nIHRoaXMgY3ljbGUuCiAg
ICAgICAgIGlmIChtX2VuZFRpbWUgIT0gVW5rbm93blRpbWUgJiYgZW5kRnJhbWUgPD0gcXVhbnR1
bVN0YXJ0RnJhbWUpIHsKLSAgICAgICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CiAgICAgICAg
ICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwogICAgICAgICAgICAgZmluaXNoKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbV9pc1BsYXlpbmcgfHwgbV9oYXNGaW5pc2hl
ZCB8fCAhYnVmZmVyKCkgfHwgc3RhcnRGcmFtZSA+PSBxdWFudHVtRW5kRnJhbWUpIHsKKyAgICAg
ICAgaWYgKCEobV9wbGF5YmFja1N0YXRlID09IFNDSEVEVUxFRF9TVEFURSB8fCBtX3BsYXliYWNr
U3RhdGUgPT0gUExBWUlOR19TVEFURSkKKyAgICAgICAgICAgIHx8IChtX3BsYXliYWNrU3RhdGUg
PT0gRklOSVNIRURfU1RBVEUpCisgICAgICAgICAgICB8fCAhYnVmZmVyKCkKKyAgICAgICAgICAg
IHx8IHN0YXJ0RnJhbWUgPj0gcXVhbnR1bUVuZEZyYW1lKSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogY2FuIG9wdGltaXplIGhlcmUgYnkgcHJvcGFnYXRpbmcgc2lsZW50IGhpbnQgaW5zdGVhZCBv
ZiBmb3JjaW5nIHRoZSB3aG9sZSBjaGFpbiB0byBwcm9jZXNzIHNpbGVuY2UuCiAgICAgICAgICAg
ICBvdXRwdXRCdXMtPnplcm8oKTsKICAgICAgICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobV9wbGF5YmFj
a1N0YXRlID09IFNDSEVEVUxFRF9TVEFURSkgeworICAgICAgICAgICAgLy8gSW5jcmVtZW50IHRo
ZSBhY3RpdmUgc291cmNlIGNvdW50IG9ubHkgaWYgd2UncmUgdHJhbnNpdGlvbmluZyBmcm9tIHRo
ZQorICAgICAgICAgICAgLy8gU0NIRURVTEVEX1NUQVRFIHN0YXRlIHRvIHRoZSBQTEFZSU5HX1NU
QVRFIHN0YXRlLgorICAgICAgICAgICAgbV9wbGF5YmFja1N0YXRlID0gUExBWUlOR19TVEFURTsK
KyAgICAgICAgICAgIGNvbnRleHQoKS0+aW5jcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgc2l6ZV90IHF1YW50dW1GcmFtZU9mZnNldCA9IHN0
YXJ0RnJhbWUgPiBxdWFudHVtU3RhcnRGcmFtZSA/IHN0YXJ0RnJhbWUgLSBxdWFudHVtU3RhcnRG
cmFtZSA6IDA7CiAgICAgICAgIHF1YW50dW1GcmFtZU9mZnNldCA9IG1pbihxdWFudHVtRnJhbWVP
ZmZzZXQsIGZyYW1lc1RvUHJvY2Vzcyk7IC8vIGNsYW1wIHRvIHZhbGlkIHJhbmdlCiAgICAgICAg
IHNpemVfdCBidWZmZXJGcmFtZXNUb1Byb2Nlc3MgPSBmcmFtZXNUb1Byb2Nlc3MgLSBxdWFudHVt
RnJhbWVPZmZzZXQ7CkBAIC0xNTAsOCArMTU4LDggQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAgICAgICAgICAgICAg
bWVtc2V0KG1fZGVzdGluYXRpb25DaGFubmVsc1tpXSArIHplcm9TdGFydEZyYW1lLCAwLCBzaXpl
b2YoZmxvYXQpICogZnJhbWVzVG9aZXJvKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
bV9pc1BsYXlpbmcgPSBmYWxzZTsKICAgICAgICAgICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IDA7
CisKICAgICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgICB9CiAKQEAgLTE2Nyw3ICsxNzUsNiBA
QCBib29sIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVuZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90
TG9vcGluZyhBdWRpb0J1cyosIHVuc2lnbgogewogICAgIGlmICghbG9vcCgpKSB7CiAgICAgICAg
IC8vIElmIHdlJ3JlIG5vdCBsb29waW5nLCB0aGVuIHN0b3AgcGxheWluZyB3aGVuIHdlIGdldCB0
byB0aGUgZW5kLgotICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogCiAgICAgICAgIGlmIChm
cmFtZXNUb1Byb2Nlc3MgPiAwKSB7CiAgICAgICAgICAgICAvLyBXZSdyZSBub3QgbG9vcGluZyBh
bmQgd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzYW1wbGUgZGF0YSwgYnV0IHdlIHN0aWxs
IG5lZWQgdG8gcHJvdmlkZSBtb3JlIG91dHB1dCwKQEAgLTM0MywxMCArMzUwLDEyIEBAIHZvaWQg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZXNldCgpCiAKIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VO
b2RlOjpmaW5pc2goKQogewotICAgIGlmICghbV9oYXNGaW5pc2hlZCkgeworICAgIGlmIChtX3Bs
YXliYWNrU3RhdGUgIT0gRklOSVNIRURfU1RBVEUpIHsKICAgICAgICAgLy8gTGV0IHRoZSBjb250
ZXh0IGRlcmVmZXJlbmNlIHRoaXMgQXVkaW9Ob2RlLgogICAgICAgICBjb250ZXh0KCktPm5vdGlm
eU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcodGhpcyk7Ci0gICAgICAgIG1faGFzRmluaXNoZWQgPSB0
cnVlOworICAgICAgICAvLyBGaW5pc2hlZCBwbGF5aW5nLCBzbyBkZWNyZW1lbnQgdGhlIGFjdGl2
ZSBzb3VyY2UgY291bnQuCisgICAgICAgIG1fcGxheWJhY2tTdGF0ZSA9IEZJTklTSEVEX1NUQVRF
OworICAgICAgICBjb250ZXh0KCktPmRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCk7CiAgICAg
fQogfQogCkBAIC0zOTAsMTkgKzM5OSwyMCBAQCB1bnNpZ25lZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6Om51bWJlck9mQ2hhbm5lbHMoKQogdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVP
bihkb3VibGUgd2hlbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICht
X2lzUGxheWluZykKKyAgICBpZiAobV9wbGF5YmFja1N0YXRlID09IFNDSEVEVUxFRF9TVEFURSB8
fCBtX3BsYXliYWNrU3RhdGUgPT0gUExBWUlOR19TVEFURSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9pc0dyYWluID0gZmFsc2U7CiAgICAgbV9zdGFydFRpbWUgPSB3aGVuOwogICAgIG1fdmly
dHVhbFJlYWRJbmRleCA9IDA7Ci0gICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgIG1fcGxheWJh
Y2tTdGF0ZSA9IFNDSEVEVUxFRF9TVEFURTsKIH0KIAogdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6Om5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZzZXQsIGRvdWJsZSBn
cmFpbkR1cmF0aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1f
aXNQbGF5aW5nKQorCisgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRURfU1RBVEUg
fHwgbV9wbGF5YmFja1N0YXRlID09IFBMQVlJTkdfU1RBVEUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghYnVmZmVyKCkpCkBAIC00MzIsMTMgKzQ0MiwxMyBAQCB2b2lkIEF1ZGlvQnVmZmVy
U291cmNlTm9kZTo6bm90ZUdyYWluT24oZG91YmxlIHdoZW4sIGRvdWJsZSBncmFpbk9mZnNldCwg
ZG91YmxlCiAgICAgLy8gU2luY2UgcGxheWJhY2tSYXRlID09IDEgaXMgdmVyeSBjb21tb24sIGl0
J3Mgd29ydGggY29uc2lkZXJpbmcgcXVhbGl0eS4KICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSBB
dWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUobV9ncmFpbk9mZnNldCwgYnVmZmVyKCkt
PnNhbXBsZVJhdGUoKSk7CiAgICAgCi0gICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgIG1fcGxh
eWJhY2tTdGF0ZSA9IFNDSEVEVUxFRF9TVEFURTsKIH0KIAogdm9pZCBBdWRpb0J1ZmZlclNvdXJj
ZU5vZGU6Om5vdGVPZmYoZG91YmxlIHdoZW4pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBpZiAoIW1faXNQbGF5aW5nKQorICAgIGlmICghKG1fcGxheWJhY2tTdGF0ZSA9PSBT
Q0hFRFVMRURfU1RBVEUgfHwgbV9wbGF5YmFja1N0YXRlID09IFBMQVlJTkdfU1RBVEUpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgd2hlbiA9IG1heCgwLjAsIHdoZW4pOwpAQCAtNDk2LDcg
KzUwNiw2IEBAIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpzZXRMb29waW5nKGJvb2wgbG9v
cGluZykKIAogICAgIG1faXNMb29waW5nID0gbG9vcGluZzsKIH0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKaW5kZXggNWFjNTRjNjBhMGNmMmQ0
MzdlMDliMjY2YmQyMTdiODgxNmRlMGM5NS4uNGIzNTJhMzE4NTdjOTNkZWJiNzQ1OWEyNjAxOWRl
MDRjZDNkM2M0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmgKQEAgLTQ0LDYgKzQ0LDIzIEBAIGNsYXNzIEF1ZGlvQ29udGV4dDsKIAogY2xh
c3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291cmNlTm9kZSB7CiBwdWJs
aWM6CisgICAgLy8gVGhlc2UgYXJlIHRoZSBwb3NzaWJsZSBzdGF0ZXMgYW4gQXVkaW9CdWZmZXJT
b3VyY2VOb2RlIGNhbiBiZSBpbjoKKyAgICAvLworICAgIC8vIFVOU0NIRURVTEVEX1NUQVRFIC0g
SW5pdGlhbCBwbGF5YmFjayBzdGF0ZS4gTm9kZSBjcmVhdGVkLCBidXQgbm90IHlldCBzY2hlZHVs
ZWQuCisgICAgLy8gU0NIRURVTEVEX1NUQVRFIC0gU2NoZWR1bGVkIHRvIHBsYXkgKHZpYSBub3Rl
T24gb3Igbm90ZUdyYWluT24pLCBidXQgbm90IHlldCBwbGF5aW5nLgorICAgIC8vIFBMQVlJTkdf
U1RBVEUgLSBUaGUgYnVmZmVyIHNvdXJjZSBpcyBjdXJyZW50bHkgcGxheWluZworICAgIC8vIEZJ
TklTSEVEX1NUQVRFIC0gVGhlIGJ1ZmZlciBzb3VyY2UgaGFzIGZpbmlzaGVkIHBsYXlpbmcKKyAg
ICAvLworICAgIC8vIFRoZSBzdGF0ZSBjYW4gb25seSB0cmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0
YXRlLCBleGNlcHQgZm9yIHRoZSBGSU5JU0hFRF9TVEFURSB3aGljaCBjYW4KKyAgICAvLyBuZXZl
ciBiZSBjaGFuZ2VkLgorICAgIGVudW0gUGxheWJhY2tTdGF0ZSB7CisgICAgICAgIC8vIFRoZXNl
IG11c3QgYmUgZGVmaW5lZCB3aXRoIHRoZSBzYW1lIG5hbWVzIGFuZCB2YWx1ZXMgYXMgaW4gdGhl
IC5pZGwgZmlsZS4KKyAgICAgICAgVU5TQ0hFRFVMRURfU1RBVEUgPSAwLAorICAgICAgICBTQ0hF
RFVMRURfU1RBVEUgPSAxLAorICAgICAgICBQTEFZSU5HX1NUQVRFID0gMiwKKyAgICAgICAgRklO
SVNIRURfU1RBVEUgPSAzCisgICAgfTsKKyAgICAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlclNvdXJjZU5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRl
KTsKIAogICAgIHZpcnR1YWwgfkF1ZGlvQnVmZmVyU291cmNlTm9kZSgpOwpAQCAtNjcsNiArODQs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RlR3JhaW5Pbihkb3VibGUgd2hlbiwgZG91YmxlIGdy
YWluT2Zmc2V0LCBkb3VibGUgZ3JhaW5EdXJhdGlvbik7CiAgICAgdm9pZCBub3RlT2ZmKGRvdWJs
ZSB3aGVuKTsKIAorICAgIC8vIFBsYXliYWNrIHN0YXRlCisgICAgdW5zaWduZWQgc2hvcnQgcGxh
eWJhY2tTdGF0ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihtX3BsYXli
YWNrU3RhdGUpOyB9CisKICAgICAvLyBOb3RlOiB0aGUgYXR0cmlidXRlIHdhcyBvcmlnaW5hbGx5
IGV4cG9zZWQgYXMgLmxvb3BpbmcsIGJ1dCB0byBiZSBtb3JlIGNvbnNpc3RlbnQgaW4gbmFtaW5n
IHdpdGggPGF1ZGlvPgogICAgIC8vIGFuZCB3aXRoIGhvdyBpdCdzIGRlc2NyaWJlZCBpbiB0aGUg
c3BlY2lmaWNhdGlvbiwgdGhlIHByb3BlciBhdHRyaWJ1dGUgbmFtZSBpcyAubG9vcAogICAgIC8v
IFRoZSBvbGQgYXR0cmlidXRlIGlzIGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgpA
QCAtMTAyLDE3ICsxMjIsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2dh
aW47CiAgICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGxheWJhY2tSYXRlOwogCi0gICAgLy8gbV9p
c1BsYXlpbmcgaXMgc2V0IHRvIHRydWUgd2hlbiBub3RlT24oKSBvciBub3RlR3JhaW5PbigpIGlz
IGNhbGxlZC4KLSAgICBib29sIG1faXNQbGF5aW5nOwotCiAgICAgLy8gSWYgbV9pc0xvb3Bpbmcg
aXMgZmFsc2UsIHRoZW4gdGhpcyBub2RlIHdpbGwgYmUgZG9uZSBwbGF5aW5nIGFuZCBiZWNvbWUg
aW5hY3RpdmUgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBzYW1wbGUgZGF0YSBpbiB0
aGUgYnVmZmVyLgogICAgIC8vIElmIHRydWUsIGl0IHdpbGwgd3JhcCBhcm91bmQgdG8gdGhlIHN0
YXJ0IG9mIHRoZSBidWZmZXIgZWFjaCB0aW1lIGl0IHJlYWNoZXMgdGhlIGVuZC4KICAgICBib29s
IG1faXNMb29waW5nOwogCi0gICAgLy8gVGhpcyBub2RlIGlzIGNvbnNpZGVyZWQgZmluaXNoZWQg
d2hlbiBpdCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcidzIHNhbXBsZSBkYXRhIGFmdGVy
IG5vdGVPbigpIGhhcyBiZWVuIGNhbGxlZC4KLSAgICAvLyBUaGlzIHdpbGwgb25seSBiZSBzZXQg
dG8gdHJ1ZSBpZiBtX2lzTG9vcGluZyA9PSBmYWxzZS4KLSAgICBib29sIG1faGFzRmluaXNoZWQ7
Ci0KICAgICAvLyBtX3N0YXJ0VGltZSBpcyB0aGUgdGltZSB0byBzdGFydCBwbGF5aW5nIGJhc2Vk
IG9uIHRoZSBjb250ZXh0J3MgdGltZWxpbmUgKDAuMCBvciBhIHRpbWUgbGVzcyB0aGFuIHRoZSBj
b250ZXh0J3MgY3VycmVudCB0aW1lIG1lYW5zICJub3ciKS4KICAgICBkb3VibGUgbV9zdGFydFRp
bWU7IC8vIGluIHNlY29uZHMKIApAQCAtMTQ1LDYgKzE1OCw5IEBAIHByaXZhdGU6CiAKICAgICAv
LyBIYW5kbGVzIHRoZSB0aW1lIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiBzYW1wbGUgZGF0YSAo
bm9uLWxvb3BpbmcpIG9yIHRoZSBub3RlT2ZmKCkgdGltZSBoYXMgYmVlbiByZWFjaGVkLgogICAg
IHZvaWQgZmluaXNoKCk7CisKKyAgICAvLyBQbGF5YmFjayBzdGF0ZS4gIAorICAgIGVudW0gUGxh
eWJhY2tTdGF0ZSBtX3BsYXliYWNrU3RhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5v
ZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlk
bAppbmRleCBlZWRiMGNiNzA5OTEwYjIyY2QwMTlkNzExMjU5YTljZTk0MTE3MjRiLi5hZTZhZjkz
ZThhOGY4M2VjNDQ1MmQ3YWFkZTE2ZTQwODY3NmVjOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKQEAgLTMxLDYgKzMxLDEzIEBA
IG1vZHVsZSBhdWRpbyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0dGVyXSBBdWRpb0J1
ZmZlciBidWZmZXIKICAgICAgICAgICAgIHNldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVU5TQ0hFRFVMRURfU1RBVEUgPSAwOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTQ0hFRFVMRURfU1RBVEUgPSAxOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBQTEFZSU5HX1NUQVRFID0gMjsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgRklOSVNIRURfU1RBVEUgPSAzOworCisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSB1bnNpZ25lZCBzaG9ydCBwbGF5YmFja1N0YXRlOworCiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBBdWRpb0dhaW4gZ2FpbjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlv
UGFyYW0gcGxheWJhY2tSYXRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmNwcAppbmRleCBhZmM4MTEzMGIxNDkxNzAwNjI0N2FkOTI1MmUxZTE2M2U3YjYxZjRjLi5lYjBl
YTk5Y2E3ODgyZWZmYzgxNGY3ZWRjNzQyY2FlYmU3YzI0MGEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTY5LDYgKzY5LDcgQEAKICNlbmRpZgogCiAjaW5j
bHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgpAQCAtMTM3LDYgKzEzOCw3IEBAIEF1ZGlvQ29udGV4dDo6QXVk
aW9Db250ZXh0KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAsIG1fYXVkaW9UaHJlYWQoMCkKICAg
ICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVudGlmaWVyKQogICAgICwg
bV9pc09mZmxpbmVDb250ZXh0KGZhbHNlKQorICAgICwgbV9hY3RpdmVTb3VyY2VDb3VudCgwKQog
ewogICAgIGNvbnN0cnVjdENvbW1vbigpOwogCkBAIC0xNjAsNiArMTYyLDcgQEAgQXVkaW9Db250
ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBudW1iZXJPZkNo
YW5uZWxzLCBzaXplX3QKICAgICAsIG1fYXVkaW9UaHJlYWQoMCkKICAgICAsIG1fZ3JhcGhPd25l
clRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVudGlmaWVyKQogICAgICwgbV9pc09mZmxpbmVDb250
ZXh0KHRydWUpCisgICAgLCBtX2FjdGl2ZVNvdXJjZUNvdW50KDApCiB7CiAgICAgY29uc3RydWN0
Q29tbW9uKCk7CiAKQEAgLTc3Myw2ICs3NzYsMTYgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmZpcmVD
b21wbGV0aW9uRXZlbnQoKQogICAgIH0KIH0KIAordm9pZCBBdWRpb0NvbnRleHQ6OmluY3JlbWVu
dEFjdGl2ZVNvdXJjZUNvdW50KCkKK3sKKyAgICBhdG9taWNJbmNyZW1lbnQoJm1fYWN0aXZlU291
cmNlQ291bnQpOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6ZGVjcmVtZW50QWN0aXZlU291cmNl
Q291bnQoKQoreworICAgIGF0b21pY0RlY3JlbWVudCgmbV9hY3RpdmVTb3VyY2VDb3VudCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IGE4Y2E5M2MzNDU4OWE5
OTAxYWU3ODk3NzFhN2RlOTA2MWMzZjVkYzIuLmU0NWQ5ZWQ2ZjMxZGJhYmY1NGRmNzVjMzI4NzY5
Mzg0NDNlODBjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC05
Niw3ICs5NiwxMSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGN1cnJlbnRTYW1wbGVGcmFtZSgpIHsg
cmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2FtcGxlRnJhbWUoKTsgfQogICAgIGRv
dWJsZSBjdXJyZW50VGltZSgpIHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGlt
ZSgpOyB9CiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIHsgcmV0dXJuIG1fZGVzdGluYXRpb25Ob2Rl
LT5zYW1wbGVSYXRlKCk7IH0KKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlU291cmNlQ291bnQoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9hY3RpdmVTb3VyY2VDb3VudCk7IH0KIAor
ICAgIHZvaWQgaW5jcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKKyAgICB2b2lkIGRlY3JlbWVu
dEFjdGl2ZVNvdXJjZUNvdW50KCk7CisgICAgCiAgICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4g
Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZy
YW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciosIGJvb2wgbWl4VG9Nb25vLCBF
eGNlcHRpb25Db2RlJik7CiAKQEAgLTMxMSw2ICszMTUsOCBAQCBwcml2YXRlOgogICAgIC8vIEl0
IGlzIHNvbWV3aGF0IGFyYml0cmFyeSBhbmQgY291bGQgYmUgaW5jcmVhc2VkIGlmIG5lY2Vzc2Fy
eS4KICAgICBlbnVtIHsgTWF4TnVtYmVyT2ZDaGFubmVscyA9IDMyIH07CiAKKyAgICAvLyBOdW1i
ZXIgb2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBhY3RpdmUgKHBsYXlpbmcpLgor
ICAgIGludCBtX2FjdGl2ZVNvdXJjZUNvdW50OwogfTsKIAogfSAvLyBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAppbmRleCBmYWJhYzEzY2FhYWE0ZGZjNTFl
ZDc4ODgzNWU2YzI2NGJjZWI4OGEyLi45MjU0NDNjZjBjZDg0YzE4MTA5ZjVjYjc0NTA5ODgwOWQ5
OGQxNjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKQEAgLTQ2
LDYgKzQ2LDkgQEAgbW9kdWxlIHdlYmF1ZGlvIHsKICAgICAgICAgLy8gQWxsIHBhbm5pbmcgaXMg
cmVsYXRpdmUgdG8gdGhpcyBsaXN0ZW5lci4KICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1
ZGlvTGlzdGVuZXIgbGlzdGVuZXI7CiAKKyAgICAgICAgLy8gTnVtYmVyIG9mIEF1ZGlvQnVmZmVy
U291cmNlTm9kZXMgdGhhdCBhcmUgY3VycmVudGx5IHBsYXlpbmcuCisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBpbnQgYWN0aXZlU291cmNlQ291bnQ7CisgICAgICAgIAogICAg
ICAgICBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkNo
YW5uZWxzLCBpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVS
YXRlKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIEF1ZGlvQnVm
ZmVyIGNyZWF0ZUJ1ZmZlcihpbiBBcnJheUJ1ZmZlciBidWZmZXIsIGluIGJvb2xlYW4gbWl4VG9N
b25vKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDhkMzYzYWZlNzE2MTZjMzhlMTgwOWU3M2VkMzMxZjlhZjU2YWM0OWYuLmVl
OGYyYzBmY2ZjNThlZGE5M2M5YTFlMDIxMTU5ZjE3ZDhlNWY2YjggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxMi0wMi0yNyAgUmF5bW9uZCBUb3kgIDxydG95QGdvb2dsZS5jb20+CisKKyAgICAg
ICAgQWRkIHBsYXliYWNrIHN0YXRlIGZvciBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgYW5kIGFkZCBu
dW1iZXIgb2YgYWN0aXZlIG5vZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03OTcwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNl
LXBsYXliYWNrU3RhdGUuaHRtbDogQWRkZWQuCisKIDIwMTItMDMtMDIgIEFkYW0gS2xlaW4gIDxh
ZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCByZWJhc2VsaW5lIGZvciBM
ZW9wYXJkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3Vy
Y2UtcGxheWJhY2tTdGF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRp
b2J1ZmZlcnNvdXJjZS1wbGF5YmFja1N0YXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzQ4
MmRkOGJhMWE4ZTNmMDc1ZTYzN2NkNTc5MWJkNzJjMTk1NDIzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdCBBdWRpb0NvbnRleHQgYWN0aXZlU3RhdGVD
b3VudCBhbmQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHBsYXliYWNrU3RhdGUuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBVTlNDSEVEVUxFRF9TVEFURTogU291cmNlIDA6IGlz
IGluIHRoZSBVTlNDSEVEVUxFRF9TVEFURS4KK1BBU1MgU0NIRURVTEVEX1NUQVRFOiAgIFNvdXJj
ZSAxOiBpcyBzY2hlZHVsZWQgdG8gc3RhcnQgYXQgdGltZSAzIGFuZCBoYXMgbm90IHN0YXJ0ZWQg
cGxheWluZyBhZnRlciAyIHNlY29uZHMKK1BBU1MgUExBWUlOR19TVEFURTogICAgIFNvdXJjZSAy
OiAyIHNlY29uZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxIGlzIHBsYXlpbmcgYWZ0ZXIgMiBz
ZWNvbmRzCitQQVNTIEZJTklTSEVEX1NUQVRFOiAgICBTb3VyY2UgMzogMS4yNSBzZWNvbmQgc291
cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMCBoYXMgZmluaXNoZWQgcGxheWluZyBhZnRlciAyIHNlY29u
ZHMKK1BBU1MgU0NIRURVTEVEX1NUQVRFOiAgIFNvdXJjZSA0OiAxIHNlY29uZCBncmFpbiBzY2hl
ZHVsZWQgdG8gc3RhcnQgdGltZSAzIGhhcyBub3Qgc3RhcnRlZCBwbGF5aW5nIGFmdGVyIDIgc2Vj
b25kcworUEFTUyBQTEFZSU5HX1NUQVRFOiAgICAgU291cmNlIDU6IDIgc2Vjb25kIGdyYWluIHN0
YXJ0aW5nIGF0IHRpbWUgMC41IGlzIHBsYXlpbmcgYWZ0ZXIgMiBzZWNvbmRzCitQQVNTIEZJTklT
SEVEX1NUQVRFOiAgICBTb3VyY2UgNjogMSBzZWNvbmQgZ3JhaW4gc3RhcnRpbmcgYXQgdGltZSAw
LjUgaGFzIGZpbmlzaGVkIHBsYXlpbmcgYWZ0ZXIgMiBzZWNvbmRzCitQQVNTIFNDSEVEVUxFRF9T
VEFURTogICBTb3VyY2UgNzogYSBsb29waW5nIDAuNSBzZWNvbmQgc291cmNlIHNjaGVkdWxlZCBh
dCB0aW1lIDMgaGFzIG5vdCBzdGFydGVkIHBsYXlpbmcgYWZ0ZXIgMiBzZWNvbmRzCitQQVNTIFBM
QVlJTkdfU1RBVEU6ICAgICBTb3VyY2UgODogYSBsb29waW5nIDAuNSBzZWNvbmQgc291cmNlIHN0
YXJ0aW5nIGF0IHRpbWUgMS4yNSBpcyBwbGF5aW5nIGFmdGVyIDIgc2Vjb25kcworUEFTUyAzIGFy
ZSBjdXJyZW50bHkgcGxheWluZy4KK1BBU1MgYWN0aXZlU291cmNlQ291bnQgYW5kIHBsYXliYWNr
U3RhdGUgdGVzdHMgc3VjY2VlZGVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlv
YnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1
ZGlvYnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWVjY2VmZjE1
YTZmYzRlMDZiMDdhNWI5Mzg0ZWRkM2Q2OTIwZTJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS5odG1sCkBAIC0w
LDAgKzEsMjEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4w
MSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8
ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvQ29udGV4dCBhY3RpdmVTdGF0ZUNvdW50
IGFuZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgcGxheWJhY2tTdGF0ZS4iKTsKKworLy8gQ3JlYXRl
IGEgZmV3IHNvdXJjZXMgdGhhdCBzdGFydCBhbmQgZW5kIHBsYXlpbmcgYXQgdmFyaW91cyB0aW1l
cy4gIEFmdGVyIHJlbmRlcmluZywgY2hlY2sgdGhhdAorLy8gZWFjaCBzb3VyY2UgaXMgaW4gdGhl
IGNvcnJlY3Qgc3RhdGUgYW5kIHRoYXQgdGhlIG51bWJlciBvZiBhY3RpdmUgc291cmNlcyBpcyBj
b3JyZWN0LgorCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwOworCisvLyBSZW5kZXIgZm9yIHRoaXMg
bG9uZy4KK3ZhciByZW5kZXJUaW1lID0gMjsKK3ZhciByZW5kZXJMZW5ndGggPSB0aW1lVG9TYW1w
bGVGcmFtZShyZW5kZXJUaW1lLCBzYW1wbGVSYXRlKTsKKwordmFyIGNvbnRleHQ7CisKKy8vIExp
c3Qgb2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyBzb3VyY2VzLgordmFyIHNvdXJjZXMgPSBbXTsK
KworLy8gTGlzdCBvZiBtZXNzYWdlcyB0aGF0IHdpbGwgYmUgcHJpbnRlZCBvdXQgb24gc3VjY2Vz
cyAob3IgZmFpbHVyZSkuICBNZXNzYWdlcyBhcmUgaW4gdGhlIHNhbWUKKy8vIG9yZGVyIGFzIHRo
ZSBzb3VyY2VzIGxpc3QgYWJvdmUuCit2YXIgc291cmNlTWVzc2FnZXMgPSBbXTsKKworLy8gTGlz
dCBvZiB0aGUgZXhwZWN0ZWQgcGxheWJhY2sgc3RhdGUgZm9yIGVhY2ggc291cmNlLiAgSW4gdGhl
IHNhbWUgb3JkZXIgYSBzb3VyY2VzIGxpc3QgYWJvdmUuCit2YXIgc291cmNlRXhwZWN0ZWRTdGF0
ZXMgPSBbXTsKKworLy8gQXJyYXkgbWFwcGluZyB0aGUgcGxheWJhY2sgc3RhdGUgdG8gYSBzdHJp
bmcuCit2YXIgcGxheWJhY2tTdGF0ZU5hbWUgPSBbIlVOU0NIRURVTEVEX1NUQVRFOiAiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICJTQ0hFRFVMRURfU1RBVEU6ICAgIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAiUExBWUlOR19TVEFURTogICAgICIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIkZJTklTSEVEX1NUQVRFOiAgICAiXTsKKworZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZl
bnQpCit7CisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgLy8gRm9yIGVhY2ggc291cmNl
LCB2ZXJpZnkgdGhhdCB0aGUgcGxheWJhY2sgc3RhdGUgbWF0Y2hlcyBvdXIgZXhwZWN0ZWQgcGxh
eSBiYWNrIHN0YXRlLgorICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc291cmNlcy5sZW5ndGg7ICsr
aykgeworICAgICAgICBpZiAoc291cmNlc1trXS5wbGF5YmFja1N0YXRlID09IHNvdXJjZUV4cGVj
dGVkU3RhdGVzW2tdKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKHBsYXliYWNrU3RhdGVOYW1l
W3NvdXJjZUV4cGVjdGVkU3RhdGVzW2tdXSArICJTb3VyY2UgIiArIGsgKyAiOiAiICsgc291cmNl
TWVzc2FnZXNba10ucGFzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFp
bGVkKHBsYXliYWNrU3RhdGVOYW1lW3NvdXJjZUV4cGVjdGVkU3RhdGVzW2tdXSArICJTb3VyY2Ug
IiArIGsgKyAiOiAiICsgc291cmNlTWVzc2FnZXNba10uZmFpbCArICIgU3RhdGUgPSAiICsgcGxh
eWJhY2tTdGF0ZU5hbWVbc291cmNlc1trXS5wbGF5YmFja1N0YXRlXSk7CisgICAgICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaWd1cmUgb3V0IGhv
dyBtYW55IGFjdGl2ZSBzb3VyY2VzIHRoZXJlIHNob3VsZCBiZSBmcm9tIHRoZSBleHBlY3RlZCBz
dGF0ZXMuCisgICAgdmFyIHBsYXlpbmdTdGF0ZSA9IHNvdXJjZXNbMF0uUExBWUlOR19TVEFURQor
CisgICAgdmFyIGV4cGVjdGVkQWN0aXZlQ291bnQgPSAwOworICAgIGZvciAoayA9IDA7IGsgPCBz
b3VyY2VFeHBlY3RlZFN0YXRlcy5sZW5ndGg7ICsraykgeworICAgICAgICBpZiAoc291cmNlRXhw
ZWN0ZWRTdGF0ZXNba10gPT0gcGxheWluZ1N0YXRlKSB7CisgICAgICAgICAgICArK2V4cGVjdGVk
QWN0aXZlQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgICAKKyAgICBpZiAoY29udGV4dC5h
Y3RpdmVTb3VyY2VDb3VudCA9PSBleHBlY3RlZEFjdGl2ZUNvdW50KSB7CisgICAgICAgIHRlc3RQ
YXNzZWQoY29udGV4dC5hY3RpdmVTb3VyY2VDb3VudCArICIgYXJlIGN1cnJlbnRseSBwbGF5aW5n
LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoY29udGV4dC5hY3RpdmVTb3Vy
Y2VDb3VudCArICIgYXJlIGN1cnJlbnRseSBwbGF5aW5nLCBidXQgZXhwZWN0ZWQgIiArIGV4cGVj
dGVkQWN0aXZlQ291bnQgKyAiLiIpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiYWN0aXZlU291cmNlQ291
bnQgYW5kIHBsYXliYWNrU3RhdGUgdGVzdHMgc3VjY2VlZGVkLiIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRlc3RGYWlsZWQoImFjdGl2ZVNvdXJjZUNvdW50IGFuZCBwbGF5YmFja1N0YXRlIHRl
c3RzIGRpZCBub3Qgc3VjY2VlZC4iKTsKKyAgICB9CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
KworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICB2YXIgc3VmZml4TWVzc2FnZSA9ICIg
YWZ0ZXIgIiArIHJlbmRlclRpbWUgKyAiIHNlY29uZHMiOworICAgICAgCisgICAgdmFyIHNvdXJj
ZTsKKworICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuICBXZSB3aWxsIHJlbmRl
ciBmb3IgcmVuZGVyVGltZSBzZWNvbmRzCisgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0Nv
bnRleHQoMiwgdGltZVRvU2FtcGxlRnJhbWUocmVuZGVyVGltZSwgc2FtcGxlUmF0ZSksIHNhbXBs
ZVJhdGUpOworCisgICAgLy8gVGVzdCB1bnNjaGVkdWxlZCBzdGF0ZS4gQ3JlYXRlIDMgc2Vjb25k
IHNvdXJjZSwgYnV0IGRvbid0IHNjaGVkdWxlIGl0LgorICAgIHNvdXJjZSA9IGNvbnRleHQuY3Jl
YXRlQnVmZmVyU291cmNlKCk7CisgICAgc291cmNlLmJ1ZmZlciA9IGNyZWF0ZUltcHVsc2VCdWZm
ZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJhbWUoMywgc2FtcGxlUmF0ZSkpOworICAgIHNvdXJj
ZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIHNvdXJjZXMucHVzaChzb3VyY2Up
OworICAgIHNvdXJjZU1lc3NhZ2VzLnB1c2goe3Bhc3M6ICJpcyBpbiB0aGUgVU5TQ0hFRFVMRURf
U1RBVEUuIiwgZmFpbDogImlzIG5vdCBpbiB0aGUgVU5TQ0hFRFVMRURfU1RBVEUuIn0pOworICAg
IHNvdXJjZUV4cGVjdGVkU3RhdGVzLnB1c2goc291cmNlLlVOU0NIRURVTEVEX1NUQVRFKTsKKwor
ICAgIC8vIFRlc3Qgbm90ZU9uLgorCisgICAgLy8gVGVzdCBzY2hlZHVsZWQgc3RhdGUuIENyZWF0
ZSAzIHNlY29uZCBzb3VyY2UsIHN0YXJ0aW5nIGFmdGVyIHdlIGZpbmlzaCByZW5kZXJpbmcuCisg
ICAgc291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBzb3VyY2UuYnVm
ZmVyID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZSgzLCBz
YW1wbGVSYXRlKSk7CisgICAgc291cmNlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7Cisg
ICAgc291cmNlLm5vdGVPbihyZW5kZXJUaW1lICsgMSk7CisgICAgc291cmNlcy5wdXNoKHNvdXJj
ZSk7CisgICAgc291cmNlTWVzc2FnZXMucHVzaCh7cGFzczogImlzIHNjaGVkdWxlZCB0byBzdGFy
dCBhdCB0aW1lICIgKyAocmVuZGVyVGltZSArIDEpICsgIiBhbmQgaGFzIG5vdCBzdGFydGVkIHBs
YXlpbmciICsgc3VmZml4TWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsOiAi
aXMgbm90IGluIHRoZSBTQ0hFRFVMRURfU1RBVEUuIn0pOworICAgIHNvdXJjZUV4cGVjdGVkU3Rh
dGVzLnB1c2goc291cmNlLlNDSEVEVUxFRF9TVEFURSk7CisKKyAgICAvLyBUZXN0IHBsYXlpbmcg
c3RhdGUuIENyZWF0ZSBhIDIgc2Vjb25kIHNvdXJjZSwgc3RhcnRpbmcgaW4gb25lIHNlY29uZC4g
IFRoaXMgc2hvdWxkIHN0aWxsIGJlCisgICAgLy8gcGxheWluZyB3aGVuIHJlbmRlcmluZyBpcyBk
b25lLgorICAgIHNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgc291
cmNlLmJ1ZmZlciA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJh
bWUoMiwgc2FtcGxlUmF0ZSkpOworICAgIHNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRp
b24pOworICAgIHNvdXJjZS5ub3RlT24oMSk7CisgICAgc291cmNlcy5wdXNoKHNvdXJjZSk7Cisg
ICAgc291cmNlTWVzc2FnZXMucHVzaCh7cGFzczogIjIgc2Vjb25kIHNvdXJjZSBzdGFydGluZyBh
dCB0aW1lIDEgaXMgcGxheWluZyIgKyBzdWZmaXhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhaWw6ICIyIHNlY29uZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxIGlzIG5vdCBw
bGF5aW5nLiJ9KTsKKyAgICBzb3VyY2VFeHBlY3RlZFN0YXRlcy5wdXNoKHNvdXJjZS5QTEFZSU5H
X1NUQVRFKTsKKworICAgIC8vIFRlc3QgZmluaXNoZWQgc3RhdGUuIENyZWF0ZSBhIDEuMjUgc2Vj
b25kIHNvdXJjZSwgc3RhcnRpbmcgaW1tZWRpYXRlbHkuICBUaGlzIHdpbGwgZmluaXNoCisgICAg
Ly8gYmVmb3JlIHJlbmRlcmluZyBpcyBjb21wbGV0ZS4KKyAgICBzb3VyY2UgPSBjb250ZXh0LmNy
ZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIHNvdXJjZS5idWZmZXIgPSBjcmVhdGVJbXB1bHNlQnVm
ZmVyKGNvbnRleHQsIHRpbWVUb1NhbXBsZUZyYW1lKDEuMjUsIHNhbXBsZVJhdGUpKTsKKyAgICBz
b3VyY2UuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICBzb3VyY2Uubm90ZU9uKDAp
OworICAgIHNvdXJjZXMucHVzaChzb3VyY2UpOworICAgIHNvdXJjZU1lc3NhZ2VzLnB1c2goe3Bh
c3M6ICIxLjI1IHNlY29uZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAwIGhhcyBmaW5pc2hlZCBw
bGF5aW5nIiArIHN1ZmZpeE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbDog
IjEuMjUgc2Vjb25kIHNvdXJjZSBzdGFydGluZyBhdCB0aW1lIDAgaGFzIG5vdCBmaW5pc2hlZCBw
bGF5aW5nLiJ9KTsKKyAgICBzb3VyY2VFeHBlY3RlZFN0YXRlcy5wdXNoKHNvdXJjZS5GSU5JU0hF
RF9TVEFURSk7CisKKyAgICAvLyBUZXN0IG5vdGVHcmFpbk9uLgorCisgICAgLy8gVGVzdCBzY2hl
ZHVsZWQgc3RhdGUuICBHcmFpbiBzdGFydHMgYWZ0ZXIgb3VyIHJlbmRlcmluZyB0aW1lLgorICAg
IHNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgc291cmNlLmJ1ZmZl
ciA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJhbWUoMywgc2Ft
cGxlUmF0ZSkpOworICAgIHNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAg
IHNvdXJjZS5ub3RlR3JhaW5PbihyZW5kZXJUaW1lICsgMSwgMCwgMSk7CisgICAgc291cmNlcy5w
dXNoKHNvdXJjZSk7CisgICAgc291cmNlTWVzc2FnZXMucHVzaCh7cGFzczogIjEgc2Vjb25kIGdy
YWluIHNjaGVkdWxlZCB0byBzdGFydCB0aW1lICIgKyAocmVuZGVyVGltZSArIDEpICsgIiBoYXMg
bm90IHN0YXJ0ZWQgcGxheWluZyIgKyBzdWZmaXhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhaWw6ICIxIHNlY29uZCBncmFpbiBzY2hlZHVsZWQgdG8gc3RhcnQgdGltZSAiICsg
KHJlbmRlclRpbWUgKyAxKSArICIgaXMgbm90IHNjaGVkdWxlZC4ifSk7CisgICAgc291cmNlRXhw
ZWN0ZWRTdGF0ZXMucHVzaChzb3VyY2UuU0NIRURVTEVEX1NUQVRFKTsKKworICAgIC8vIFRlc3Qg
cGxheWluZyBzdGF0ZS4gQ3JlYXRlIDMgc2Vjb25kIHNvdXJjZSwgc3RhcnRpbmcgaW4gMS8yIHNl
Y29uZCwgYnV0IG9ubHkgbGFzdGluZyAxCisgICAgLy8gc2Vjb25kLiAgVGhpcyB3aWxsIGZpbmlz
aCBiZWZvcmUgcmVuZGVyaW5nIGlzIGNvbXBsZXRlLgorICAgIHNvdXJjZSA9IGNvbnRleHQuY3Jl
YXRlQnVmZmVyU291cmNlKCk7CisgICAgc291cmNlLmJ1ZmZlciA9IGNyZWF0ZUltcHVsc2VCdWZm
ZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJhbWUoMywgc2FtcGxlUmF0ZSkpOworICAgIHNvdXJj
ZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIHNvdXJjZS5ub3RlR3JhaW5Pbigw
LjUsIDAsIDIpOworICAgIHNvdXJjZXMucHVzaChzb3VyY2UpOworICAgIHNvdXJjZU1lc3NhZ2Vz
LnB1c2goe3Bhc3M6ICIyIHNlY29uZCBncmFpbiBzdGFydGluZyBhdCB0aW1lIDAuNSBpcyBwbGF5
aW5nIiArIHN1ZmZpeE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbDogIjIg
c2Vjb25kIGdyYWluIHN0YXJ0aW5nIGF0IHRpbWUgMC41IGlzIG5vdCBwbGF5aW5nLiJ9KTsKKyAg
ICBzb3VyY2VFeHBlY3RlZFN0YXRlcy5wdXNoKHNvdXJjZS5QTEFZSU5HX1NUQVRFKTsKKworICAg
IC8vIFRlc3QgZmluaXNoZWQgc3RhdGUuIENyZWF0ZSAzIHNlY29uZCBzb3VyY2UsIHN0YXJ0aW5n
IGluIDEvMiBzZWNvbmQsIGJ1dCBvbmx5IGxhc3RpbmcgMQorICAgIC8vIHNlY29uZC4gIFRoaXMg
d2lsbCBmaW5pc2ggYmVmb3JlIHJlbmRlcmluZyBpcyBjb21wbGV0ZS4KKyAgICBzb3VyY2UgPSBj
b250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIHNvdXJjZS5idWZmZXIgPSBjcmVhdGVJ
bXB1bHNlQnVmZmVyKGNvbnRleHQsIHRpbWVUb1NhbXBsZUZyYW1lKDMsIHNhbXBsZVJhdGUpKTsK
KyAgICBzb3VyY2UuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICBzb3VyY2Uubm90
ZUdyYWluT24oMC41LCAwLCAxKTsKKyAgICBzb3VyY2VzLnB1c2goc291cmNlKTsKKyAgICBzb3Vy
Y2VNZXNzYWdlcy5wdXNoKHtwYXNzOiAiMSBzZWNvbmQgZ3JhaW4gc3RhcnRpbmcgYXQgdGltZSAw
LjUgaGFzIGZpbmlzaGVkIHBsYXlpbmciICsgc3VmZml4TWVzc2FnZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWlsOiAiMSBzZWNvbmQgZ3JhaW4gc3RhcnRpbmcgYXQgdGltZSAwLjUgaGFz
IG5vdCBmaW5pc2hlZCBwbGF5aW5nLiJ9KTsKKyAgICBzb3VyY2VFeHBlY3RlZFN0YXRlcy5wdXNo
KHNvdXJjZS5GSU5JU0hFRF9TVEFURSk7CisgICAgICAKKyAgICAvLyBUZXN0IGxvb3Bpbmcgc291
cmNlCisKKyAgICAvLyBUZXN0IHNjaGVkdWxlZCBzdGF0ZSBmb3IgbG9vcGluZyBzb3VyY2UuIENy
ZWF0ZSAwLjUgc2Vjb25kIHNvdXJjZSBzdGFydGluZyBhdCB0aW1lIDEuMjUgYW5kCisgICAgLy8g
bG9vcGluZyBhZnRlcndhcmRzLiAgVGhpcyB3aWxsIHN0aWxsIGJlIHBsYXlpbmcgd2hlbiByZW5k
ZXJpbmcgaXMgY29tcGxldGUuCisgICAgc291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3Vy
Y2UoKTsKKyAgICBzb3VyY2UuYnVmZmVyID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCB0
aW1lVG9TYW1wbGVGcmFtZSgwLjUsIHNhbXBsZVJhdGUpKTsKKyAgICBzb3VyY2UubG9vcCA9IHRy
dWU7CisgICAgc291cmNlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgc291cmNl
Lm5vdGVPbihyZW5kZXJUaW1lICsgMSk7CisgICAgc291cmNlcy5wdXNoKHNvdXJjZSk7CisgICAg
c291cmNlTWVzc2FnZXMucHVzaCh7cGFzczogImEgbG9vcGluZyAwLjUgc2Vjb25kIHNvdXJjZSBz
Y2hlZHVsZWQgYXQgdGltZSAiICsgKHJlbmRlclRpbWUgKyAxKSArCisgICAgIiBoYXMgbm90IHN0
YXJ0ZWQgcGxheWluZyIgKyBzdWZmaXhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGZhaWw6ICJhIGxvb3BpbmcgMC41IHNlY29uZCBzb3VyY2Ugc2NoZWR1bGVkIGF0IHRpbWUgIiAr
IChyZW5kZXJUaW1lICsgMSkgKyAiIGlzIG5vdCBzY2hlZHVsZWQuIn0pOworICAgIHNvdXJjZUV4
cGVjdGVkU3RhdGVzLnB1c2goc291cmNlLlNDSEVEVUxFRF9TVEFURSk7CisKKyAgICAvLyBUZXN0
IHBsYXlpbmcgc3RhdGUgZm9yIGxvb3Bpbmcgc291cmNlLiBDcmVhdGUgMC41IHNlY29uZCBzb3Vy
Y2Ugc3RhcnRpbmcgYXQgdGltZSAxLjI1IGFuZAorICAgIC8vIGxvb3BpbmcgYWZ0ZXJ3YXJkcy4g
IFRoaXMgd2lsbCBzdGlsbCBiZSBwbGF5aW5nIHdoZW4gcmVuZGVyaW5nIGlzIGNvbXBsZXRlLgor
ICAgIHNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgc291cmNlLmJ1
ZmZlciA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgdGltZVRvU2FtcGxlRnJhbWUoMC41
LCBzYW1wbGVSYXRlKSk7CisgICAgc291cmNlLmxvb3AgPSB0cnVlOworICAgIHNvdXJjZS5jb25u
ZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIHNvdXJjZS5ub3RlT24oMS41KTsKKyAgICBz
b3VyY2VzLnB1c2goc291cmNlKTsKKyAgICBzb3VyY2VNZXNzYWdlcy5wdXNoKHtwYXNzOiAiYSBs
b29waW5nIDAuNSBzZWNvbmQgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMS4yNSBpcyBwbGF5aW5n
IiArIHN1ZmZpeE1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbDogImEgbG9v
cGluZyAwLjUgc2Vjb25kIHNvdXJjZSBzdGFydGluZyBhdCB0aW1lIDEuMjUgaXMgbm90IHBsYXlp
bmcuIn0pOworICAgIHNvdXJjZUV4cGVjdGVkU3RhdGVzLnB1c2goc291cmNlLlBMQVlJTkdfU1RB
VEUpOworCisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7CisgICAgY29udGV4
dC5zdGFydFJlbmRlcmluZygpOworfQorICAgICAgCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworICAKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132384</attachid>
            <date>2012-03-16 14:36:37 -0700</date>
            <delta_ts>2012-03-16 15:28:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79701-20120316143636.patch</filename>
            <type>text/plain</type>
            <size>24135</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk2NjZmZTVmNjE4MDVk
NWI1ODI0YmYzZTYxODg3MmMwNjQxNWQzNS4uNzhiMzRhYTliYjI4ZTI4OTAyMDY5NjNkZjM0YmI5
YjZhOTU0MzYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTI3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgcGxheWJhY2sgc3RhdGUg
Zm9yIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBhbmQgYWRkIG51bWJlciBvZiBhY3RpdmUgbm9kZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzAxCisK
KyAgICAgICAgQWRkIGEgcGxheWJhY2sgc3RhdGUgdG8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHNv
IHRoYXQgdGhlIHVzZXIgY2FuCisgICAgICAgIHRlbGwgaWYgdGhlIG5vZGUgaXMgc2NoZWR1bGVk
LCBwbGF5aW5nLCBvciBmaW5pc2hlZC4KKworICAgICAgICBGb3IgYW4gQXVkaW9Db250ZXh0LCBh
ZGQgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mCisgICAgICAgIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZSdzIHRoYXQgYXJlIGFjdGl2ZSAocGxheWluZyBhdWRpbykuCisKKyAgICAgICAgRGVsZXRlZCBt
X2lzUGxheWluZyBhbmQgbV9oYXNGaW5pc2hlZC4gRm9yIHRoZSByZWNvcmQsIG1faXNQbGF5aW5n
CisgICAgICAgIGlzIHRoZSBzYW1lIGFzIGEgcGxheWJhY2tTdGF0ZSBvZiBTQ0hFRFVMRURfU1RB
VEUgb3IgUExBWUlOR19TVEFURS4KKyAgICAgICAgbV9oYXNGaW5pc2hlZCBpcyBlcXVpdmFsZW50
IHRvIGEgcGxheWJhY2tTdGF0ZSBvZiBGSU5JU0hFRF9TVEFURS4KKyAgICAgICAgCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmF1ZGlvL2F1
ZGlvYnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbAorCisgICAgICAgICogd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUpOgor
ICAgICAgICBpbml0aWFsaXplIHBsYXliYWNrU3RhdGUsIHJlbW92ZSBtX2lzUGxheWluZywgbV9o
YXNGaW5pc2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJv
Y2Vzcyk6IFVwZGF0ZSBwbGF5YmFja1N0YXRlCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OmZpbmlzaCk6IFVwZGF0ZSBwbGF5YmFja1N0YXRlCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVPbik6IFVwZGF0ZSBwbGF5YmFja1N0YXRl
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFpbk9uKTog
VXBkYXRlIHBsYXliYWNrU3RhdGUKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6bm90ZU9mZik6IFVzZSBwbGF5YmFja1N0YXRlIAorICAgICAgICAqIHdlYmF1ZGlvL0F1
ZGlvQnVmZmVyU291cmNlTm9kZS5oOgorICAgICAgICAoQXVkaW9CdWZmZXJTb3VyY2VOb2RlKTog
RGVmaW5lIHN0YXRlcywgcmVtb3ZlIG1faXNQbGF5aW5nLCBtX2hhc0ZpbmlzaGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwbGF5YmFja1N0YXRlKTogQWRkZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbDogRGVmaW5lIGNv
bnN0YW50cyBmb3IgdGhlCisgICAgICAgIHBsYXliYWNrIHN0YXRlLCBhZGQgYXR0cmlidXRlIHBs
YXliYWNrU3RhdGUuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6YWN0aXZlU291cmNlQ291bnQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aW5jcmVtZW50QWN0aXZlU291cmNlQ291bnQp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6ZGVjcmVtZW50QWN0aXZl
U291cmNlQ291bnQpOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoK
KyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmlkbDogQWRkIGF0dHJpYnV0ZSBhY3RpdmVTb3VyY2VDb3VudC4KKwogMjAxMi0wMy0xNCAgQ2hy
aXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYRGVzY3JpcHRp
b24gZm9yIEhUTUw1IGZvb3RlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5jcHAKaW5kZXggNDg4MTEzMWE0ZGYxMzJlNzBkNTY3Y2UxMDljNmU5
NjE5ODRhNzc2My4uNGYxMjVjNzJhYmM3MTU5OGY0OTUxNjg2NWJiZWRiYmEzNThiMGNiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3Bw
CkBAIC01OCw5ICs1OCw3IEBAIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvCiBBdWRpb0J1ZmZlclNv
dXJjZU5vZGU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUpCiAgICAgOiBBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwgc2FtcGxlUmF0
ZSkKICAgICAsIG1fYnVmZmVyKDApCi0gICAgLCBtX2lzUGxheWluZyhmYWxzZSkKICAgICAsIG1f
aXNMb29waW5nKGZhbHNlKQotICAgICwgbV9oYXNGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fc3Rh
cnRUaW1lKDAuMCkKICAgICAsIG1fZW5kVGltZShVbmtub3duVGltZSkKICAgICAsIG1fdmlydHVh
bFJlYWRJbmRleCgwKQpAQCAtNjksNiArNjcsNyBAQCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OkF1
ZGlvQnVmZmVyU291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZQog
ICAgICwgbV9ncmFpbkR1cmF0aW9uKERlZmF1bHRHcmFpbkR1cmF0aW9uKQogICAgICwgbV9sYXN0
R2FpbigxLjApCiAgICAgLCBtX3Bhbm5lck5vZGUoMCkKKyAgICAsIG1fcGxheWJhY2tTdGF0ZShV
TlNDSEVEVUxFRF9TVEFURSkKIHsKICAgICBzZXROb2RlVHlwZShOb2RlVHlwZUF1ZGlvQnVmZmVy
U291cmNlKTsKIApAQCAtMTEwLDE4ICsxMDksMjUgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIAogICAgICAgICAvLyBJZiB3ZSBr
bm93IHRoZSBlbmQgdGltZSBhbmQgaXQncyBhbHJlYWR5IHBhc3NlZCwgdGhlbiBkb24ndCBib3Ro
ZXIgZG9pbmcgYW55IG1vcmUgcmVuZGVyaW5nIHRoaXMgY3ljbGUuCiAgICAgICAgIGlmIChtX2Vu
ZFRpbWUgIT0gVW5rbm93blRpbWUgJiYgZW5kRnJhbWUgPD0gcXVhbnR1bVN0YXJ0RnJhbWUpIHsK
LSAgICAgICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICBtX3ZpcnR1YWxS
ZWFkSW5kZXggPSAwOwogICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmICghbV9pc1BsYXlpbmcgfHwgbV9oYXNGaW5pc2hlZCB8fCAhYnVmZmVyKCkg
fHwgc3RhcnRGcmFtZSA+PSBxdWFudHVtRW5kRnJhbWUpIHsKKyAgICAgICAgaWYgKG1fcGxheWJh
Y2tTdGF0ZSA9PSBVTlNDSEVEVUxFRF9TVEFURSB8fCBtX3BsYXliYWNrU3RhdGUgPT0gRklOSVNI
RURfU1RBVEUKKyAgICAgICAgICAgIHx8ICFidWZmZXIoKSB8fCBzdGFydEZyYW1lID49IHF1YW50
dW1FbmRGcmFtZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IGNhbiBvcHRpbWl6ZSBoZXJlIGJ5
IHByb3BhZ2F0aW5nIHNpbGVudCBoaW50IGluc3RlYWQgb2YgZm9yY2luZyB0aGUgd2hvbGUgY2hh
aW4gdG8gcHJvY2VzcyBzaWxlbmNlLgogICAgICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CiAg
ICAgICAgICAgICBtX3Byb2Nlc3NMb2NrLnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRURfU1RB
VEUpIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgYWN0aXZlIHNvdXJjZSBjb3VudCBv
bmx5IGlmIHdlJ3JlIHRyYW5zaXRpb25pbmcgZnJvbSBTQ0hFRFVMRURfU1RBVEUgdG8KKyAgICAg
ICAgICAgIC8vIFBMQVlJTkdfU1RBVEUuCisgICAgICAgICAgICBtX3BsYXliYWNrU3RhdGUgPSBQ
TEFZSU5HX1NUQVRFOworICAgICAgICAgICAgY29udGV4dCgpLT5pbmNyZW1lbnRBY3RpdmVTb3Vy
Y2VDb3VudCgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzaXplX3QgcXVhbnR1bUZy
YW1lT2Zmc2V0ID0gc3RhcnRGcmFtZSA+IHF1YW50dW1TdGFydEZyYW1lID8gc3RhcnRGcmFtZSAt
IHF1YW50dW1TdGFydEZyYW1lIDogMDsKICAgICAgICAgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gbWlu
KHF1YW50dW1GcmFtZU9mZnNldCwgZnJhbWVzVG9Qcm9jZXNzKTsgLy8gY2xhbXAgdG8gdmFsaWQg
cmFuZ2UKICAgICAgICAgc2l6ZV90IGJ1ZmZlckZyYW1lc1RvUHJvY2VzcyA9IGZyYW1lc1RvUHJv
Y2VzcyAtIHF1YW50dW1GcmFtZU9mZnNldDsKQEAgLTE1MCw4ICsxNTYsOCBAQCB2b2lkIEF1ZGlv
QnVmZmVyU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgICAg
ICAgICAgICAgICAgICBtZW1zZXQobV9kZXN0aW5hdGlvbkNoYW5uZWxzW2ldICsgemVyb1N0YXJ0
RnJhbWUsIDAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1plcm8pOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogICAgICAgICAgICAgbV92aXJ0dWFs
UmVhZEluZGV4ID0gMDsKKwogICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgIH0KIApAQCAt
MTY3LDcgKzE3Myw2IEBAIGJvb2wgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZW5kZXJTaWxlbmNl
QW5kRmluaXNoSWZOb3RMb29waW5nKEF1ZGlvQnVzKiwgdW5zaWduCiB7CiAgICAgaWYgKCFsb29w
KCkpIHsKICAgICAgICAgLy8gSWYgd2UncmUgbm90IGxvb3BpbmcsIHRoZW4gc3RvcCBwbGF5aW5n
IHdoZW4gd2UgZ2V0IHRvIHRoZSBlbmQuCi0gICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CiAK
ICAgICAgICAgaWYgKGZyYW1lc1RvUHJvY2VzcyA+IDApIHsKICAgICAgICAgICAgIC8vIFdlJ3Jl
IG5vdCBsb29waW5nIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNhbXBsZSBkYXRh
LCBidXQgd2Ugc3RpbGwgbmVlZCB0byBwcm92aWRlIG1vcmUgb3V0cHV0LApAQCAtMzQzLDEwICsz
NDgsMTEgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnJlc2V0KCkKIAogdm9pZCBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OmZpbmlzaCgpCiB7Ci0gICAgaWYgKCFtX2hhc0ZpbmlzaGVkKSB7
CisgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSAhPSBGSU5JU0hFRF9TVEFURSkgewogICAgICAgICAv
LyBMZXQgdGhlIGNvbnRleHQgZGVyZWZlcmVuY2UgdGhpcyBBdWRpb05vZGUuCiAgICAgICAgIGNv
bnRleHQoKS0+bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyh0aGlzKTsKLSAgICAgICAgbV9o
YXNGaW5pc2hlZCA9IHRydWU7CisgICAgICAgIG1fcGxheWJhY2tTdGF0ZSA9IEZJTklTSEVEX1NU
QVRFOworICAgICAgICBjb250ZXh0KCktPmRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCk7CiAg
ICAgfQogfQogCkBAIC0zOTAsMTkgKzM5NiwyMCBAQCB1bnNpZ25lZCBBdWRpb0J1ZmZlclNvdXJj
ZU5vZGU6Om51bWJlck9mQ2hhbm5lbHMoKQogdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5v
dGVPbihkb3VibGUgd2hlbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
IChtX2lzUGxheWluZykKKyAgICBpZiAobV9wbGF5YmFja1N0YXRlID09IFNDSEVEVUxFRF9TVEFU
RSB8fCBtX3BsYXliYWNrU3RhdGUgPT0gUExBWUlOR19TVEFURSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9pc0dyYWluID0gZmFsc2U7CiAgICAgbV9zdGFydFRpbWUgPSB3aGVuOwogICAgIG1f
dmlydHVhbFJlYWRJbmRleCA9IDA7Ci0gICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgIG1fcGxh
eWJhY2tTdGF0ZSA9IFNDSEVEVUxFRF9TVEFURTsKIH0KIAogdm9pZCBBdWRpb0J1ZmZlclNvdXJj
ZU5vZGU6Om5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZzZXQsIGRvdWJs
ZSBncmFpbkR1cmF0aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYg
KG1faXNQbGF5aW5nKQorCisgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRURfU1RB
VEUgfHwgbV9wbGF5YmFja1N0YXRlID09IFBMQVlJTkdfU1RBVEUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghYnVmZmVyKCkpCkBAIC00MzIsMTMgKzQzOSwxMyBAQCB2b2lkIEF1ZGlvQnVm
ZmVyU291cmNlTm9kZTo6bm90ZUdyYWluT24oZG91YmxlIHdoZW4sIGRvdWJsZSBncmFpbk9mZnNl
dCwgZG91YmxlCiAgICAgLy8gU2luY2UgcGxheWJhY2tSYXRlID09IDEgaXMgdmVyeSBjb21tb24s
IGl0J3Mgd29ydGggY29uc2lkZXJpbmcgcXVhbGl0eS4KICAgICBtX3ZpcnR1YWxSZWFkSW5kZXgg
PSBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUobV9ncmFpbk9mZnNldCwgYnVmZmVy
KCktPnNhbXBsZVJhdGUoKSk7CiAgICAgCi0gICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgIG1f
cGxheWJhY2tTdGF0ZSA9IFNDSEVEVUxFRF9TVEFURTsKIH0KIAogdm9pZCBBdWRpb0J1ZmZlclNv
dXJjZU5vZGU6Om5vdGVPZmYoZG91YmxlIHdoZW4pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBpZiAoIW1faXNQbGF5aW5nKQorICAgIGlmICghKG1fcGxheWJhY2tTdGF0ZSA9
PSBTQ0hFRFVMRURfU1RBVEUgfHwgbV9wbGF5YmFja1N0YXRlID09IFBMQVlJTkdfU1RBVEUpKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgd2hlbiA9IG1heCgwLjAsIHdoZW4pOwpAQCAtNDk2
LDcgKzUwMyw2IEBAIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpzZXRMb29waW5nKGJvb2wg
bG9vcGluZykKIAogICAgIG1faXNMb29waW5nID0gbG9vcGluZzsKIH0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKaW5kZXggNWFjNTRjNjBhMGNm
MmQ0MzdlMDliMjY2YmQyMTdiODgxNmRlMGM5NS4uY2RjMDAxOTBiYTFmNDc4MTdlMDBjMDk5Y2Fj
ODRkNjE1NDIzMDFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlLmgKQEAgLTQ0LDYgKzQ0LDIzIEBAIGNsYXNzIEF1ZGlvQ29udGV4dDsKIAog
Y2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291cmNlTm9kZSB7CiBw
dWJsaWM6CisgICAgLy8gVGhlc2UgYXJlIHRoZSBwb3NzaWJsZSBzdGF0ZXMgYW4gQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlIGNhbiBiZSBpbjoKKyAgICAvLworICAgIC8vIFVOU0NIRURVTEVEX1NUQVRF
IC0gSW5pdGlhbCBwbGF5YmFjayBzdGF0ZS4gQ3JlYXRlZCwgYnV0IG5vdCB5ZXQgc2NoZWR1bGVk
LgorICAgIC8vIFNDSEVEVUxFRF9TVEFURSAtIFNjaGVkdWxlZCB0byBwbGF5ICh2aWEgbm90ZU9u
IG9yIG5vdGVHcmFpbk9uKSwgYnV0IG5vdCB5ZXQgcGxheWluZy4KKyAgICAvLyBQTEFZSU5HX1NU
QVRFIC0gR2VuZXJhdGluZyBzb3VuZC4KKyAgICAvLyBGSU5JU0hFRF9TVEFURSAtIEZpbmlzaGVk
IGdlbmVyYXRpbmcgc291bmQuCisgICAgLy8KKyAgICAvLyBUaGUgc3RhdGUgY2FuIG9ubHkgdHJh
bnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZSwgZXhjZXB0IGZvciB0aGUgRklOSVNIRURfU1RBVEUg
d2hpY2ggY2FuCisgICAgLy8gbmV2ZXIgYmUgY2hhbmdlZC4KKyAgICBlbnVtIFBsYXliYWNrU3Rh
dGUgeworICAgICAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgd2l0aCB0aGUgc2FtZSBuYW1l
cyBhbmQgdmFsdWVzIGFzIGluIHRoZSAuaWRsIGZpbGUuCisgICAgICAgIFVOU0NIRURVTEVEX1NU
QVRFID0gMCwKKyAgICAgICAgU0NIRURVTEVEX1NUQVRFID0gMSwKKyAgICAgICAgUExBWUlOR19T
VEFURSA9IDIsCisgICAgICAgIEZJTklTSEVEX1NUQVRFID0gMworICAgIH07CisgICAgCiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBjcmVhdGUoQXVkaW9Db250
ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICB2aXJ0dWFsIH5BdWRpb0J1ZmZlclNvdXJj
ZU5vZGUoKTsKQEAgLTY3LDYgKzg0LDggQEAgcHVibGljOgogICAgIHZvaWQgbm90ZUdyYWluT24o
ZG91YmxlIHdoZW4sIGRvdWJsZSBncmFpbk9mZnNldCwgZG91YmxlIGdyYWluRHVyYXRpb24pOwog
ICAgIHZvaWQgbm90ZU9mZihkb3VibGUgd2hlbik7CiAKKyAgICB1bnNpZ25lZCBzaG9ydCBwbGF5
YmFja1N0YXRlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KG1fcGxheWJh
Y2tTdGF0ZSk7IH0KKwogICAgIC8vIE5vdGU6IHRoZSBhdHRyaWJ1dGUgd2FzIG9yaWdpbmFsbHkg
ZXhwb3NlZCBhcyAubG9vcGluZywgYnV0IHRvIGJlIG1vcmUgY29uc2lzdGVudCBpbiBuYW1pbmcg
d2l0aCA8YXVkaW8+CiAgICAgLy8gYW5kIHdpdGggaG93IGl0J3MgZGVzY3JpYmVkIGluIHRoZSBz
cGVjaWZpY2F0aW9uLCB0aGUgcHJvcGVyIGF0dHJpYnV0ZSBuYW1lIGlzIC5sb29wCiAgICAgLy8g
VGhlIG9sZCBhdHRyaWJ1dGUgaXMga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCkBA
IC0xMDIsMTcgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fZ2Fp
bjsKICAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9wbGF5YmFja1JhdGU7CiAKLSAgICAvLyBtX2lz
UGxheWluZyBpcyBzZXQgdG8gdHJ1ZSB3aGVuIG5vdGVPbigpIG9yIG5vdGVHcmFpbk9uKCkgaXMg
Y2FsbGVkLgotICAgIGJvb2wgbV9pc1BsYXlpbmc7Ci0KICAgICAvLyBJZiBtX2lzTG9vcGluZyBp
cyBmYWxzZSwgdGhlbiB0aGlzIG5vZGUgd2lsbCBiZSBkb25lIHBsYXlpbmcgYW5kIGJlY29tZSBp
bmFjdGl2ZSBhZnRlciBpdCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIHNhbXBsZSBkYXRhIGluIHRo
ZSBidWZmZXIuCiAgICAgLy8gSWYgdHJ1ZSwgaXQgd2lsbCB3cmFwIGFyb3VuZCB0byB0aGUgc3Rh
cnQgb2YgdGhlIGJ1ZmZlciBlYWNoIHRpbWUgaXQgcmVhY2hlcyB0aGUgZW5kLgogICAgIGJvb2wg
bV9pc0xvb3Bpbmc7CiAKLSAgICAvLyBUaGlzIG5vZGUgaXMgY29uc2lkZXJlZCBmaW5pc2hlZCB3
aGVuIGl0IHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyJ3Mgc2FtcGxlIGRhdGEgYWZ0ZXIg
bm90ZU9uKCkgaGFzIGJlZW4gY2FsbGVkLgotICAgIC8vIFRoaXMgd2lsbCBvbmx5IGJlIHNldCB0
byB0cnVlIGlmIG1faXNMb29waW5nID09IGZhbHNlLgotICAgIGJvb2wgbV9oYXNGaW5pc2hlZDsK
LQogICAgIC8vIG1fc3RhcnRUaW1lIGlzIHRoZSB0aW1lIHRvIHN0YXJ0IHBsYXlpbmcgYmFzZWQg
b24gdGhlIGNvbnRleHQncyB0aW1lbGluZSAoMC4wIG9yIGEgdGltZSBsZXNzIHRoYW4gdGhlIGNv
bnRleHQncyBjdXJyZW50IHRpbWUgbWVhbnMgIm5vdyIpLgogICAgIGRvdWJsZSBtX3N0YXJ0VGlt
ZTsgLy8gaW4gc2Vjb25kcwogCkBAIC0xNDUsNiArMTU3LDggQEAgcHJpdmF0ZToKIAogICAgIC8v
IEhhbmRsZXMgdGhlIHRpbWUgd2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHNhbXBsZSBkYXRhIChu
b24tbG9vcGluZykgb3IgdGhlIG5vdGVPZmYoKSB0aW1lIGhhcyBiZWVuIHJlYWNoZWQuCiAgICAg
dm9pZCBmaW5pc2goKTsKKworICAgIFBsYXliYWNrU3RhdGUgbV9wbGF5YmFja1N0YXRlOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKaW5kZXggZWVkYjBjYjcwOTkxMGIyMmNkMDE5ZDcx
MTI1OWE5Y2U5NDExNzI0Yi4uYWU2YWY5M2U4YThmODNlYzQ0NTJkN2FhZGUxNmU0MDg2NzZlYzk5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VO
b2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5v
ZGUuaWRsCkBAIC0zMSw2ICszMSwxMyBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICBhdHRyaWJ1
dGUgW0N1c3RvbVNldHRlcl0gQXVkaW9CdWZmZXIgYnVmZmVyCiAgICAgICAgICAgICBzZXR0ZXIg
cmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVO
U0NIRURVTEVEX1NUQVRFID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU0NIRURV
TEVEX1NUQVRFID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUExBWUlOR19TVEFU
RSA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZJTklTSEVEX1NUQVRFID0gMzsK
KworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcGxheWJhY2tTdGF0
ZTsKKwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9HYWluIGdhaW47CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHBsYXliYWNrUmF0ZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggNWY0OTA1YTNiZDNiNDEyM2MwMGVh
ZDU4OTNkY2U5MGQwMGM2ZmRkOC4uY2JlZGY5NmJhZDcwNDBkMjZjYWIxYzg3NDQwMmJiMGE0MjU1
YzI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC02OSw2
ICs2OSw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgorI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTEzNyw2ICsx
MzgsNyBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgLCBtX2F1ZGlvVGhyZWFkKDApCiAgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVk
VGhyZWFkSWRlbnRpZmllcikKICAgICAsIG1faXNPZmZsaW5lQ29udGV4dChmYWxzZSkKKyAgICAs
IG1fYWN0aXZlU291cmNlQ291bnQoMCkKIHsKICAgICBjb25zdHJ1Y3RDb21tb24oKTsKIApAQCAt
MTYwLDYgKzE2Miw3IEBAIEF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KERvY3VtZW50KiBkb2N1
bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90CiAgICAgLCBtX2F1ZGlvVGhy
ZWFkKDApCiAgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmll
cikKICAgICAsIG1faXNPZmZsaW5lQ29udGV4dCh0cnVlKQorICAgICwgbV9hY3RpdmVTb3VyY2VD
b3VudCgwKQogewogICAgIGNvbnN0cnVjdENvbW1vbigpOwogCkBAIC03NzksNiArNzgyLDE2IEBA
IHZvaWQgQXVkaW9Db250ZXh0OjpmaXJlQ29tcGxldGlvbkV2ZW50KCkKICAgICB9CiB9CiAKK3Zv
aWQgQXVkaW9Db250ZXh0OjppbmNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpCit7CisgICAgYXRv
bWljSW5jcmVtZW50KCZtX2FjdGl2ZVNvdXJjZUNvdW50KTsKK30KKwordm9pZCBBdWRpb0NvbnRl
eHQ6OmRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkKK3sKKyAgICBhdG9taWNEZWNyZW1lbnQo
Jm1fYWN0aXZlU291cmNlQ291bnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaAppbmRleCBiNDJhMDc1ZjJhNjk2ODcxNDAxMzY0NTZmNTJiNDdjYjA3MWE4MWVlLi44MGM2
NTJkYjk5MThhYzQ3ZWIzMjNlMTE5NzI3ZDA0ZDdmMzM5M2I0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaApAQCAtOTYsNyArOTYsMTEgQEAgcHVibGljOgogICAgIHNpemVf
dCBjdXJyZW50U2FtcGxlRnJhbWUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVu
dFNhbXBsZUZyYW1lKCk7IH0KICAgICBkb3VibGUgY3VycmVudFRpbWUoKSB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uTm9kZS0+Y3VycmVudFRpbWUoKTsgfQogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpOyB9CisgICAgdW5zaWduZWQg
bG9uZyBhY3RpdmVTb3VyY2VDb3VudCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KG1fYWN0aXZlU291cmNlQ291bnQpOyB9CiAKKyAgICB2b2lkIGluY3JlbWVudEFjdGl2ZVNv
dXJjZUNvdW50KCk7CisgICAgdm9pZCBkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpOworICAg
IAogICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIo
QXJyYXlCdWZmZXIqLCBib29sIG1peFRvTW9ubywgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC0zMTIs
NiArMzE2LDggQEAgcHJpdmF0ZToKICAgICAvLyBJdCBpcyBzb21ld2hhdCBhcmJpdHJhcnkgYW5k
IGNvdWxkIGJlIGluY3JlYXNlZCBpZiBuZWNlc3NhcnkuCiAgICAgZW51bSB7IE1heE51bWJlck9m
Q2hhbm5lbHMgPSAzMiB9OwogCisgICAgLy8gTnVtYmVyIG9mIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZXMgdGhhdCBhcmUgYWN0aXZlIChwbGF5aW5nKS4KKyAgICBpbnQgbV9hY3RpdmVTb3VyY2VDb3Vu
dDsKIH07CiAKIH0gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5pZGwKaW5kZXggYzFmZjhjNmU3YmQwOWM2NDM4ZTc3YWM2MjNjNTFlZTIxMDdjNzJmNy4uZTE4
ZDM3YzgyYjgzYzM4MTIxM2JlZjIyZjRiNDA3NzM2MDAzOWNiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCkBAIC00NCw2ICs0NCw5IEBAIG1vZHVsZSB3ZWJhdWRp
byB7CiAgICAgICAgIC8vIEFsbCBwYW5uaW5nIGlzIHJlbGF0aXZlIHRvIHRoaXMgbGlzdGVuZXIu
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0xpc3RlbmVyIGxpc3RlbmVyOwogCisg
ICAgICAgIC8vIE51bWJlciBvZiBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzIHRoYXQgYXJlIGN1cnJl
bnRseSBwbGF5aW5nLgorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBh
Y3RpdmVTb3VyY2VDb3VudDsKKyAgICAgICAgCiAgICAgICAgIEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1
ZmZlcihpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIGluIHVuc2lnbmVkIGxvbmcg
bnVtYmVyT2ZGcmFtZXMsIGluIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgICAgICAgICByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKICAgICAgICAgQXVkaW9CdWZmZXIgY3JlYXRlQnVmZmVyKGluIEFycmF5
QnVmZmVyIGJ1ZmZlciwgaW4gYm9vbGVhbiBtaXhUb01vbm8pCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmU4OTIwNTQyMGNm
YzFhNTdkZjU2ODQ0MTY4ZWYzNTA3M2Q1Y2NjNi4uN2ViZjAzMmQ3MTU3YjE0NDJkMGFiZTliMDEx
ZTEzY2ZkYmQ5YTc2ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAyLTI3ICBSYXltb25k
IFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgcGxheWJhY2sgc3RhdGUgZm9y
IEF1ZGlvQnVmZmVyU291cmNlTm9kZSBhbmQgYWRkIG51bWJlciBvZiBhY3RpdmUgbm9kZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzAxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9h
dWRpb2J1ZmZlcnNvdXJjZS1wbGF5YmFja1N0YXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS5odG1sOiBBZGRl
ZC4KKwogMjAxMi0wMy0xNSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgR1RLIGJhc2VsaW5lcyBmb3IgbmV3IGZhc3QvY3NzIHRl
c3QuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1w
bGF5YmFja1N0YXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVm
ZmVyc291cmNlLXBsYXliYWNrU3RhdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhZGRiMGVm
MWI1ZDM1OWY0ZWZkNjcxYTY2Nzc5YjlkODMxNWZkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1wbGF5YmFja1N0YXRlLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDIwIEBACitUZXN0IEF1ZGlvQ29udGV4dCBhY3RpdmVTdGF0ZUNvdW50
IGFuZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgcGxheWJhY2tTdGF0ZS4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRlcmluZyB0aW1lIGlzIDIgc2Vjb25kcy4KK1BBU1Mg
VU5TQ0hFRFVMRURfU1RBVEUgU291cmNlIGhhcyBiZWVuIGNyZWF0ZWQKK1BBU1MgU0NIRURVTEVE
X1NUQVRFICAgMyBzZWNvbmQgc291cmNlIHNjaGVkdWxlZCB0byBzdGFydCBhdCB0aW1lIDMKK1BB
U1MgUExBWUlOR19TVEFURSAgICAgMiBzZWNvbmQgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMQor
UEFTUyBGSU5JU0hFRF9TVEFURSAgICAxLjI1IHNlY29uZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGlt
ZSAwCitQQVNTIFNDSEVEVUxFRF9TVEFURSAgIDEgc2Vjb25kIGdyYWluIHNjaGVkdWxlZCB0byBz
dGFydCBhdCB0aW1lIDMKK1BBU1MgUExBWUlOR19TVEFURSAgICAgMiBzZWNvbmQgZ3JhaW4gc3Rh
cnRpbmcgYXQgdGltZSAwLjUKK1BBU1MgRklOSVNIRURfU1RBVEUgICAgMSBzZWNvbmQgZ3JhaW4g
c3RhcnRpbmcgYXQgdGltZSAwLjUKK1BBU1MgU0NIRURVTEVEX1NUQVRFICAgYSBsb29waW5nIDAu
NSBzZWNvbmQgc291cmNlIHNjaGVkdWxlZCBhdCB0aW1lIDMKK1BBU1MgUExBWUlOR19TVEFURSAg
ICAgYSBsb29waW5nIDAuNSBzZWNvbmQgc291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMS4yNQorUEFT
UyAzIGFyZSBjdXJyZW50bHkgcGxheWluZyBhcyBleHBlY3RlZC4KK1BBU1MgYWN0aXZlU291cmNl
Q291bnQgYW5kIHBsYXliYWNrU3RhdGUgdGVzdHMgc3VjY2VlZGVkLgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvYnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zYjY0MmU0NTVhODU0MzU5YmM2ZDhkOWJjMTFjMGFjMzc2ODdlYWZlCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJh
Y2tTdGF0ZS5odG1sCkBAIC0wLDAgKzEsMjA3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvQ29udGV4
dCBhY3RpdmVTdGF0ZUNvdW50IGFuZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgcGxheWJhY2tTdGF0
ZS4iKTsKKworLy8gQ3JlYXRlIGEgZmV3IHNvdXJjZXMgdGhhdCBzdGFydCBhbmQgZW5kIHBsYXlp
bmcgYXQgdmFyaW91cyB0aW1lcy4gIEFmdGVyIHJlbmRlcmluZywgY2hlY2sgdGhhdAorLy8gZWFj
aCBzb3VyY2UgaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgYW5kIHRoYXQgdGhlIG51bWJlciBvZiBh
Y3RpdmUgc291cmNlcyBpcyBjb3JyZWN0LgorCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwOworCisv
LyBSZW5kZXIgZm9yIHRoaXMgbG9uZy4KK3ZhciByZW5kZXJUaW1lID0gMjsKK3ZhciByZW5kZXJM
ZW5ndGggPSB0aW1lVG9TYW1wbGVGcmFtZShyZW5kZXJUaW1lLCBzYW1wbGVSYXRlKTsKKwordmFy
IGNvbnRleHQ7CisKKy8vIExpc3Qgb2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyBzb3VyY2VzLgor
dmFyIHNvdXJjZXMgPSBbXTsKKworLy8gTGlzdCBvZiBtZXNzYWdlcyB0aGF0IHdpbGwgYmUgcHJp
bnRlZCBvdXQgb24gc3VjY2VzcyAob3IgZmFpbHVyZSkuICBNZXNzYWdlcyBhcmUgaW4gdGhlIHNh
bWUKKy8vIG9yZGVyIGFzIHRoZSBzb3VyY2VzIGxpc3QgYWJvdmUuCit2YXIgc291cmNlTWVzc2Fn
ZXMgPSBbXTsKKworLy8gTGlzdCBvZiB0aGUgZXhwZWN0ZWQgcGxheWJhY2sgc3RhdGUgZm9yIGVh
Y2ggc291cmNlLiAgSW4gdGhlIHNhbWUgb3JkZXIgYSBzb3VyY2VzIGxpc3QgYWJvdmUuCit2YXIg
c291cmNlRXhwZWN0ZWRTdGF0ZXMgPSBbXTsKKworLy8gQXJyYXkgbWFwcGluZyB0aGUgcGxheWJh
Y2sgc3RhdGUgdG8gYSBzdHJpbmcuCit2YXIgcGxheWJhY2tTdGF0ZU5hbWUgPSBbIlVOU0NIRURV
TEVEX1NUQVRFICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNDSEVEVUxFRF9TVEFURSAg
ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlBMQVlJTkdfU1RBVEUgICAgICIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIkZJTklTSEVEX1NUQVRFICAgICJdOworCitmdW5jdGlvbiBj
aGVja1Jlc3VsdChldmVudCkKK3sKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisKKyAgICAvLyBG
b3IgZWFjaCBzb3VyY2UsIHZlcmlmeSB0aGF0IHRoZSBwbGF5YmFjayBzdGF0ZSBtYXRjaGVzIG91
ciBleHBlY3RlZCBwbGF5IGJhY2sgc3RhdGUuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzb3Vy
Y2VzLmxlbmd0aDsgKytrKSB7CisgICAgICAgIHZhciBwcmVmaXggPSBwbGF5YmFja1N0YXRlTmFt
ZVtzb3VyY2VFeHBlY3RlZFN0YXRlc1trXV0gKyBzb3VyY2VNZXNzYWdlc1trXTsKKyAgICAgICAg
aWYgKHNvdXJjZXNba10ucGxheWJhY2tTdGF0ZSA9PSBzb3VyY2VFeHBlY3RlZFN0YXRlc1trXSkg
eworICAgICAgICAgICAgdGVzdFBhc3NlZChwcmVmaXgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdGVzdEZhaWxlZChwcmVmaXggKyAiOiBBY3R1YWwgPSAiICsgcGxheWJhY2tTdGF0
ZU5hbWVbc291cmNlc1trXS5wbGF5YmFja1N0YXRlXSk7CisgICAgICAgICAgICBzdWNjZXNzID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtYW55IGFj
dGl2ZSBzb3VyY2VzIHRoZXJlIHNob3VsZCBiZSBmcm9tIHRoZSBleHBlY3RlZCBzdGF0ZXMuCisg
ICAgdmFyIHBsYXlpbmdTdGF0ZSA9IHNvdXJjZXNbMF0uUExBWUlOR19TVEFURQorCisgICAgdmFy
IGV4cGVjdGVkQWN0aXZlQ291bnQgPSAwOworICAgIGZvciAoayA9IDA7IGsgPCBzb3VyY2VFeHBl
Y3RlZFN0YXRlcy5sZW5ndGg7ICsraykgeworICAgICAgICBpZiAoc291cmNlRXhwZWN0ZWRTdGF0
ZXNba10gPT0gcGxheWluZ1N0YXRlKSB7CisgICAgICAgICAgICArK2V4cGVjdGVkQWN0aXZlQ291
bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgICAKKyAgICBpZiAoY29udGV4dC5hY3RpdmVTb3Vy
Y2VDb3VudCA9PSBleHBlY3RlZEFjdGl2ZUNvdW50KSB7CisgICAgICAgIHRlc3RQYXNzZWQoY29u
dGV4dC5hY3RpdmVTb3VyY2VDb3VudCArICIgYXJlIGN1cnJlbnRseSBwbGF5aW5nIGFzIGV4cGVj
dGVkLiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoY29udGV4dC5hY3RpdmVT
b3VyY2VDb3VudCArICIgYXJlIGN1cnJlbnRseSBwbGF5aW5nLCBidXQgZXhwZWN0ZWQgIiArIGV4
cGVjdGVkQWN0aXZlQ291bnQgKyAiLiIpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiYWN0aXZlU291cmNl
Q291bnQgYW5kIHBsYXliYWNrU3RhdGUgdGVzdHMgc3VjY2VlZGVkLiIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHRlc3RGYWlsZWQoImFjdGl2ZVNvdXJjZUNvdW50IGFuZCBwbGF5YmFja1N0YXRl
IHRlc3RzIGRpZCBub3Qgc3VjY2VlZC4iKTsKKyAgICB9CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsK
K30KKworLy8gQ3JlYXRlIHRlc3QKKy8vCisvLyBzb3VyY2VMZW5ndGggLSBsZW5ndGggb2Ygc291
cmNlIGluIHNlY29uZHMKKy8vIG5vdGVGdW5jdGlvbiAtIGZ1bmN0aW9uIHRvIHR1cm4gb24gc291
cmNlIGFwcHJvcHJpYXRlbHkKKy8vIGV4cGVjdGVkU3RhdGUgLSBleHBlY3RlZCBzdGF0ZSBvZiB0
aGUgc291cmNlIGF0IHRoZSBlbmQgb2YgcmVuZGVyaW5nCisvLyBtZXNzYWdlIC0gbWVzc2FnZSB0
byBiZSBkaXNwbGF5ZWQgaWYgdGVzdCBwYXNzZXMKK2Z1bmN0aW9uIGNyZWF0ZVRlc3Qoc291cmNl
TGVuZ3RoLCBub3RlRnVuY3Rpb24sIGV4cGVjdGVkU3RhdGUsIG1lc3NhZ2UpCit7CisgICAgdmFy
IHMgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIHMuYnVmZmVyID0gY3JlYXRl
SW1wdWxzZUJ1ZmZlcihjb250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZShzb3VyY2VMZW5ndGgsIHNh
bXBsZVJhdGUpKTsKKyAgICBzLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgICAgbm90
ZUZ1bmN0aW9uKHMpOworICAgIHNvdXJjZXMucHVzaChzKTsKKyAgICBzb3VyY2VNZXNzYWdlcy5w
dXNoKG1lc3NhZ2UpOworICAgIHNvdXJjZUV4cGVjdGVkU3RhdGVzLnB1c2goZXhwZWN0ZWRTdGF0
ZSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQor
CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgLy8gQ3JlYXRlIG9mZmxp
bmUgYXVkaW8gY29udGV4dCwgcmVuZGVyaW5nIGZvciByZW5kZXJUaW1lIHNlY29uZHMuCisgICAg
Y29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgdGltZVRvU2FtcGxlRnJhbWUocmVu
ZGVyVGltZSwgc2FtcGxlUmF0ZSksIHNhbXBsZVJhdGUpOworCisgICAgLy8gVGhpcyBpcyBvbmx5
IHVzZWQgc28gd2UgY2FuIGFjY2VzcyB0aGUgcGxheWJhY2sgc3RhdGUgY29uc3RhbnRzLgorICAg
IHZhciBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworCisgICAg
Ly8gRHVtbXkgbWVzc2FnZSBzbyB3ZSBrbm93IGhvdyBsb25nIHdlJ3JlIHJlbmRlcmluZyBzbyB3
ZSBjYW4gaW50ZXJwcmV0IHRoZSBwYXNzL2ZhaWwgbWVzc2FnZXMKKyAgICAvLyBjb3JyZWN0bHku
CisgICAgdGVzdFBhc3NlZCgiUmVuZGVyaW5nIHRpbWUgaXMgIiArIHJlbmRlclRpbWUgKyAiIHNl
Y29uZHMuIik7CisKKyAgICAvLyBUZXN0IHVuc2NoZWR1bGVkIHN0YXRlLiBDcmVhdGUgMyBzZWNv
bmQgc291cmNlLCBidXQgZG9uJ3Qgc2NoZWR1bGUgaXQuCisKKyAgICBjcmVhdGVUZXN0KDMsCisg
ICAgICAgICAgICAgICBmdW5jdGlvbihzKSB7IH0sCisgICAgICAgICAgICAgICBidWZmZXJTb3Vy
Y2UuVU5TQ0hFRFVMRURfU1RBVEUsCisgICAgICAgICAgICAgICAiU291cmNlIGhhcyBiZWVuIGNy
ZWF0ZWQiKTsKKworICAgIC8vIFRlc3Qgbm90ZU9uLgorCisgICAgLy8gVGVzdCBzY2hlZHVsZWQg
c3RhdGUuIENyZWF0ZSAzIHNlY29uZCBzb3VyY2UsIHN0YXJ0aW5nIGFmdGVyIHdlIGZpbmlzaCBy
ZW5kZXJpbmcuCisKKyAgICB2YXIgcHJlZml4TWVzc2FnZTsKKworICAgIGNyZWF0ZVRlc3QoMywK
KyAgICAgICAgICAgICAgIGZ1bmN0aW9uKHMpIHsgcy5ub3RlT24ocmVuZGVyVGltZSArIDEpOyB9
LAorICAgICAgICAgICAgICAgYnVmZmVyU291cmNlLlNDSEVEVUxFRF9TVEFURSwKKyAgICAgICAg
ICAgICAgICIzIHNlY29uZCBzb3VyY2Ugc2NoZWR1bGVkIHRvIHN0YXJ0IGF0IHRpbWUgIiArIChy
ZW5kZXJUaW1lICsgMSkpOworCisgICAgLy8gVGVzdCBwbGF5aW5nIHN0YXRlLiBDcmVhdGUgYSAy
IHNlY29uZCBzb3VyY2UsIHN0YXJ0aW5nIGluIG9uZSBzZWNvbmQuICBUaGlzIHNob3VsZCBzdGls
bCBiZQorICAgIC8vIHBsYXlpbmcgd2hlbiByZW5kZXJpbmcgaXMgZG9uZS4KKworICAgIGNyZWF0
ZVRlc3QoMiwKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKHMpIHsgcy5ub3RlT24oMSk7IH0sCisg
ICAgICAgICAgICAgICBidWZmZXJTb3VyY2UuUExBWUlOR19TVEFURSwKKyAgICAgICAgICAgICAg
ICIyIHNlY29uZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxIik7CisgICAgICAKKyAgICAvLyBU
ZXN0IGZpbmlzaGVkIHN0YXRlLiBDcmVhdGUgYSAxLjI1IHNlY29uZCBzb3VyY2UsIHN0YXJ0aW5n
IGltbWVkaWF0ZWx5LiAgVGhpcyB3aWxsIGZpbmlzaAorICAgIC8vIGJlZm9yZSByZW5kZXJpbmcg
aXMgY29tcGxldGUuCisKKyAgICBjcmVhdGVUZXN0KDEuMjUsCisgICAgICAgICAgICAgICBmdW5j
dGlvbihzKSB7IHMubm90ZU9uKDApOyB9LAorICAgICAgICAgICAgICAgYnVmZmVyU291cmNlLkZJ
TklTSEVEX1NUQVRFLAorICAgICAgICAgICAgICAgIjEuMjUgc2Vjb25kIHNvdXJjZSBzdGFydGlu
ZyBhdCB0aW1lIDAiKTsKKworICAgIC8vIFRlc3Qgbm90ZUdyYWluT24uCisKKyAgICAvLyBUZXN0
IHNjaGVkdWxlZCBzdGF0ZS4gIEdyYWluIHN0YXJ0cyBhZnRlciBvdXIgcmVuZGVyaW5nIHRpbWUu
CisKKyAgICBjcmVhdGVUZXN0KDMsCisgICAgICAgICAgICAgICBmdW5jdGlvbihzKSB7IHMubm90
ZUdyYWluT24ocmVuZGVyVGltZSArIDEsIDAsIDEpOyB9LAorICAgICAgICAgICAgICAgYnVmZmVy
U291cmNlLlNDSEVEVUxFRF9TVEFURSwKKyAgICAgICAgICAgICAgICIxIHNlY29uZCBncmFpbiBz
Y2hlZHVsZWQgdG8gc3RhcnQgYXQgdGltZSAiICsgKHJlbmRlclRpbWUgKyAxKSk7CisgIAorICAg
IC8vIFRlc3QgcGxheWluZyBzdGF0ZS4gQ3JlYXRlIDMgc2Vjb25kIHNvdXJjZSwgc3RhcnRpbmcg
aW4gMS8yIHNlY29uZCwgYnV0IG9ubHkgbGFzdGluZyAxCisgICAgLy8gc2Vjb25kLiAgVGhpcyB3
aWxsIGZpbmlzaCBiZWZvcmUgcmVuZGVyaW5nIGlzIGNvbXBsZXRlLgorCisgICAgY3JlYXRlVGVz
dCgzLAorICAgICAgICAgICAgICAgZnVuY3Rpb24ocykgeyBzLm5vdGVHcmFpbk9uKDAuNSwgMCwg
Mik7IH0sCisgICAgICAgICAgICAgICBidWZmZXJTb3VyY2UuUExBWUlOR19TVEFURSwKKyAgICAg
ICAgICAgICAgICIyIHNlY29uZCBncmFpbiBzdGFydGluZyBhdCB0aW1lIDAuNSIpOworICAgICAg
CisgICAgLy8gVGVzdCBmaW5pc2hlZCBzdGF0ZS4gQ3JlYXRlIDMgc2Vjb25kIHNvdXJjZSwgc3Rh
cnRpbmcgaW4gMS8yIHNlY29uZCwgYnV0IG9ubHkgbGFzdGluZyAxCisgICAgLy8gc2Vjb25kLiAg
VGhpcyB3aWxsIGZpbmlzaCBiZWZvcmUgcmVuZGVyaW5nIGlzIGNvbXBsZXRlLgorCisgICAgY3Jl
YXRlVGVzdCgzLAorICAgICAgICAgICAgICAgZnVuY3Rpb24ocykgeyBzLm5vdGVHcmFpbk9uKDAu
NSwgMCwgMSk7IH0sCisgICAgICAgICAgICAgICBidWZmZXJTb3VyY2UuRklOSVNIRURfU1RBVEUs
CisgICAgICAgICAgICAgICAiMSBzZWNvbmQgZ3JhaW4gc3RhcnRpbmcgYXQgdGltZSAwLjUiKTsK
KworICAgIC8vIFRlc3QgbG9vcGluZyBzb3VyY2UKKworICAgIC8vIFRlc3Qgc2NoZWR1bGVkIHN0
YXRlIGZvciBsb29waW5nIHNvdXJjZS4gQ3JlYXRlIDAuNSBzZWNvbmQgc291cmNlIHN0YXJ0aW5n
IGF0IHRpbWUgMS4yNSBhbmQKKyAgICAvLyBsb29waW5nIGFmdGVyd2FyZHMuICBUaGlzIHdpbGwg
c3RpbGwgYmUgcGxheWluZyB3aGVuIHJlbmRlcmluZyBpcyBjb21wbGV0ZS4KKworICAgIGNyZWF0
ZVRlc3QoMC41LAorICAgICAgICAgICAgICAgZnVuY3Rpb24ocykgeyBzLmxvb3AgPSB0cnVlOyBz
Lm5vdGVPbihyZW5kZXJUaW1lICsgMSk7IH0sCisgICAgICAgICAgICAgICBidWZmZXJTb3VyY2Uu
U0NIRURVTEVEX1NUQVRFLAorICAgICAgICAgICAgICAgImEgbG9vcGluZyAwLjUgc2Vjb25kIHNv
dXJjZSBzY2hlZHVsZWQgYXQgdGltZSAiICsgKHJlbmRlclRpbWUgKyAxKSk7CisKKyAgICAvLyBU
ZXN0IHBsYXlpbmcgc3RhdGUgZm9yIGxvb3Bpbmcgc291cmNlLiBDcmVhdGUgMC41IHNlY29uZCBz
b3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxLjI1IGFuZAorICAgIC8vIGxvb3BpbmcgYWZ0ZXJ3YXJk
cy4gIFRoaXMgd2lsbCBzdGlsbCBiZSBwbGF5aW5nIHdoZW4gcmVuZGVyaW5nIGlzIGNvbXBsZXRl
LgorCisgICAgY3JlYXRlVGVzdCgwLjUsCisgICAgICAgICAgICAgICBmdW5jdGlvbihzKSB7IHMu
bG9vcCA9IHRydWU7IHMubm90ZU9uKDEuMjUpOyB9LAorICAgICAgICAgICAgICAgYnVmZmVyU291
cmNlLlBMQVlJTkdfU1RBVEUsCisgICAgICAgICAgICAgICAiYSBsb29waW5nIDAuNSBzZWNvbmQg
c291cmNlIHN0YXJ0aW5nIGF0IHRpbWUgMS4yNSIpOworCisgICAgY29udGV4dC5vbmNvbXBsZXRl
ID0gY2hlY2tSZXN1bHQ7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorICAgICAg
CitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAKKzwvc2NyaXB0Pgor
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132397</attachid>
            <date>2012-03-16 15:28:29 -0700</date>
            <delta_ts>2012-03-19 13:55:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79701-20120316152828.patch</filename>
            <type>text/plain</type>
            <size>22873</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk2NjZmZTVmNjE4MDVk
NWI1ODI0YmYzZTYxODg3MmMwNjQxNWQzNS4uNzhiMzRhYTliYjI4ZTI4OTAyMDY5NjNkZjM0YmI5
YjZhOTU0MzYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTI3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgcGxheWJhY2sgc3RhdGUg
Zm9yIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBhbmQgYWRkIG51bWJlciBvZiBhY3RpdmUgbm9kZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzAxCisK
KyAgICAgICAgQWRkIGEgcGxheWJhY2sgc3RhdGUgdG8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHNv
IHRoYXQgdGhlIHVzZXIgY2FuCisgICAgICAgIHRlbGwgaWYgdGhlIG5vZGUgaXMgc2NoZWR1bGVk
LCBwbGF5aW5nLCBvciBmaW5pc2hlZC4KKworICAgICAgICBGb3IgYW4gQXVkaW9Db250ZXh0LCBh
ZGQgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mCisgICAgICAgIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZSdzIHRoYXQgYXJlIGFjdGl2ZSAocGxheWluZyBhdWRpbykuCisKKyAgICAgICAgRGVsZXRlZCBt
X2lzUGxheWluZyBhbmQgbV9oYXNGaW5pc2hlZC4gRm9yIHRoZSByZWNvcmQsIG1faXNQbGF5aW5n
CisgICAgICAgIGlzIHRoZSBzYW1lIGFzIGEgcGxheWJhY2tTdGF0ZSBvZiBTQ0hFRFVMRURfU1RB
VEUgb3IgUExBWUlOR19TVEFURS4KKyAgICAgICAgbV9oYXNGaW5pc2hlZCBpcyBlcXVpdmFsZW50
IHRvIGEgcGxheWJhY2tTdGF0ZSBvZiBGSU5JU0hFRF9TVEFURS4KKyAgICAgICAgCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmF1ZGlvL2F1
ZGlvYnVmZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbAorCisgICAgICAgICogd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUpOgor
ICAgICAgICBpbml0aWFsaXplIHBsYXliYWNrU3RhdGUsIHJlbW92ZSBtX2lzUGxheWluZywgbV9o
YXNGaW5pc2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJv
Y2Vzcyk6IFVwZGF0ZSBwbGF5YmFja1N0YXRlCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OmZpbmlzaCk6IFVwZGF0ZSBwbGF5YmFja1N0YXRlCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVPbik6IFVwZGF0ZSBwbGF5YmFja1N0YXRl
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFpbk9uKTog
VXBkYXRlIHBsYXliYWNrU3RhdGUKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6bm90ZU9mZik6IFVzZSBwbGF5YmFja1N0YXRlIAorICAgICAgICAqIHdlYmF1ZGlvL0F1
ZGlvQnVmZmVyU291cmNlTm9kZS5oOgorICAgICAgICAoQXVkaW9CdWZmZXJTb3VyY2VOb2RlKTog
RGVmaW5lIHN0YXRlcywgcmVtb3ZlIG1faXNQbGF5aW5nLCBtX2hhc0ZpbmlzaGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwbGF5YmFja1N0YXRlKTogQWRkZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbDogRGVmaW5lIGNv
bnN0YW50cyBmb3IgdGhlCisgICAgICAgIHBsYXliYWNrIHN0YXRlLCBhZGQgYXR0cmlidXRlIHBs
YXliYWNrU3RhdGUuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6YWN0aXZlU291cmNlQ291bnQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aW5jcmVtZW50QWN0aXZlU291cmNlQ291bnQp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6ZGVjcmVtZW50QWN0aXZl
U291cmNlQ291bnQpOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoK
KyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmlkbDogQWRkIGF0dHJpYnV0ZSBhY3RpdmVTb3VyY2VDb3VudC4KKwogMjAxMi0wMy0xNCAgQ2hy
aXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYRGVzY3JpcHRp
b24gZm9yIEhUTUw1IGZvb3RlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5jcHAKaW5kZXggNDg4MTEzMWE0ZGYxMzJlNzBkNTY3Y2UxMDljNmU5
NjE5ODRhNzc2My4uMjFhMjA5M2NiNDYzN2U2N2YwZGJlZWNjYjk3MGE5YzM4NmYyNmFmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3Bw
CkBAIC01OCw5ICs1OCw3IEBAIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvCiBBdWRpb0J1ZmZlclNv
dXJjZU5vZGU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUpCiAgICAgOiBBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwgc2FtcGxlUmF0
ZSkKICAgICAsIG1fYnVmZmVyKDApCi0gICAgLCBtX2lzUGxheWluZyhmYWxzZSkKICAgICAsIG1f
aXNMb29waW5nKGZhbHNlKQotICAgICwgbV9oYXNGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fc3Rh
cnRUaW1lKDAuMCkKICAgICAsIG1fZW5kVGltZShVbmtub3duVGltZSkKICAgICAsIG1fdmlydHVh
bFJlYWRJbmRleCgwKQpAQCAtNjksNiArNjcsNyBAQCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OkF1
ZGlvQnVmZmVyU291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZQog
ICAgICwgbV9ncmFpbkR1cmF0aW9uKERlZmF1bHRHcmFpbkR1cmF0aW9uKQogICAgICwgbV9sYXN0
R2FpbigxLjApCiAgICAgLCBtX3Bhbm5lck5vZGUoMCkKKyAgICAsIG1fcGxheWJhY2tTdGF0ZShV
TlNDSEVEVUxFRF9TVEFURSkKIHsKICAgICBzZXROb2RlVHlwZShOb2RlVHlwZUF1ZGlvQnVmZmVy
U291cmNlKTsKIApAQCAtMTEwLDE4ICsxMDksMjQgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIAogICAgICAgICAvLyBJZiB3ZSBr
bm93IHRoZSBlbmQgdGltZSBhbmQgaXQncyBhbHJlYWR5IHBhc3NlZCwgdGhlbiBkb24ndCBib3Ro
ZXIgZG9pbmcgYW55IG1vcmUgcmVuZGVyaW5nIHRoaXMgY3ljbGUuCiAgICAgICAgIGlmIChtX2Vu
ZFRpbWUgIT0gVW5rbm93blRpbWUgJiYgZW5kRnJhbWUgPD0gcXVhbnR1bVN0YXJ0RnJhbWUpIHsK
LSAgICAgICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICBtX3ZpcnR1YWxS
ZWFkSW5kZXggPSAwOwogICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmICghbV9pc1BsYXlpbmcgfHwgbV9oYXNGaW5pc2hlZCB8fCAhYnVmZmVyKCkg
fHwgc3RhcnRGcmFtZSA+PSBxdWFudHVtRW5kRnJhbWUpIHsKKyAgICAgICAgaWYgKG1fcGxheWJh
Y2tTdGF0ZSA9PSBVTlNDSEVEVUxFRF9TVEFURSB8fCBtX3BsYXliYWNrU3RhdGUgPT0gRklOSVNI
RURfU1RBVEUKKyAgICAgICAgICAgIHx8ICFidWZmZXIoKSB8fCBzdGFydEZyYW1lID49IHF1YW50
dW1FbmRGcmFtZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IGNhbiBvcHRpbWl6ZSBoZXJlIGJ5
IHByb3BhZ2F0aW5nIHNpbGVudCBoaW50IGluc3RlYWQgb2YgZm9yY2luZyB0aGUgd2hvbGUgY2hh
aW4gdG8gcHJvY2VzcyBzaWxlbmNlLgogICAgICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CiAg
ICAgICAgICAgICBtX3Byb2Nlc3NMb2NrLnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKKyAgICAgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRURfU1RB
VEUpIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgYWN0aXZlIHNvdXJjZSBjb3VudCBv
bmx5IGlmIHdlJ3JlIHRyYW5zaXRpb25pbmcgZnJvbSBTQ0hFRFVMRURfU1RBVEUgdG8gUExBWUlO
R19TVEFURS4KKyAgICAgICAgICAgIG1fcGxheWJhY2tTdGF0ZSA9IFBMQVlJTkdfU1RBVEU7Cisg
ICAgICAgICAgICBjb250ZXh0KCktPmluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCk7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIHNpemVfdCBxdWFudHVtRnJhbWVPZmZzZXQgPSBzdGFy
dEZyYW1lID4gcXVhbnR1bVN0YXJ0RnJhbWUgPyBzdGFydEZyYW1lIC0gcXVhbnR1bVN0YXJ0RnJh
bWUgOiAwOwogICAgICAgICBxdWFudHVtRnJhbWVPZmZzZXQgPSBtaW4ocXVhbnR1bUZyYW1lT2Zm
c2V0LCBmcmFtZXNUb1Byb2Nlc3MpOyAvLyBjbGFtcCB0byB2YWxpZCByYW5nZQogICAgICAgICBz
aXplX3QgYnVmZmVyRnJhbWVzVG9Qcm9jZXNzID0gZnJhbWVzVG9Qcm9jZXNzIC0gcXVhbnR1bUZy
YW1lT2Zmc2V0OwpAQCAtMTUwLDggKzE1NSw4IEBAIHZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
Ojpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgICAgICAgICAgICAgICAgIG1l
bXNldChtX2Rlc3RpbmF0aW9uQ2hhbm5lbHNbaV0gKyB6ZXJvU3RhcnRGcmFtZSwgMCwgc2l6ZW9m
KGZsb2F0KSAqIGZyYW1lc1RvWmVybyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1f
aXNQbGF5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwor
CiAgICAgICAgICAgICBmaW5pc2goKTsKICAgICAgICAgfQogCkBAIC0xNjcsNyArMTcyLDYgQEAg
Ym9vbCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnJlbmRlclNpbGVuY2VBbmRGaW5pc2hJZk5vdExv
b3BpbmcoQXVkaW9CdXMqLCB1bnNpZ24KIHsKICAgICBpZiAoIWxvb3AoKSkgewogICAgICAgICAv
LyBJZiB3ZSdyZSBub3QgbG9vcGluZywgdGhlbiBzdG9wIHBsYXlpbmcgd2hlbiB3ZSBnZXQgdG8g
dGhlIGVuZC4KLSAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKIAogICAgICAgICBpZiAoZnJh
bWVzVG9Qcm9jZXNzID4gMCkgewogICAgICAgICAgICAgLy8gV2UncmUgbm90IGxvb3BpbmcgYW5k
IHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2FtcGxlIGRhdGEsIGJ1dCB3ZSBzdGlsbCBu
ZWVkIHRvIHByb3ZpZGUgbW9yZSBvdXRwdXQsCkBAIC0zNDMsMTAgKzM0NywxMSBAQCB2b2lkIEF1
ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVzZXQoKQogCiB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZTo6ZmluaXNoKCkKIHsKLSAgICBpZiAoIW1faGFzRmluaXNoZWQpIHsKKyAgICBpZiAobV9wbGF5
YmFja1N0YXRlICE9IEZJTklTSEVEX1NUQVRFKSB7CiAgICAgICAgIC8vIExldCB0aGUgY29udGV4
dCBkZXJlZmVyZW5jZSB0aGlzIEF1ZGlvTm9kZS4KICAgICAgICAgY29udGV4dCgpLT5ub3RpZnlO
b2RlRmluaXNoZWRQcm9jZXNzaW5nKHRoaXMpOwotICAgICAgICBtX2hhc0ZpbmlzaGVkID0gdHJ1
ZTsKKyAgICAgICAgbV9wbGF5YmFja1N0YXRlID0gRklOSVNIRURfU1RBVEU7CisgICAgICAgIGNv
bnRleHQoKS0+ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKICAgICB9CiB9CiAKQEAgLTM5
MCwxOSArMzk1LDIwIEBAIHVuc2lnbmVkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bnVtYmVyT2ZD
aGFubmVscygpCiB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZU9uKGRvdWJsZSB3aGVu
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1faXNQbGF5aW5nKQor
ICAgIGlmIChtX3BsYXliYWNrU3RhdGUgIT0gVU5TQ0hFRFVMRURfU1RBVEUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1faXNHcmFpbiA9IGZhbHNlOwogICAgIG1fc3RhcnRUaW1lID0gd2hlbjsK
ICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwotICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKKyAg
ICBtX3BsYXliYWNrU3RhdGUgPSBTQ0hFRFVMRURfU1RBVEU7CiB9CiAKIHZvaWQgQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlOjpub3RlR3JhaW5Pbihkb3VibGUgd2hlbiwgZG91YmxlIGdyYWluT2Zmc2V0
LCBkb3VibGUgZ3JhaW5EdXJhdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIGlmIChtX2lzUGxheWluZykKKworICAgIGlmIChtX3BsYXliYWNrU3RhdGUgIT0gVU5TQ0hF
RFVMRURfU1RBVEUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghYnVmZmVyKCkpCkBAIC00
MzIsMTMgKzQzOCwxMyBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZUdyYWluT24o
ZG91YmxlIHdoZW4sIGRvdWJsZSBncmFpbk9mZnNldCwgZG91YmxlCiAgICAgLy8gU2luY2UgcGxh
eWJhY2tSYXRlID09IDEgaXMgdmVyeSBjb21tb24sIGl0J3Mgd29ydGggY29uc2lkZXJpbmcgcXVh
bGl0eS4KICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSBBdWRpb1V0aWxpdGllczo6dGltZVRvU2Ft
cGxlRnJhbWUobV9ncmFpbk9mZnNldCwgYnVmZmVyKCktPnNhbXBsZVJhdGUoKSk7CiAgICAgCi0g
ICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgIG1fcGxheWJhY2tTdGF0ZSA9IFNDSEVEVUxFRF9T
VEFURTsKIH0KIAogdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVPZmYoZG91YmxlIHdo
ZW4pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1faXNQbGF5aW5n
KQorICAgIGlmICghKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRURfU1RBVEUgfHwgbV9wbGF5
YmFja1N0YXRlID09IFBMQVlJTkdfU1RBVEUpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
d2hlbiA9IG1heCgwLjAsIHdoZW4pOwpAQCAtNDk2LDcgKzUwMiw2IEBAIHZvaWQgQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlOjpzZXRMb29waW5nKGJvb2wgbG9vcGluZykKIAogICAgIG1faXNMb29waW5n
ID0gbG9vcGluZzsKIH0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmgKaW5kZXggNWFjNTRjNjBhMGNmMmQ0MzdlMDliMjY2YmQyMTdiODgxNmRlMGM5
NS4uMmY4ZWY5OTQ2MDE5MTk1ZmY3YTdkNjdmMjdhNGM5NDE3MGFkZTRkMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKQEAgLTQ0LDYgKzQ0
LDIzIEBAIGNsYXNzIEF1ZGlvQ29udGV4dDsKIAogY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
IDogcHVibGljIEF1ZGlvU291cmNlTm9kZSB7CiBwdWJsaWM6CisgICAgLy8gVGhlc2UgYXJlIHRo
ZSBwb3NzaWJsZSBzdGF0ZXMgYW4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGNhbiBiZSBpbjoKKyAg
ICAvLworICAgIC8vIFVOU0NIRURVTEVEX1NUQVRFIC0gSW5pdGlhbCBwbGF5YmFjayBzdGF0ZS4g
Q3JlYXRlZCwgYnV0IG5vdCB5ZXQgc2NoZWR1bGVkLgorICAgIC8vIFNDSEVEVUxFRF9TVEFURSAt
IFNjaGVkdWxlZCB0byBwbGF5ICh2aWEgbm90ZU9uKCkgb3Igbm90ZUdyYWluT24oKSksIGJ1dCBu
b3QgeWV0IHBsYXlpbmcuCisgICAgLy8gUExBWUlOR19TVEFURSAtIEdlbmVyYXRpbmcgc291bmQu
CisgICAgLy8gRklOSVNIRURfU1RBVEUgLSBGaW5pc2hlZCBnZW5lcmF0aW5nIHNvdW5kLgorICAg
IC8vCisgICAgLy8gVGhlIHN0YXRlIGNhbiBvbmx5IHRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3Rh
dGUsIGV4Y2VwdCBmb3IgdGhlIEZJTklTSEVEX1NUQVRFIHdoaWNoIGNhbgorICAgIC8vIG5ldmVy
IGJlIGNoYW5nZWQuCisgICAgZW51bSBQbGF5YmFja1N0YXRlIHsKKyAgICAgICAgLy8gVGhlc2Ug
bXVzdCBiZSBkZWZpbmVkIHdpdGggdGhlIHNhbWUgbmFtZXMgYW5kIHZhbHVlcyBhcyBpbiB0aGUg
LmlkbCBmaWxlLgorICAgICAgICBVTlNDSEVEVUxFRF9TVEFURSA9IDAsCisgICAgICAgIFNDSEVE
VUxFRF9TVEFURSA9IDEsCisgICAgICAgIFBMQVlJTkdfU1RBVEUgPSAyLAorICAgICAgICBGSU5J
U0hFRF9TVEFURSA9IDMKKyAgICB9OworICAgIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlv
QnVmZmVyU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUp
OwogCiAgICAgdmlydHVhbCB+QXVkaW9CdWZmZXJTb3VyY2VOb2RlKCk7CkBAIC02Nyw2ICs4NCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3Jh
aW5PZmZzZXQsIGRvdWJsZSBncmFpbkR1cmF0aW9uKTsKICAgICB2b2lkIG5vdGVPZmYoZG91Ymxl
IHdoZW4pOwogCisgICAgdW5zaWduZWQgc2hvcnQgcGxheWJhY2tTdGF0ZSgpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihtX3BsYXliYWNrU3RhdGUpOyB9CisKICAgICAvLyBO
b3RlOiB0aGUgYXR0cmlidXRlIHdhcyBvcmlnaW5hbGx5IGV4cG9zZWQgYXMgLmxvb3BpbmcsIGJ1
dCB0byBiZSBtb3JlIGNvbnNpc3RlbnQgaW4gbmFtaW5nIHdpdGggPGF1ZGlvPgogICAgIC8vIGFu
ZCB3aXRoIGhvdyBpdCdzIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiwgdGhlIHByb3Bl
ciBhdHRyaWJ1dGUgbmFtZSBpcyAubG9vcAogICAgIC8vIFRoZSBvbGQgYXR0cmlidXRlIGlzIGtl
cHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgpAQCAtMTAyLDE3ICsxMjEsMTAgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2dhaW47CiAgICAgUmVmUHRyPEF1ZGlvUGFy
YW0+IG1fcGxheWJhY2tSYXRlOwogCi0gICAgLy8gbV9pc1BsYXlpbmcgaXMgc2V0IHRvIHRydWUg
d2hlbiBub3RlT24oKSBvciBub3RlR3JhaW5PbigpIGlzIGNhbGxlZC4KLSAgICBib29sIG1faXNQ
bGF5aW5nOwotCiAgICAgLy8gSWYgbV9pc0xvb3BpbmcgaXMgZmFsc2UsIHRoZW4gdGhpcyBub2Rl
IHdpbGwgYmUgZG9uZSBwbGF5aW5nIGFuZCBiZWNvbWUgaW5hY3RpdmUgYWZ0ZXIgaXQgcmVhY2hl
cyB0aGUgZW5kIG9mIHRoZSBzYW1wbGUgZGF0YSBpbiB0aGUgYnVmZmVyLgogICAgIC8vIElmIHRy
dWUsIGl0IHdpbGwgd3JhcCBhcm91bmQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgZWFjaCB0
aW1lIGl0IHJlYWNoZXMgdGhlIGVuZC4KICAgICBib29sIG1faXNMb29waW5nOwogCi0gICAgLy8g
VGhpcyBub2RlIGlzIGNvbnNpZGVyZWQgZmluaXNoZWQgd2hlbiBpdCByZWFjaGVzIHRoZSBlbmQg
b2YgdGhlIGJ1ZmZlcidzIHNhbXBsZSBkYXRhIGFmdGVyIG5vdGVPbigpIGhhcyBiZWVuIGNhbGxl
ZC4KLSAgICAvLyBUaGlzIHdpbGwgb25seSBiZSBzZXQgdG8gdHJ1ZSBpZiBtX2lzTG9vcGluZyA9
PSBmYWxzZS4KLSAgICBib29sIG1faGFzRmluaXNoZWQ7Ci0KICAgICAvLyBtX3N0YXJ0VGltZSBp
cyB0aGUgdGltZSB0byBzdGFydCBwbGF5aW5nIGJhc2VkIG9uIHRoZSBjb250ZXh0J3MgdGltZWxp
bmUgKDAuMCBvciBhIHRpbWUgbGVzcyB0aGFuIHRoZSBjb250ZXh0J3MgY3VycmVudCB0aW1lIG1l
YW5zICJub3ciKS4KICAgICBkb3VibGUgbV9zdGFydFRpbWU7IC8vIGluIHNlY29uZHMKIApAQCAt
MTQ1LDYgKzE1Nyw4IEBAIHByaXZhdGU6CiAKICAgICAvLyBIYW5kbGVzIHRoZSB0aW1lIHdoZW4g
d2UgcmVhY2ggdGhlIGVuZCBvZiBzYW1wbGUgZGF0YSAobm9uLWxvb3BpbmcpIG9yIHRoZSBub3Rl
T2ZmKCkgdGltZSBoYXMgYmVlbiByZWFjaGVkLgogICAgIHZvaWQgZmluaXNoKCk7CisKKyAgICBQ
bGF5YmFja1N0YXRlIG1fcGxheWJhY2tTdGF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUu
aWRsCmluZGV4IGVlZGIwY2I3MDk5MTBiMjJjZDAxOWQ3MTEyNTlhOWNlOTQxMTcyNGIuLmFlNmFm
OTNlOGE4ZjgzZWM0NDUyZDdhYWRlMTZlNDA4Njc2ZWM5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbApAQCAtMzEsNiArMzEsMTMg
QEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgYXR0cmlidXRlIFtDdXN0b21TZXR0ZXJdIEF1ZGlv
QnVmZmVyIGJ1ZmZlcgogICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
IAorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTlNDSEVEVUxFRF9TVEFURSA9IDA7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNDSEVEVUxFRF9TVEFURSA9IDE7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IFBMQVlJTkdfU1RBVEUgPSAyOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBGSU5JU0hFRF9TVEFURSA9IDM7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0IHBsYXliYWNrU3RhdGU7CisKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIEF1ZGlvR2FpbiBnYWluOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVk
aW9QYXJhbSBwbGF5YmFja1JhdGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuY3BwCmluZGV4IDVmNDkwNWEzYmQzYjQxMjNjMDBlYWQ1ODkzZGNlOTBkMDBjNmZkZDguLmNi
ZWRmOTZiYWQ3MDQwZDI2Y2FiMWM4NzQ0MDJiYjBhNDI1NWMyOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtNjksNiArNjksNyBAQAogI2VuZGlmCiAKICNp
bmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMzcsNiArMTM4LDcgQEAgQXVkaW9Db250ZXh0OjpB
dWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9hdWRpb1RocmVhZCgwKQog
ICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCiAgICAg
LCBtX2lzT2ZmbGluZUNvbnRleHQoZmFsc2UpCisgICAgLCBtX2FjdGl2ZVNvdXJjZUNvdW50KDAp
CiB7CiAgICAgY29uc3RydWN0Q29tbW9uKCk7CiAKQEAgLTE2MCw2ICsxNjIsNyBAQCBBdWRpb0Nv
bnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMsIHNpemVfdAogICAgICwgbV9hdWRpb1RocmVhZCgwKQogICAgICwgbV9ncmFwaE93
bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCiAgICAgLCBtX2lzT2ZmbGluZUNv
bnRleHQodHJ1ZSkKKyAgICAsIG1fYWN0aXZlU291cmNlQ291bnQoMCkKIHsKICAgICBjb25zdHJ1
Y3RDb21tb24oKTsKIApAQCAtNzc5LDYgKzc4MiwxNiBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6Zmly
ZUNvbXBsZXRpb25FdmVudCgpCiAgICAgfQogfQogCit2b2lkIEF1ZGlvQ29udGV4dDo6aW5jcmVt
ZW50QWN0aXZlU291cmNlQ291bnQoKQoreworICAgIGF0b21pY0luY3JlbWVudCgmbV9hY3RpdmVT
b3VyY2VDb3VudCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpkZWNyZW1lbnRBY3RpdmVTb3Vy
Y2VDb3VudCgpCit7CisgICAgYXRvbWljRGVjcmVtZW50KCZtX2FjdGl2ZVNvdXJjZUNvdW50KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXggYjQyYTA3NWYyYTY5
Njg3MTQwMTM2NDU2ZjUyYjQ3Y2IwNzFhODFlZS4uODBjNjUyZGI5OTE4YWM0N2ViMzIzZTExOTcy
N2QwNGQ3ZjMzOTNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKQEAg
LTk2LDcgKzk2LDExIEBAIHB1YmxpYzoKICAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkg
eyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRTYW1wbGVGcmFtZSgpOyB9CiAgICAg
ZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRU
aW1lKCk7IH0KICAgICBmbG9hdCBzYW1wbGVSYXRlKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5v
ZGUtPnNhbXBsZVJhdGUoKTsgfQorICAgIHVuc2lnbmVkIGxvbmcgYWN0aXZlU291cmNlQ291bnQo
KSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX2FjdGl2ZVNvdXJjZUNvdW50
KTsgfQogCisgICAgdm9pZCBpbmNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpOworICAgIHZvaWQg
ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKKyAgICAKICAgICBQYXNzUmVmUHRyPEF1ZGlv
QnVmZmVyPiBjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51
bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFz
c1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyKiwgYm9vbCBtaXhU
b01vbm8sIEV4Y2VwdGlvbkNvZGUmKTsKIApAQCAtMzEyLDYgKzMxNiw4IEBAIHByaXZhdGU6CiAg
ICAgLy8gSXQgaXMgc29tZXdoYXQgYXJiaXRyYXJ5IGFuZCBjb3VsZCBiZSBpbmNyZWFzZWQgaWYg
bmVjZXNzYXJ5LgogICAgIGVudW0geyBNYXhOdW1iZXJPZkNoYW5uZWxzID0gMzIgfTsKIAorICAg
IC8vIE51bWJlciBvZiBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzIHRoYXQgYXJlIGFjdGl2ZSAocGxh
eWluZykuCisgICAgaW50IG1fYWN0aXZlU291cmNlQ291bnQ7CiB9OwogCiB9IC8vIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCmluZGV4IGMxZmY4YzZlN2Jk
MDljNjQzOGU3N2FjNjIzYzUxZWUyMTA3YzcyZjcuLmUxOGQzN2M4MmI4M2MzODEyMTNiZWYyMmY0
YjQwNzczNjAwMzljYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmlk
bApAQCAtNDQsNiArNDQsOSBAQCBtb2R1bGUgd2ViYXVkaW8gewogICAgICAgICAvLyBBbGwgcGFu
bmluZyBpcyByZWxhdGl2ZSB0byB0aGlzIGxpc3RlbmVyLgogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgQXVkaW9MaXN0ZW5lciBsaXN0ZW5lcjsKIAorICAgICAgICAvLyBOdW1iZXIgb2YgQXVk
aW9CdWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgcGxheWluZy4KKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYWN0aXZlU291cmNlQ291bnQ7CisgICAg
ICAgIAogICAgICAgICBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoaW4gdW5zaWduZWQgbG9uZyBu
dW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCBpbiBmbG9h
dCBzYW1wbGVSYXRlKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAg
IEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1ZmZlcihpbiBBcnJheUJ1ZmZlciBidWZmZXIsIGluIGJvb2xl
YW4gbWl4VG9Nb25vKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJlODkyMDU0MjBjZmMxYTU3ZGY1Njg0NDE2OGVmMzUwNzNk
NWNjYzYuLjdlYmYwMzJkNzE1N2IxNDQyZDBhYmU5YjAxMWUxM2NmZGJkOWE3NmUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxMi0wMi0yNyAgUmF5bW9uZCBUb3kgIDxydG95QGdvb2dsZS5jb20+
CisKKyAgICAgICAgQWRkIHBsYXliYWNrIHN0YXRlIGZvciBBdWRpb0J1ZmZlclNvdXJjZU5vZGUg
YW5kIGFkZCBudW1iZXIgb2YgYWN0aXZlIG5vZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTcwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJh
Y2tTdGF0ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvYnVm
ZmVyc291cmNlLXBsYXliYWNrU3RhdGUuaHRtbDogQWRkZWQuCisKIDIwMTItMDMtMTUgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IEdUSyBiYXNlbGluZXMgZm9yIG5ldyBmYXN0L2NzcyB0ZXN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1wbGF5YmFja1N0YXRl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWFlMzc2Y2YwN2Y1YzkwODE4ZGE3MDdmNGE4OGUw
ZmFjYmE0ZGJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9i
dWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMCBAQAor
VGVzdCBBdWRpb0NvbnRleHQgYWN0aXZlU291cmNlQ291bnQgYW5kIEF1ZGlvQnVmZmVyU291cmNl
Tm9kZSBwbGF5YmFja1N0YXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mg
UmVuZGVyaW5nIHRpbWUgaXMgMiBzZWNvbmRzLgorUEFTUyBVTlNDSEVEVUxFRF9TVEFURSBTb3Vy
Y2UgaGFzIGJlZW4gY3JlYXRlZAorUEFTUyBTQ0hFRFVMRURfU1RBVEUgICAzIHNlY29uZCBzb3Vy
Y2Ugc2NoZWR1bGVkIHRvIHN0YXJ0IGF0IHRpbWUgMworUEFTUyBQTEFZSU5HX1NUQVRFICAgICAy
IHNlY29uZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxCitQQVNTIEZJTklTSEVEX1NUQVRFICAg
IDEuMjUgc2Vjb25kIHNvdXJjZSBzdGFydGluZyBhdCB0aW1lIDAKK1BBU1MgU0NIRURVTEVEX1NU
QVRFICAgMSBzZWNvbmQgZ3JhaW4gc2NoZWR1bGVkIHRvIHN0YXJ0IGF0IHRpbWUgMworUEFTUyBQ
TEFZSU5HX1NUQVRFICAgICAyIHNlY29uZCBncmFpbiBzdGFydGluZyBhdCB0aW1lIDAuNQorUEFT
UyBGSU5JU0hFRF9TVEFURSAgICAxIHNlY29uZCBncmFpbiBzdGFydGluZyBhdCB0aW1lIDAuNQor
UEFTUyBTQ0hFRFVMRURfU1RBVEUgICBhIGxvb3BpbmcgMC41IHNlY29uZCBzb3VyY2Ugc2NoZWR1
bGVkIGF0IHRpbWUgMworUEFTUyBQTEFZSU5HX1NUQVRFICAgICBhIGxvb3BpbmcgMC41IHNlY29u
ZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAxLjI1CitQQVNTIDMgYXJlIGN1cnJlbnRseSBwbGF5
aW5nIGFzIGV4cGVjdGVkLgorUEFTUyBhY3RpdmVTb3VyY2VDb3VudCBhbmQgcGxheWJhY2tTdGF0
ZSB0ZXN0cyBzdWNjZWVkZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9idWZm
ZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9i
dWZmZXJzb3VyY2UtcGxheWJhY2tTdGF0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYmM3NDU3N2FlMzBl
MWE2MjczMWZiNzU0NmIxMjZjZDA2OGJkODAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9hdWRpb2J1ZmZlcnNvdXJjZS1wbGF5YmFja1N0YXRlLmh0bWwKQEAgLTAsMCAr
MSwxODEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRy
YW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
YXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQXVkaW9Db250ZXh0IGFjdGl2ZVNvdXJjZUNvdW50IGFu
ZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgcGxheWJhY2tTdGF0ZS4iKTsKKworLy8gQ3JlYXRlIGEg
ZmV3IHNvdXJjZXMgdGhhdCBzdGFydCBhbmQgZW5kIHBsYXlpbmcgYXQgdmFyaW91cyB0aW1lcy4g
IEFmdGVyIHJlbmRlcmluZywgY2hlY2sgdGhhdAorLy8gZWFjaCBzb3VyY2UgaXMgaW4gdGhlIGNv
cnJlY3Qgc3RhdGUgYW5kIHRoYXQgdGhlIG51bWJlciBvZiBhY3RpdmUgc291cmNlcyBpcyBjb3Jy
ZWN0LgorCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwOworCisvLyBSZW5kZXIgZm9yIHRoaXMgbG9u
Zy4KK3ZhciByZW5kZXJUaW1lID0gMjsKK3ZhciByZW5kZXJMZW5ndGggPSB0aW1lVG9TYW1wbGVG
cmFtZShyZW5kZXJUaW1lLCBzYW1wbGVSYXRlKTsKKwordmFyIGNvbnRleHQ7CisKKy8vIExpc3Qg
b2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyBzb3VyY2VzLgordmFyIHNvdXJjZXMgPSBbXTsKKwor
Ly8gTGlzdCBvZiBtZXNzYWdlcyB0aGF0IHdpbGwgYmUgcHJpbnRlZCBvdXQgb24gc3VjY2VzcyAo
b3IgZmFpbHVyZSkuICBNZXNzYWdlcyBhcmUgaW4gdGhlIHNhbWUKKy8vIG9yZGVyIGFzIHRoZSBz
b3VyY2VzIGxpc3QgYWJvdmUuCit2YXIgc291cmNlTWVzc2FnZXMgPSBbXTsKKworLy8gTGlzdCBv
ZiB0aGUgZXhwZWN0ZWQgcGxheWJhY2sgc3RhdGUgZm9yIGVhY2ggc291cmNlLiAgSW4gdGhlIHNh
bWUgb3JkZXIgYSBzb3VyY2VzIGxpc3QgYWJvdmUuCit2YXIgc291cmNlRXhwZWN0ZWRTdGF0ZXMg
PSBbXTsKKworLy8gQXJyYXkgbWFwcGluZyB0aGUgcGxheWJhY2sgc3RhdGUgdG8gYSBzdHJpbmcu
Cit2YXIgcGxheWJhY2tTdGF0ZU5hbWUgPSBbIlVOU0NIRURVTEVEX1NUQVRFICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIlNDSEVEVUxFRF9TVEFURSAgICIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIlBMQVlJTkdfU1RBVEUgICAgICIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IkZJTklTSEVEX1NUQVRFICAgICJdOworCitmdW5jdGlvbiBjaGVja1Jlc3VsdChldmVudCkKK3sK
KyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisKKyAgICAvLyBGb3IgZWFjaCBzb3VyY2UsIHZlcmlm
eSB0aGF0IHRoZSBwbGF5YmFjayBzdGF0ZSBtYXRjaGVzIG91ciBleHBlY3RlZCBwbGF5YmFjayBz
dGF0ZS4KKyAgICBmb3IgKHZhciBrID0gMDsgayA8IHNvdXJjZXMubGVuZ3RoOyArK2spIHsKKyAg
ICAgICAgdmFyIHByZWZpeCA9IHBsYXliYWNrU3RhdGVOYW1lW3NvdXJjZUV4cGVjdGVkU3RhdGVz
W2tdXSArIHNvdXJjZU1lc3NhZ2VzW2tdOworICAgICAgICBpZiAoc291cmNlc1trXS5wbGF5YmFj
a1N0YXRlID09IHNvdXJjZUV4cGVjdGVkU3RhdGVzW2tdKSB7CisgICAgICAgICAgICB0ZXN0UGFz
c2VkKHByZWZpeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKHBy
ZWZpeCArICI6IEFjdHVhbCA9ICIgKyBwbGF5YmFja1N0YXRlTmFtZVtzb3VyY2VzW2tdLnBsYXli
YWNrU3RhdGVdKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IG1hbnkgYWN0aXZlIHNvdXJjZXMgdGhlcmUgc2hv
dWxkIGJlIGZyb20gdGhlIGV4cGVjdGVkIHN0YXRlcy4KKyAgICB2YXIgcGxheWluZ1N0YXRlID0g
c291cmNlc1swXS5QTEFZSU5HX1NUQVRFCisKKyAgICB2YXIgZXhwZWN0ZWRBY3RpdmVDb3VudCA9
IDA7CisgICAgZm9yIChrID0gMDsgayA8IHNvdXJjZUV4cGVjdGVkU3RhdGVzLmxlbmd0aDsgKytr
KSB7CisgICAgICAgIGlmIChzb3VyY2VFeHBlY3RlZFN0YXRlc1trXSA9PSBwbGF5aW5nU3RhdGUp
IHsKKyAgICAgICAgICAgICsrZXhwZWN0ZWRBY3RpdmVDb3VudDsKKyAgICAgICAgfQorICAgIH0K
KyAgICAgIAorICAgIGlmIChjb250ZXh0LmFjdGl2ZVNvdXJjZUNvdW50ID09IGV4cGVjdGVkQWN0
aXZlQ291bnQpIHsKKyAgICAgICAgdGVzdFBhc3NlZChjb250ZXh0LmFjdGl2ZVNvdXJjZUNvdW50
ICsgIiBhcmUgY3VycmVudGx5IHBsYXlpbmcgYXMgZXhwZWN0ZWQuIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdGVzdEZhaWxlZChjb250ZXh0LmFjdGl2ZVNvdXJjZUNvdW50ICsgIiBhcmUgY3Vy
cmVudGx5IHBsYXlpbmcsIGJ1dCBleHBlY3RlZCAiICsgZXhwZWN0ZWRBY3RpdmVDb3VudCArICIu
Iik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc3VjY2Vzcykg
eworICAgICAgICB0ZXN0UGFzc2VkKCJhY3RpdmVTb3VyY2VDb3VudCBhbmQgcGxheWJhY2tTdGF0
ZSB0ZXN0cyBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgi
YWN0aXZlU291cmNlQ291bnQgYW5kIHBsYXliYWNrU3RhdGUgdGVzdHMgZGlkIG5vdCBzdWNjZWVk
LiIpOworICAgIH0KKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCisvLyBzb3VyY2VMZW5ndGgg
LSBsZW5ndGggb2Ygc291cmNlIGluIHNlY29uZHMKKy8vIG5vdGVGdW5jdGlvbiAtIGZ1bmN0aW9u
IHRvIHR1cm4gb24gc291cmNlIGFwcHJvcHJpYXRlbHkKKy8vIGV4cGVjdGVkU3RhdGUgLSBleHBl
Y3RlZCBzdGF0ZSBvZiB0aGUgc291cmNlIGF0IHRoZSBlbmQgb2YgcmVuZGVyaW5nCisvLyBtZXNz
YWdlIC0gbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaWYgdGVzdCBwYXNzZXMKK2Z1bmN0aW9uIGNy
ZWF0ZVRlc3Qoc291cmNlTGVuZ3RoLCBub3RlRnVuY3Rpb24sIGV4cGVjdGVkU3RhdGUsIG1lc3Nh
Z2UpCit7CisgICAgdmFyIHMgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIHMu
YnVmZmVyID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCB0aW1lVG9TYW1wbGVGcmFtZShz
b3VyY2VMZW5ndGgsIHNhbXBsZVJhdGUpKTsKKyAgICBzLmNvbm5lY3QoY29udGV4dC5kZXN0aW5h
dGlvbik7CisgICAgbm90ZUZ1bmN0aW9uKHMpOworICAgIHNvdXJjZXMucHVzaChzKTsKKyAgICBz
b3VyY2VNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpOworICAgIHNvdXJjZUV4cGVjdGVkU3RhdGVzLnB1
c2goZXhwZWN0ZWRTdGF0ZSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgfQorCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAg
Ly8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dCwgcmVuZGVyaW5nIGZvciByZW5kZXJUaW1l
IHNlY29uZHMuCisgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgdGltZVRv
U2FtcGxlRnJhbWUocmVuZGVyVGltZSwgc2FtcGxlUmF0ZSksIHNhbXBsZVJhdGUpOworCisgICAg
Ly8gVGhpcyBpcyBvbmx5IHVzZWQgc28gd2UgY2FuIGFjY2VzcyB0aGUgcGxheWJhY2sgc3RhdGUg
Y29uc3RhbnRzLgorICAgIHZhciBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNv
dXJjZSgpOworCisgICAgLy8gRHVtbXkgbWVzc2FnZSBzbyB3ZSBrbm93IGhvdyBsb25nIHdlJ3Jl
IHJlbmRlcmluZyBzbyB3ZSBjYW4gaW50ZXJwcmV0IHRoZSBwYXNzL2ZhaWwgbWVzc2FnZXMKKyAg
ICAvLyBjb3JyZWN0bHkuCisgICAgdGVzdFBhc3NlZCgiUmVuZGVyaW5nIHRpbWUgaXMgIiArIHJl
bmRlclRpbWUgKyAiIHNlY29uZHMuIik7CisKKyAgICAvLyBUZXN0IHVuc2NoZWR1bGVkIHN0YXRl
LiBDcmVhdGUgMyBzZWNvbmQgc291cmNlLCBidXQgZG9uJ3Qgc2NoZWR1bGUgaXQuCisKKyAgICBj
cmVhdGVUZXN0KDMsCisgICAgICAgICAgICAgICBmdW5jdGlvbihzKSB7IH0sCisgICAgICAgICAg
ICAgICBidWZmZXJTb3VyY2UuVU5TQ0hFRFVMRURfU1RBVEUsCisgICAgICAgICAgICAgICAiU291
cmNlIGhhcyBiZWVuIGNyZWF0ZWQiKTsKKworICAgIC8vIFRlc3Qgbm90ZU9uLgorCisgICAgY3Jl
YXRlVGVzdCgzLAorICAgICAgICAgICAgICAgZnVuY3Rpb24ocykgeyBzLm5vdGVPbihyZW5kZXJU
aW1lICsgMSk7IH0sCisgICAgICAgICAgICAgICBidWZmZXJTb3VyY2UuU0NIRURVTEVEX1NUQVRF
LAorICAgICAgICAgICAgICAgIjMgc2Vjb25kIHNvdXJjZSBzY2hlZHVsZWQgdG8gc3RhcnQgYXQg
dGltZSAiICsgKHJlbmRlclRpbWUgKyAxKSk7CisKKyAgICBjcmVhdGVUZXN0KDIsCisgICAgICAg
ICAgICAgICBmdW5jdGlvbihzKSB7IHMubm90ZU9uKDEpOyB9LAorICAgICAgICAgICAgICAgYnVm
ZmVyU291cmNlLlBMQVlJTkdfU1RBVEUsCisgICAgICAgICAgICAgICAiMiBzZWNvbmQgc291cmNl
IHN0YXJ0aW5nIGF0IHRpbWUgMSIpOworICAgICAgCisgICAgY3JlYXRlVGVzdCgxLjI1LAorICAg
ICAgICAgICAgICAgZnVuY3Rpb24ocykgeyBzLm5vdGVPbigwKTsgfSwKKyAgICAgICAgICAgICAg
IGJ1ZmZlclNvdXJjZS5GSU5JU0hFRF9TVEFURSwKKyAgICAgICAgICAgICAgICIxLjI1IHNlY29u
ZCBzb3VyY2Ugc3RhcnRpbmcgYXQgdGltZSAwIik7CisKKyAgICAvLyBUZXN0IG5vdGVHcmFpbk9u
LgorCisgICAgY3JlYXRlVGVzdCgzLAorICAgICAgICAgICAgICAgZnVuY3Rpb24ocykgeyBzLm5v
dGVHcmFpbk9uKHJlbmRlclRpbWUgKyAxLCAwLCAxKTsgfSwKKyAgICAgICAgICAgICAgIGJ1ZmZl
clNvdXJjZS5TQ0hFRFVMRURfU1RBVEUsCisgICAgICAgICAgICAgICAiMSBzZWNvbmQgZ3JhaW4g
c2NoZWR1bGVkIHRvIHN0YXJ0IGF0IHRpbWUgIiArIChyZW5kZXJUaW1lICsgMSkpOworICAKKyAg
ICBjcmVhdGVUZXN0KDMsCisgICAgICAgICAgICAgICBmdW5jdGlvbihzKSB7IHMubm90ZUdyYWlu
T24oMC41LCAwLCAyKTsgfSwKKyAgICAgICAgICAgICAgIGJ1ZmZlclNvdXJjZS5QTEFZSU5HX1NU
QVRFLAorICAgICAgICAgICAgICAgIjIgc2Vjb25kIGdyYWluIHN0YXJ0aW5nIGF0IHRpbWUgMC41
Iik7CisgICAgICAKKyAgICBjcmVhdGVUZXN0KDMsCisgICAgICAgICAgICAgICBmdW5jdGlvbihz
KSB7IHMubm90ZUdyYWluT24oMC41LCAwLCAxKTsgfSwKKyAgICAgICAgICAgICAgIGJ1ZmZlclNv
dXJjZS5GSU5JU0hFRF9TVEFURSwKKyAgICAgICAgICAgICAgICIxIHNlY29uZCBncmFpbiBzdGFy
dGluZyBhdCB0aW1lIDAuNSIpOworCisgICAgLy8gVGVzdCBsb29waW5nIHNvdXJjZQorCisgICAg
Y3JlYXRlVGVzdCgwLjUsCisgICAgICAgICAgICAgICBmdW5jdGlvbihzKSB7IHMubG9vcCA9IHRy
dWU7IHMubm90ZU9uKHJlbmRlclRpbWUgKyAxKTsgfSwKKyAgICAgICAgICAgICAgIGJ1ZmZlclNv
dXJjZS5TQ0hFRFVMRURfU1RBVEUsCisgICAgICAgICAgICAgICAiYSBsb29waW5nIDAuNSBzZWNv
bmQgc291cmNlIHNjaGVkdWxlZCBhdCB0aW1lICIgKyAocmVuZGVyVGltZSArIDEpKTsKKworICAg
IGNyZWF0ZVRlc3QoMC41LAorICAgICAgICAgICAgICAgZnVuY3Rpb24ocykgeyBzLmxvb3AgPSB0
cnVlOyBzLm5vdGVPbigxLjI1KTsgfSwKKyAgICAgICAgICAgICAgIGJ1ZmZlclNvdXJjZS5QTEFZ
SU5HX1NUQVRFLAorICAgICAgICAgICAgICAgImEgbG9vcGluZyAwLjUgc2Vjb25kIHNvdXJjZSBz
dGFydGluZyBhdCB0aW1lIDEuMjUiKTsKKworICAgIGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNr
UmVzdWx0OworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKyAgICAgIAorcnVuVGVz
dCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgCis8L3NjcmlwdD4KKworPHNjcmlw
dCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>