<?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>43673</bug_id>
          
          <creation_ts>2010-08-07 08:54:36 -0700</creation_ts>
          <short_desc>The preload attribute of the video tag is not completely implemented</short_desc>
          <delta_ts>2011-06-03 14:11:40 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59958</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Thomas Kupka">kupka</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>ademar</cc>
    
    <cc>ap</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>mathias</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261727</commentid>
    <comment_count>0</comment_count>
    <who name="Thomas Kupka">kupka</who>
    <bug_when>2010-08-07 08:54:36 -0700</bug_when>
    <thetext>The preload attribute of the video tag works according to the standard for the values &quot;none&quot; and &quot;auto&quot;. Unfortunately the value &quot;metadata&quot; doesn&apos;t work as expected because the whole video is loaded instead of loading only enough data to show a frame and to determine duration.

See
http://www.w3.org/TR/html5/video.html#attr-media-preload
and
http://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261937</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-08 15:09:54 -0700</bug_when>
    <thetext>This is currently blocked on QuickTime, which doesn&apos;t have API to only load a portion of a movie.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261938</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-08 15:10:18 -0700</bug_when>
    <thetext>rdar://7508322</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395051</commentid>
    <comment_count>3</comment_count>
      <attachid>91624</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-28 20:07:44 -0700</bug_when>
    <thetext>Created attachment 91624
Obsolete patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395052</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-28 20:10:53 -0700</bug_when>
    <thetext>Attachment 91624 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:246:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:616:  Missing space before {  [whitespace/braces] [5]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395263</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-29 07:54:56 -0700</bug_when>
    <thetext>Splitting patch into three parts: the manual test, the changes when using AVFoundation, and the changes when using QTKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395266</commentid>
    <comment_count>6</comment_count>
      <attachid>91681</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-29 07:56:03 -0700</bug_when>
    <thetext>Created attachment 91681
Manual test for &apos;preload&apos; attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395267</commentid>
    <comment_count>7</comment_count>
      <attachid>91682</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-29 07:57:59 -0700</bug_when>
    <thetext>Created attachment 91682
Patch for QTKit based media engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395268</commentid>
    <comment_count>8</comment_count>
      <attachid>91683</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-29 07:58:47 -0700</bug_when>
    <thetext>Created attachment 91683
Patch for AVFoundation based media engine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395481</commentid>
    <comment_count>9</comment_count>
      <attachid>91683</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-04-29 13:53:20 -0700</bug_when>
    <thetext>Comment on attachment 91683
Patch for AVFoundation based media engine

The code here seems fine, and what I understand seems fine, but I think a domain expert should take a look - let&apos;s get an unofficial review from Jer on-up-in-here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395491</commentid>
    <comment_count>10</comment_count>
      <attachid>91683</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 14:06:01 -0700</bug_when>
    <thetext>Comment on attachment 91683
Patch for AVFoundation based media engine

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

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:-113
&gt; -    virtual bool videoLayerIsReadyToDisplay() const;

Looks like there&apos;s still a reference to videoLayerIsReadyToDisplay in MediaPlayerPrivateAVFoundation::hasAvailableVideoFrame().

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:342
&gt; -    if (buffered()-&gt;contain(duration()))
&gt; +    if ([m_avPlayerItem.get() isPlaybackBufferFull])

I was under the impression that looking through the buffered ranges is recommended (as opposed to calling isPlaybackBufferEmpty.  But if you&apos;re changing this for performance reasons, you should probably also change:

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:344
&gt;          return MediaPlayerPrivateAVFoundation::MediaPlayerAVPlayerItemStatusPlaybackBufferFull;
&gt;      if (buffered()-&gt;contain(currentTime()))

...this to [m_avPlayerItem.get() isPlaybackBufferEmpty].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395493</commentid>
    <comment_count>11</comment_count>
      <attachid>91683</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 14:07:29 -0700</bug_when>
    <thetext>Comment on attachment 91683
Patch for AVFoundation based media engine

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:-113

&gt; 
&gt; Looks like there&apos;s still a reference to videoLayerIsReadyToDisplay in MediaPlayerPrivateAVFoundation::hasAvailableVideoFrame().

Ah, nevermind, I see that this in in the ObjC subclass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395510</commentid>
    <comment_count>12</comment_count>
      <attachid>91683</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 14:17:48 -0700</bug_when>
    <thetext>Comment on attachment 91683
Patch for AVFoundation based media engine

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

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:282
&gt; -    if (m_cachedDuration == invalidTime) {
&gt; -        m_cachedDuration = platformDuration();
&gt; +    float duration = platformDuration();
&gt; +    if (!duration) {
&gt; +        m_cachedDuration = duration;

Could we perhaps return &quot;invalidTime&quot; instead of 0 from platformDuration()?  I realize it&apos;s unlikely for 0 to be a valid duration for a piece of media, but invalidTime would be even less valid. :)

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:240
&gt; -    return (m_videoLayer &amp;&amp; [m_videoLayer.get() isReadyForDisplay]);
&gt; +    return (m_videoFrameHasDrawn || m_videoLayer &amp;&amp; [m_videoLayer.get() isReadyForDisplay]);

I&apos;m not entirely certain about the order of precedence here.  Boolean operators are probably LTR, but perhaps some parens for explicitness sake?  (Relevant: googling &quot;order of precedence&quot; leads not to C or C++ documentation, but rather rules of succession for Wales and England.)

That&apos;s all I&apos;ve got.  The rest looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395513</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-29 14:25:09 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 91683 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91683&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:342
&gt; &gt; -    if (buffered()-&gt;contain(duration()))
&gt; &gt; +    if ([m_avPlayerItem.get() isPlaybackBufferFull])
&gt; 
&gt; I was under the impression that looking through the buffered ranges is recommended (as opposed to calling isPlaybackBufferEmpty.  But if you&apos;re changing this for performance reasons, you should probably also change:
&gt; 

&quot;buffered()-&gt;contain(duration())&quot; and &quot;[m_avPlayerItem.get() isPlaybackBufferFull]&quot; don&apos;t tell us the same thing - the former only tells us that we have a buffer with the sample at time==duration, while the later says that AVFoundation&apos;s internal buffers are full and it has stopped buffering. We need to know when it stops buffering so we can post the &apos;suspend&apos; event.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:344
&gt; &gt;          return MediaPlayerPrivateAVFoundation::MediaPlayerAVPlayerItemStatusPlaybackBufferFull;
&gt; &gt;      if (buffered()-&gt;contain(currentTime()))
&gt; 
&gt; ...this to [m_avPlayerItem.get() isPlaybackBufferEmpty].

Good point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395520</commentid>
    <comment_count>14</comment_count>
      <attachid>91683</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-04-29 14:35:18 -0700</bug_when>
    <thetext>Comment on attachment 91683
Patch for AVFoundation based media engine

Seems fine addressing Jer&apos;s feedback as needed.  *please* add those parenthesis for clarity in the 3-parter if clause.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396400</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-05-02 09:02:35 -0700</bug_when>
    <thetext>Manual test: http://trac.webkit.org/changeset/85476</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396402</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-05-02 09:09:03 -0700</bug_when>
    <thetext>QTKit engine changes: http://trac.webkit.org/changeset/85478</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396446</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-05-02 10:22:37 -0700</bug_when>
    <thetext>AVFoundation engine changes: http://trac.webkit.org/changeset/85483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397380</commentid>
    <comment_count>18</comment_count>
      <attachid>91683</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-05-03 14:14:56 -0700</bug_when>
    <thetext>Comment on attachment 91683
Patch for AVFoundation based media engine

http://trac.webkit.org/changeset/85483 was rolled out in bug 59958 because it caused Lion layout test regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397383</commentid>
    <comment_count>19</comment_count>
      <attachid>92129</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-05-03 14:16:43 -0700</bug_when>
    <thetext>Created attachment 92129
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397553</commentid>
    <comment_count>20</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-05-03 17:09:44 -0700</bug_when>
    <thetext>Re-opening this bug since one patch associated with this bug was rolled out as per comment 18.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398723</commentid>
    <comment_count>21</comment_count>
      <attachid>92129</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-05 08:22:40 -0700</bug_when>
    <thetext>Comment on attachment 92129
Updated patch

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

It might have been possible to break this patch up into slightly smaller pieces, though I&apos;m sure you tried to break it up already.

Why does only MediaPlayerPrivateAVFoundation need all this work, and not other MediaPlayerPrivate implementations?

&gt; Source/WebCore/ChangeLog:9
&gt; +2011-05-02  Eric Carlson  &lt;eric.carlson@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        The preload attribute of the video tag is not completely implemented
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43673
&gt; +        &lt;rdar://problem/7508322&gt;
&gt; +
&gt; +        Tested manually with manual-tests/media-elements/video-preload.html.

It would be nice if this explained a little more what parts of &quot;preload&quot; aren&apos;t implemented, and what parts this patch implements.

&gt; Source/WebCore/ChangeLog:15
&gt; +        (WebCore::HTMLMediaElement::seek): Call prepareToPlay when preload is less than &apos;metadata&apos;

Do you mean &quot;less than &apos;auto&apos;&quot;?

&gt; Source/WebCore/manual-tests/media-elements/video-preload.html:100
&gt; -        function setURL(url, vidID)
&gt; +        function setURL(url)
&gt;          {
&gt; -            var vid = document.getElementById(vidID);
&gt; +            var vid = document.getElementById(&quot;vid&quot;);

None of the changes in this file are mentioned in your ChangeLog.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:245
&gt; +    LOG(Media, &quot;MediaPlayerPrivateAVFMac::duration(%p) - caching %f&quot;, this, m_cachedDuration);

Not sure what the &quot;Mac&quot; is about here.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:395
&gt; -        AVAssetStatus avAssetStatus = assetStatus();
&gt; +        AssetStatus avAssetStatus = assetStatus();

Maybe this should just be called assetStatus now? (You can use this-&gt;assetStatus() on the right-hand side.)

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:437
&gt;                  case MediaPlayerAVPlayerItemStatusPlaybackBufferFull:
&gt; +                    m_networkState = MediaPlayer::Idle;
&gt; +
&gt; +                case MediaPlayerAVPlayerItemStatusReadyToPlay:

Did you intentionally leave out a &quot;break&quot; here?

Maybe it would be clearer to put the m_networkState logic after the switch. That way the switch can be all about m_readyState, and the code just after the switch (which is already dealing with m_networkState) can be solely in charge of m_networkState.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:461
&gt; +        if (m_readyState &lt; MediaPlayer::HaveCurrentData)
&gt; +            m_readyState = MediaPlayer::HaveCurrentData;

You could use max() here, but I&apos;m not sure if it would be clearer.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:619
&gt; +            // AVFoundation can&apos;t open arbitrary data pointers, so if this ApplicationCacheResource doesn&apos;t 
&gt; +            // have a valid local path, just open the resource&apos;s original URL.
&gt; +            if (resource-&gt;path().isEmpty())
&gt; +                createAVAssetForURL(resource-&gt;url());
&gt; +            else
&gt; +                createAVAssetForCacheResource(resource);

That sounds like a deficiency of AVFoundation. Maybe we should file a bug and reference it here with a FIXME?

I think it was clearer when this logic was inside createAVAssetForCacheResource. Why move it here?

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:269
&gt; +    ASSERT(!resource-&gt;path().isEmpty());

This could be ASSERT_ARG.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:295
&gt; +    const double veryLongInterval = 60*60*60*24*30;

1800 days? I think this would be a little clearer if written like this: 60 * 60 * 24 * 1800

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:315
&gt; +    // Create the player item so we can media data. 

Typo: so we can media data

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:318
&gt; +    [[NSNotificationCenter defaultCenter] addObserver:m_objcObserver.get()selector:@selector(didEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:m_avPlayerItem.get()];

Missing a space before &quot;selector:&quot;.

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:419
&gt; +    // Check the avitem if we have one, some assets never report duration.

Maybe &quot;AVItem&quot;?

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:432
&gt; +    LOG(Media, &quot;MediaPlayerPrivateAVFoundationObjC::duration(%p) - invalid duration, returning -1&quot;, this);
&gt; +    return invalidTime();

Maybe you should use invalidTime() in the LOG, too, so they can&apos;t get out of sync if we change the definition of invalidTime().

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:722
&gt; +        for (AVPlayerItemTrack *track in tracks) {
&gt; +            if ([track isEnabled]) {
&gt; +                AVAssetTrack *assetTrack = [track assetTrack];
&gt; +                if ([[assetTrack mediaType] isEqualToString:AVMediaTypeVideo])
&gt; +                    hasVideo = true;
&gt; +                else if ([[assetTrack mediaType] isEqualToString:AVMediaTypeAudio])
&gt; +                    hasAudio = true;
&gt; +                else if ([[assetTrack mediaType] isEqualToString:AVMediaTypeClosedCaption])
&gt; +                    hasCaptions = true;
&gt; +            }
&gt;          }

We could break out of this loop early once hasVideo &amp;&amp; hasAudio &amp;&amp; hasCaptions is true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398768</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-05-05 09:15:04 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 92129 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92129&amp;action=review
&gt; 
&gt; It might have been possible to break this patch up into slightly smaller pieces, though I&apos;m sure you tried to break it up already.
&gt; 
&gt; Why does only MediaPlayerPrivateAVFoundation need all this work, and not other MediaPlayerPrivate implementations?
&gt; 
  QTKit is a *much* higher level API, which makes it much simpler to use in some ways but *much* harder to control in other ways. AVFoundation allows us much more control over how playback works, but a consequence is that we have to do more work ;-)


&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +2011-05-02  Eric Carlson  &lt;eric.carlson@apple.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        The preload attribute of the video tag is not completely implemented
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=43673
&gt; &gt; +        &lt;rdar://problem/7508322&gt;
&gt; &gt; +
&gt; &gt; +        Tested manually with manual-tests/media-elements/video-preload.html.
&gt; 
&gt; It would be nice if this explained a little more what parts of &quot;preload&quot; aren&apos;t implemented, and what parts this patch implements.
&gt; 
  Good point.

&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        (WebCore::HTMLMediaElement::seek): Call prepareToPlay when preload is less than &apos;metadata&apos;
&gt; 
&gt; Do you mean &quot;less than &apos;auto&apos;&quot;?
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/manual-tests/media-elements/video-preload.html:100
&gt; &gt; -        function setURL(url, vidID)
&gt; &gt; +        function setURL(url)
&gt; &gt;          {
&gt; &gt; -            var vid = document.getElementById(vidID);
&gt; &gt; +            var vid = document.getElementById(&quot;vid&quot;);
&gt; 
&gt; None of the changes in this file are mentioned in your ChangeLog.
&gt; 
  Oops, fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:245
&gt; &gt; +    LOG(Media, &quot;MediaPlayerPrivateAVFMac::duration(%p) - caching %f&quot;, this, m_cachedDuration);
&gt; 
&gt; Not sure what the &quot;Mac&quot; is about here.
&gt; 
  That was the original class name, somehow the log string was never updated and nobody ever noticed. Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:395
&gt; &gt; -        AVAssetStatus avAssetStatus = assetStatus();
&gt; &gt; +        AssetStatus avAssetStatus = assetStatus();
&gt; 
&gt; Maybe this should just be called assetStatus now? (You can use this-&gt;assetStatus() on the right-hand side.)
&gt; 
  Good idea, fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:437
&gt; &gt;                  case MediaPlayerAVPlayerItemStatusPlaybackBufferFull:
&gt; &gt; +                    m_networkState = MediaPlayer::Idle;
&gt; &gt; +
&gt; &gt; +                case MediaPlayerAVPlayerItemStatusReadyToPlay:
&gt; 
&gt; Did you intentionally leave out a &quot;break&quot; here?
&gt; 
&gt; Maybe it would be clearer to put the m_networkState logic after the switch. That way the switch can be all about m_readyState, and the code just after the switch (which is already dealing with m_networkState) can be solely in charge of m_networkState.
&gt; 
  Good suggestion, changed.
  
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:295
&gt; &gt; +    const double veryLongInterval = 60*60*60*24*30;
&gt; 
&gt; 1800 days? I think this would be a little clearer if written like this: 60 * 60 * 24 * 1800
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:315
&gt; &gt; +    // Create the player item so we can media data. 
&gt; 
&gt; Typo: so we can media data
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:318
&gt; &gt; +    [[NSNotificationCenter defaultCenter] addObserver:m_objcObserver.get()selector:@selector(didEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:m_avPlayerItem.get()];
&gt; 
&gt; Missing a space before &quot;selector:&quot;.
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:419
&gt; &gt; +    // Check the avitem if we have one, some assets never report duration.
&gt; 
&gt; Maybe &quot;AVItem&quot;?
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:432
&gt; &gt; +    LOG(Media, &quot;MediaPlayerPrivateAVFoundationObjC::duration(%p) - invalid duration, returning -1&quot;, this);
&gt; &gt; +    return invalidTime();
&gt; 
&gt; Maybe you should use invalidTime() in the LOG, too, so they can&apos;t get out of sync if we change the definition of invalidTime().
&gt; 
  Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:722
&gt; &gt; +        for (AVPlayerItemTrack *track in tracks) {
&gt; &gt; +            if ([track isEnabled]) {
&gt; &gt; +                AVAssetTrack *assetTrack = [track assetTrack];
&gt; &gt; +                if ([[assetTrack mediaType] isEqualToString:AVMediaTypeVideo])
&gt; &gt; +                    hasVideo = true;
&gt; &gt; +                else if ([[assetTrack mediaType] isEqualToString:AVMediaTypeAudio])
&gt; &gt; +                    hasAudio = true;
&gt; &gt; +                else if ([[assetTrack mediaType] isEqualToString:AVMediaTypeClosedCaption])
&gt; &gt; +                    hasCaptions = true;
&gt; &gt; +            }
&gt; &gt;          }
&gt; 
&gt; We could break out of this loop early once hasVideo &amp;&amp; hasAudio &amp;&amp; hasCaptions is true.

We could, but we are very unlikely to see movies with more than 2 or 3 tracks so I think it would just add overhead to the loop.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398853</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-05-05 11:19:46 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/85865</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415191</commentid>
    <comment_count>24</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-06-03 14:11:40 -0700</bug_when>
    <thetext>Revision r85865 cherry-picked into qtwebkit-2.2 with commit df47be2 &lt;http://gitorious.org/webkit/qtwebkit/commit/df47be2&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>91624</attachid>
            <date>2011-04-28 20:07:44 -0700</date>
            <delta_ts>2011-04-29 07:57:24 -0700</delta_ts>
            <desc>Obsolete patch</desc>
            <filename>patch_7.txt</filename>
            <type>text/plain</type>
            <size>49628</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MjU1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMDQtMjggIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZWxvYWQgYXR0cmlidXRlIG9mIHRoZSB2aWRl
byB0YWcgaXMgbm90IGNvbXBsZXRlbHkgaW1wbGVtZW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjczCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83NTA4MzIyPgorCisgICAgICAgIE1hbnVhbCB0ZXN0IG1hbnVhbC10ZXN0cy9tZWRpYS1lbGVt
ZW50cy92aWRlby1wcmVsb2FkLmh0bWwgYWRkZWQuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1l
ZGlhRWxlbWVudCk6IEluaXRpYWxpemUgbV9oYXZlUHJlcGFyZWRUb1BsYXkuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZVRvUGxheSk6IE5ldywgdGVsbCBw
bGF5ZXIgdG8gcHJlcGFyZSB0byBwbGF5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6c2Vlayk6IENhbGwgcHJlcGFyZVRvUGxheSB3aGVuIHByZWxvYWQgaXMgbGVzcyB0aGFu
ICdtZXRhZGF0YScKKyAgICAgICAgICAgIGJlY2F1c2Ugd2UgbmVlZCB0byBoYXZlIG1lZGlhIGRh
dGEgbG9hZGVkIHRvIHNlZWsuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1
cGRhdGVQbGF5U3RhdGUpOiBDYWxsIHByZXBhcmVUb1BsYXkuCisgICAgICAgICogaHRtbC9IVE1M
TWVkaWFFbGVtZW50Lmg6CisKKyAgICAgICAgKiBtYW51YWwtdGVzdHMvbWVkaWEtZWxlbWVudHMv
dmlkZW8tcHJlbG9hZC5odG1sOiBBZGRlZC4gTmV3IG1hbnVhbCB0ZXN0IGJlY2F1c2UgaXQgaXMg
bm90CisgICAgICAgICAgICBwb3NzaWJsZSB0byBkZXRlY3QgaWYgYSBtZWRpYSBlbmdpbmUgc3Vw
cG9ydHMgcHJlbG9hZD1tZXRhZGF0YSBpbiBhIHdheSB0aGF0IGxldHMgdXMKKyAgICAgICAgICAg
IGhhdmUgcGVyLXBsYXRmb3JtIGxheW91dCB0ZXN0IHJlc3VsdHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKTogIFJlbW92ZSAKKyAgICAgICAgICAgIG1f
dmlkZW9GcmFtZUhhc0RyYXduIGFuZCBtX2RlbGF5aW5nTG9hZCBhcyB0aGV5IGFyZSBubyBsb25n
ZXIgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6cmVzdW1lTG9hZCk6IFJlbW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OmxvYWQpOiBEb24ndCBpbml0aWFsaXplIG1fdmlkZW9GcmFtZUhh
c0RyYXduLiAKKyAgICAgICAgICAgIE1vdmUgYWxsIHByZWxvYWQgbG9naWMgdG8gc2V0UHJlbG9h
ZCwgY2FsbCBpdCBmcm9tIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnByZXBhcmVUb1BsYXkpOiBNb3ZlIGFsbCBwcmVsb2FkIGxvZ2ljIHRv
IAorICAgICAgICAgICAgc2V0UHJlbG9hZCwgY2FsbCBpdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6ZHVyYXRpb24pOiBEb24ndCBjYWNoZSBkdXJh
dGlvbiA9IDAsIGl0IGlzCisgICAgICAgICAgICB1bmxpa2VseSB0byBiZSBjb3JyZWN0IGFuZCBp
c24ndCB3b3J0aCBjYWNoaW5nLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjp1cGRhdGVTdGF0ZXMpOiBVcGRhdGUgZm9yIG5hbWUgY2hhbmdlIEFWQXNz
ZXRTdGF0dXMKKyAgICAgICAgICAgIHRvIEFzc2V0U3RhdHVzLiBDcmVhdGUgdGhlIEFWUGxheWVy
IG9uY2Ugd2Uga25vdyBhbiBhc3NldCBpcyBwbGF5YWJsZSBidXQgcHJlbG9hZCBpcworICAgICAg
ICAgICAgJ21ldGFkYXRhJy4gU2V0IG5ldHdvcmtTdGF0ZSB0byAnaWRsZScgd2hlbiB0aGUgcGxh
eWJhY2sgYnVmZmVyIGlzIGZ1bGwgYmVjYXVzZSB0aGF0IGlzCisgICAgICAgICAgICBhIHNpZ25h
bCB0aGF0IEFWRm91bmRhdGlvbiB3b24ndCBkbyBhbnkgbW9yZSBJTy4gU2V0IHJlYWR5U3RhdGUg
dG8gJ0hBVkVfQ1VSUkVOVF9EQVRBJyAKKyAgICAgICAgICAgIHdoZW4gdGhlIGZpcnN0IGZyYW1l
IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6bWV0YWRhdGFMb2FkZWQpOiBDYWxsIHRyYWNrc0NoYW5nZWQgc28gd2UgY2FjaGUK
KyAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGhhc1ZpZGVvLCBldGMuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnJlcGFpbnQpOiBEb24ndCBzZXQg
bV92aWRlb0ZyYW1lSGFzRHJhd24sIGl0IGlzIGRvbmUKKyAgICAgICAgICAgIGluIGRlcml2ZWQg
Y2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6c2V0UHJlbG9hZCk6IENlbnRyYWxpemUgYWxsIGxvZ2ljIGFib3V0IHdoZW4gdG8gY3JlYXRl
CisgICAgICAgICAgICBBVkFzc2V0IGFuZCBBVlBsYXllckl0ZW0gaGVyZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyk6IEluaXRpYWxpemUKKyAgICAgICAgICAg
IG1fdmlkZW9GcmFtZUhhc0RyYXduLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6IE5ldywgcmVuYW1l
ZCBmcm9tCisgICAgICAgICAgICB2aWRlb0xheWVySXNSZWFkeVRvRGlzcGxheS4gUmV0dXJuIHRy
dWUgaWYgd2UgaGF2ZSBhIGxheWVyIHdpdGggZnJhbWVzIGF2YWlsYWJsZSBvcgorICAgICAgICAg
ICAgaWYgd2UgaGF2ZSBwYWludGVkIGEgZnJhbWUgdG8gdGhlIGNvbnRleHQuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0
Rm9yVVJMKTogTmV3LCBjcmVhdGUgdGhlIEFWQXNzZXQKKyAgICAgICAgICAgIGlmIG5lY2Vzc2Fy
eS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNyZWF0ZUFWQXNzZXRGb3JDYWNoZVJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllcik6IFJl
c3RydWN0dXJlIGxvZ2ljLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKTogTmV3LCBjcmVhdGUgQVZQbGF5ZXJJ
dGVtLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6YmVnaW5Mb2FkaW5nTWV0YWRhdGEpOiBDb3JyZWN0IGxvZ2dpbmcuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF5ZXJJdGVtU3RhdHVz
KTogUmV0dXJuICJidWZmZXIgZnVsbCIgd2hlbgorICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBm
dWxsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6cGxhdGZvcm1EdXJhdGlvbik6IEdldCB0aGUgZHVyYXRpb24gZnJvbSB0aGUKKyAgICAgICAg
ICAgIEFWQXNzZXQgd2hlbiB3ZSBoYXZlbid0IGFsbG9jYXRlZCB0aGUgQVZQbGF5ZXJJdGVtIHll
dCBzbyB0aGF0IHdlIGNhbiByZXR1cm4gZHVyYXRpb24KKyAgICAgICAgICAgIHdoZW4gd2Ugb25s
eSBoYXZlIG1ldGFkYXRhLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6YXNzZXRTdGF0dXMpOiBVcGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnQp
OiBTZXQgbV92aWRlb0ZyYW1lSGFzRHJhd24uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0cmFja3NDaGFuZ2VkKTogR2V0IGF0dHJpYnV0ZXMg
ZnJvbSBBVkFzc2V0CisgICAgICAgICAgICB3aGVuIHdoZW4gd2UgaGF2ZW4ndCBhbGxvY2F0ZWQg
dGhlIEFWUGxheWVySXRlbSB5ZXQgc28gdGhhdCB3ZSBjYW4gcmVwb3J0IGF0dHJpYnV0ZXMKKyAg
ICAgICAgICAgIHdoZW4gd2Ugb25seSBoYXZlIG1ldGFkYXRhLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2l6ZUNoYW5nZWQpOiBHdWFyZCBh
Z2FpbnN0IGJlaW5nIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgICAgIHdlIGhhdmUgYWxsb2NhdGVk
IHRoZSBBVlBsYXllckl0ZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6Y29tbW9uTW92aWVBdHRyaWJ1dGVzKTogQWRkIG5ldyAibGltaXQgcmVh
ZC1haGVhZCIKKyAgICAgICAgICAgIGF0dHJpYnV0ZSB3aGVuIHByZWxvYWQgaXMgbm90ICJhdXRv
Ii4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZXN1bWVMb2Fk
KTogUmVtb3ZlIG1fZGVsYXlpbmdMb2FkLCB3ZSBkb24ndCBuZWVkIGl0LgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWQpOiBDb3JyZWN0IGNvbW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cHJlcGFyZVRvUGxheSk6
IENhbGwgc2V0UHJlbG9hZCgnYXV0bycpLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6OnNldFByZWxvYWQpOiBTZXQgbmV3IGF0dHJpYnVlIGlmIHdlIGFscmVhZHkg
aGF2ZQorICAgICAgICAgICAgYSBRVE1vdmllLgorCiAyMDExLTA0LTI4ICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByODUyMzMgYW5kIHI4NTIzNS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gODUwNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDcgQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdAogICAgICwgbV9kaXNwYXRj
aGluZ0NhblBsYXlFdmVudChmYWxzZSkKICAgICAsIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1
cmUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRlbHlMb2FkZWQoZmFsc2UpCisgICAgLCBtX2hhdmVQ
cmVwYXJlZFRvUGxheShmYWxzZSkKIHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50
OjpIVE1MTWVkaWFFbGVtZW50Iik7CiAgICAgZG9jdW1lbnQtPnJlZ2lzdGVyRm9yRG9jdW1lbnRB
Y3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwpAQCAtNTE2LDYgKzUxNyw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQoKQogICAgIG1fc2VudFN0YWxsZWRFdmVudCA9IGZh
bHNlOwogICAgIG1faGF2ZUZpcmVkTG9hZGVkRGF0YSA9IGZhbHNlOwogICAgIG1fY29tcGxldGVs
eUxvYWRlZCA9IGZhbHNlOworICAgIG1faGF2ZVByZXBhcmVkVG9QbGF5ID0gZmFsc2U7CiAgICAg
bV9kaXNwbGF5TW9kZSA9IFVua25vd247CiAKICAgICAvLyAxIC0gQWJvcnQgYW55IGFscmVhZHkt
cnVubmluZyBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobSBmb3Ig
dGhpcyBlbGVtZW50LgpAQCAtMTA4Miw3ICsxMDg0LDE1IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6c3VwcG9ydHNTYXZlKCkgY28KIHsKICAgICByZXR1cm4gbV9wbGF5ZXIgPyBtX3BsYXllci0+
c3VwcG9ydHNTYXZlKCkgOiBmYWxzZTsKIH0KLSAgICAKKwordm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpwcmVwYXJlVG9QbGF5KCkKK3sKKyAgICBpZiAobV9oYXZlUHJlcGFyZWRUb1BsYXkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2hhdmVQcmVwYXJlZFRvUGxheSA9IHRydWU7CisgICAgbV9wbGF5
ZXItPnByZXBhcmVUb1BsYXkoKTsKK30KKwogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWVrKGZs
b2F0IHRpbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRp
YUVsZW1lbnQ6OnNlZWsoJWYpIiwgdGltZSk7CkBAIC0xMDk1LDYgKzExMDUsMTAgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpzZWVrKGZsb2F0IHRpbWUsIAogICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgLy8gSWYgdGhlIG1lZGlhIGVuZ2luZSBoYXMgYmVlbiB0b2xkIHRvIHBvc3Rwb25l
IGxvYWRpbmcgZGF0YSwgbGV0IGl0IGdvIGFoZWFkIG5vdy4KKyAgICBpZiAobV9wcmVsb2FkIDwg
TWVkaWFQbGF5ZXI6OkF1dG8gJiYgbV9yZWFkeVN0YXRlIDwgSEFWRV9GVVRVUkVfREFUQSkKKyAg
ICAgICAgcHJlcGFyZVRvUGxheSgpOworCiAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUgYmVm
b3JlIHNldHRpbmcgbV9zZWVraW5nLCBtX2xhc3RTZWVrVGltZSBpcyByZXR1cm5lZCBvbmNlIGl0
IGlzIHNldC4KICAgICByZWZyZXNoQ2FjaGVkVGltZSgpOwogICAgIGZsb2F0IG5vdyA9IGN1cnJl
bnRUaW1lKCk7CkBAIC0yMTk2LDcgKzIyMTAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVw
ZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgICAgICBhZGRQbGF5ZWRSYW5nZShtX2xhc3RTZWVrVGlt
ZSwgdGltZSk7CiAKICAgICAgICAgaWYgKGNvdWxkUGxheUlmRW5vdWdoRGF0YSgpKQotICAgICAg
ICAgICAgbV9wbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKKyAgICAgICAgICAgIHByZXBhcmVUb1Bs
YXkoKTsKIAogICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICAgICAgbWVk
aWFDb250cm9scygpLT5wbGF5YmFja1N0b3BwZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA4NTA1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIG1lZGlhRW5naW5lRXJyb3IoUGFzc1JlZlB0cjxNZWRpYUVycm9y
PiBlcnIpOwogICAgIHZvaWQgY2FuY2VsUGVuZGluZ0V2ZW50c0FuZENhbGxiYWNrcygpOwogICAg
IHZvaWQgd2FpdEZvclNvdXJjZUNoYW5nZSgpOworICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpOwog
CiAgICAgZW51bSBJbnZhbGlkU291cmNlQWN0aW9uIHsgRG9Ob3RoaW5nLCBDb21wbGFpbiB9Owog
ICAgIGJvb2wgaXNTYWZlVG9Mb2FkVVJMKGNvbnN0IEtVUkwmLCBJbnZhbGlkU291cmNlQWN0aW9u
KTsKQEAgLTQxNyw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaXNwYXRjaGluZ0Nh
blBsYXlFdmVudCA6IDE7CiAgICAgYm9vbCBtX2xvYWRJbml0aWF0ZWRCeVVzZXJHZXN0dXJlIDog
MTsKICAgICBib29sIG1fY29tcGxldGVseUxvYWRlZCA6IDE7CisgICAgYm9vbCBtX2hhdmVQcmVw
YXJlZFRvUGxheSA6IDE7CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9tYW51YWwtdGVzdHMvbWVkaWEtZWxlbWVudHMvdmlkZW8tcHJlbG9hZC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hbnVhbC10ZXN0cy9tZWRpYS1lbGVtZW50cy92aWRlby1w
cmVsb2FkLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9tYW51YWwtdGVzdHMv
bWVkaWEtZWxlbWVudHMvdmlkZW8tcHJlbG9hZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIyOSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICA8dGl0bGU+
cHJlbG9hZCB0ZXN0PC90aXRsZT4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0i
d2lkdGg9ZGV2aWNlLXdpZHRoIj4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJz
Y3JlZW4iPgorICAgICAgICBib2R5IHsgZm9udC1mYW1pbHk6IGdlb3JnaWEsIHNlcmlmOyBiYWNr
Z3JvdW5kOiBncmF5OyB9CisgICAgICAgIHZpZGVvIHsgYmFja2dyb3VuZDogeWVsbG93OyB9Cisg
ICAgICAgIC5pbmZvIHsgYmFja2dyb3VuZC1jb2xvcjojZTNlM2YzOyBwYWRkaW5nOjEwcHg7IGJv
cmRlcjoxcHggc29saWQgIzljOTsgd2lkdGg6NjAwcHg7IH0KKyAgICAgICAgLmluZm8gdGFibGUg
eyBiYWNrZ3JvdW5kOiAjZmZmOyB3aWR0aDo2MDBweDsgfQorICAgICAgICAuaW5mbyB0ZCB7IGJv
cmRlcjoxcHggc29saWQ7IGJvcmRlci1jb2xvcjojZmZmICNiYmIgI2JiYiAjZmZmOyBiYWNrZ3Jv
dW5kLWNvbG9yOiNmZmY7IHBhZGRpbmc6MnB4OyBmb250LXNpemU6LjdlbTsgd2lkdGg6NTAlO30K
KyAgICAgICAgI2V2ZW50X2xvZyB7IGJhY2tncm91bmQ6ICNmZmY7IGZvbnQtc2l6ZTouNWVtOyB3
aWR0aDogMTAwJTsgfQorICAgICAgICAjcmVmcmVzaCB7IG1hcmdpbi10b3A6MTBweDsgfQorICAg
IDwvc3R5bGU+CisKKyAgICA8c2NyaXB0PgorICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCdsb2FkZWRtZXRhZGF0YScsIHF1ZXJ5bW92aWUpOworICAgICAgICBkb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCd3YWl0aW5nJywgcXVlcnltb3ZpZSk7CisgICAgICAgIGRvY3VtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcXVlcnltb3ZpZSk7CisgICAgICAgIGRvY3VtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ2R1cmF0aW9uY2hhbmdlJywgcXVlcnltb3ZpZSk7CisgICAgICAgIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcXVlcnltb3ZpZSk7CisgICAgICAgIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCBxdWVyeW1vdmllKTsKKyAgICAgICAg
ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHF1ZXJ5bW92aWUpOworCisgICAg
ICAgIC8vIGxvZyBhbGwgZXZlbnRzCisgICAgICAgIHZhciBldmVudHMgPSBbImFib3J0IiwgImJl
Zm9yZWxvYWQiLCAiY2FucGxheSIsICJjYW5wbGF5dGhyb3VnaCIsICJkdXJhdGlvbmNoYW5nZSIs
ICJlbXB0aWVkIiwgImVuZGVkIiwgImVycm9yIiwgImxvYWRlZGRhdGEiLCAibG9hZGVkbWV0YWRh
dGEiLCAibG9hZHN0YXJ0IiwgInBhdXNlIiwgInBsYXkiLCAicGxheWluZyIsICJwcm9ncmVzcyIs
ICJyYXRlY2hhbmdlIiwgInNlZWtlZCIsICJzZWVraW5nIiwgInN0YWxsZWQiLCAic3VzcGVuZCIs
ICJ0aW1ldXBkYXRlIiwgInZvbHVtZWNoYW5nZSIsICJ3YWl0aW5nIiwgIndlYmtpdGJlZ2luZnVs
bHNjcmVlbiIsICJ3ZWJraXRlbmRmdWxsc2NyZWVuIl07CisgICAgICAgIGZvciAodmFyIGk9MDsg
aSA8IGV2ZW50cy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoZXZlbnRzW2ldLCBsb2dQcm9ncmVzcywgdHJ1ZSk7CisKKyAgICAgICAgZnVuY3Rpb24g
cHJpbnRUaW1lUmFuZ2VWYWx1ZShlbGVtZW50LCBwcm9wKQorICAgICAgICB7CisgICAgICAgICAg
ICB2YXIgcmFuZ2U7CisgICAgCisgICAgICAgICAgICBpZiAocHJvcCA9PSAnTWF4IHRpbWUgYnVm
ZmVyZWQnKQorICAgICAgICAgICAgICAgIHJhbmdlID0gZWxlbWVudC5idWZmZXJlZDsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHByb3AgPT0gIk1heCB0aW1lIHNlZWthYmxlIikKKyAgICAgICAgICAg
ICAgICByYW5nZSA9IGVsZW1lbnQuc2Vla2FibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYWxlcnQocHJvcCk7CisgICAgICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAg
ICAgICAgIHJldHVybiAidW5kZWZpbmVkIjsKKworICAgICAgICAgICAgaWYgKHJhbmdlLmxlbmd0
aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQoMCkudG9GaXhlZCgyKSArICIu
LiIgKyByYW5nZS5lbmQoMCkudG9GaXhlZCgyKSArICIgW2xlbmd0aCA9IiArIHJhbmdlLmxlbmd0
aCArICJdIjsKKyAgICAgICAgICAgIHJldHVybiAiW3JhbmdlIGxlbmd0aCA9ICIgKyByYW5nZS5s
ZW5ndGggKyAiXSI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHN0YXRl
UHJvcGVydHlWYWx1ZShlbGVtZW50LCBwcm9wKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIg
cmVhZHlOYW1lcyA9IFsnSEFWRV9OT1RISU5HJywgJ0hBVkVfTUVUQURBVEEnLCAnSEFWRV9DVVJS
RU5UX0RBVEEnLCAnSEFWRV9GVVRVUkVfREFUQScsICdIQVZFX0VOT1VHSF9EQVRBJ107CisgICAg
ICAgICAgICB2YXIgbmV0d29ya05hbWVzID0gWydORVRXT1JLX0VNUFRZJywgJ05FVFdPUktfSURM
RScsICdORVRXT1JLX0xPQURJTkcnLCAnTkVUV09SS19MT0FERUQnLCAnTkVUV09SS19OT19TT1VS
Q0UnXTsKKyAgICAgICAgICAgIHZhciB2YWx1ZTsKKworICAgICAgICAgICAgaWYgKHByb3A9PSAn
UmVhZHkgU3RhdGUnKQorICAgICAgICAgICAgICAgIHZhbHVlID0gcmVhZHlOYW1lc1tlbGVtZW50
LnJlYWR5U3RhdGVdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0g
bmV0d29ya05hbWVzW2VsZW1lbnQubmV0d29ya1N0YXRlXTsKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHF1ZXJ5bW92aWUoZXZ0KQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgbW92aWVQcm9wZXJ0aWVzID0gCisgICAgICAgICAgICBb
IAorICAgICAgICAgICAgICAgIFsiU291cmNlIiwgInNyYyJdLCAKKyAgICAgICAgICAgICAgICBb
IkN1cnJlbnQgU291cmNlIiwgImN1cnJlbnRTcmMiXSwgCisgICAgICAgICAgICAgICAgWyJEdXJh
dGlvbiIsICJkdXJhdGlvbiJdLCAKKyAgICAgICAgICAgICAgICBbIlZpZGVvIFdpZHRoIiwgInZp
ZGVvV2lkdGgiXSwgCisgICAgICAgICAgICAgICAgWyJWaWRlbyBIZWlnaHQiLCAidmlkZW9IZWln
aHQiXSwgCisgICAgICAgICAgICAgICAgWyJEZWZhdWx0IFBsYXliYWNrIFJhdGUiLCAiZGVmYXVs
dFBsYXliYWNrUmF0ZSJdLCAKKyAgICAgICAgICAgICAgICBbIlZvbHVtZSIsICJ2b2x1bWUiXSwg
CisgICAgICAgICAgICAgICAgWyJQcmVsb2FkIiwgInByZWxvYWQiXSwgCisgICAgICAgICAgICAg
ICAgWyJSZWFkeSBTdGF0ZSIsIHN0YXRlUHJvcGVydHlWYWx1ZV0sIAorICAgICAgICAgICAgICAg
IFsiTmV0d29yayBTdGF0ZSIsIHN0YXRlUHJvcGVydHlWYWx1ZV0sCisgICAgICAgICAgICAgICAg
WyJNYXggdGltZSBidWZmZXJlZCIsIHByaW50VGltZVJhbmdlVmFsdWVdLCAKKyAgICAgICAgICAg
ICAgICBbIk1heCB0aW1lIHNlZWthYmxlIiwgcHJpbnRUaW1lUmFuZ2VWYWx1ZV0KKyAgICAgICAg
ICAgIF07CisKKyAgICAgICAgICAgIHZhciB2aWQgPSBldnQgPyBldnQudGFyZ2V0IDogZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZCcpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBtb3ZpZVByb3BlcnRpZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdmFyIHByb3AgPSBtb3ZpZVByb3BlcnRpZXNbaV07CisgICAgICAgICAgICAgICAgdmFy
IHZhbDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3Bb
MV0gPT0gJ2Z1bmN0aW9uJykKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gcHJvcFsxXSh2aWQs
IHByb3BbMF0pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFs
ID0gdmlkW3Byb3BbMV1dOworICAgIAorICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09
ICdudW1iZXInKQorICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudG9GaXhlZCgyKTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09ICJ1bmRlZmluZWQiKQorICAgICAg
ICAgICAgICAgICAgICB2YWwgPSAidW5kZWZpbmVkIjsKKyAgICAgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChwcm9wWzBdKS5pbm5lckhUTUwgPSB2YWw7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZXRVUkwodXJsLCB2aWRJRCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIHZpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZpZElE
KTsKKworICAgICAgICAgICAgbG9nTXNnKHZpZCwgIiMjIyMjIyMjIyMjIyMjIyIpOworICAgICAg
ICAgICAgbG9nTXNnKHZpZCwgIiMjIyMjIHNldHRpbmcgdXJsIHRvICIgKyB1cmwpOworICAgICAg
ICAgICAgaWYgKCB1cmwgIT0gIiIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZp
ZC5zcmMgPSB1cmw7CisgICAgICAgICAgICAgICAgdmlkLmxvYWQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjbG9ja1RpbWUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAgICAgICAgIHZhciBob3VyID0g
bm93LmdldEhvdXJzKCk7CisgICAgICAgICAgICB2YXIgbWludXRlID0gbm93LmdldE1pbnV0ZXMo
KTsKKyAgICAgICAgICAgIHZhciBzZWNvbmQgPSBub3cuZ2V0U2Vjb25kcygpOworICAgICAgICAg
ICAgdmFyIG1pbGxpID0gbm93LmdldE1pbGxpc2Vjb25kcygpOworICAgICAgICAgICAgaWYgKGhv
dXIgPiAxMikgCisgICAgICAgICAgICAgICAgaG91ciA9IGhvdXIgLSAxMjsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGhvdXIgPT0gMCkgCisgICAgICAgICAgICAgICAgaG91ciA9IDEyOworICAgICAg
ICAgICAgaWYgKGhvdXIgICA8IDEwKSAKKyAgICAgICAgICAgICAgICBob3VyID0gIjAiICsgaG91
cjsKKyAgICAgICAgICAgIGlmIChtaW51dGUgPCAxMCkKKyAgICAgICAgICAgICAgICBtaW51dGUg
PSAiMCIgKyBtaW51dGU7CisgICAgICAgICAgICBpZiAoc2Vjb25kIDwgMTApIAorICAgICAgICAg
ICAgICAgIHNlY29uZCA9ICIwIiArIHNlY29uZDsKKyAgICAgICAgICAgIGlmIChtaWxsaSA8IDEw
KSAKKyAgICAgICAgICAgICAgICBtaWxsaSA9ICIwMCIgKyBtaWxsaTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG1pbGxpIDwgMTAwKSAKKyAgICAgICAgICAgICAgICBtaWxsaSA9ICIwIiArIG1pbGxp
OworCisgICAgICAgICAgICByZXR1cm4gaG91ciArICc6JyArIG1pbnV0ZSArICc6JyArIHNlY29u
ZCArICcuJyArIG1pbGxpOworICAgICAgICB9IAorCisgICAgICAgIGZ1bmN0aW9uIGxvZ01zZyh2
aWQsIG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2V2ZW50X2xvZycpLnZhbHVlICs9IGNsb2NrVGltZSgpICsgIiAtICIgKyBtc2cgKyAnIFxyJzsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gY2xlYXJsb2coKQorICAgICAg
ICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXZlbnRfbG9nJykudmFs
dWUgPSAnJzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gbG9nUHJvZ3Jl
c3MoZXYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB2aWQgPSBldi50YXJnZXQ7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChldi50eXBlID09ICd0aW1ldXBkYXRlJykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgbG9nVGltZXVwZGF0ZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsb2ctdGltZXVwZGF0ZScpOworICAgICAgICAgICAgICAgIGlmICghbG9n
VGltZXVwZGF0ZS5jaGVja2VkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZXYudHlwZSA9PSAncHJvZ3Jlc3MnKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHZhciBsb2dUaW1ldXBkYXRlID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2xvZy1wcm9ncmVzcycpOworICAgICAgICAgICAgICAgIGlmICghbG9nVGltZXVw
ZGF0ZS5jaGVja2VkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGxvZ01zZyh2aWQsIGV2LnR5cGUgKyAnICh0aW1lID0gJyArIHZpZC5j
dXJyZW50VGltZS50b0ZpeGVkKDIpICsgJyknKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZnVuY3Rpb24gbG9nRXJyb3IoZXYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB2aWQg
PSBldi50YXJnZXQ7CisgICAgICAgICAgICBsb2dNc2codmlkLCAidmlkLmVycm9yID0gIiArIHZp
ZC5lcnJvci5jb2RlKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgZnVuY3Rpb24gcHJlbG9hZCh2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHZpZCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJ2aWQiKTsKKyAgICAgICAgICAgIHZhciBvbGQgPSB2aWQucHJlbG9hZDsKKyAgICAg
ICAgICAgIHZpZC5wcmVsb2FkPXZhbHVlOworICAgICAgICAgICAgcXVlcnltb3ZpZSgpOworICAg
ICAgICB9CisgICAgPC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJxdWVyeW1v
dmllKCkiPgorICAgIDxwPgorICAgICAgICA8dmlkZW8gaWQ9InZpZCIgc3JjPSJodHRwOi8vdHJh
aWxlcnMuYXBwbGUuY29tL21vdmllcy93ZWluc3RlaW4vc3VibWFyaW5lL3N1Ym1hcmluZS10bHIx
XzQ4MHAubW92IiBoZWlnaHQ9IjM5MSIgCisgICAgICAgICAgICBjb250cm9scyBwcmVsb2FkPSJt
ZXRhZGF0YSI+CisgICAgICAgIDwvdmlkZW8+CisgICAgPC9wPgorICAgIDxwPgorICAgICAgICA8
YnV0dG9uIGlkPSJjb250cm9scyIgb25jbGljaz0icHJlbG9hZCgnbm9uZScpIj5wcmVsb2FkPW5v
bmU8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiBpZD0iY29udHJvbHMiIG9uY2xpY2s9InByZWxv
YWQoJ21ldGFkYXRhJykiPnByZWxvYWQ9bWV0YWRhdGE8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRv
biBpZD0iY29udHJvbHMiIG9uY2xpY2s9InByZWxvYWQoJ2F1dG8nKSI+cHJlbG9hZD1hdXRvPC9i
dXR0b24+CisgICAgPC9wPgorCisgICAgPGRpdiBjbGFzcz0iaW5mbyI+CisgICAgICAgIDxpbnB1
dCBpZD0icXVlcnltb3ZpZSIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iUmVmcmVzaCIgb25jbGljaz0i
cXVlcnltb3ZpZSgpIj4KKyAgICAgICAgPGJyPgorICAgICAgICA8dGFibGU+CisgICAgICAgICAg
ICA8dGJvZHk+CisgICAgICAgICAgICAgICAgPHRyPjx0ZD5QcmVsb2FkPC90ZD48dGQgaWQ9IlBy
ZWxvYWQiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgICAgICA8dHI+PHRkPkR1cmF0aW9uPC90ZD4g
PHRkIGlkPSJEdXJhdGlvbiI+PC90ZD48L3RyPgorICAgICAgICAgICAgICAgIDx0cj48dGQ+Vmlk
ZW8gV2lkdGg8L3RkPjx0ZCBpZD0iVmlkZW8gV2lkdGgiPjwvdGQ+PC90cj4KKyAgICAgICAgICAg
ICAgICA8dHI+PHRkPlZpZGVvIEhlaWdodDwvdGQ+PHRkIGlkPSJWaWRlbyBIZWlnaHQiPjwvdGQ+
PC90cj4KKyAgICAgICAgICAgICAgICA8dHI+PHRkPkRlZmF1bHQgUGxheWJhY2sgUmF0ZTwvdGQ+
PHRkIGlkPSJEZWZhdWx0IFBsYXliYWNrIFJhdGUiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgICAg
ICA8dHI+PHRkPlZvbHVtZTwvdGQ+PHRkIGlkPSJWb2x1bWUiPjwvdGQ+PC90cj4KKyAgICAgICAg
ICAgICAgICA8dHI+PHRkPlJlYWR5IFN0YXRlPC90ZD48dGQgaWQ9IlJlYWR5IFN0YXRlIj48L3Rk
PjwvdHI+CisgICAgICAgICAgICAgICAgPHRyPjx0ZD5OZXR3b3JrIFN0YXRlPC90ZD48dGQgaWQ9
Ik5ldHdvcmsgU3RhdGUiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgICAgICA8dHI+PHRkPk1heCB0
aW1lIGJ1ZmZlcmVkPC90ZD48dGQgaWQ9Ik1heCB0aW1lIGJ1ZmZlcmVkIj48L3RkPjwvdHI+Cisg
ICAgICAgICAgICAgICAgPHRyPjx0ZD5NYXggdGltZSBzZWVrYWJsZTwvdGQ+PHRkIGlkPSJNYXgg
dGltZSBzZWVrYWJsZSI+PC90ZD48L3RyPgorICAgICAgICAgICAgICAgIDx0cj48dGQ+U291cmNl
PC90ZD48dGQgaWQ9IlNvdXJjZSI+PC90ZD48L3RyPgorICAgICAgICAgICAgICAgIDx0cj48dGQ+
Q3VycmVudCBTb3VyY2UgPC90ZD4gPHRkIGlkPSJDdXJyZW50IFNvdXJjZSI+PC90ZD48L3RyPgor
ICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgPC90YWJsZT4KKyAgICA8L2Rpdj4KKworICAg
IDxicj4KKyAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KKyAgICAgICAgRW50ZXIgYSB1cmw6PGlucHV0
ICB0eXBlPSJ0ZXh0IiBzaXplPSI5MCIgbWF4bGVuZ3RoPSIyMDQ4IiBvbmNoYW5nZT0ic2V0VVJM
KHRoaXMudmFsdWUsICd2aWQtMScpIiA+CisgICAgICAgIDxicj4KKyAgICAgICAgPGlucHV0IGlk
PSJjbGVhcl9sb2ciIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkNsZWFyIiBvbmNsaWNrPSJjbGVhcmxv
ZygpIj4gCisgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImxvZy1wcm9ncmVzcyI+
IGxvZyAncHJvZ3Jlc3MnIGV2ZW50cworICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNo
ZWNrZWQgaWQ9ImxvZy10aW1ldXBkYXRlIj4gbG9nICd0aW1ldXBkYXRlJyBldmVudHMKKyAgICAg
ICAgPHRleHRhcmVhIHJvd3M9MzAgY29scz0zMCBpZD1ldmVudF9sb2c+PC90ZXh0YXJlYT4KKyAg
ICAgICAgPGRpdiBpZD0iZXZlbnRfbG9nIj48L2Rpdj4KKyAgICA8L2Rpdj4KKworPC9ib2R5Pgor
PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lv
biA4NTI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgi
CiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgorI2luY2x1ZGUgIkFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC01MSw3ICs1
Miw2IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGEKICAgICA6IG1f
cGxheWVyKHBsYXllcikKICAgICAsIG1fcXVldWVkTm90aWZpY2F0aW9ucygpCiAgICAgLCBtX3F1
ZXVlTXV0ZXgoKQotICAgICwgbV9tYWluVGhyZWFkQ2FsbFBlbmRpbmcoZmFsc2UpCiAgICAgLCBt
X25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVk
aWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQogICAgICwgbV9wcmVsb2FkKE1lZGlhUGxheWVyOjpBdXRv
KQpAQCAtNjIsMTMgKzYyLDExIEBAIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVk
aWFQbGEKICAgICAsIG1fcmVwb3J0ZWREdXJhdGlvbihpbnZhbGlkVGltZSkKICAgICAsIG1fc2Vl
a1RvKGludmFsaWRUaW1lKQogICAgICwgbV9yZXF1ZXN0ZWRSYXRlKDEpCi0gICAgLCBtX2RlbGF5
Q2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9oYXZlUHJlcGFyZWRUb1BsYXkoZmFsc2UpCisgICAg
LCBtX2RlbGF5Q2FsbGJhY2tzKDApCisgICAgLCBtX21haW5UaHJlYWRDYWxsUGVuZGluZyhmYWxz
ZSkKICAgICAsIG1fYXNzZXRJc1BsYXlhYmxlKGZhbHNlKQogICAgICwgbV92aXNpYmxlKGZhbHNl
KQotICAgICwgbV92aWRlb0ZyYW1lSGFzRHJhd24oZmFsc2UpCiAgICAgLCBtX2xvYWRpbmdNZXRh
ZGF0YShmYWxzZSkKLSAgICAsIG1fZGVsYXlpbmdMb2FkKGZhbHNlKQogICAgICwgbV9pc0FsbG93
ZWRUb1JlbmRlcihmYWxzZSkKICAgICAsIG1fY2FjaGVkSGFzQXVkaW8oZmFsc2UpCiAgICAgLCBt
X2NhY2hlZEhhc1ZpZGVvKGZhbHNlKQpAQCAtMTY3LDE3ICsxNjUsNiBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6aGFzCiAgICAgcmV0dXJuIGhhc0xheWVyUmVuZGVyZXIo
KSB8fCBoYXNDb250ZXh0UmVuZGVyZXIoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OnJlc3VtZUxvYWQoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6cmVzdW1lTG9hZCglcCkiLCB0aGlzKTsKLQotICAgIEFTU0VS
VChtX2RlbGF5aW5nTG9hZCk7Ci0gICAgbV9kZWxheWluZ0xvYWQgPSBmYWxzZTsKLQotICAgIGlm
IChtX2Fzc2V0VVJMLmxlbmd0aCgpKQotICAgICAgICBwcmVwYXJlVG9QbGF5KCk7Ci19Ci0KIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJs
KQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9h
ZCglcCkiLCB0aGlzKTsKQEAgLTE5MSwyMCArMTc4LDEzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpsb2EKICAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2Vk
KCk7CiAgICAgfQogCi0gICAgbV92aWRlb0ZyYW1lSGFzRHJhd24gPSBmYWxzZTsKICAgICBtX2Fz
c2V0VVJMID0gdXJsOwogCiAgICAgLy8gRG9uJ3QgZG8gYW55IG1vcmUgd29yayBpZiB0aGUgdXJs
IGlzIGVtcHR5LgogICAgIGlmICghdXJsLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpOb25lKSB7Ci0gICAgICAgIExPRyhNZWRp
YSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bG9hZCglcCkgLSBwcmVsb2FkPT1u
b25lIHNvIHJldHVybmluZyIsIHRoaXMpOwotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IHRydWU7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwcmVwYXJlVG9QbGF5KCk7CisgICAgc2V0
UHJlbG9hZChtX3ByZWxvYWQpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6cGxheWFiaWxpdHlLbm93bigpCkBAIC0yMzIsMjIgKzIxMiw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwcmUKIHsKICAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OnByZXBhcmVUb1BsYXkoJXApIiwgdGhpcyk7CiAKLSAg
ICBtX3ByZWxvYWQgPSBNZWRpYVBsYXllcjo6QXV0bzsKLSAgICBpZiAobV9oYXZlUHJlcGFyZWRU
b1BsYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hhdmVQcmVwYXJlZFRvUGxheSA9IHRydWU7
Ci0KLSAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOwotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCi0gICAgRnJhbWUqIGZyYW1lID0gbV9wbGF5ZXItPmZyYW1lVmlldygpID8g
bV9wbGF5ZXItPmZyYW1lVmlldygpLT5mcmFtZSgpIDogMDsKLSAgICBBcHBsaWNhdGlvbkNhY2hl
SG9zdCogY2FjaGVIb3N0ID0gZnJhbWUgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVy
KCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkgOiAwOwotICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSogcmVzb3VyY2UgPSAwOwotICAgIGlmIChjYWNoZUhvc3QgJiYgY2FjaGVIb3N0LT5zaG91
bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShSZXNvdXJjZVJlcXVlc3QobV9hc3Nl
dFVSTCksIHJlc291cmNlKSAmJiByZXNvdXJjZSkKLSAgICAgICAgY3JlYXRlQVZQbGF5ZXJGb3JD
YWNoZVJlc291cmNlKHJlc291cmNlKTsKLSAgICBlbHNlCi0jZW5kaWYgICAgCi0gICAgY3JlYXRl
QVZQbGF5ZXJGb3JVUkwobV9hc3NldFVSTCk7Ci0gICAgY2hlY2tQbGF5YWJpbGl0eSgpOworICAg
IHNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OkF1dG8pOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6cGxheSgpCkBAIC0yNjksMjMgKzIzNCwyMSBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGF1CiAgICAgcGxhdGZvcm1QYXVzZSgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpCi17Ci0gICAgLy8gVGhpcyBpcyB0aGUgYmFzZSBjbGFzcywg
b25seSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBkcmF3bi4KLSAgICBt
X3ZpZGVvRnJhbWVIYXNEcmF3biA9IHRydWU7Ci19Ci0KIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6ZHVyYXRpb24oKSBjb25zdAogeworICAgIGlmIChtX2NhY2hlZER1cmF0
aW9uICE9IGludmFsaWRUaW1lKQorICAgICAgICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsKKwog
ICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBp
ZiAobV9jYWNoZWREdXJhdGlvbiA9PSBpbnZhbGlkVGltZSkgewotICAgICAgICBtX2NhY2hlZER1
cmF0aW9uID0gcGxhdGZvcm1EdXJhdGlvbigpOworICAgIGZsb2F0IGR1cmF0aW9uID0gcGxhdGZv
cm1EdXJhdGlvbigpOworICAgIGlmIChkdXJhdGlvbiAhPSAwKSB7CisgICAgICAgIG1fY2FjaGVk
RHVyYXRpb24gPSBkdXJhdGlvbjsKICAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlQVZGTWFjOjpkdXJhdGlvbiglcCkgLSBjYWNoaW5nICVmIiwgdGhpcywgbV9jYWNoZWREdXJh
dGlvbik7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fY2FjaGVkRHVyYXRpb247CisgICAgcmV0dXJu
IGR1cmF0aW9uOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vl
ayhmbG9hdCB0aW1lKQpAQCAtNDMyLDIxICszOTUsMjYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnVwZAogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVy
OjpMb2FkaW5nOwogICAgIGVsc2UgewogICAgICAgICAvLyAtbG9hZFZhbHVlc0FzeW5jaHJvbm91
c2x5Rm9yS2V5czpjb21wbGV0aW9uSGFuZGxlcjogaGFzIGludm9rZWQgaXRzIGhhbmRsZXI7IHRl
c3Qgc3RhdHVzIG9mIGtleXMgYW5kIGRldGVybWluZSBzdGF0ZS4KLSAgICAgICAgQVZBc3NldFN0
YXR1cyBhdkFzc2V0U3RhdHVzID0gYXNzZXRTdGF0dXMoKTsKKyAgICAgICAgQXNzZXRTdGF0dXMg
YXZBc3NldFN0YXR1cyA9IGFzc2V0U3RhdHVzKCk7CiAgICAgICAgIEl0ZW1TdGF0dXMgaXRlbVN0
YXR1cyA9IHBsYXllckl0ZW1TdGF0dXMoKTsKICAgICAgICAgCiAgICAgICAgIG1fYXNzZXRJc1Bs
YXlhYmxlID0gKGF2QXNzZXRTdGF0dXMgPT0gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzUGxheWFi
bGUpOwogICAgICAgICBpZiAobV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0
YSAmJiBhdkFzc2V0U3RhdHVzID4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZykgewog
ICAgICAgICAgICAgaWYgKG1fYXNzZXRJc1BsYXlhYmxlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGl0ZW1TdGF0dXMgPT0gTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNVbmtub3duKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGl0ZW1TdGF0dXMgPD0gTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1T
dGF0dXNVbmtub3duKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhdkFzc2V0U3RhdHVzID09
IE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0ZhaWxlZCB8fCBtX3ByZWxvYWQgPiBNZWRpYVBsYXll
cjo6TWV0YURhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIGEg
cGxheWFibGUgYXNzZXQgdGhhdCBkb2Vzbid0IHN1cHBvcnQgaW5zcGVjdGlvbiBwcmlvciB0byBw
bGF5YmFjazsgZ28gYWhlYWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgY3JlYXRl
IHRoZSBBVlBsYXllckl0ZW0gbm93LiBXaGVuIHRoZSBBVlBsYXllckl0ZW0gYmVjb21lcyByZWFk
eSB0byBwbGF5LCB3ZSB3aWxsIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBhY2Nl
c3MgdG8gaXRzIG1ldGFkYXRhLiBPciB3ZSBtYXkgaGF2ZSBiZWVuIGFza2VkIHRvIGJlY29tZSBy
ZWFkeSB0byBwbGF5IGltbWVkaWF0ZWx5LgogICAgICAgICAgICAgICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXBhcmVUb1BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYXNzZXQg
aXMgcGxheWFibGUsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGxvYWQgbWVkaWEgZGF0YSB5ZXQgc28g
ZG9uJ3QgYWxsb2NhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwbGF5ZXIgaXRl
bS4gRXZlbiB0aG91Z2ggd2UgZG9uJ3Qgd2FudCB0byBwbGF5IHlldCwgYWxsb2NhdGUgYSBwbGF5
ZXIgc28KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbiBjcmVhdGUgYSBsYXllciBh
cyBzb29uIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQVZQbGF5
ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OklkbGU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKGF2QXNzZXRTdGF0dXMgPT0gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVz
TG9hZGVkKQogICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU1ldGFkYXRhOwpAQCAtNDYzLDYgKzQzMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjp1cGQKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGZs
b2F0IG1heExvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGl0ZW1TdGF0dXMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1lZGlhUGxheWVyQVZQbGF5ZXJJ
dGVtU3RhdHVzRG9lc05vdEV4aXN0OgogICAgICAgICAgICAgICAgIGNhc2UgTWVkaWFQbGF5ZXJB
VlBsYXllckl0ZW1TdGF0dXNVbmtub3duOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBjYXNlIE1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzRmFpbGVkOgpA
QCAtNDcxLDggKzQ0MCwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
dXBkCiAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1Bs
YXliYWNrTGlrZWx5VG9LZWVwVXA6CiAgICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1JlYWR5
VG9QbGF5OgorCiAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0
YXR1c1BsYXliYWNrQnVmZmVyRnVsbDoKKyAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKworICAgICAgICAgICAgICAgIGNhc2UgTWVkaWFQbGF5
ZXJBVlBsYXllckl0ZW1TdGF0dXNSZWFkeVRvUGxheToKICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHJlYWR5U3RhdGUgaXMgYWxyZWFkeSBIYXZlRW5vdWdoRGF0YSwgZG9uJ3QgZ28gbG93
ZXIgYmVjYXVzZSBvZiB0aGlzIHN0YXRlIGNoYW5nZS4KICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTQ4NSw3ICs0NTcsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6dXBkCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChpdGVtU3RhdHVzID49IE1lZGlh
UGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUmVhZHlUb1BsYXkpCisgICAgICAgICAgICAgICAgaWYg
KGl0ZW1TdGF0dXMgIT0gTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNQbGF5YmFja0J1ZmZl
ckZ1bGwgJiYgaXRlbVN0YXR1cyA+PSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1JlYWR5
VG9QbGF5KQogICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IChtYXhMb2FkZWQg
PT0gZHVyYXRpb24oKSkgPyBNZWRpYVBsYXllcjo6TG9hZGVkIDogTWVkaWFQbGF5ZXI6OkxvYWRp
bmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ5NSw2ICs0NjcsOCBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dXBkCiAgICAgICAgIHNldFVwVmlkZW9SZW5k
ZXJpbmcoKTsKIAogICAgIGlmICghbV9oYXZlUmVwb3J0ZWRGaXJzdFZpZGVvRnJhbWUgJiYgbV9j
YWNoZWRIYXNWaWRlbyAmJiBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkpIHsKKyAgICAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEpCisgICAgICAgICAg
ICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOwogICAgICAgICBt
X2hhdmVSZXBvcnRlZEZpcnN0VmlkZW9GcmFtZSA9IHRydWU7CiAgICAgICAgIG1fcGxheWVyLT5m
aXJzdFZpZGVvRnJhbWVBdmFpbGFibGUoKTsKICAgICB9CkBAIC01MzAsMTYgKzUwNCw2IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXQKICAgICBwbGF0Zm9ybVNldFZp
c2libGUodmlzaWJsZSk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QKLXsKLSAgICBpZiAoY3VycmVudFJlbmRl
cmluZ01vZGUoKSA9PSBNZWRpYVJlbmRlcmluZ1RvTGF5ZXIpCi0gICAgICAgIHJldHVybiB2aWRl
b0xheWVySXNSZWFkeVRvRGlzcGxheSgpOwotCi0gICAgLy8gV2hlbiB1c2luZyB0aGUgc29mdHdh
cmUgcmVuZGVyZXIgd2UgaG9wZSBzb21lb25lIHdpbGwgc2lnbmFsIHRoYXQgYSBmcmFtZSBpcyBh
dmFpbGFibGUgc28gd2UgbWlnaHQgYXMgd2VsbAotICAgIC8vIHdhaXQgdW50aWwgd2Uga25vdyB0
aGF0IGEgZnJhbWUgaGFzIGJlZW4gZHJhd24uCi0gICAgcmV0dXJuIG1fdmlkZW9GcmFtZUhhc0Ry
YXduOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6YWNjZWxlcmF0
ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKQogewogICAgIC8vIFNldCB1cCBvciBjaGFuZ2UgdGhl
IHJlbmRlcmluZyBwYXRoIGlmIG5lY2Vzc2FyeS4KQEAgLTU0OSw2ICs1MTMsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6YWNjCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6bWV0YWRhdGFMb2FkZWQoKQogewogICAgIG1fbG9hZGluZ01ldGFkYXRh
ID0gZmFsc2U7CisgICAgdHJhY2tzQ2hhbmdlZCgpOwogICAgIHVwZGF0ZVN0YXRlcygpOwogfQog
CkBAIC02MjgsNyArNTkzLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OmRpZAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cmVwYWludCgpCiB7
Ci0gICAgbV92aWRlb0ZyYW1lSGFzRHJhd24gPSB0cnVlOwogICAgIG1fcGxheWVyLT5yZXBhaW50
KCk7CiB9CiAKQEAgLTY0Niw4ICs2MTAsMzAgQEAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUg
TWVkaWFQbGF5ZXJQcgogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNldFBy
ZWxvYWQoTWVkaWFQbGF5ZXI6OlByZWxvYWQgcHJlbG9hZCkKIHsKICAgICBtX3ByZWxvYWQgPSBw
cmVsb2FkOwotICAgIGlmIChtX2RlbGF5aW5nTG9hZCAmJiBtX3ByZWxvYWQgIT0gTWVkaWFQbGF5
ZXI6Ok5vbmUpCi0gICAgICAgIHJlc3VtZUxvYWQoKTsKKyAgICBpZiAoIW1fYXNzZXRVUkwubGVu
Z3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3ByZWxvYWQgPj0gTWVkaWFQbGF5
ZXI6Ok1ldGFEYXRhICYmIGFzc2V0U3RhdHVzKCkgPT0gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVz
RG9lc05vdEV4aXN0KXsKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAg
ICAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJh
bWVWaWV3KCktPmZyYW1lKCkgOiAwOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdCogY2Fj
aGVIb3N0ID0gZnJhbWUgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KCkgOiAwOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uq
IHJlc291cmNlOworICAgICAgICBpZiAoY2FjaGVIb3N0ICYmIGNhY2hlSG9zdC0+c2hvdWxkTG9h
ZFJlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0KG1fYXNzZXRVUkwp
LCByZXNvdXJjZSkgJiYgcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIC8vIEFWRm91bmRhdGlvbiBj
YW4ndCBvcGVuIGFyYml0cmFyeSBkYXRhIHBvaW50ZXJzLCBzbyBpZiB0aGlzIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSBkb2Vzbid0IAorICAgICAgICAgICAgLy8gaGF2ZSBhIHZhbGlkIGxvY2Fs
IHBhdGgsIGp1c3Qgb3BlbiB0aGUgcmVzb3VyY2UncyBvcmlnaW5hbCBVUkwuCisgICAgICAgICAg
ICBpZiAocmVzb3VyY2UtPnBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY3JlYXRl
QVZBc3NldEZvclVSTChyZXNvdXJjZS0+dXJsKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGNyZWF0ZUFWQXNzZXRGb3JDYWNoZVJlc291cmNlKHJlc291cmNlKTsKKyAgICAg
ICAgfSBlbHNlCisjZW5kaWYgICAgCisgICAgICAgICAgICBjcmVhdGVBVkFzc2V0Rm9yVVJMKG1f
YXNzZXRVUkwpOworCisgICAgICAgIGNoZWNrUGxheWFiaWxpdHkoKTsKKyAgICB9CisKKyAgICBp
ZiAobV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpBdXRvICYmIHBsYXllckl0ZW1TdGF0dXMoKSA9
PSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c0RvZXNOb3RFeGlzdCkKKyAgICAgICAgY3Jl
YXRlQVZQbGF5ZXJJdGVtKCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjpzZXREZWxheUNhbGxiYWNrcyhib29sIGRlbGF5KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAkocmV2aXNpb24gODUy
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxMCAr
MTQyLDkgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBi
dWZmZXJlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlbG9hZChNZWRp
YVBsYXllcjo6UHJlbG9hZCk7Ci0gICAgdmlydHVhbCBib29sIGhhc0F2YWlsYWJsZVZpZGVvRnJh
bWUoKSBjb25zdDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgPSAwOwpA
QCAtMTU5LDEyICsxNTgsMTUgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0Z1bGxzY3JlZW4oKSBjb25zdDsKIAogICAgIC8vIFJlcXVpcmVkIGludGVyZmFjZXMgZm9yIGNv
bmNyZXRlIGRlcml2ZWQgY2xhc3Nlcy4KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZQbGF5ZXJG
b3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZB
c3NldEZvclVSTChjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFW
UGxheWVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBVlBsYXllckl0ZW0oKSA9IDA7
CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlQVZQbGF5ZXJGb3JDYWNoZVJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZBc3NldEZvckNhY2hlUmVzb3VyY2UoQXBw
bGljYXRpb25DYWNoZVJlc291cmNlKikgPSAwOwogI2VuZGlmCiAKICAgICBlbnVtIEl0ZW1TdGF0
dXMgeworICAgICAgICBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c0RvZXNOb3RFeGlzdCwK
ICAgICAgICAgTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNVbmtub3duLAogICAgICAgICBN
ZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c0ZhaWxlZCwKICAgICAgICAgTWVkaWFQbGF5ZXJB
VlBsYXllckl0ZW1TdGF0dXNSZWFkeVRvUGxheSwKQEAgLTE3NCw3ICsxNzYsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgfTsKICAgICB2aXJ0dWFsIEl0ZW1TdGF0dXMgcGxheWVySXRlbVN0YXR1cygpIGNv
bnN0ID0gMDsKIAotICAgIGVudW0gQVZBc3NldFN0YXR1cyB7CisgICAgZW51bSBBc3NldFN0YXR1
cyB7CisgICAgICAgIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0RvZXNOb3RFeGlzdCwKICAgICAg
ICAgTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzVW5rbm93biwKICAgICAgICAgTWVkaWFQbGF5ZXJB
VkFzc2V0U3RhdHVzTG9hZGluZywKICAgICAgICAgTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzRmFp
bGVkLApAQCAtMTgyLDcgKzE4NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgTWVkaWFQbGF5ZXJB
VkFzc2V0U3RhdHVzTG9hZGVkLAogICAgICAgICBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNQbGF5
YWJsZSwKICAgICB9OwotICAgIHZpcnR1YWwgQVZBc3NldFN0YXR1cyBhc3NldFN0YXR1cygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIEFzc2V0U3RhdHVzIGFzc2V0U3RhdHVzKCkgY29uc3QgPSAw
OwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtU2V0VmlzaWJsZShib29sKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtUGxheSgpID0gMDsKQEAgLTIwNiwxMyArMjA5LDEzIEBAIHBy
b3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVWaWRlb0xheWVyKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95VmlkZW9MYXllcigpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
dmlkZW9MYXllcklzUmVhZHlUb0Rpc3BsYXkoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9v
bCBoYXNDb250ZXh0UmVuZGVyZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc0xh
eWVyUmVuZGVyZXIoKSBjb25zdCA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHJlc3VtZUxv
YWQoKTsKICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwogCiAgICAgdm9pZCBzZXRIYXNWaWRlbyhi
b29sIGIpIHsgbV9jYWNoZWRIYXNWaWRlbyA9IGI7IH07CkBAIC0yMzgsMTIgKzI0MSwxMCBAQCBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENhbGxiYWNrKHZvaWQqKTsKIAog
cHJpdmF0ZToKLQogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKIAogICAgIFZlY3RvcjxOb3Rp
ZmljYXRpb24+IG1fcXVldWVkTm90aWZpY2F0aW9uczsKICAgICBNdXRleCBtX3F1ZXVlTXV0ZXg7
Ci0gICAgYm9vbCBtX21haW5UaHJlYWRDYWxsUGVuZGluZzsKIAogICAgIG11dGFibGUgUmVmUHRy
PFRpbWVSYW5nZXM+IG1fY2FjaGVkTG9hZGVkVGltZVJhbmdlczsKIApAQCAtMjYzLDEyICsyNjQs
MTAgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3NlZWtUbzsKICAgICBmbG9hdCBtX3JlcXVlc3Rl
ZFJhdGU7CiAgICAgaW50IG1fZGVsYXlDYWxsYmFja3M7Ci0gICAgYm9vbCBtX2hhdmVQcmVwYXJl
ZFRvUGxheTsKKyAgICBib29sIG1fbWFpblRocmVhZENhbGxQZW5kaW5nOwogICAgIGJvb2wgbV9h
c3NldElzUGxheWFibGU7CiAgICAgYm9vbCBtX3Zpc2libGU7Ci0gICAgYm9vbCBtX3ZpZGVvRnJh
bWVIYXNEcmF3bjsKICAgICBib29sIG1fbG9hZGluZ01ldGFkYXRhOwotICAgIGJvb2wgbV9kZWxh
eWluZ0xvYWQ7CiAgICAgYm9vbCBtX2lzQWxsb3dlZFRvUmVuZGVyOwogICAgIGJvb2wgbV9jYWNo
ZWRIYXNBdWRpbzsKICAgICBib29sIG1fY2FjaGVkSGFzVmlkZW87CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJ
KHJldmlzaW9uIDg1MDUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkod29ya2luZyBj
b3B5KQpAQCAtODYsMTIgKzg2LDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBmbG9hdCBtZWRp
YVRpbWVGb3JUaW1lVmFsdWUoZmxvYXQpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZUFWUGxheWVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFWUGxheWVyRm9yVVJMKGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZQbGF5ZXJJdGVtKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpOwog
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUFWUGxheWVyRm9yQ2FjaGVSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZBc3NldEZvckNhY2hlUmVzb3VyY2UoQXBwbGljYXRp
b25DYWNoZVJlc291cmNlKik7CiAjZW5kaWYKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6SXRlbVN0YXR1cyBwbGF5ZXJJdGVtU3RhdHVzKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OkFWQXNzZXRTdGF0dXMgYXNz
ZXRTdGF0dXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6QXNzZXRTdGF0dXMgYXNzZXRTdGF0dXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9p
ZCBjaGVja1BsYXlhYmlsaXR5KCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJhdGUoKTsKQEAg
LTEwNSwxMiArMTA2LDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luTG9hZGlu
Z01ldGFkYXRhKCk7CiAgICAgdmlydHVhbCB2b2lkIHNpemVDaGFuZ2VkKCk7CiAKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZUNvbnRleHRWaWRlb1JlbmRlcmVyKCk7CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3lDb250ZXh0VmlkZW9SZW5kZXJlcigpOwogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVZpZGVv
TGF5ZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVZpZGVvTGF5ZXIoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgdmlkZW9MYXllcklzUmVhZHlUb0Rpc3BsYXkoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBoYXNDb250ZXh0UmVuZGVyZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFz
TGF5ZXJSZW5kZXJlcigpIGNvbnN0OwpAQCAtMTI1LDYgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPFdlYkNvcmVBVkZNb3ZpZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKICAgICBS
ZXRhaW5QdHI8QVZBc3NldEltYWdlR2VuZXJhdG9yPiBtX2ltYWdlR2VuZXJhdG9yOwogICAgIGlk
IG1fdGltZU9ic2VydmVyOworICAgIGJvb2wgbV92aWRlb0ZyYW1lSGFzRHJhd247CiB9OwogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gODUyODIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Ok1lZGkKICAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbihwbGF5ZXIpCiAgICAgLCBtX29iamNPYnNlcnZlcihBZG9wdE5TLCBbW1dlYkNv
cmVBVkZNb3ZpZU9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKQogICAgICwg
bV90aW1lT2JzZXJ2ZXIoMCkKKyAgICAsIG1fdmlkZW9GcmFtZUhhc0RyYXduKGZhbHNlKQogewog
fQogCkBAIC0yMzQsNzEgKzIzNSw3NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6CiAgICAgbV92aWRlb0xheWVyID0gMDsKIH0KIAotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjp2aWRlb0xheWVySXNSZWFkeVRvRGlzcGxheSgpIGNvbnN0
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omhhc0F2YWlsYWJsZVZp
ZGVvRnJhbWUoKSBjb25zdAogewotICAgIHJldHVybiAobV92aWRlb0xheWVyICYmIFttX3ZpZGVv
TGF5ZXIuZ2V0KCkgaXNSZWFkeUZvckRpc3BsYXldKTsKKyAgICByZXR1cm4gKG1fdmlkZW9GcmFt
ZUhhc0RyYXduIHx8IG1fdmlkZW9MYXllciAmJiBbbV92aWRlb0xheWVyLmdldCgpIGlzUmVhZHlG
b3JEaXNwbGF5XSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Y3JlYXRlQVZQbGF5ZXJGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgU3Ry
aW5nJiB1cmwpCiB7Ci0gICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgaWYgKG1fYXZB
c3NldCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2F2QXNzZXQpIHsKLSAgICAgICAg
TlNVUkwgKmNvY29hVVJMID0gS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgICAgIG1f
YXZBc3NldC5hZG9wdE5TKFtbQVZVUkxBc3NldCBhbGxvY10gaW5pdFdpdGhVUkw6Y29jb2FVUkwg
b3B0aW9uczpuaWxdKTsKLSAgICB9Ci0gICAgCi0gICAgY3JlYXRlQVZQbGF5ZXIoKTsKKyAgICBz
ZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICBOU1VSTCAqY29jb2FVUkwgPSBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsKTsKKyAgICBtX2F2QXNzZXQuYWRvcHROUyhbW0FWVVJMQXNzZXQgYWxs
b2NdIGluaXRXaXRoVVJMOmNvY29hVVJMIG9wdGlvbnM6bmlsXSk7CisgICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOwogfQogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJG
b3JDYWNoZVJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JDYWNo
ZVJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UpCiB7Ci0gICAgLy8g
QVZGb3VuZGF0aW9uIGNhbid0IG9wZW4gYXJiaXRyYXJ5IGRhdGEgcG9pbnRlcnMsIHNvIGlmIHRo
aXMgQXBwbGljYXRpb25DYWNoZVJlc291cmNlIGRvZXNuJ3QgCi0gICAgLy8gaGF2ZSBhIHZhbGlk
IGxvY2FsIHBhdGgsIGp1c3Qgb3BlbiB0aGUgcmVzb3VyY2UncyBvcmlnaW5hbCBVUkwuCi0gICAg
aWYgKHJlc291cmNlLT5wYXRoKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNyZWF0ZUFWUGxheWVy
Rm9yVVJMKHJlc291cmNlLT51cmwoKSk7CisgICAgaWYgKG1fYXZBc3NldCkKICAgICAgICAgcmV0
dXJuOwotICAgIH0KKworICAgIC8vIEFWRm91bmRhdGlvbiBjYW4ndCBvcGVuIGFyYml0cmFyeSBk
YXRhIHBvaW50ZXJzLgorICAgIEFTU0VSVCghcmVzb3VyY2UtPnBhdGgoKS5pc0VtcHR5KCkpOwog
ICAgIAogICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwogCi0gICAgaWYgKCFtX2F2QXNzZXQp
IHsKLSAgICAgICAgTlNVUkwqIGxvY2FsVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpyZXNv
dXJjZS0+cGF0aCgpXTsKLSAgICAgICAgbV9hdkFzc2V0LmFkb3B0TlMoW1tBVlVSTEFzc2V0IGFs
bG9jXSBpbml0V2l0aFVSTDpsb2NhbFVSTCBvcHRpb25zOm5pbF0pOwotICAgIH0KKyAgICBOU1VS
TCogbG9jYWxVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnJlc291cmNlLT5wYXRoKCldOwor
ICAgIG1fYXZBc3NldC5hZG9wdE5TKFtbQVZVUkxBc3NldCBhbGxvY10gaW5pdFdpdGhVUkw6bG9j
YWxVUkwgb3B0aW9uczpuaWxdKTsKIAotICAgIGNyZWF0ZUFWUGxheWVyKCk7CisgICAgc2V0RGVs
YXlDYWxsYmFja3MoZmFsc2UpOwogfQogI2VuZGlmCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIoKQogewotICAgIGlmICghbV9hdlBsYXll
cikgewotICAgICAgICBtX2F2UGxheWVyLmFkb3B0TlMoW1tBVlBsYXllciBhbGxvY10gaW5pdF0p
OwotICAgICAgICAKLSAgICAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpj
T2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAInJhdGUiIG9wdGlvbnM6bmlsIGNvbnRleHQ6KHZv
aWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllcl07Ci0g
ICAgICAgIAotICAgICAgICAvLyBBZGQgYSB0aW1lIG9ic2VydmVyLCBhc2sgdG8gYmUgY2FsbGVk
IGluZnJlcXVlbnRseSBiZWNhdXNlIHdlIGRvbid0IHJlYWxseSB3YW50IHBlcmlvZGljIGNhbGxi
YWNrcyBidXQKLSAgICAgICAgLy8gb3VyIG9ic2VydmVyIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hl
bmV2ZXIgYSBzZWVrIGhhcHBlbnMuCi0gICAgICAgIGNvbnN0IGRvdWJsZSB2ZXJ5TG9uZ0ludGVy
dmFsID0gNjAqNjAqNjAqMjQqMzA7Ci0gICAgICAgIFdlYkNvcmVBVkZNb3ZpZU9ic2VydmVyICpv
YnNlcnZlciA9IG1fb2JqY09ic2VydmVyLmdldCgpOwotICAgICAgICBtX3RpbWVPYnNlcnZlciA9
IFttX2F2UGxheWVyLmdldCgpIGFkZFBlcmlvZGljVGltZU9ic2VydmVyRm9ySW50ZXJ2YWw6Q01U
aW1lTWFrZVdpdGhTZWNvbmRzKHZlcnlMb25nSW50ZXJ2YWwsIDEwKSBxdWV1ZTpuaWwgdXNpbmdC
bG9jazpeKENNVGltZSB0aW1lKXsKLSAgICAgICAgICAgIFtvYnNlcnZlciB0aW1lQ2hhbmdlZDpD
TVRpbWVHZXRTZWNvbmRzKHRpbWUpXTsKLSAgICAgICAgfV07Ci0gICAgfQorICAgIGlmIChtX2F2
UGxheWVyKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtKSB7Ci0g
ICAgICAgIC8vIENyZWF0ZSB0aGUgcGxheWVyIGl0ZW0gc28gd2UgY2FuIG1lZGlhIGRhdGEuIAot
ICAgICAgICBtX2F2UGxheWVySXRlbS5hZG9wdE5TKFtbQVZQbGF5ZXJJdGVtIGFsbG9jXSBpbml0
V2l0aEFzc2V0Om1fYXZBc3NldC5nZXQoKV0pOwotICAgICAgICAKLSAgICAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5n
ZXQoKXNlbGVjdG9yOkBzZWxlY3RvcihkaWRFbmQ6KSBuYW1lOkFWUGxheWVySXRlbURpZFBsYXlU
b0VuZFRpbWVOb3RpZmljYXRpb24gb2JqZWN0Om1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKKyAgICBz
ZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKIAotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1l
IGluIGl0ZW1LVk9Qcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0
KCkgYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDprZXlOYW1lIG9w
dGlvbnM6bmlsIGNvbnRleHQ6KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0
aW9uQ29udGV4dFBsYXllckl0ZW1dOworICAgIG1fYXZQbGF5ZXIuYWRvcHROUyhbW0FWUGxheWVy
IGFsbG9jXSBpbml0XSk7CisgICAgW21fYXZQbGF5ZXIuZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpj
T2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAInJhdGUiIG9wdGlvbnM6bmlsIGNvbnRleHQ6KHZv
aWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllcl07Cisg
ICAgCisgICAgLy8gQWRkIGEgdGltZSBvYnNlcnZlciwgYXNrIHRvIGJlIGNhbGxlZCBpbmZyZXF1
ZW50bHkgYmVjYXVzZSB3ZSBkb24ndCByZWFsbHkgd2FudCBwZXJpb2RpYyBjYWxsYmFja3MgYnV0
CisgICAgLy8gb3VyIG9ic2VydmVyIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBzZWVr
IGhhcHBlbnMuCisgICAgY29uc3QgZG91YmxlIHZlcnlMb25nSW50ZXJ2YWwgPSA2MCo2MCo2MCoy
NCozMDsKKyAgICBXZWJDb3JlQVZGTW92aWVPYnNlcnZlciAqb2JzZXJ2ZXIgPSBtX29iamNPYnNl
cnZlci5nZXQoKTsKKyAgICBtX3RpbWVPYnNlcnZlciA9IFttX2F2UGxheWVyLmdldCgpIGFkZFBl
cmlvZGljVGltZU9ic2VydmVyRm9ySW50ZXJ2YWw6Q01UaW1lTWFrZVdpdGhTZWNvbmRzKHZlcnlM
b25nSW50ZXJ2YWwsIDEwKSBxdWV1ZTpuaWwgdXNpbmdCbG9jazpeKENNVGltZSB0aW1lKXsKKyAg
ICAgICAgW29ic2VydmVyIHRpbWVDaGFuZ2VkOkNNVGltZUdldFNlY29uZHModGltZSldOworICAg
IH1dOwogCi0gICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJlcGxhY2VDdXJyZW50SXRlbVdpdGhQ
bGF5ZXJJdGVtOm1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKLSAgICB9CisgICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZUFWUGxheWVySXRlbSgpCit7CisgICAgaWYgKG1fYXZQbGF5ZXJJdGVtKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKworICAgIC8vIENy
ZWF0ZSB0aGUgcGxheWVyIGl0ZW0gc28gd2UgY2FuIG1lZGlhIGRhdGEuIAorICAgIG1fYXZQbGF5
ZXJJdGVtLmFkb3B0TlMoW1tBVlBsYXllckl0ZW0gYWxsb2NdIGluaXRXaXRoQXNzZXQ6bV9hdkFz
c2V0LmdldCgpXSk7CisgICAgCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKXNlbGVjdG9yOkBzZWxlY3Rvcihk
aWRFbmQ6KSBuYW1lOkFWUGxheWVySXRlbURpZFBsYXlUb0VuZFRpbWVOb3RpZmljYXRpb24gb2Jq
ZWN0Om1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKKworICAgIGZvciAoTlNTdHJpbmcgKmtleU5hbWUg
aW4gaXRlbUtWT1Byb3BlcnRpZXMoKSkKKyAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFk
ZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6a2V5TmFtZSBvcHRpb25z
Om5pbCBjb250ZXh0Oih2b2lkICopTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNv
bnRleHRQbGF5ZXJJdGVtXTsKKworICAgIFttX2F2UGxheWVyLmdldCgpIHJlcGxhY2VDdXJyZW50
SXRlbVdpdGhQbGF5ZXJJdGVtOm1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKIAogICAgIHNldERlbGF5
Q2FsbGJhY2tzKGZhbHNlKTsKIH0KQEAgLTMxNCw3ICszMjEsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6YmVnaW5Mb2FkaW5nTWV0YWRhdGEoKQogewotICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXlhYmlsaXR5S25vd24oJXApIC0g
cmVxdWVzdGluZyBtZXRhZGF0YSBsb2FkaW5nIiwgdGhpcyk7CisgICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YmVnaW5Mb2FkaW5nTWV0YWRhdGEoJXAp
IC0gcmVxdWVzdGluZyBtZXRhZGF0YSBsb2FkaW5nIiwgdGhpcyk7CiAgICAgW21fYXZBc3NldC5n
ZXQoKSBsb2FkVmFsdWVzQXN5bmNocm9ub3VzbHlGb3JLZXlzOlthc3NldE1ldGFkYXRhS2V5TmFt
ZXMoKSByZXRhaW5dIGNvbXBsZXRpb25IYW5kbGVyOl57CiAgICAgICAgIFttX29iamNPYnNlcnZl
ci5nZXQoKSBtZXRhZGF0YUxvYWRlZF07CiAgICAgfV07CkBAIC0zMjMsNyArMzMwLDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjpJdGVtU3RhdHVzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXllckl0ZW1TdGF0dXMoKSBjb25zdAogewogICAgIGlmICghbV9hdlBsYXllckl0ZW0p
Ci0gICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxh
eWVyQVZQbGF5ZXJJdGVtU3RhdHVzVW5rbm93bjsKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNEb2VzTm90
RXhpc3Q7CiAKICAgICBBVlBsYXllckl0ZW1TdGF0dXMgc3RhdHVzID0gW21fYXZQbGF5ZXJJdGVt
LmdldCgpIHN0YXR1c107CiAgICAgaWYgKHN0YXR1cyA9PSBBVlBsYXllckl0ZW1TdGF0dXNVbmtu
b3duKQpAQCAtMzMyLDcgKzMzOSw3IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
SXRlbVN0YXQKICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNGYWlsZWQ7CiAgICAgaWYgKFttX2F2UGxheWVy
SXRlbS5nZXQoKSBpc1BsYXliYWNrTGlrZWx5VG9LZWVwVXBdKQogICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1
c1BsYXliYWNrTGlrZWx5VG9LZWVwVXA7Ci0gICAgaWYgKGJ1ZmZlcmVkKCktPmNvbnRhaW4oZHVy
YXRpb24oKSkpCisgICAgaWYgKFttX2F2UGxheWVySXRlbS5nZXQoKSBpc1BsYXliYWNrQnVmZmVy
RnVsbF0pCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1l
ZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUGxheWJhY2tCdWZmZXJGdWxsOwogICAgIGlmIChi
dWZmZXJlZCgpLT5jb250YWluKGN1cnJlbnRUaW1lKCkpKQogICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1Bs
YXliYWNrQnVmZmVyRW1wdHk7CkBAIC0zODUsMTEgKzM5MiwxOCBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnBsYXRmb3JtRHVyYXRpb24oKSBjb25zdAogewotICAgIGlmICghbWV0YURh
dGFBdmFpbGFibGUoKSB8fCAhbV9hdlBsYXllckl0ZW0pCisgICAgaWYgKCFtZXRhRGF0YUF2YWls
YWJsZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBmbG9hdCBkdXJhdGlvbjsKLSAg
ICBDTVRpbWUgY21EdXJhdGlvbiA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBkdXJhdGlvbl07Cisg
ICAgQ01UaW1lIGNtRHVyYXRpb247CisgICAgCisgICAgLy8gQ2hlY2sgdGhlIGF2aXRlbSBpZiB3
ZSBoYXZlIG9uZSwgc29tZSBhc3NldHMgbmV2ZXIgcmVwb3J0IGR1cmF0aW9uLgorICAgIGlmICht
X2F2UGxheWVySXRlbSkKKyAgICAgICAgY21EdXJhdGlvbiA9IFttX2F2UGxheWVySXRlbS5nZXQo
KSBkdXJhdGlvbl07CisgICAgZWxzZQorICAgICAgICBjbUR1cmF0aW9uPSBbbV9hdkFzc2V0Lmdl
dCgpIGR1cmF0aW9uXTsKKwogICAgIGlmIChDTVRJTUVfSVNfTlVNRVJJQyhjbUR1cmF0aW9uKSkK
ICAgICAgICAgZHVyYXRpb24gPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29u
ZHMoY21EdXJhdGlvbikpOwogICAgIGVsc2UgaWYgKENNVElNRV9JU19JTkRFRklOSVRFKGNtRHVy
YXRpb24pKQpAQCAtNTM1LDEwICs1NDksMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOgogICAgIG1fYXZBc3NldCA9IGFzc2V0OwogfQogCi1NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OkFWQXNzZXRTdGF0dXMgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6YXNzZXRTdGF0dXMoKSBjb25zdAorTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpBc3NldFN0YXR1cyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjph
c3NldFN0YXR1cygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2F2QXNzZXQpCi0gICAgICAgIHJldHVy
biBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNVbmtub3duOworICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXJBVkFzc2V0U3RhdHVzRG9lc05vdEV4aXN0OwogCiAgICAgZm9yIChOU1N0cmluZyAqa2V5
TmFtZSBpbiBhc3NldE1ldGFkYXRhS2V5TmFtZXMoKSkgewogICAgICAgICBBVktleVZhbHVlU3Rh
dHVzIGtleVN0YXR1cyA9IFttX2F2QXNzZXQuZ2V0KCkgc3RhdHVzT2ZWYWx1ZUZvcktleTprZXlO
YW1lIGVycm9yOm5pbF07CkBAIC01ODcsNyArNjAxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAg
c2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwogCi0gICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpwYWludChjb250ZXh0LCByZWN0KTsKKyAgICBtX3ZpZGVvRnJhbWVIYXNEcmF3biA9
IHRydWU7CiB9CiAKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCkBAIC02
NjIsMzcgKzY3Niw1MSBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dHJhY2tzQ2hhbmdl
ZCgpCiB7CisgICAgaWYgKCFtX2F2QXNzZXQpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIFRo
aXMgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSB0cmFja3MgY29sbGVjdGlvbiBjaGFuZ2VzIHNvIGNh
Y2hlIGhhc1ZpZGVvIGFuZCBoYXNBdWRpbyBzaW5jZSB3ZSBhcmUKICAgICAvLyBhc2tlZCBhYm91
dCB0aG9zZSBmYWlybHkgZmVxdWVudGx5LgotICAgIGJvb2wgaGFzVmlkZW8gPSBmYWxzZTsKLSAg
ICBib29sIGhhc0F1ZGlvID0gZmFsc2U7Ci0gICAgYm9vbCBoYXNDYXB0aW9ucyA9IGZhbHNlOwot
ICAgIE5TQXJyYXkgKnRyYWNrcyA9IFttX2F2UGxheWVySXRlbS5nZXQoKSB0cmFja3NdOwotICAg
IGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sgKnRyYWNrIGluIHRyYWNrcykgewotICAgICAgICBpZiAo
W3RyYWNrIGlzRW5hYmxlZF0pIHsKLSAgICAgICAgICAgIEFWQXNzZXRUcmFjayAqYXNzZXRUcmFj
ayA9IFt0cmFjayBhc3NldFRyYWNrXTsKLSAgICAgICAgICAgIGlmIChbW2Fzc2V0VHJhY2sgbWVk
aWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVWaWRlb10pCi0gICAgICAgICAgICAg
ICAgaGFzVmlkZW8gPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAoW1thc3NldFRyYWNrIG1l
ZGlhVHlwZV0gaXNFcXVhbFRvU3RyaW5nOkFWTWVkaWFUeXBlQXVkaW9dKQotICAgICAgICAgICAg
ICAgIGhhc0F1ZGlvID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtbYXNzZXRUcmFjayBt
ZWRpYVR5cGVdIGlzRXF1YWxUb1N0cmluZzpBVk1lZGlhVHlwZUNsb3NlZENhcHRpb25dKQotICAg
ICAgICAgICAgICAgIGhhc0NhcHRpb25zID0gdHJ1ZTsKKyAgICBpZiAoIW1fYXZQbGF5ZXJJdGVt
KSB7CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBwbGF5ZXIgaXRlbSB5ZXQsIHNvIGNoZWNr
IHdpdGggdGhlIGFzc2V0IGJlY2F1c2Ugc29tZSBhc3NldHMgc3VwcG9ydCBpbnNwZWN0aW9uCisg
ICAgICAgIC8vIHByaW9yIHRvIGJlY29taW5nIHJlYWR5IHRvIHBsYXkuCisgICAgICAgIHNldEhh
c1ZpZGVvKFtbbV9hdkFzc2V0LmdldCgpIHRyYWNrc1dpdGhNZWRpYUNoYXJhY3RlcmlzdGljOkFW
TWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbF0gY291bnRdKTsKKyAgICAgICAgc2V0SGFzQXVkaW8o
W1ttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzV2l0aE1lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNo
YXJhY3RlcmlzdGljQXVkaWJsZV0gY291bnRdKTsKKyAgICAgICAgc2V0SGFzQ2xvc2VkQ2FwdGlv
bnMoW1ttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlwZUNsb3Nl
ZENhcHRpb25dIGNvdW50XSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYm9vbCBoYXNWaWRlbyA9
IGZhbHNlOworICAgICAgICBib29sIGhhc0F1ZGlvID0gZmFsc2U7CisgICAgICAgIGJvb2wgaGFz
Q2FwdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgTlNBcnJheSAqdHJhY2tzID0gW21fYXZQbGF5ZXJJ
dGVtLmdldCgpIHRyYWNrc107CisgICAgICAgIGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sgKnRyYWNr
IGluIHRyYWNrcykgeworICAgICAgICAgICAgaWYgKFt0cmFjayBpc0VuYWJsZWRdKSB7CisgICAg
ICAgICAgICAgICAgQVZBc3NldFRyYWNrICphc3NldFRyYWNrID0gW3RyYWNrIGFzc2V0VHJhY2td
OworICAgICAgICAgICAgICAgIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFsVG9T
dHJpbmc6QVZNZWRpYVR5cGVWaWRlb10pCisgICAgICAgICAgICAgICAgICAgIGhhc1ZpZGVvID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBp
c0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVBdWRpb10pCisgICAgICAgICAgICAgICAgICAgIGhh
c0F1ZGlvID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChbW2Fzc2V0VHJhY2sgbWVk
aWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVDbG9zZWRDYXB0aW9uXSkKKyAgICAg
ICAgICAgICAgICAgICAgaGFzQ2FwdGlvbnMgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAg
ICB9CisgICAgICAgIHNldEhhc1ZpZGVvKGhhc1ZpZGVvKTsKKyAgICAgICAgc2V0SGFzQXVkaW8o
aGFzQXVkaW8pOworICAgICAgICBzZXRIYXNDbG9zZWRDYXB0aW9ucyhoYXNDYXB0aW9ucyk7CiAg
ICAgfQotICAgIHNldEhhc1ZpZGVvKGhhc1ZpZGVvKTsKLSAgICBzZXRIYXNBdWRpbyhoYXNBdWRp
byk7Ci0gICAgc2V0SGFzQ2xvc2VkQ2FwdGlvbnMoaGFzQ2FwdGlvbnMpOwogCiAgICAgc2l6ZUNo
YW5nZWQoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpz
aXplQ2hhbmdlZCgpCiB7CisgICAgaWYgKCFtX2F2QXNzZXQpCisgICAgICAgIHJldHVybjsKKwog
ICAgIE5TQXJyYXkgKnRyYWNrcyA9IFttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzXTsKIAogICAgIC8v
IFNvbWUgYXNzZXRzIGRvbid0IHJlcG9ydCB0cmFjayBwcm9wZXJ0aWVzIHVudGlsIHRoZXkgYXJl
IGNvbXBsZXRlbHkgcmVhZHkgdG8gcGxheSwgYnV0IHdlCiAgICAgLy8gd2FudCB0byByZXBvcnQg
YSBzaXplIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHNvIHVzZSBwcmVzZW50YXRpb25TaXplIHdoZW4g
YW4gYXNzZXQgaGFzIG5vIHRyYWNrcy4KLSAgICBpZiAoIVt0cmFja3MgY291bnRdKSB7CisgICAg
aWYgKG1fYXZQbGF5ZXJJdGVtICYmICFbdHJhY2tzIGNvdW50XSkgewogICAgICAgICBzZXROYXR1
cmFsU2l6ZShJbnRTaXplKFttX2F2UGxheWVySXRlbS5nZXQoKSBwcmVzZW50YXRpb25TaXplXSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
LmgJKHJldmlzaW9uIDg1MDUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsy
MTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV92aXNpYmxlOwogICAgIGJvb2wgbV9oYXNVbnN1
cHBvcnRlZFRyYWNrczsKICAgICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwotICAgIGJvb2wg
bV9kZWxheWluZ0xvYWQ7CiAgICAgYm9vbCBtX2lzQWxsb3dlZFRvUmVuZGVyOwogICAgIGJvb2wg
bV9wcml2YXRlQnJvd3Npbmc7CiAjaWYgRFJBV19GUkFNRV9SQVRFCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiA4NTA1MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjMyLDkgKzIzMiw5IEBAIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp+TWVkaWFQ
bGF5ZXJQcmkKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZGlzY29ubmVjdF07CiB9CiAKLU5T
TXV0YWJsZURpY3Rpb25hcnkqIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpjb21tb25Nb3ZpZUF0
dHJpYnV0ZXMoKSAKK05TTXV0YWJsZURpY3Rpb25hcnkgKk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
Ojpjb21tb25Nb3ZpZUF0dHJpYnV0ZXMoKSAKIHsKLSAgICByZXR1cm4gW05TTXV0YWJsZURpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICptb3ZpZUF0dHJpYnV0ZXMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOgogICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1f
cGxheWVyLT5wcmVzZXJ2ZXNQaXRjaCgpXSwgUVRNb3ZpZVJhdGVDaGFuZ2VzUHJlc2VydmVQaXRj
aEF0dHJpYnV0ZSwKICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBR
VE1vdmllUHJldmVudEV4dGVybmFsVVJMTGlua3NBdHRyaWJ1dGUsCiAgICAgICAgICAgICBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgUVRTZWN1cml0eVBvbGljeU5vQ3Jvc3NTaXRlQXR0
cmlidXRlLApAQCAtMjQzLDYgKzI0MywxMSBAQCBOU011dGFibGVEaWN0aW9uYXJ5KiBNZWRpYVBs
YXllclByaXZhdGVRCiAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IW1fcHJp
dmF0ZUJyb3dzaW5nXSwgQCJRVE1vdmllQWxsb3dQZXJzaXN0ZW50Q2FjaGVBdHRyaWJ1dGUiLAog
ICAgICAgICAgICAgUVRNb3ZpZUFwZXJ0dXJlTW9kZUNsZWFuLCBRVE1vdmllQXBlcnR1cmVNb2Rl
QXR0cmlidXRlLAogICAgICAgICAgICAgbmlsXTsKKworICAgIGlmIChtX3ByZWxvYWQgPCBNZWRp
YVBsYXllcjo6QXV0bykKKyAgICAgICAgW21vdmllQXR0cmlidXRlcyBzZXRWYWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6QCJRVE1vdmllTGltaXRSZWFkQWhlYWRBdHRy
aWJ1dGUiXTsKKworICAgIHJldHVybiBtb3ZpZUF0dHJpYnV0ZXM7CiB9CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZVFUTW92aWUoY29uc3QgU3RyaW5nJiB1cmwpCkBAIC02
MzQsOCArNjM5LDYgQEAgUVRUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVAog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZXN1bWVMb2FkKCkKIHsKLSAgICBtX2Rl
bGF5aW5nTG9hZCA9IGZhbHNlOwotCiAgICAgaWYgKCFtX21vdmllVVJMLmlzTnVsbCgpKQogICAg
ICAgICBsb2FkSW50ZXJuYWwobV9tb3ZpZVVSTCk7CiB9CkBAIC02NDQsMTIgKzY0Nyw5IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWQoY29uc3QKIHsKICAgICBtX21vdmllVVJM
ID0gdXJsOwogCi0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IHN1cHBvc2VkIHRvIGxvYWQg
YW55IGRhdGEgcmV0dXJuIGltbWVkaWF0ZWx5IGJlY2F1c2UgUVRLaXQKLSAgICAvLyBkb2Vzbid0
IGhhdmUgQVBJIHRvIHRocm90dGxlIGxvYWRpbmcuCi0gICAgaWYgKG1fcHJlbG9hZCA9PSBNZWRp
YVBsYXllcjo6Tm9uZSkgewotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IHRydWU7CisgICAgLy8g
SWYgdGhlIGVsZW1lbnQgaXMgbm90IHN1cHBvc2VkIHRvIGxvYWQgYW55IGRhdGEgcmV0dXJuIGlt
bWVkaWF0ZWx5LgorICAgIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6Ok5vbmUpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICBsb2FkSW50ZXJuYWwodXJsKTsKIH0KQEAgLTY4NSw4
ICs2ODUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkSW50ZXJuCiAKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnByZXBhcmVUb1BsYXkoKQogewotICAgIGlmICgh
bV9xdE1vdmllIHx8IG1fZGVsYXlpbmdMb2FkKQotICAgICAgICByZXN1bWVMb2FkKCk7CisgICAg
c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6QXV0byk7CiB9CiAKIFBsYXRmb3JtTWVkaWEgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OnBsYXRmb3JtTWVkaWEoKSBjb25zdApAQCAtMTU5Miw4ICsxNTkx
LDEzIEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHIKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlByZWxvYWQgcHJl
bG9hZCkKIHsKICAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwotICAgIGlmIChtX2RlbGF5aW5nTG9h
ZCAmJiBtX3ByZWxvYWQgIT0gTWVkaWFQbGF5ZXI6Ok5vbmUpCisgICAgaWYgKG1fcHJlbG9hZCA9
PSBNZWRpYVBsYXllcjo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3F0TW92
aWUpCiAgICAgICAgIHJlc3VtZUxvYWQoKTsKKyAgICBlbHNlIGlmIChtX3ByZWxvYWQgPT0gTWVk
aWFQbGF5ZXI6OkF1dG8pCisgICAgICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0QXR0cmlidXRlOltO
U051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gZm9yS2V5OkAiUVRNb3ZpZUxpbWl0UmVhZEFoZWFk
QXR0cmlidXRlIl07CiB9CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptZWRpYVRp
bWVGb3JUaW1lVmFsdWUoZmxvYXQgdGltZVZhbHVlKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91681</attachid>
            <date>2011-04-29 07:56:03 -0700</date>
            <delta_ts>2011-04-29 13:51:09 -0700</delta_ts>
            <desc>Manual test for &apos;preload&apos; attribute.</desc>
            <filename>patch_test.txt</filename>
            <type>text/plain</type>
            <size>10146</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzIxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDQtMjkgIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZWxvYWQgYXR0cmlidXRlIG9mIHRoZSB2aWRl
byB0YWcgaXMgbm90IGNvbXBsZXRlbHkgaW1wbGVtZW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjczCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83NTA4MzIyPgorCisgICAgICAgIE1hbnVhbCB0ZXN0IG1hbnVhbC10ZXN0cy9tZWRpYS1lbGVt
ZW50cy92aWRlby1wcmVsb2FkLmh0bWwgYWRkZWQuCisKKyAgICAgICAgKiBtYW51YWwtdGVzdHMv
bWVkaWEtZWxlbWVudHMvdmlkZW8tcHJlbG9hZC5odG1sOiBBZGRlZC4gTmV3IG1hbnVhbCB0ZXN0
IGZvciBtZWRpYSBlbGVtZW50IAorICAgICAgICAgICAgJ3ByZWxvYWQnIGF0dHJpYnV0ZSBiZWNh
dXNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZXRlY3QgaWYgYSBtZWRpYSBlbmdpbmUgc3VwcG9y
dHMgCisgICAgICAgICAgICAicHJlbG9hZD1tZXRhZGF0YSIgaW4gYSB3YXkgdGhhdCBsZXRzIHVz
IGhhdmUgcGVyLXBsYXRmb3JtIGxheW91dCB0ZXN0IHJlc3VsdHMuCisKIDIwMTEtMDQtMjkgIFBh
dmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hbnVhbC10ZXN0cy9t
ZWRpYS1lbGVtZW50cy92aWRlby1wcmVsb2FkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbWFudWFsLXRlc3RzL21lZGlhLWVsZW1lbnRzL3ZpZGVvLXByZWxvYWQuaHRtbAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL21hbnVhbC10ZXN0cy9tZWRpYS1lbGVtZW50cy92
aWRlby1wcmVsb2FkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMwIEBACis8IWRvY3R5
cGUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgIDx0aXRsZT5wcmVsb2FkIHRlc3Q8L3Rp
dGxlPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lk
dGgiPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgICAg
IGJvZHkgeyBmb250LWZhbWlseTogZ2VvcmdpYSwgc2VyaWY7IGJhY2tncm91bmQ6IGdyYXk7IH0K
KyAgICAgICAgdmlkZW8geyBiYWNrZ3JvdW5kOiB5ZWxsb3c7IH0KKyAgICAgICAgLmluZm8geyBi
YWNrZ3JvdW5kLWNvbG9yOiNlM2UzZjM7IHBhZGRpbmc6MTBweDsgYm9yZGVyOjFweCBzb2xpZCAj
OWM5OyB3aWR0aDo1MDBweDsgfQorICAgICAgICAuaW5mbyB0YWJsZSB7IGJhY2tncm91bmQ6ICNm
ZmY7IHdpZHRoOjUwMHB4OyB9CisgICAgICAgIC5pbmZvIHRkIHsgYm9yZGVyOjFweCBzb2xpZDsg
Ym9yZGVyLWNvbG9yOiNmZmYgI2JiYiAjYmJiICNmZmY7IGJhY2tncm91bmQtY29sb3I6I2ZmZjsg
cGFkZGluZzoycHg7IGZvbnQtc2l6ZTouN2VtOyB3aWR0aDo1MCU7fQorICAgICAgICAjZXZlbnRf
bG9nIHsgYmFja2dyb3VuZDogI2ZmZjsgZm9udC1zaXplOi41ZW07IHdpZHRoOiAxMDAlOyB9Cisg
ICAgICAgIC5yaWdodCB7IGZsb2F0OnJpZ2h0OyB9CisgICAgICAgIC5sZWZ0IHsgZmxvYXQ6bGVm
dDsgfQorICAgICAgICAjcmVmcmVzaCB7IG1hcmdpbi10b3A6MTBweDsgfQorICAgIDwvc3R5bGU+
CisKKyAgICA8c2NyaXB0PgorICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
ZWRtZXRhZGF0YScsIHF1ZXJ5bW92aWUpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCd3YWl0aW5nJywgcXVlcnltb3ZpZSk7CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoJ2Vycm9yJywgcXVlcnltb3ZpZSk7CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoJ2R1cmF0aW9uY2hhbmdlJywgcXVlcnltb3ZpZSk7CisgICAgICAgIGRvY3VtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcXVlcnltb3ZpZSk7CisgICAgICAgIGRvY3VtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCBxdWVyeW1vdmllKTsKKyAgICAgICAgZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHF1ZXJ5bW92aWUpOworCisgICAgICAgIC8vIGxv
ZyBhbGwgZXZlbnRzCisgICAgICAgIHZhciBldmVudHMgPSBbImFib3J0IiwgImJlZm9yZWxvYWQi
LCAiY2FucGxheSIsICJjYW5wbGF5dGhyb3VnaCIsICJkdXJhdGlvbmNoYW5nZSIsICJlbXB0aWVk
IiwgImVuZGVkIiwgImVycm9yIiwgImxvYWRlZGRhdGEiLCAibG9hZGVkbWV0YWRhdGEiLCAibG9h
ZHN0YXJ0IiwgInBhdXNlIiwgInBsYXkiLCAicGxheWluZyIsICJwcm9ncmVzcyIsICJyYXRlY2hh
bmdlIiwgInNlZWtlZCIsICJzZWVraW5nIiwgInN0YWxsZWQiLCAic3VzcGVuZCIsICJ0aW1ldXBk
YXRlIiwgInZvbHVtZWNoYW5nZSIsICJ3YWl0aW5nIiwgIndlYmtpdGJlZ2luZnVsbHNjcmVlbiIs
ICJ3ZWJraXRlbmRmdWxsc2NyZWVuIl07CisgICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGV2ZW50
cy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZl
bnRzW2ldLCBsb2dQcm9ncmVzcywgdHJ1ZSk7CisKKyAgICAgICAgZnVuY3Rpb24gcHJpbnRUaW1l
UmFuZ2VWYWx1ZShlbGVtZW50LCBwcm9wKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmFu
Z2U7CisgICAgCisgICAgICAgICAgICBpZiAocHJvcCA9PSAnTWF4IHRpbWUgYnVmZmVyZWQnKQor
ICAgICAgICAgICAgICAgIHJhbmdlID0gZWxlbWVudC5idWZmZXJlZDsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHByb3AgPT0gIk1heCB0aW1lIHNlZWthYmxlIikKKyAgICAgICAgICAgICAgICByYW5n
ZSA9IGVsZW1lbnQuc2Vla2FibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YWxlcnQocHJvcCk7CisgICAgICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgICAgIHJl
dHVybiAidW5kZWZpbmVkIjsKKworICAgICAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQoMCkudG9GaXhlZCgyKSArICIuLiIgKyByYW5n
ZS5lbmQoMCkudG9GaXhlZCgyKSArICIgW2xlbmd0aCA9IiArIHJhbmdlLmxlbmd0aCArICJdIjsK
KyAgICAgICAgICAgIHJldHVybiAiW3JhbmdlIGxlbmd0aCA9ICIgKyByYW5nZS5sZW5ndGggKyAi
XSI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHN0YXRlUHJvcGVydHlW
YWx1ZShlbGVtZW50LCBwcm9wKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVhZHlOYW1l
cyA9IFsnSEFWRV9OT1RISU5HJywgJ0hBVkVfTUVUQURBVEEnLCAnSEFWRV9DVVJSRU5UX0RBVEEn
LCAnSEFWRV9GVVRVUkVfREFUQScsICdIQVZFX0VOT1VHSF9EQVRBJ107CisgICAgICAgICAgICB2
YXIgbmV0d29ya05hbWVzID0gWydORVRXT1JLX0VNUFRZJywgJ05FVFdPUktfSURMRScsICdORVRX
T1JLX0xPQURJTkcnLCAnTkVUV09SS19MT0FERUQnLCAnTkVUV09SS19OT19TT1VSQ0UnXTsKKyAg
ICAgICAgICAgIHZhciB2YWx1ZTsKKworICAgICAgICAgICAgaWYgKHByb3A9PSAnUmVhZHkgU3Rh
dGUnKQorICAgICAgICAgICAgICAgIHZhbHVlID0gcmVhZHlOYW1lc1tlbGVtZW50LnJlYWR5U3Rh
dGVdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gbmV0d29ya05h
bWVzW2VsZW1lbnQubmV0d29ya1N0YXRlXTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHF1ZXJ5bW92aWUoZXZ0KQorICAgICAgICB7Cisg
ICAgICAgICAgICB2YXIgbW92aWVQcm9wZXJ0aWVzID0gCisgICAgICAgICAgICBbIAorICAgICAg
ICAgICAgICAgIFsiU291cmNlIiwgInNyYyJdLCAKKyAgICAgICAgICAgICAgICBbIkN1cnJlbnQg
U291cmNlIiwgImN1cnJlbnRTcmMiXSwgCisgICAgICAgICAgICAgICAgWyJEdXJhdGlvbiIsICJk
dXJhdGlvbiJdLCAKKyAgICAgICAgICAgICAgICBbIlZpZGVvIFdpZHRoIiwgInZpZGVvV2lkdGgi
XSwgCisgICAgICAgICAgICAgICAgWyJWaWRlbyBIZWlnaHQiLCAidmlkZW9IZWlnaHQiXSwgCisg
ICAgICAgICAgICAgICAgWyJEZWZhdWx0IFBsYXliYWNrIFJhdGUiLCAiZGVmYXVsdFBsYXliYWNr
UmF0ZSJdLCAKKyAgICAgICAgICAgICAgICBbIlZvbHVtZSIsICJ2b2x1bWUiXSwgCisgICAgICAg
ICAgICAgICAgWyJQcmVsb2FkIiwgInByZWxvYWQiXSwgCisgICAgICAgICAgICAgICAgWyJSZWFk
eSBTdGF0ZSIsIHN0YXRlUHJvcGVydHlWYWx1ZV0sIAorICAgICAgICAgICAgICAgIFsiTmV0d29y
ayBTdGF0ZSIsIHN0YXRlUHJvcGVydHlWYWx1ZV0sCisgICAgICAgICAgICAgICAgWyJNYXggdGlt
ZSBidWZmZXJlZCIsIHByaW50VGltZVJhbmdlVmFsdWVdLCAKKyAgICAgICAgICAgICAgICBbIk1h
eCB0aW1lIHNlZWthYmxlIiwgcHJpbnRUaW1lUmFuZ2VWYWx1ZV0KKyAgICAgICAgICAgIF07CisK
KyAgICAgICAgICAgIHZhciB2aWQgPSBldnQgPyBldnQudGFyZ2V0IDogZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3ZpZCcpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb3ZpZVBy
b3BlcnRpZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFy
IHByb3AgPSBtb3ZpZVByb3BlcnRpZXNbaV07CisgICAgICAgICAgICAgICAgdmFyIHZhbDsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BbMV0gPT0gJ2Z1
bmN0aW9uJykKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gcHJvcFsxXSh2aWQsIHByb3BbMF0p
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gdmlkW3By
b3BbMV1dOworICAgIAorICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09ICdudW1iZXIn
KQorICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudG9GaXhlZCgyKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAg
ICAgICB2YWwgPSAidW5kZWZpbmVkIjsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChwcm9wWzBdKS5pbm5lckhUTUwgPSB2YWw7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBzZXRVUkwodXJsLCB2aWRJRCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdmFyIHZpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZpZElEKTsKKworICAg
ICAgICAgICAgbG9nTXNnKHZpZCwgIiMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgbG9n
TXNnKHZpZCwgIiMjIyMjIHNldHRpbmcgdXJsIHRvICIgKyB1cmwpOworICAgICAgICAgICAgaWYg
KCB1cmwgIT0gIiIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZpZC5zcmMgPSB1
cmw7CisgICAgICAgICAgICAgICAgdmlkLmxvYWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBjbG9ja1RpbWUoKQorICAgICAgICB7CisgICAgICAgICAg
ICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAgICAgICAgIHZhciBob3VyID0gbm93LmdldEhv
dXJzKCk7CisgICAgICAgICAgICB2YXIgbWludXRlID0gbm93LmdldE1pbnV0ZXMoKTsKKyAgICAg
ICAgICAgIHZhciBzZWNvbmQgPSBub3cuZ2V0U2Vjb25kcygpOworICAgICAgICAgICAgdmFyIG1p
bGxpID0gbm93LmdldE1pbGxpc2Vjb25kcygpOworICAgICAgICAgICAgaWYgKGhvdXIgPiAxMikg
CisgICAgICAgICAgICAgICAgaG91ciA9IGhvdXIgLSAxMjsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGhvdXIgPT0gMCkgCisgICAgICAgICAgICAgICAgaG91ciA9IDEyOworICAgICAgICAgICAgaWYg
KGhvdXIgICA8IDEwKSAKKyAgICAgICAgICAgICAgICBob3VyID0gIjAiICsgaG91cjsKKyAgICAg
ICAgICAgIGlmIChtaW51dGUgPCAxMCkKKyAgICAgICAgICAgICAgICBtaW51dGUgPSAiMCIgKyBt
aW51dGU7CisgICAgICAgICAgICBpZiAoc2Vjb25kIDwgMTApIAorICAgICAgICAgICAgICAgIHNl
Y29uZCA9ICIwIiArIHNlY29uZDsKKyAgICAgICAgICAgIGlmIChtaWxsaSA8IDEwKSAKKyAgICAg
ICAgICAgICAgICBtaWxsaSA9ICIwMCIgKyBtaWxsaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1p
bGxpIDwgMTAwKSAKKyAgICAgICAgICAgICAgICBtaWxsaSA9ICIwIiArIG1pbGxpOworCisgICAg
ICAgICAgICByZXR1cm4gaG91ciArICc6JyArIG1pbnV0ZSArICc6JyArIHNlY29uZCArICcuJyAr
IG1pbGxpOworICAgICAgICB9IAorCisgICAgICAgIGZ1bmN0aW9uIGxvZ01zZyh2aWQsIG1zZykK
KyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V2ZW50X2xv
ZycpLnZhbHVlICs9IGNsb2NrVGltZSgpICsgIiAtICIgKyBtc2cgKyAnIFxyJzsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gY2xlYXJsb2coKQorICAgICAgICB7CisgICAg
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXZlbnRfbG9nJykudmFsdWUgPSAnJzsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gbG9nUHJvZ3Jlc3MoZXYpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciB2aWQgPSBldi50YXJnZXQ7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChldi50eXBlID09ICd0aW1ldXBkYXRlJykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB2YXIgbG9nVGltZXVwZGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdsb2ctdGltZXVwZGF0ZScpOworICAgICAgICAgICAgICAgIGlmICghbG9nVGltZXVwZGF0
ZS5jaGVja2VkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZXYudHlwZSA9PSAncHJvZ3Jlc3MnKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHZhciBsb2dUaW1ldXBkYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2xvZy1wcm9ncmVzcycpOworICAgICAgICAgICAgICAgIGlmICghbG9nVGltZXVwZGF0ZS5jaGVj
a2VkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGxvZ01zZyh2aWQsIGV2LnR5cGUgKyAnICh0aW1lID0gJyArIHZpZC5jdXJyZW50VGlt
ZS50b0ZpeGVkKDIpICsgJyknKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rp
b24gbG9nRXJyb3IoZXYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB2aWQgPSBldi50YXJn
ZXQ7CisgICAgICAgICAgICBsb2dNc2codmlkLCAidmlkLmVycm9yID0gIiArIHZpZC5lcnJvci5j
b2RlKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgZnVuY3Rpb24gcHJlbG9hZCh2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIHZpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2
aWQiKTsKKyAgICAgICAgICAgIHZhciBvbGQgPSB2aWQucHJlbG9hZDsKKyAgICAgICAgICAgIHZp
ZC5wcmVsb2FkPXZhbHVlOworICAgICAgICAgICAgcXVlcnltb3ZpZSgpOworICAgICAgICB9Cisg
ICAgPC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJxdWVyeW1vdmllKCkiPgor
ICAgIDxwPgorICAgICAgICA8dmlkZW8gaWQ9InZpZCIgc3JjPSJodHRwOi8vdHJhaWxlcnMuYXBw
bGUuY29tL21vdmllcy93ZWluc3RlaW4vc3VibWFyaW5lL3N1Ym1hcmluZS10bHIxXzQ4MHAubW92
IiBoZWlnaHQ9IjM5MSIgCisgICAgICAgICAgICBjb250cm9scyBwcmVsb2FkPSJtZXRhZGF0YSI+
CisgICAgICAgIDwvdmlkZW8+CisgICAgPC9wPgorICAgIDxwPgorICAgICAgICA8YnV0dG9uIGlk
PSJjb250cm9scyIgb25jbGljaz0icHJlbG9hZCgnbm9uZScpIj5wcmVsb2FkPW5vbmU8L2J1dHRv
bj4KKyAgICAgICAgPGJ1dHRvbiBpZD0iY29udHJvbHMiIG9uY2xpY2s9InByZWxvYWQoJ21ldGFk
YXRhJykiPnByZWxvYWQ9bWV0YWRhdGE8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiBpZD0iY29u
dHJvbHMiIG9uY2xpY2s9InByZWxvYWQoJ2F1dG8nKSI+cHJlbG9hZD1hdXRvPC9idXR0b24+Cisg
ICAgPC9wPgorCisgICAgPGRpdiBjbGFzcz0iaW5mbyBsZWZ0Ij4KKyAgICAgICAgPGlucHV0IGlk
PSJxdWVyeW1vdmllIiB0eXBlPSJidXR0b24iIHZhbHVlPSJSZWZyZXNoIiBvbmNsaWNrPSJxdWVy
eW1vdmllKCkiPgorICAgICAgICA8YnI+CisgICAgICAgIDx0YWJsZT4KKyAgICAgICAgICAgIDx0
Ym9keT4KKyAgICAgICAgICAgICAgICA8dHI+PHRkPlByZWxvYWQ8L3RkPjx0ZCBpZD0iUHJlbG9h
ZCI+PC90ZD48L3RyPgorICAgICAgICAgICAgICAgIDx0cj48dGQ+RHVyYXRpb248L3RkPiA8dGQg
aWQ9IkR1cmF0aW9uIj48L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgPHRyPjx0ZD5WaWRlbyBX
aWR0aDwvdGQ+PHRkIGlkPSJWaWRlbyBXaWR0aCI+PC90ZD48L3RyPgorICAgICAgICAgICAgICAg
IDx0cj48dGQ+VmlkZW8gSGVpZ2h0PC90ZD48dGQgaWQ9IlZpZGVvIEhlaWdodCI+PC90ZD48L3Ry
PgorICAgICAgICAgICAgICAgIDx0cj48dGQ+RGVmYXVsdCBQbGF5YmFjayBSYXRlPC90ZD48dGQg
aWQ9IkRlZmF1bHQgUGxheWJhY2sgUmF0ZSI+PC90ZD48L3RyPgorICAgICAgICAgICAgICAgIDx0
cj48dGQ+Vm9sdW1lPC90ZD48dGQgaWQ9IlZvbHVtZSI+PC90ZD48L3RyPgorICAgICAgICAgICAg
ICAgIDx0cj48dGQ+UmVhZHkgU3RhdGU8L3RkPjx0ZCBpZD0iUmVhZHkgU3RhdGUiPjwvdGQ+PC90
cj4KKyAgICAgICAgICAgICAgICA8dHI+PHRkPk5ldHdvcmsgU3RhdGU8L3RkPjx0ZCBpZD0iTmV0
d29yayBTdGF0ZSI+PC90ZD48L3RyPgorICAgICAgICAgICAgICAgIDx0cj48dGQ+TWF4IHRpbWUg
YnVmZmVyZWQ8L3RkPjx0ZCBpZD0iTWF4IHRpbWUgYnVmZmVyZWQiPjwvdGQ+PC90cj4KKyAgICAg
ICAgICAgICAgICA8dHI+PHRkPk1heCB0aW1lIHNlZWthYmxlPC90ZD48dGQgaWQ9Ik1heCB0aW1l
IHNlZWthYmxlIj48L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgPHRyPjx0ZD5Tb3VyY2U8L3Rk
Pjx0ZCBpZD0iU291cmNlIj48L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgPHRyPjx0ZD5DdXJy
ZW50IFNvdXJjZSA8L3RkPiA8dGQgaWQ9IkN1cnJlbnQgU291cmNlIj48L3RkPjwvdHI+CisgICAg
ICAgICAgICA8L3Rib2R5PgorICAgICAgICA8L3RhYmxlPgorICAgIDwvZGl2PgorCisgICAgPGRp
diBjbGFzcz0iaW5mbyByaWdodCI+CisgICAgICAgIEVudGVyIGEgdXJsOjxpbnB1dCAgdHlwZT0i
dGV4dCIgc2l6ZT0iOTAiIG1heGxlbmd0aD0iMjA0OCIgb25jaGFuZ2U9InNldFVSTCh0aGlzLnZh
bHVlLCAndmlkLTEnKSIgPgorICAgICAgICA8YnI+CisgICAgICAgIDxpbnB1dCBpZD0iY2xlYXJf
bG9nIiB0eXBlPSJidXR0b24iIHZhbHVlPSJDbGVhciIgb25jbGljaz0iY2xlYXJsb2coKSI+IAor
ICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJsb2ctcHJvZ3Jlc3MiPiBsb2cgJ3By
b2dyZXNzJyBldmVudHMKKyAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIGlk
PSJsb2ctdGltZXVwZGF0ZSI+IGxvZyAndGltZXVwZGF0ZScgZXZlbnRzCisgICAgICAgIDx0ZXh0
YXJlYSByb3dzPTMwIGNvbHM9MzAgaWQ9ZXZlbnRfbG9nPjwvdGV4dGFyZWE+CisgICAgICAgIDxk
aXYgaWQ9ImV2ZW50X2xvZyI+PC9kaXY+CisgICAgPC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="84547"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91682</attachid>
            <date>2011-04-29 07:57:59 -0700</date>
            <delta_ts>2011-04-29 13:52:27 -0700</delta_ts>
            <desc>Patch for QTKit based media engine.</desc>
            <filename>patch_qtkit.txt</filename>
            <type>text/plain</type>
            <size>4823</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzIxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDQtMjkgIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZWxvYWQgYXR0cmlidXRlIG9mIHRoZSB2aWRl
byB0YWcgaXMgbm90IGNvbXBsZXRlbHkgaW1wbGVtZW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjczCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83NTA4MzIyPgorCisgICAgICAgIFRlc3QgbWFudWFsbHkgd2l0aCBtYW51YWwtdGVzdHMvbWVk
aWEtZWxlbWVudHMvdmlkZW8tcHJlbG9hZC5odG1sLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNvbW1vbk1vdmllQXR0cmlidXRlcyk6IEFkZCBu
ZXcgImxpbWl0IHJlYWQtYWhlYWQiCisgICAgICAgICAgICBhdHRyaWJ1dGUgd2hlbiBwcmVsb2Fk
IGlzIG5vdCAiYXV0byIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6cmVzdW1lTG9hZCk6IFJlbW92ZSBtX2RlbGF5aW5nTG9hZCwgd2UgZG9uJ3QgbmVlZCBpdC4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkKTogQ29ycmVj
dCBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnBy
ZXBhcmVUb1BsYXkpOiBDYWxsIHNldFByZWxvYWQoJ2F1dG8nKS4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRQcmVsb2FkKTogU2V0IG5ldyBhdHRyaWJ1ZSBp
ZiB3ZSBhbHJlYWR5IGhhdmUKKyAgICAgICAgICAgIGEgUVRNb3ZpZS4KKwogMjAxMS0wNC0yOSAg
UGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJ
KHJldmlzaW9uIDg1MDUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEs
NiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV92aXNpYmxlOwogICAgIGJvb2wgbV9oYXNVbnN1cHBv
cnRlZFRyYWNrczsKICAgICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwotICAgIGJvb2wgbV9k
ZWxheWluZ0xvYWQ7CiAgICAgYm9vbCBtX2lzQWxsb3dlZFRvUmVuZGVyOwogICAgIGJvb2wgbV9w
cml2YXRlQnJvd3Npbmc7CiAjaWYgRFJBV19GUkFNRV9SQVRFCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiA4NTA1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjMyLDkgKzIzMiw5IEBAIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp+TWVkaWFQbGF5
ZXJQcmkKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZGlzY29ubmVjdF07CiB9CiAKLU5TTXV0
YWJsZURpY3Rpb25hcnkqIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpjb21tb25Nb3ZpZUF0dHJp
YnV0ZXMoKSAKK05TTXV0YWJsZURpY3Rpb25hcnkgKk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpj
b21tb25Nb3ZpZUF0dHJpYnV0ZXMoKSAKIHsKLSAgICByZXR1cm4gW05TTXV0YWJsZURpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICptb3ZpZUF0dHJpYnV0ZXMgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOgogICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOm1fcGxh
eWVyLT5wcmVzZXJ2ZXNQaXRjaCgpXSwgUVRNb3ZpZVJhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaEF0
dHJpYnV0ZSwKICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBRVE1v
dmllUHJldmVudEV4dGVybmFsVVJMTGlua3NBdHRyaWJ1dGUsCiAgICAgICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgUVRTZWN1cml0eVBvbGljeU5vQ3Jvc3NTaXRlQXR0cmli
dXRlLApAQCAtMjQzLDYgKzI0MywxMSBAQCBOU011dGFibGVEaWN0aW9uYXJ5KiBNZWRpYVBsYXll
clByaXZhdGVRCiAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IW1fcHJpdmF0
ZUJyb3dzaW5nXSwgQCJRVE1vdmllQWxsb3dQZXJzaXN0ZW50Q2FjaGVBdHRyaWJ1dGUiLAogICAg
ICAgICAgICAgUVRNb3ZpZUFwZXJ0dXJlTW9kZUNsZWFuLCBRVE1vdmllQXBlcnR1cmVNb2RlQXR0
cmlidXRlLAogICAgICAgICAgICAgbmlsXTsKKworICAgIGlmIChtX3ByZWxvYWQgPCBNZWRpYVBs
YXllcjo6QXV0bykKKyAgICAgICAgW21vdmllQXR0cmlidXRlcyBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6QCJRVE1vdmllTGltaXRSZWFkQWhlYWRBdHRyaWJ1
dGUiXTsKKworICAgIHJldHVybiBtb3ZpZUF0dHJpYnV0ZXM7CiB9CiAKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZVFUTW92aWUoY29uc3QgU3RyaW5nJiB1cmwpCkBAIC02MzQs
OCArNjM5LDYgQEAgUVRUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVAogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZXN1bWVMb2FkKCkKIHsKLSAgICBtX2RlbGF5
aW5nTG9hZCA9IGZhbHNlOwotCiAgICAgaWYgKCFtX21vdmllVVJMLmlzTnVsbCgpKQogICAgICAg
ICBsb2FkSW50ZXJuYWwobV9tb3ZpZVVSTCk7CiB9CkBAIC02NDQsMTIgKzY0Nyw5IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWQoY29uc3QKIHsKICAgICBtX21vdmllVVJMID0g
dXJsOwogCi0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IHN1cHBvc2VkIHRvIGxvYWQgYW55
IGRhdGEgcmV0dXJuIGltbWVkaWF0ZWx5IGJlY2F1c2UgUVRLaXQKLSAgICAvLyBkb2Vzbid0IGhh
dmUgQVBJIHRvIHRocm90dGxlIGxvYWRpbmcuCi0gICAgaWYgKG1fcHJlbG9hZCA9PSBNZWRpYVBs
YXllcjo6Tm9uZSkgewotICAgICAgICBtX2RlbGF5aW5nTG9hZCA9IHRydWU7CisgICAgLy8gSWYg
dGhlIGVsZW1lbnQgaXMgbm90IHN1cHBvc2VkIHRvIGxvYWQgYW55IGRhdGEgcmV0dXJuIGltbWVk
aWF0ZWx5LgorICAgIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6Ok5vbmUpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKICAgICBsb2FkSW50ZXJuYWwodXJsKTsKIH0KQEAgLTY4NSw4ICs2
ODUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkSW50ZXJuCiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnByZXBhcmVUb1BsYXkoKQogewotICAgIGlmICghbV9x
dE1vdmllIHx8IG1fZGVsYXlpbmdMb2FkKQotICAgICAgICByZXN1bWVMb2FkKCk7CisgICAgc2V0
UHJlbG9hZChNZWRpYVBsYXllcjo6QXV0byk7CiB9CiAKIFBsYXRmb3JtTWVkaWEgTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OnBsYXRmb3JtTWVkaWEoKSBjb25zdApAQCAtMTU5Miw4ICsxNTkxLDEz
IEBAIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHIKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OnNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlByZWxvYWQgcHJlbG9h
ZCkKIHsKICAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwotICAgIGlmIChtX2RlbGF5aW5nTG9hZCAm
JiBtX3ByZWxvYWQgIT0gTWVkaWFQbGF5ZXI6Ok5vbmUpCisgICAgaWYgKG1fcHJlbG9hZCA9PSBN
ZWRpYVBsYXllcjo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3F0TW92aWUp
CiAgICAgICAgIHJlc3VtZUxvYWQoKTsKKyAgICBlbHNlIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQ
bGF5ZXI6OkF1dG8pCisgICAgICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0QXR0cmlidXRlOltOU051
bWJlciBudW1iZXJXaXRoQm9vbDpOT10gZm9yS2V5OkAiUVRNb3ZpZUxpbWl0UmVhZEFoZWFkQXR0
cmlidXRlIl07CiB9CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptZWRpYVRpbWVG
b3JUaW1lVmFsdWUoZmxvYXQgdGltZVZhbHVlKSBjb25zdAo=
</data>
<flag name="review"
          id="84548"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91683</attachid>
            <date>2011-04-29 07:58:47 -0700</date>
            <delta_ts>2011-05-03 14:16:43 -0700</delta_ts>
            <desc>Patch for AVFoundation based media engine</desc>
            <filename>patch_AVF.txt</filename>
            <type>text/plain</type>
            <size>27995</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzIxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDQtMjkgIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZWxvYWQgYXR0cmlidXRlIG9mIHRoZSB2aWRl
byB0YWcgaXMgbm90IGNvbXBsZXRlbHkgaW1wbGVtZW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjczCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83NTA4MzIyPgorCisgICAgICAgIFRlc3RlZCBtYW51YWxseSB3aXRoIG1hbnVhbC10ZXN0cy9t
ZWRpYS1lbGVtZW50cy92aWRlby1wcmVsb2FkLmh0bWwuCisKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRN
TE1lZGlhRWxlbWVudCk6IEluaXRpYWxpemUgbV9oYXZlUHJlcGFyZWRUb1BsYXkuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZVRvUGxheSk6IE5ldywgdGVs
bCBwbGF5ZXIgdG8gcHJlcGFyZSB0byBwbGF5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6c2Vlayk6IENhbGwgcHJlcGFyZVRvUGxheSB3aGVuIHByZWxvYWQgaXMgbGVzcyB0
aGFuICdtZXRhZGF0YScKKyAgICAgICAgICAgIGJlY2F1c2Ugd2UgbmVlZCB0byBoYXZlIG1lZGlh
IGRhdGEgbG9hZGVkIHRvIHNlZWsuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
Ojp1cGRhdGVQbGF5U3RhdGUpOiBDYWxsIHByZXBhcmVUb1BsYXkuCisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50Lmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uKTogIFJlbW92ZSAKKyAgICAgICAgICAgIG1fdmlkZW9GcmFtZUhhc0RyYXduIGFu
ZCBtX2RlbGF5aW5nTG9hZCBhcyB0aGV5IGFyZSBubyBsb25nZXIgdXNlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cmVzdW1lTG9hZCk6IFJlbW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Omxv
YWQpOiBEb24ndCBpbml0aWFsaXplIG1fdmlkZW9GcmFtZUhhc0RyYXduLiAKKyAgICAgICAgICAg
IE1vdmUgYWxsIHByZWxvYWQgbG9naWMgdG8gc2V0UHJlbG9hZCwgY2FsbCBpdCBmcm9tIGhlcmUu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnByZXBh
cmVUb1BsYXkpOiBNb3ZlIGFsbCBwcmVsb2FkIGxvZ2ljIHRvIAorICAgICAgICAgICAgc2V0UHJl
bG9hZCwgY2FsbCBpdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6ZHVyYXRpb24pOiBEb24ndCBjYWNoZSBkdXJhdGlvbiA9IDAsIGl0IGlzCisgICAg
ICAgICAgICB1bmxpa2VseSB0byBiZSBjb3JyZWN0IGFuZCBpc24ndCB3b3J0aCBjYWNoaW5nLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp1cGRhdGVT
dGF0ZXMpOiBVcGRhdGUgZm9yIG5hbWUgY2hhbmdlIEFWQXNzZXRTdGF0dXMKKyAgICAgICAgICAg
IHRvIEFzc2V0U3RhdHVzLiBDcmVhdGUgdGhlIEFWUGxheWVyIG9uY2Ugd2Uga25vdyBhbiBhc3Nl
dCBpcyBwbGF5YWJsZSBidXQgcHJlbG9hZCBpcworICAgICAgICAgICAgJ21ldGFkYXRhJy4gU2V0
IG5ldHdvcmtTdGF0ZSB0byAnaWRsZScgd2hlbiB0aGUgcGxheWJhY2sgYnVmZmVyIGlzIGZ1bGwg
YmVjYXVzZSB0aGF0IGlzCisgICAgICAgICAgICBhIHNpZ25hbCB0aGF0IEFWRm91bmRhdGlvbiB3
b24ndCBkbyBhbnkgbW9yZSBJTy4gU2V0IHJlYWR5U3RhdGUgdG8gJ0hBVkVfQ1VSUkVOVF9EQVRB
JyAKKyAgICAgICAgICAgIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGlzIGF2YWlsYWJsZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWV0YWRhdGFMb2Fk
ZWQpOiBDYWxsIHRyYWNrc0NoYW5nZWQgc28gd2UgY2FjaGUKKyAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIGhhc1ZpZGVvLCBldGMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnJlcGFpbnQpOiBEb24ndCBzZXQgbV92aWRlb0ZyYW1lSGFzRHJhd24s
IGl0IGlzIGRvbmUKKyAgICAgICAgICAgIGluIGRlcml2ZWQgY2xhc3Nlcy4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0UHJlbG9hZCk6IENlbnRy
YWxpemUgYWxsIGxvZ2ljIGFib3V0IHdoZW4gdG8gY3JlYXRlCisgICAgICAgICAgICBBVkFzc2V0
IGFuZCBBVlBsYXllckl0ZW0gaGVyZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmg6CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQyk6IEluaXRpYWxpemUKKyAgICAgICAgICAgIG1fdmlkZW9GcmFtZUhhc0RyYXdu
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6IE5ldywgcmVuYW1lZCBmcm9tCisgICAgICAgICAgICB2
aWRlb0xheWVySXNSZWFkeVRvRGlzcGxheS4gUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSBhIGxheWVy
IHdpdGggZnJhbWVzIGF2YWlsYWJsZSBvcgorICAgICAgICAgICAgaWYgd2UgaGF2ZSBwYWludGVk
IGEgZnJhbWUgdG8gdGhlIGNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKTogTmV3LCBjcmVhdGUg
dGhlIEFWQXNzZXQKKyAgICAgICAgICAgIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JDYWNo
ZVJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllcik6IFJlc3RydWN0dXJlIGxvZ2ljLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRl
QVZQbGF5ZXJJdGVtKTogTmV3LCBjcmVhdGUgQVZQbGF5ZXJJdGVtLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YmVnaW5Mb2FkaW5nTWV0YWRh
dGEpOiBDb3JyZWN0IGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpwbGF5ZXJJdGVtU3RhdHVzKTogUmV0dXJuICJidWZmZXIgZnVs
bCIgd2hlbgorICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBmdWxsLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1EdXJhdGlvbik6
IEdldCB0aGUgZHVyYXRpb24gZnJvbSB0aGUKKyAgICAgICAgICAgIEFWQXNzZXQgd2hlbiB3ZSBo
YXZlbid0IGFsbG9jYXRlZCB0aGUgQVZQbGF5ZXJJdGVtIHlldCBzbyB0aGF0IHdlIGNhbiByZXR1
cm4gZHVyYXRpb24KKyAgICAgICAgICAgIHdoZW4gd2Ugb25seSBoYXZlIG1ldGFkYXRhLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YXNzZXRT
dGF0dXMpOiBVcGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnQpOiBTZXQgbV92aWRlb0ZyYW1lSGFz
RHJhd24uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjp0cmFja3NDaGFuZ2VkKTogR2V0IGF0dHJpYnV0ZXMgZnJvbSBBVkFzc2V0CisgICAgICAg
ICAgICB3aGVuIHdoZW4gd2UgaGF2ZW4ndCBhbGxvY2F0ZWQgdGhlIEFWUGxheWVySXRlbSB5ZXQg
c28gdGhhdCB3ZSBjYW4gcmVwb3J0IGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHdoZW4gd2Ugb25s
eSBoYXZlIG1ldGFkYXRhLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6c2l6ZUNoYW5nZWQpOiBHdWFyZCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBi
ZWZvcmUKKyAgICAgICAgICAgIHdlIGhhdmUgYWxsb2NhdGVkIHRoZSBBVlBsYXllckl0ZW0uCisK
IDIwMTEtMDQtMjkgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gODUwNTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiAr
MTcwLDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdAogICAgICwg
bV9kaXNwYXRjaGluZ0NhblBsYXlFdmVudChmYWxzZSkKICAgICAsIG1fbG9hZEluaXRpYXRlZEJ5
VXNlckdlc3R1cmUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRlbHlMb2FkZWQoZmFsc2UpCisgICAg
LCBtX2hhdmVQcmVwYXJlZFRvUGxheShmYWxzZSkKIHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVk
aWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50Iik7CiAgICAgZG9jdW1lbnQtPnJlZ2lzdGVyRm9y
RG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwpAQCAtNTE2LDYgKzUxNyw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQoKQogICAgIG1fc2VudFN0YWxsZWRF
dmVudCA9IGZhbHNlOwogICAgIG1faGF2ZUZpcmVkTG9hZGVkRGF0YSA9IGZhbHNlOwogICAgIG1f
Y29tcGxldGVseUxvYWRlZCA9IGZhbHNlOworICAgIG1faGF2ZVByZXBhcmVkVG9QbGF5ID0gZmFs
c2U7CiAgICAgbV9kaXNwbGF5TW9kZSA9IFVua25vd247CiAKICAgICAvLyAxIC0gQWJvcnQgYW55
IGFscmVhZHktcnVubmluZyBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29y
aXRobSBmb3IgdGhpcyBlbGVtZW50LgpAQCAtMTA4Miw3ICsxMDg0LDE1IEBAIGJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6c3VwcG9ydHNTYXZlKCkgY28KIHsKICAgICByZXR1cm4gbV9wbGF5ZXIgPyBt
X3BsYXllci0+c3VwcG9ydHNTYXZlKCkgOiBmYWxzZTsKIH0KLSAgICAKKwordm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpwcmVwYXJlVG9QbGF5KCkKK3sKKyAgICBpZiAobV9oYXZlUHJlcGFyZWRUb1Bs
YXkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVQcmVwYXJlZFRvUGxheSA9IHRydWU7Cisg
ICAgbV9wbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKK30KKwogdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpzZWVrKGZsb2F0IHRpbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIExPRyhNZWRpYSwg
IkhUTUxNZWRpYUVsZW1lbnQ6OnNlZWsoJWYpIiwgdGltZSk7CkBAIC0xMDk1LDYgKzExMDUsMTAg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWVrKGZsb2F0IHRpbWUsIAogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgLy8gSWYgdGhlIG1lZGlhIGVuZ2luZSBoYXMgYmVlbiB0b2xkIHRv
IHBvc3Rwb25lIGxvYWRpbmcgZGF0YSwgbGV0IGl0IGdvIGFoZWFkIG5vdy4KKyAgICBpZiAobV9w
cmVsb2FkIDwgTWVkaWFQbGF5ZXI6OkF1dG8gJiYgbV9yZWFkeVN0YXRlIDwgSEFWRV9GVVRVUkVf
REFUQSkKKyAgICAgICAgcHJlcGFyZVRvUGxheSgpOworCiAgICAgLy8gR2V0IHRoZSBjdXJyZW50
IHRpbWUgYmVmb3JlIHNldHRpbmcgbV9zZWVraW5nLCBtX2xhc3RTZWVrVGltZSBpcyByZXR1cm5l
ZCBvbmNlIGl0IGlzIHNldC4KICAgICByZWZyZXNoQ2FjaGVkVGltZSgpOwogICAgIGZsb2F0IG5v
dyA9IGN1cnJlbnRUaW1lKCk7CkBAIC0yMTk2LDcgKzIyMTAsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgICAgICBhZGRQbGF5ZWRSYW5nZShtX2xh
c3RTZWVrVGltZSwgdGltZSk7CiAKICAgICAgICAgaWYgKGNvdWxkUGxheUlmRW5vdWdoRGF0YSgp
KQotICAgICAgICAgICAgbV9wbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKKyAgICAgICAgICAgIHBy
ZXBhcmVUb1BsYXkoKTsKIAogICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAg
ICAgICAgbWVkaWFDb250cm9scygpLT5wbGF5YmFja1N0b3BwZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA4NTA1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiAr
Mjg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1lZGlhRW5naW5lRXJyb3IoUGFzc1JlZlB0cjxN
ZWRpYUVycm9yPiBlcnIpOwogICAgIHZvaWQgY2FuY2VsUGVuZGluZ0V2ZW50c0FuZENhbGxiYWNr
cygpOwogICAgIHZvaWQgd2FpdEZvclNvdXJjZUNoYW5nZSgpOworICAgIHZvaWQgcHJlcGFyZVRv
UGxheSgpOwogCiAgICAgZW51bSBJbnZhbGlkU291cmNlQWN0aW9uIHsgRG9Ob3RoaW5nLCBDb21w
bGFpbiB9OwogICAgIGJvb2wgaXNTYWZlVG9Mb2FkVVJMKGNvbnN0IEtVUkwmLCBJbnZhbGlkU291
cmNlQWN0aW9uKTsKQEAgLTQxNyw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaXNw
YXRjaGluZ0NhblBsYXlFdmVudCA6IDE7CiAgICAgYm9vbCBtX2xvYWRJbml0aWF0ZWRCeVVzZXJH
ZXN0dXJlIDogMTsKICAgICBib29sIG1fY29tcGxldGVseUxvYWRlZCA6IDE7CisgICAgYm9vbCBt
X2hhdmVQcmVwYXJlZFRvUGxheSA6IDE7CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNw
cAkocmV2aXNpb24gODUyNTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY5LDIzICsyNjksMjEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnBhdQogICAgIHBsYXRmb3JtUGF1c2UoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
KQotewotICAgIC8vIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MsIG9ubHkgbmVlZCB0byByZW1lbWJl
ciB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gZHJhd24uCi0gICAgbV92aWRlb0ZyYW1lSGFzRHJhd24g
PSB0cnVlOwotfQotCiBmbG9hdCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmR1cmF0
aW9uKCkgY29uc3QKIHsKKyAgICBpZiAobV9jYWNoZWREdXJhdGlvbiAhPSBpbnZhbGlkVGltZSkK
KyAgICAgICAgcmV0dXJuIG1fY2FjaGVkRHVyYXRpb247CisKICAgICBpZiAoIW1ldGFEYXRhQXZh
aWxhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fY2FjaGVkRHVyYXRpb24g
PT0gaW52YWxpZFRpbWUpIHsKLSAgICAgICAgbV9jYWNoZWREdXJhdGlvbiA9IHBsYXRmb3JtRHVy
YXRpb24oKTsKKyAgICBmbG9hdCBkdXJhdGlvbiA9IHBsYXRmb3JtRHVyYXRpb24oKTsKKyAgICBp
ZiAoIWR1cmF0aW9uKSB7CisgICAgICAgIG1fY2FjaGVkRHVyYXRpb24gPSBkdXJhdGlvbjsKICAg
ICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGTWFjOjpkdXJhdGlvbiglcCkg
LSBjYWNoaW5nICVmIiwgdGhpcywgbV9jYWNoZWREdXJhdGlvbik7CiAgICAgfQogCi0gICAgcmV0
dXJuIG1fY2FjaGVkRHVyYXRpb247CisgICAgcmV0dXJuIGR1cmF0aW9uOwogfQogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlayhmbG9hdCB0aW1lKQpAQCAtNjQ2LDgg
KzY0NCwzMCBAQCBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6
UHJlbG9hZCBwcmVsb2FkKQogewogICAgIG1fcHJlbG9hZCA9IHByZWxvYWQ7Ci0gICAgaWYgKG1f
ZGVsYXlpbmdMb2FkICYmIG1fcHJlbG9hZCAhPSBNZWRpYVBsYXllcjo6Tm9uZSkKLSAgICAgICAg
cmVzdW1lTG9hZCgpOworICAgIGlmICghbV9hc3NldFVSTC5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fcHJlbG9hZCA+PSBNZWRpYVBsYXllcjo6TWV0YURhdGEgJiYgYXNz
ZXRTdGF0dXMoKSA9PSBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNEb2VzTm90RXhpc3QpIHsKKyNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICBGcmFtZSogZnJhbWUg
PSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkg
OiAwOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdCogY2FjaGVIb3N0ID0gZnJhbWUgPyBm
cmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkg
OiAwOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlOworICAgICAg
ICBpZiAoY2FjaGVIb3N0ICYmIGNhY2hlSG9zdC0+c2hvdWxkTG9hZFJlc291cmNlRnJvbUFwcGxp
Y2F0aW9uQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0KG1fYXNzZXRVUkwpLCByZXNvdXJjZSkgJiYgcmVz
b3VyY2UpIHsKKyAgICAgICAgICAgIC8vIEFWRm91bmRhdGlvbiBjYW4ndCBvcGVuIGFyYml0cmFy
eSBkYXRhIHBvaW50ZXJzLCBzbyBpZiB0aGlzIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSBkb2Vz
bid0IAorICAgICAgICAgICAgLy8gaGF2ZSBhIHZhbGlkIGxvY2FsIHBhdGgsIGp1c3Qgb3BlbiB0
aGUgcmVzb3VyY2UncyBvcmlnaW5hbCBVUkwuCisgICAgICAgICAgICBpZiAocmVzb3VyY2UtPnBh
dGgoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY3JlYXRlQVZBc3NldEZvclVSTChyZXNv
dXJjZS0+dXJsKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNyZWF0ZUFW
QXNzZXRGb3JDYWNoZVJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYg
ICAgCisgICAgICAgICAgICBjcmVhdGVBVkFzc2V0Rm9yVVJMKG1fYXNzZXRVUkwpOworCisgICAg
ICAgIGNoZWNrUGxheWFiaWxpdHkoKTsKKyAgICB9CisKKyAgICBpZiAobV9wcmVsb2FkID09IE1l
ZGlhUGxheWVyOjpBdXRvICYmIHBsYXllckl0ZW1TdGF0dXMoKSA9PSBNZWRpYVBsYXllckFWUGxh
eWVySXRlbVN0YXR1c0RvZXNOb3RFeGlzdCkKKyAgICAgICAgY3JlYXRlQVZQbGF5ZXJJdGVtKCk7
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXREZWxheUNhbGxi
YWNrcyhib29sIGRlbGF5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24uaAkocmV2aXNpb24gODUyNTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxMCArMTQyLDkgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCk7
Ci0gICAgdmlydHVhbCBib29sIGhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdDsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgPSAwOwpAQCAtMTU5LDEyICsxNTgsMTUg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25z
dDsKIAogICAgIC8vIFJlcXVpcmVkIGludGVyZmFjZXMgZm9yIGNvbmNyZXRlIGRlcml2ZWQgY2xh
c3Nlcy4KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZQbGF5ZXJGb3JVUkwoY29uc3QgU3RyaW5n
JiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZBc3NldEZvclVSTChjb25zdCBT
dHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFWUGxheWVyKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVBVlBsYXllckl0ZW0oKSA9IDA7CiAjaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZQbGF5ZXJGb3JD
YWNoZVJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSopID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlQVZBc3NldEZvckNhY2hlUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKikgPSAwOwogI2VuZGlmCiAKICAgICBlbnVtIEl0ZW1TdGF0dXMgeworICAgICAgICBNZWRp
YVBsYXllckFWUGxheWVySXRlbVN0YXR1c0RvZXNOb3RFeGlzdCwKICAgICAgICAgTWVkaWFQbGF5
ZXJBVlBsYXllckl0ZW1TdGF0dXNVbmtub3duLAogICAgICAgICBNZWRpYVBsYXllckFWUGxheWVy
SXRlbVN0YXR1c0ZhaWxlZCwKICAgICAgICAgTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNS
ZWFkeVRvUGxheSwKQEAgLTE3NCw3ICsxNzYsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgfTsKICAgICB2
aXJ0dWFsIEl0ZW1TdGF0dXMgcGxheWVySXRlbVN0YXR1cygpIGNvbnN0ID0gMDsKIAotICAgIGVu
dW0gQVZBc3NldFN0YXR1cyB7CisgICAgZW51bSBBc3NldFN0YXR1cyB7CisgICAgICAgIE1lZGlh
UGxheWVyQVZBc3NldFN0YXR1c0RvZXNOb3RFeGlzdCwKICAgICAgICAgTWVkaWFQbGF5ZXJBVkFz
c2V0U3RhdHVzVW5rbm93biwKICAgICAgICAgTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGlu
ZywKICAgICAgICAgTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzRmFpbGVkLApAQCAtMTgyLDcgKzE4
NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGVk
LAogICAgICAgICBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNQbGF5YWJsZSwKICAgICB9OwotICAg
IHZpcnR1YWwgQVZBc3NldFN0YXR1cyBhc3NldFN0YXR1cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIEFzc2V0U3RhdHVzIGFzc2V0U3RhdHVzKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtU2V0VmlzaWJsZShib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtUGxheSgpID0gMDsKQEAgLTIwNiwxMyArMjA5LDEzIEBAIHByb3RlY3RlZDoKIAogICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVWaWRlb0xheWVyKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95VmlkZW9MYXllcigpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgdmlkZW9MYXllcklzUmVhZHlU
b0Rpc3BsYXkoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQXZhaWxhYmxlVmlk
ZW9GcmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZXh0UmVuZGVy
ZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc0xheWVyUmVuZGVyZXIoKSBjb25z
dCA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHJlc3VtZUxvYWQoKTsKICAgICB2b2lkIHVw
ZGF0ZVN0YXRlcygpOwogCiAgICAgdm9pZCBzZXRIYXNWaWRlbyhib29sIGIpIHsgbV9jYWNoZWRI
YXNWaWRlbyA9IGI7IH07CkBAIC0yMzgsMTIgKzI0MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIHZvaWQgbWFpblRocmVhZENhbGxiYWNrKHZvaWQqKTsKIAogcHJpdmF0ZToKLQogICAgIE1l
ZGlhUGxheWVyKiBtX3BsYXllcjsKIAogICAgIFZlY3RvcjxOb3RpZmljYXRpb24+IG1fcXVldWVk
Tm90aWZpY2F0aW9uczsKICAgICBNdXRleCBtX3F1ZXVlTXV0ZXg7Ci0gICAgYm9vbCBtX21haW5U
aHJlYWRDYWxsUGVuZGluZzsKIAogICAgIG11dGFibGUgUmVmUHRyPFRpbWVSYW5nZXM+IG1fY2Fj
aGVkTG9hZGVkVGltZVJhbmdlczsKIApAQCAtMjYzLDEyICsyNjQsMTAgQEAgcHJpdmF0ZToKICAg
ICBmbG9hdCBtX3NlZWtUbzsKICAgICBmbG9hdCBtX3JlcXVlc3RlZFJhdGU7CiAgICAgaW50IG1f
ZGVsYXlDYWxsYmFja3M7Ci0gICAgYm9vbCBtX2hhdmVQcmVwYXJlZFRvUGxheTsKKyAgICBib29s
IG1fbWFpblRocmVhZENhbGxQZW5kaW5nOwogICAgIGJvb2wgbV9hc3NldElzUGxheWFibGU7CiAg
ICAgYm9vbCBtX3Zpc2libGU7Ci0gICAgYm9vbCBtX3ZpZGVvRnJhbWVIYXNEcmF3bjsKICAgICBi
b29sIG1fbG9hZGluZ01ldGFkYXRhOwotICAgIGJvb2wgbV9kZWxheWluZ0xvYWQ7CiAgICAgYm9v
bCBtX2lzQWxsb3dlZFRvUmVuZGVyOwogICAgIGJvb2wgbV9jYWNoZWRIYXNBdWRpbzsKICAgICBi
b29sIG1fY2FjaGVkSGFzVmlkZW87CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHJldmlzaW9uIDg1MDUzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkod29ya2luZyBjb3B5KQpAQCAtODYsMTIgKzg2
LDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBmbG9hdCBtZWRpYVRpbWVGb3JUaW1lVmFsdWUo
ZmxvYXQpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFWUGxheWVyKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZUFWUGxheWVyRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZQbGF5ZXJJdGVtKCk7CisgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpOwogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFWUGxheWVyRm9yQ2Fj
aGVSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlQVZBc3NldEZvckNhY2hlUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKik7
CiAjZW5kaWYKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6SXRl
bVN0YXR1cyBwbGF5ZXJJdGVtU3RhdHVzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OkFWQXNzZXRTdGF0dXMgYXNzZXRTdGF0dXMoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6QXNzZXRTdGF0dXMg
YXNzZXRTdGF0dXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBjaGVja1BsYXlhYmlsaXR5
KCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJhdGUoKTsKQEAgLTEwNSwxMiArMTA2LDEzIEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luTG9hZGluZ01ldGFkYXRhKCk7CiAgICAg
dmlydHVhbCB2b2lkIHNpemVDaGFuZ2VkKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQXZhaWxh
YmxlVmlkZW9GcmFtZSgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNvbnRleHRW
aWRlb1JlbmRlcmVyKCk7CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDb250ZXh0VmlkZW9SZW5k
ZXJlcigpOwogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVZpZGVvTGF5ZXIoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveVZpZGVvTGF5ZXIoKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlkZW9MYXll
cklzUmVhZHlUb0Rpc3BsYXkoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZXh0
UmVuZGVyZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGF5ZXJSZW5kZXJlcigpIGNv
bnN0OwpAQCAtMTI1LDYgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPFdlYkNvcmVB
VkZNb3ZpZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKICAgICBSZXRhaW5QdHI8QVZBc3NldElt
YWdlR2VuZXJhdG9yPiBtX2ltYWdlR2VuZXJhdG9yOwogICAgIGlkIG1fdGltZU9ic2VydmVyOwor
ICAgIGJvb2wgbV92aWRlb0ZyYW1lSGFzRHJhd247CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bQkocmV2aXNpb24gODUyODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6Ok1lZGkKICAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbihwbGF5ZXIp
CiAgICAgLCBtX29iamNPYnNlcnZlcihBZG9wdE5TLCBbW1dlYkNvcmVBVkZNb3ZpZU9ic2VydmVy
IGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKQogICAgICwgbV90aW1lT2JzZXJ2ZXIoMCkK
KyAgICAsIG1fdmlkZW9GcmFtZUhhc0RyYXduKGZhbHNlKQogewogfQogCkBAIC0yMzQsNzEgKzIz
NSw3NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgbV92
aWRlb0xheWVyID0gMDsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjp2aWRlb0xheWVySXNSZWFkeVRvRGlzcGxheSgpIGNvbnN0Citib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdAog
ewotICAgIHJldHVybiAobV92aWRlb0xheWVyICYmIFttX3ZpZGVvTGF5ZXIuZ2V0KCkgaXNSZWFk
eUZvckRpc3BsYXldKTsKKyAgICByZXR1cm4gKG1fdmlkZW9GcmFtZUhhc0RyYXduIHx8IG1fdmlk
ZW9MYXllciAmJiBbbV92aWRlb0xheWVyLmdldCgpIGlzUmVhZHlGb3JEaXNwbGF5XSk7CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJG
b3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAg
c2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgaWYgKG1fYXZBc3NldCkKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFtX2F2QXNzZXQpIHsKLSAgICAgICAgTlNVUkwgKmNvY29hVVJMID0g
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgICAgIG1fYXZBc3NldC5hZG9wdE5TKFtb
QVZVUkxBc3NldCBhbGxvY10gaW5pdFdpdGhVUkw6Y29jb2FVUkwgb3B0aW9uczpuaWxdKTsKLSAg
ICB9Ci0gICAgCi0gICAgY3JlYXRlQVZQbGF5ZXIoKTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0
cnVlKTsKKyAgICBOU1VSTCAqY29jb2FVUkwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKTsK
KyAgICBtX2F2QXNzZXQuYWRvcHROUyhbW0FWVVJMQXNzZXQgYWxsb2NdIGluaXRXaXRoVVJMOmNv
Y29hVVJMIG9wdGlvbnM6bmlsXSk7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwogfQog
CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJGb3JDYWNoZVJlc291cmNlKEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JDYWNoZVJlc291cmNlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UpCiB7Ci0gICAgLy8gQVZGb3VuZGF0aW9uIGNhbid0
IG9wZW4gYXJiaXRyYXJ5IGRhdGEgcG9pbnRlcnMsIHNvIGlmIHRoaXMgQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlIGRvZXNuJ3QgCi0gICAgLy8gaGF2ZSBhIHZhbGlkIGxvY2FsIHBhdGgsIGp1c3Qg
b3BlbiB0aGUgcmVzb3VyY2UncyBvcmlnaW5hbCBVUkwuCi0gICAgaWYgKHJlc291cmNlLT5wYXRo
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNyZWF0ZUFWUGxheWVyRm9yVVJMKHJlc291cmNlLT51
cmwoKSk7CisgICAgaWYgKG1fYXZBc3NldCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KKworICAg
IC8vIEFWRm91bmRhdGlvbiBjYW4ndCBvcGVuIGFyYml0cmFyeSBkYXRhIHBvaW50ZXJzLgorICAg
IEFTU0VSVCghcmVzb3VyY2UtPnBhdGgoKS5pc0VtcHR5KCkpOwogICAgIAogICAgIHNldERlbGF5
Q2FsbGJhY2tzKHRydWUpOwogCi0gICAgaWYgKCFtX2F2QXNzZXQpIHsKLSAgICAgICAgTlNVUkwq
IGxvY2FsVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpyZXNvdXJjZS0+cGF0aCgpXTsKLSAg
ICAgICAgbV9hdkFzc2V0LmFkb3B0TlMoW1tBVlVSTEFzc2V0IGFsbG9jXSBpbml0V2l0aFVSTDps
b2NhbFVSTCBvcHRpb25zOm5pbF0pOwotICAgIH0KKyAgICBOU1VSTCogbG9jYWxVUkwgPSBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOnJlc291cmNlLT5wYXRoKCldOworICAgIG1fYXZBc3NldC5hZG9w
dE5TKFtbQVZVUkxBc3NldCBhbGxvY10gaW5pdFdpdGhVUkw6bG9jYWxVUkwgb3B0aW9uczpuaWxd
KTsKIAotICAgIGNyZWF0ZUFWUGxheWVyKCk7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2Up
OwogfQogI2VuZGlmCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3JlYXRlQVZQbGF5ZXIoKQogewotICAgIGlmICghbV9hdlBsYXllcikgewotICAgICAgICBtX2F2
UGxheWVyLmFkb3B0TlMoW1tBVlBsYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICAKLSAgICAg
ICAgW21fYXZQbGF5ZXIuZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9y
S2V5UGF0aDpAInJhdGUiIG9wdGlvbnM6bmlsIGNvbnRleHQ6KHZvaWQgKilNZWRpYVBsYXllckFW
Rm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllcl07Ci0gICAgICAgIAotICAgICAgICAv
LyBBZGQgYSB0aW1lIG9ic2VydmVyLCBhc2sgdG8gYmUgY2FsbGVkIGluZnJlcXVlbnRseSBiZWNh
dXNlIHdlIGRvbid0IHJlYWxseSB3YW50IHBlcmlvZGljIGNhbGxiYWNrcyBidXQKLSAgICAgICAg
Ly8gb3VyIG9ic2VydmVyIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBzZWVrIGhhcHBl
bnMuCi0gICAgICAgIGNvbnN0IGRvdWJsZSB2ZXJ5TG9uZ0ludGVydmFsID0gNjAqNjAqNjAqMjQq
MzA7Ci0gICAgICAgIFdlYkNvcmVBVkZNb3ZpZU9ic2VydmVyICpvYnNlcnZlciA9IG1fb2JqY09i
c2VydmVyLmdldCgpOwotICAgICAgICBtX3RpbWVPYnNlcnZlciA9IFttX2F2UGxheWVyLmdldCgp
IGFkZFBlcmlvZGljVGltZU9ic2VydmVyRm9ySW50ZXJ2YWw6Q01UaW1lTWFrZVdpdGhTZWNvbmRz
KHZlcnlMb25nSW50ZXJ2YWwsIDEwKSBxdWV1ZTpuaWwgdXNpbmdCbG9jazpeKENNVGltZSB0aW1l
KXsKLSAgICAgICAgICAgIFtvYnNlcnZlciB0aW1lQ2hhbmdlZDpDTVRpbWVHZXRTZWNvbmRzKHRp
bWUpXTsKLSAgICAgICAgfV07Ci0gICAgfQorICAgIGlmIChtX2F2UGxheWVyKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtKSB7Ci0gICAgICAgIC8vIENyZWF0ZSB0
aGUgcGxheWVyIGl0ZW0gc28gd2UgY2FuIG1lZGlhIGRhdGEuIAotICAgICAgICBtX2F2UGxheWVy
SXRlbS5hZG9wdE5TKFtbQVZQbGF5ZXJJdGVtIGFsbG9jXSBpbml0V2l0aEFzc2V0Om1fYXZBc3Nl
dC5nZXQoKV0pOwotICAgICAgICAKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKXNlbGVjdG9yOkBzZWxl
Y3RvcihkaWRFbmQ6KSBuYW1lOkFWUGxheWVySXRlbURpZFBsYXlUb0VuZFRpbWVOb3RpZmljYXRp
b24gb2JqZWN0Om1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0
cnVlKTsKIAotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIGl0ZW1LVk9Qcm9wZXJ0
aWVzKCkpCi0gICAgICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9v
YmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDprZXlOYW1lIG9wdGlvbnM6bmlsIGNvbnRleHQ6
KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllckl0
ZW1dOworICAgIG1fYXZQbGF5ZXIuYWRvcHROUyhbW0FWUGxheWVyIGFsbG9jXSBpbml0XSk7Cisg
ICAgW21fYXZQbGF5ZXIuZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9y
S2V5UGF0aDpAInJhdGUiIG9wdGlvbnM6bmlsIGNvbnRleHQ6KHZvaWQgKilNZWRpYVBsYXllckFW
Rm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllcl07CisgICAgCisgICAgLy8gQWRkIGEg
dGltZSBvYnNlcnZlciwgYXNrIHRvIGJlIGNhbGxlZCBpbmZyZXF1ZW50bHkgYmVjYXVzZSB3ZSBk
b24ndCByZWFsbHkgd2FudCBwZXJpb2RpYyBjYWxsYmFja3MgYnV0CisgICAgLy8gb3VyIG9ic2Vy
dmVyIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBzZWVrIGhhcHBlbnMuCisgICAgY29u
c3QgZG91YmxlIHZlcnlMb25nSW50ZXJ2YWwgPSA2MCo2MCo2MCoyNCozMDsKKyAgICBXZWJDb3Jl
QVZGTW92aWVPYnNlcnZlciAqb2JzZXJ2ZXIgPSBtX29iamNPYnNlcnZlci5nZXQoKTsKKyAgICBt
X3RpbWVPYnNlcnZlciA9IFttX2F2UGxheWVyLmdldCgpIGFkZFBlcmlvZGljVGltZU9ic2VydmVy
Rm9ySW50ZXJ2YWw6Q01UaW1lTWFrZVdpdGhTZWNvbmRzKHZlcnlMb25nSW50ZXJ2YWwsIDEwKSBx
dWV1ZTpuaWwgdXNpbmdCbG9jazpeKENNVGltZSB0aW1lKXsKKyAgICAgICAgW29ic2VydmVyIHRp
bWVDaGFuZ2VkOkNNVGltZUdldFNlY29uZHModGltZSldOworICAgIH1dOwogCi0gICAgICAgIFtt
X2F2UGxheWVyLmdldCgpIHJlcGxhY2VDdXJyZW50SXRlbVdpdGhQbGF5ZXJJdGVtOm1fYXZQbGF5
ZXJJdGVtLmdldCgpXTsKLSAgICB9CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVy
SXRlbSgpCit7CisgICAgaWYgKG1fYXZQbGF5ZXJJdGVtKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKworICAgIC8vIENyZWF0ZSB0aGUgcGxheWVyIGl0
ZW0gc28gd2UgY2FuIG1lZGlhIGRhdGEuIAorICAgIG1fYXZQbGF5ZXJJdGVtLmFkb3B0TlMoW1tB
VlBsYXllckl0ZW0gYWxsb2NdIGluaXRXaXRoQXNzZXQ6bV9hdkFzc2V0LmdldCgpXSk7CisgICAg
CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpt
X29iamNPYnNlcnZlci5nZXQoKXNlbGVjdG9yOkBzZWxlY3RvcihkaWRFbmQ6KSBuYW1lOkFWUGxh
eWVySXRlbURpZFBsYXlUb0VuZFRpbWVOb3RpZmljYXRpb24gb2JqZWN0Om1fYXZQbGF5ZXJJdGVt
LmdldCgpXTsKKworICAgIGZvciAoTlNTdHJpbmcgKmtleU5hbWUgaW4gaXRlbUtWT1Byb3BlcnRp
ZXMoKSkKKyAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFkZE9ic2VydmVyOm1fb2JqY09i
c2VydmVyLmdldCgpIGZvcktleVBhdGg6a2V5TmFtZSBvcHRpb25zOm5pbCBjb250ZXh0Oih2b2lk
ICopTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXJJdGVtXTsK
KworICAgIFttX2F2UGxheWVyLmdldCgpIHJlcGxhY2VDdXJyZW50SXRlbVdpdGhQbGF5ZXJJdGVt
Om1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKIAogICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsK
IH0KQEAgLTMxNCw3ICszMjEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YmVnaW5M
b2FkaW5nTWV0YWRhdGEoKQogewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnBsYXlhYmlsaXR5S25vd24oJXApIC0gcmVxdWVzdGluZyBtZXRhZGF0
YSBsb2FkaW5nIiwgdGhpcyk7CisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6YmVnaW5Mb2FkaW5nTWV0YWRhdGEoJXApIC0gcmVxdWVzdGluZyBtZXRh
ZGF0YSBsb2FkaW5nIiwgdGhpcyk7CiAgICAgW21fYXZBc3NldC5nZXQoKSBsb2FkVmFsdWVzQXN5
bmNocm9ub3VzbHlGb3JLZXlzOlthc3NldE1ldGFkYXRhS2V5TmFtZXMoKSByZXRhaW5dIGNvbXBs
ZXRpb25IYW5kbGVyOl57CiAgICAgICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBtZXRhZGF0YUxv
YWRlZF07CiAgICAgfV07CkBAIC0zMjMsNyArMzMwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOgogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpJdGVt
U3RhdHVzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXllckl0ZW1TdGF0
dXMoKSBjb25zdAogewogICAgIGlmICghbV9hdlBsYXllckl0ZW0pCi0gICAgICAgIHJldHVybiBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3Rh
dHVzVW5rbm93bjsKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNEb2VzTm90RXhpc3Q7CiAKICAgICBBVlBs
YXllckl0ZW1TdGF0dXMgc3RhdHVzID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIHN0YXR1c107CiAg
ICAgaWYgKHN0YXR1cyA9PSBBVlBsYXllckl0ZW1TdGF0dXNVbmtub3duKQpAQCAtMzMyLDcgKzMz
OSw3IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6SXRlbVN0YXQKICAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJBVlBsYXll
ckl0ZW1TdGF0dXNGYWlsZWQ7CiAgICAgaWYgKFttX2F2UGxheWVySXRlbS5nZXQoKSBpc1BsYXli
YWNrTGlrZWx5VG9LZWVwVXBdKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrTGlrZWx5VG9L
ZWVwVXA7Ci0gICAgaWYgKGJ1ZmZlcmVkKCktPmNvbnRhaW4oZHVyYXRpb24oKSkpCisgICAgaWYg
KFttX2F2UGxheWVySXRlbS5nZXQoKSBpc1BsYXliYWNrQnVmZmVyRnVsbF0pCiAgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJ
dGVtU3RhdHVzUGxheWJhY2tCdWZmZXJGdWxsOwogICAgIGlmIChidWZmZXJlZCgpLT5jb250YWlu
KGN1cnJlbnRUaW1lKCkpKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVyRW1wdHk7
CkBAIC0zODUsMTEgKzM5MiwxOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRm
b3JtRHVyYXRpb24oKSBjb25zdAogewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCAh
bV9hdlBsYXllckl0ZW0pCisgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKICAgICBmbG9hdCBkdXJhdGlvbjsKLSAgICBDTVRpbWUgY21EdXJhdGlv
biA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBkdXJhdGlvbl07CisgICAgQ01UaW1lIGNtRHVyYXRp
b247CisgICAgCisgICAgLy8gQ2hlY2sgdGhlIGF2aXRlbSBpZiB3ZSBoYXZlIG9uZSwgc29tZSBh
c3NldHMgbmV2ZXIgcmVwb3J0IGR1cmF0aW9uLgorICAgIGlmIChtX2F2UGxheWVySXRlbSkKKyAg
ICAgICAgY21EdXJhdGlvbiA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBkdXJhdGlvbl07CisgICAg
ZWxzZQorICAgICAgICBjbUR1cmF0aW9uPSBbbV9hdkFzc2V0LmdldCgpIGR1cmF0aW9uXTsKKwog
ICAgIGlmIChDTVRJTUVfSVNfTlVNRVJJQyhjbUR1cmF0aW9uKSkKICAgICAgICAgZHVyYXRpb24g
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoY21EdXJhdGlvbikpOwog
ICAgIGVsc2UgaWYgKENNVElNRV9JU19JTkRFRklOSVRFKGNtRHVyYXRpb24pKQpAQCAtNTM1LDEw
ICs1NDksMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAg
IG1fYXZBc3NldCA9IGFzc2V0OwogfQogCi1NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OkFWQXNzZXRTdGF0dXMgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YXNzZXRT
dGF0dXMoKSBjb25zdAorTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpBc3NldFN0YXR1
cyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphc3NldFN0YXR1cygpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2F2QXNzZXQpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNz
ZXRTdGF0dXNVbmtub3duOworICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVz
RG9lc05vdEV4aXN0OwogCiAgICAgZm9yIChOU1N0cmluZyAqa2V5TmFtZSBpbiBhc3NldE1ldGFk
YXRhS2V5TmFtZXMoKSkgewogICAgICAgICBBVktleVZhbHVlU3RhdHVzIGtleVN0YXR1cyA9IFtt
X2F2QXNzZXQuZ2V0KCkgc3RhdHVzT2ZWYWx1ZUZvcktleTprZXlOYW1lIGVycm9yOm5pbF07CkBA
IC01ODcsNyArNjAxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgc2V0RGVsYXlDYWxsYmFja3Mo
ZmFsc2UpOwogCi0gICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpwYWludChjb250
ZXh0LCByZWN0KTsKKyAgICBtX3ZpZGVvRnJhbWVIYXNEcmF3biA9IHRydWU7CiB9CiAKIHN0YXRp
YyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCkBAIC02NjIsMzcgKzY3Niw1MSBAQCBm
bG9hdCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDCiAKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dHJhY2tzQ2hhbmdlZCgpCiB7CisgICAgaWYgKCFt
X2F2QXNzZXQpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW5l
dmVyIHRoZSB0cmFja3MgY29sbGVjdGlvbiBjaGFuZ2VzIHNvIGNhY2hlIGhhc1ZpZGVvIGFuZCBo
YXNBdWRpbyBzaW5jZSB3ZSBhcmUKICAgICAvLyBhc2tlZCBhYm91dCB0aG9zZSBmYWlybHkgZmVx
dWVudGx5LgotICAgIGJvb2wgaGFzVmlkZW8gPSBmYWxzZTsKLSAgICBib29sIGhhc0F1ZGlvID0g
ZmFsc2U7Ci0gICAgYm9vbCBoYXNDYXB0aW9ucyA9IGZhbHNlOwotICAgIE5TQXJyYXkgKnRyYWNr
cyA9IFttX2F2UGxheWVySXRlbS5nZXQoKSB0cmFja3NdOwotICAgIGZvciAoQVZQbGF5ZXJJdGVt
VHJhY2sgKnRyYWNrIGluIHRyYWNrcykgewotICAgICAgICBpZiAoW3RyYWNrIGlzRW5hYmxlZF0p
IHsKLSAgICAgICAgICAgIEFWQXNzZXRUcmFjayAqYXNzZXRUcmFjayA9IFt0cmFjayBhc3NldFRy
YWNrXTsKLSAgICAgICAgICAgIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFsVG9T
dHJpbmc6QVZNZWRpYVR5cGVWaWRlb10pCi0gICAgICAgICAgICAgICAgaGFzVmlkZW8gPSB0cnVl
OwotICAgICAgICAgICAgZWxzZSBpZiAoW1thc3NldFRyYWNrIG1lZGlhVHlwZV0gaXNFcXVhbFRv
U3RyaW5nOkFWTWVkaWFUeXBlQXVkaW9dKQotICAgICAgICAgICAgICAgIGhhc0F1ZGlvID0gdHJ1
ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKFtbYXNzZXRUcmFjayBtZWRpYVR5cGVdIGlzRXF1YWxU
b1N0cmluZzpBVk1lZGlhVHlwZUNsb3NlZENhcHRpb25dKQotICAgICAgICAgICAgICAgIGhhc0Nh
cHRpb25zID0gdHJ1ZTsKKyAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtKSB7CisgICAgICAgIC8vIFdl
IGRvbid0IGhhdmUgYSBwbGF5ZXIgaXRlbSB5ZXQsIHNvIGNoZWNrIHdpdGggdGhlIGFzc2V0IGJl
Y2F1c2Ugc29tZSBhc3NldHMgc3VwcG9ydCBpbnNwZWN0aW9uCisgICAgICAgIC8vIHByaW9yIHRv
IGJlY29taW5nIHJlYWR5IHRvIHBsYXkuCisgICAgICAgIHNldEhhc1ZpZGVvKFtbbV9hdkFzc2V0
LmdldCgpIHRyYWNrc1dpdGhNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3Rp
Y1Zpc3VhbF0gY291bnRdKTsKKyAgICAgICAgc2V0SGFzQXVkaW8oW1ttX2F2QXNzZXQuZ2V0KCkg
dHJhY2tzV2l0aE1lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJs
ZV0gY291bnRdKTsKKyAgICAgICAgc2V0SGFzQ2xvc2VkQ2FwdGlvbnMoW1ttX2F2QXNzZXQuZ2V0
KCkgdHJhY2tzV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlwZUNsb3NlZENhcHRpb25dIGNvdW50XSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYm9vbCBoYXNWaWRlbyA9IGZhbHNlOworICAgICAgICBi
b29sIGhhc0F1ZGlvID0gZmFsc2U7CisgICAgICAgIGJvb2wgaGFzQ2FwdGlvbnMgPSBmYWxzZTsK
KyAgICAgICAgTlNBcnJheSAqdHJhY2tzID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIHRyYWNrc107
CisgICAgICAgIGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sgKnRyYWNrIGluIHRyYWNrcykgeworICAg
ICAgICAgICAgaWYgKFt0cmFjayBpc0VuYWJsZWRdKSB7CisgICAgICAgICAgICAgICAgQVZBc3Nl
dFRyYWNrICphc3NldFRyYWNrID0gW3RyYWNrIGFzc2V0VHJhY2tdOworICAgICAgICAgICAgICAg
IGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVW
aWRlb10pCisgICAgICAgICAgICAgICAgICAgIGhhc1ZpZGVvID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZN
ZWRpYVR5cGVBdWRpb10pCisgICAgICAgICAgICAgICAgICAgIGhhc0F1ZGlvID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFsVG9T
dHJpbmc6QVZNZWRpYVR5cGVDbG9zZWRDYXB0aW9uXSkKKyAgICAgICAgICAgICAgICAgICAgaGFz
Q2FwdGlvbnMgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNldEhh
c1ZpZGVvKGhhc1ZpZGVvKTsKKyAgICAgICAgc2V0SGFzQXVkaW8oaGFzQXVkaW8pOworICAgICAg
ICBzZXRIYXNDbG9zZWRDYXB0aW9ucyhoYXNDYXB0aW9ucyk7CiAgICAgfQotICAgIHNldEhhc1Zp
ZGVvKGhhc1ZpZGVvKTsKLSAgICBzZXRIYXNBdWRpbyhoYXNBdWRpbyk7Ci0gICAgc2V0SGFzQ2xv
c2VkQ2FwdGlvbnMoaGFzQ2FwdGlvbnMpOwogCiAgICAgc2l6ZUNoYW5nZWQoKTsKIH0KIAogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaXplQ2hhbmdlZCgpCiB7Cisg
ICAgaWYgKCFtX2F2QXNzZXQpCisgICAgICAgIHJldHVybjsKKwogICAgIE5TQXJyYXkgKnRyYWNr
cyA9IFttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzXTsKIAogICAgIC8vIFNvbWUgYXNzZXRzIGRvbid0
IHJlcG9ydCB0cmFjayBwcm9wZXJ0aWVzIHVudGlsIHRoZXkgYXJlIGNvbXBsZXRlbHkgcmVhZHkg
dG8gcGxheSwgYnV0IHdlCiAgICAgLy8gd2FudCB0byByZXBvcnQgYSBzaXplIGFzIGVhcmx5IGFz
IHBvc3NpYmxlIHNvIHVzZSBwcmVzZW50YXRpb25TaXplIHdoZW4gYW4gYXNzZXQgaGFzIG5vIHRy
YWNrcy4KLSAgICBpZiAoIVt0cmFja3MgY291bnRdKSB7CisgICAgaWYgKG1fYXZQbGF5ZXJJdGVt
ICYmICFbdHJhY2tzIGNvdW50XSkgewogICAgICAgICBzZXROYXR1cmFsU2l6ZShJbnRTaXplKFtt
X2F2UGxheWVySXRlbS5nZXQoKSBwcmVzZW50YXRpb25TaXplXSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92129</attachid>
            <date>2011-05-03 14:16:43 -0700</date>
            <delta_ts>2011-05-05 08:22:40 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_AVF_4.txt</filename>
            <type>text/plain</type>
            <size>43612</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NjQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTEtMDUtMDIgIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZWxvYWQgYXR0cmlidXRlIG9mIHRoZSB2aWRl
byB0YWcgaXMgbm90IGNvbXBsZXRlbHkgaW1wbGVtZW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjczCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83NTA4MzIyPgorCisgICAgICAgIFRlc3RlZCBtYW51YWxseSB3aXRoIG1hbnVhbC10ZXN0cy9t
ZWRpYS1lbGVtZW50cy92aWRlby1wcmVsb2FkLmh0bWwuCisKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRN
TE1lZGlhRWxlbWVudCk6IEluaXRpYWxpemUgbV9oYXZlUHJlcGFyZWRUb1BsYXkuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZVRvUGxheSk6IE5ldywgdGVs
bCBwbGF5ZXIgdG8gcHJlcGFyZSB0byBwbGF5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6c2Vlayk6IENhbGwgcHJlcGFyZVRvUGxheSB3aGVuIHByZWxvYWQgaXMgbGVzcyB0
aGFuICdtZXRhZGF0YScKKyAgICAgICAgICAgIGJlY2F1c2Ugd2UgbmVlZCB0byBoYXZlIG1lZGlh
IGRhdGEgbG9hZGVkIHRvIHNlZWsuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
Ojp1cGRhdGVQbGF5U3RhdGUpOiBDYWxsIHByZXBhcmVUb1BsYXkuCisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50Lmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uKTogIFJlbW92ZSAKKyAgICAgICAgICAgIG1fdmlkZW9GcmFtZUhhc0RyYXduIGFu
ZCBtX2RlbGF5aW5nTG9hZCBhcyB0aGV5IGFyZSBubyBsb25nZXIgdXNlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6cmVzdW1lTG9hZCk6IFJlbW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Omxv
YWQpOiBEb24ndCBpbml0aWFsaXplIG1fdmlkZW9GcmFtZUhhc0RyYXduLiAKKyAgICAgICAgICAg
IE1vdmUgYWxsIHByZWxvYWQgbG9naWMgdG8gc2V0UHJlbG9hZCwgY2FsbCBpdCBmcm9tIGhlcmUu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnByZXBh
cmVUb1BsYXkpOiBNb3ZlIGFsbCBwcmVsb2FkIGxvZ2ljIHRvIAorICAgICAgICAgICAgc2V0UHJl
bG9hZCwgY2FsbCBpdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6ZHVyYXRpb24pOiBEb24ndCBjYWNoZSBkdXJhdGlvbiA9IDAsIGl0IGlzCisgICAg
ICAgICAgICB1bmxpa2VseSB0byBiZSBjb3JyZWN0IGFuZCBpc24ndCB3b3J0aCBjYWNoaW5nLiBV
c2UgaW52YWxpZFRpbWUoKSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vla2luZyk6IFVzZSBpbnZhbGlkVGltZSgpIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXRO
YXR1cmFsU2l6ZSk6IEFkZCBsb2dnaW5nLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjp1cGRhdGVTdGF0ZXMpOiBVcGRhdGUgZm9yIG5hbWUgY2hhbmdl
IEFWQXNzZXRTdGF0dXMKKyAgICAgICAgICAgIHRvIEFzc2V0U3RhdHVzLiBBbHdheXMgY3JlYXRl
IGEgQVZQbGF5ZXJJdGVtIGZvciBsaXZlIHN0cmVhbXMgYmVjYXVzZSB0aGV5IGNhbid0IGJlIGlu
c3BlY3RlZAorICAgICAgICAgICAgd2l0aG91dCBvbmUuIFNldCBuZXR3b3JrU3RhdGUgdG8gJ2lk
bGUnIHdoZW4gdGhlIHBsYXliYWNrIGJ1ZmZlciBpcyBmdWxsIGJlY2F1c2UgdGhhdCBpcworICAg
ICAgICAgICAgYSBzaWduYWwgdGhhdCBBVkZvdW5kYXRpb24gd29uJ3QgZG8gYW55IG1vcmUgSU8u
IFNldCByZWFkeVN0YXRlIHRvICdIQVZFX0NVUlJFTlRfREFUQScgCisgICAgICAgICAgICB3aGVu
IHRoZSBmaXJzdCBmcmFtZSBpcyBhdmFpbGFibGUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246Om1ldGFkYXRhTG9hZGVkKTogQ2FsbCB0cmFja3NDaGFu
Z2VkIHNvIHdlIGNhY2hlCisgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBoYXNWaWRlbywgZXRj
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpsb2Fk
ZWRUaW1lUmFuZ2VzQ2hhbmdlZCk6IFVzZSBpbnZhbGlkVGltZSgpIGZ1bmN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0aW1lQ2hhbmdlZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpzZWVrQ29tcGxldGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OnJlcGFpbnQpOiBEb24ndCBzZXQgbV92aWRlb0ZyYW1lSGFzRHJh
d24sIGl0IGlzIGRvbmUKKyAgICAgICAgICAgIGluIGRlcml2ZWQgY2xhc3Nlcy4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2V0UHJlbG9hZCk6IENl
bnRyYWxpemUgYWxsIGxvZ2ljIGFib3V0IHdoZW4gdG8gY3JlYXRlCisgICAgICAgICAgICBBVkFz
c2V0IGFuZCBBVlBsYXllckl0ZW0gaGVyZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmg6CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQyk6IEluaXRpYWxpemUKKyAgICAgICAgICAgIG1fdmlkZW9GcmFtZUhhc0Ry
YXduLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6IE5ldywgcmVuYW1lZCBmcm9tCisgICAgICAgICAg
ICB2aWRlb0xheWVySXNSZWFkeVRvRGlzcGxheS4gUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSBhIGxh
eWVyIHdpdGggZnJhbWVzIGF2YWlsYWJsZSBvcgorICAgICAgICAgICAgaWYgd2UgaGF2ZSBwYWlu
dGVkIGEgZnJhbWUgdG8gdGhlIGNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKTogTmV3LCBjcmVh
dGUgdGhlIEFWQXNzZXQKKyAgICAgICAgICAgIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JD
YWNoZVJlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllcik6IFJlc3RydWN0dXJlIGxvZ2ljLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3Jl
YXRlQVZQbGF5ZXJJdGVtKTogTmV3LCBjcmVhdGUgQVZQbGF5ZXJJdGVtLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YmVnaW5Mb2FkaW5nTWV0
YWRhdGEpOiBDb3JyZWN0IGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF5ZXJJdGVtU3RhdHVzKTogUmV0dXJuICJidWZmZXIg
ZnVsbCIgd2hlbgorICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBmdWxsLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1EdXJhdGlv
bik6IEdldCB0aGUgZHVyYXRpb24gZnJvbSB0aGUKKyAgICAgICAgICAgIEFWQXNzZXQgd2hlbiB3
ZSBoYXZlbid0IGFsbG9jYXRlZCB0aGUgQVZQbGF5ZXJJdGVtIHlldCBzbyB0aGF0IHdlIGNhbiBy
ZXR1cm4gZHVyYXRpb24KKyAgICAgICAgICAgIHdoZW4gd2Ugb25seSBoYXZlIG1ldGFkYXRhLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YXNz
ZXRTdGF0dXMpOiBVcGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnQpOiBTZXQgbV92aWRlb0ZyYW1l
SGFzRHJhd24uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjp0cmFja3NDaGFuZ2VkKTogR2V0IGF0dHJpYnV0ZXMgZnJvbSBBVkFzc2V0CisgICAg
ICAgICAgICB3aGVuIHdoZW4gd2UgaGF2ZW4ndCBhbGxvY2F0ZWQgdGhlIEFWUGxheWVySXRlbSB5
ZXQgc28gdGhhdCB3ZSBjYW4gcmVwb3J0IGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHdoZW4gd2Ug
b25seSBoYXZlIG1ldGFkYXRhLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6c2l6ZUNoYW5nZWQpOiBHdWFyZCBhZ2FpbnN0IGJlaW5nIGNhbGxl
ZCBiZWZvcmUKKyAgICAgICAgICAgIHdlIGhhdmUgYWxsb2NhdGVkIHRoZSBBVlBsYXllckl0ZW0u
CisKIDIwMTEtMDUtMDMgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QGNvZGVhdXJvcmEu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gODU2MzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzEsNiArMTcxLDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25z
dAogICAgICwgbV9kaXNwYXRjaGluZ0NhblBsYXlFdmVudChmYWxzZSkKICAgICAsIG1fbG9hZElu
aXRpYXRlZEJ5VXNlckdlc3R1cmUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRlbHlMb2FkZWQoZmFs
c2UpCisgICAgLCBtX2hhdmVQcmVwYXJlZFRvUGxheShmYWxzZSkKIHsKICAgICBMT0coTWVkaWEs
ICJIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50Iik7CiAgICAgZG9jdW1lbnQtPnJl
Z2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwpAQCAtNTE3LDYgKzUx
OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQoKQogICAgIG1fc2Vu
dFN0YWxsZWRFdmVudCA9IGZhbHNlOwogICAgIG1faGF2ZUZpcmVkTG9hZGVkRGF0YSA9IGZhbHNl
OwogICAgIG1fY29tcGxldGVseUxvYWRlZCA9IGZhbHNlOworICAgIG1faGF2ZVByZXBhcmVkVG9Q
bGF5ID0gZmFsc2U7CiAgICAgbV9kaXNwbGF5TW9kZSA9IFVua25vd247CiAKICAgICAvLyAxIC0g
QWJvcnQgYW55IGFscmVhZHktcnVubmluZyBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2Ugc2VsZWN0
aW9uIGFsZ29yaXRobSBmb3IgdGhpcyBlbGVtZW50LgpAQCAtMTA4Miw3ICsxMDg0LDE1IEBAIGJv
b2wgSFRNTE1lZGlhRWxlbWVudDo6c3VwcG9ydHNTYXZlKCkgY28KIHsKICAgICByZXR1cm4gbV9w
bGF5ZXIgPyBtX3BsYXllci0+c3VwcG9ydHNTYXZlKCkgOiBmYWxzZTsKIH0KLSAgICAKKwordm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlVG9QbGF5KCkKK3sKKyAgICBpZiAobV9oYXZlUHJl
cGFyZWRUb1BsYXkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVQcmVwYXJlZFRvUGxheSA9
IHRydWU7CisgICAgbV9wbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKK30KKwogdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpzZWVrKGZsb2F0IHRpbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIExP
RyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnNlZWsoJWYpIiwgdGltZSk7CkBAIC0xMDk1LDYg
KzExMDUsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWVrKGZsb2F0IHRpbWUsIAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gSWYgdGhlIG1lZGlhIGVuZ2luZSBoYXMgYmVl
biB0b2xkIHRvIHBvc3Rwb25lIGxvYWRpbmcgZGF0YSwgbGV0IGl0IGdvIGFoZWFkIG5vdy4KKyAg
ICBpZiAobV9wcmVsb2FkIDwgTWVkaWFQbGF5ZXI6OkF1dG8gJiYgbV9yZWFkeVN0YXRlIDwgSEFW
RV9GVVRVUkVfREFUQSkKKyAgICAgICAgcHJlcGFyZVRvUGxheSgpOworCiAgICAgLy8gR2V0IHRo
ZSBjdXJyZW50IHRpbWUgYmVmb3JlIHNldHRpbmcgbV9zZWVraW5nLCBtX2xhc3RTZWVrVGltZSBp
cyByZXR1cm5lZCBvbmNlIGl0IGlzIHNldC4KICAgICByZWZyZXNoQ2FjaGVkVGltZSgpOwogICAg
IGZsb2F0IG5vdyA9IGN1cnJlbnRUaW1lKCk7CkBAIC0yMTk2LDcgKzIyMTAsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgICAgICBhZGRQbGF5ZWRS
YW5nZShtX2xhc3RTZWVrVGltZSwgdGltZSk7CiAKICAgICAgICAgaWYgKGNvdWxkUGxheUlmRW5v
dWdoRGF0YSgpKQotICAgICAgICAgICAgbV9wbGF5ZXItPnByZXBhcmVUb1BsYXkoKTsKKyAgICAg
ICAgICAgIHByZXBhcmVUb1BsYXkoKTsKIAogICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygp
KQogICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5wbGF5YmFja1N0b3BwZWQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA4NTYzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yODYsNiArMjg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1lZGlhRW5naW5lRXJyb3IoUGFz
c1JlZlB0cjxNZWRpYUVycm9yPiBlcnIpOwogICAgIHZvaWQgY2FuY2VsUGVuZGluZ0V2ZW50c0Fu
ZENhbGxiYWNrcygpOwogICAgIHZvaWQgd2FpdEZvclNvdXJjZUNoYW5nZSgpOworICAgIHZvaWQg
cHJlcGFyZVRvUGxheSgpOwogCiAgICAgZW51bSBJbnZhbGlkU291cmNlQWN0aW9uIHsgRG9Ob3Ro
aW5nLCBDb21wbGFpbiB9OwogICAgIGJvb2wgaXNTYWZlVG9Mb2FkVVJMKGNvbnN0IEtVUkwmLCBJ
bnZhbGlkU291cmNlQWN0aW9uKTsKQEAgLTQxNyw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9kaXNwYXRjaGluZ0NhblBsYXlFdmVudCA6IDE7CiAgICAgYm9vbCBtX2xvYWRJbml0aWF0
ZWRCeVVzZXJHZXN0dXJlIDogMTsKICAgICBib29sIG1fY29tcGxldGVseUxvYWRlZCA6IDE7Cisg
ICAgYm9vbCBtX2hhdmVQcmVwYXJlZFRvUGxheSA6IDE7CiB9OwogCiB9IC8vbmFtZXNwYWNlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9tYW51YWwtdGVzdHMvbWVkaWEtZWxlbWVudHMvdmlkZW8tcHJl
bG9hZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hbnVhbC10ZXN0cy9tZWRp
YS1lbGVtZW50cy92aWRlby1wcmVsb2FkLmh0bWwJKHJldmlzaW9uIDg1NjMxKQorKysgU291cmNl
L1dlYkNvcmUvbWFudWFsLXRlc3RzL21lZGlhLWVsZW1lbnRzL3ZpZGVvLXByZWxvYWQuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtOTUsOSArOTUsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgZnVuY3Rpb24gc2V0VVJMKHVybCwgdmlkSUQpCisgICAgICAgIGZ1bmN0aW9u
IHNldFVSTCh1cmwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB2aWQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCh2aWRJRCk7CisgICAgICAgICAgICB2YXIgdmlkID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInZpZCIpOwogCiAgICAgICAgICAgICBsb2dNc2codmlkLCAiIyMjIyMjIyMj
IyMjIyMjIik7CiAgICAgICAgICAgICBsb2dNc2codmlkLCAiIyMjIyMgc2V0dGluZyB1cmwgdG8g
IiArIHVybCk7CkBAIC0xOTksNiArMTk5LDcgQEAKICAgICAgICAgPHRhYmxlPgogICAgICAgICAg
ICAgPHRib2R5PgogICAgICAgICAgICAgICAgIDx0cj48dGQ+UHJlbG9hZDwvdGQ+PHRkIGlkPSJQ
cmVsb2FkIj48L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgPHRyPjx0ZD5FcnJvcjwvdGQ+PHRk
IGlkPSJFcnJvciI+PC90ZD48L3RyPgogICAgICAgICAgICAgICAgIDx0cj48dGQ+RHVyYXRpb248
L3RkPiA8dGQgaWQ9IkR1cmF0aW9uIj48L3RkPjwvdHI+CiAgICAgICAgICAgICAgICAgPHRyPjx0
ZD5WaWRlbyBXaWR0aDwvdGQ+PHRkIGlkPSJWaWRlbyBXaWR0aCI+PC90ZD48L3RyPgogICAgICAg
ICAgICAgICAgIDx0cj48dGQ+VmlkZW8gSGVpZ2h0PC90ZD48dGQgaWQ9IlZpZGVvIEhlaWdodCI+
PC90ZD48L3RyPgpAQCAtMjE2LDcgKzIxNyw3IEBACiAKICAgICA8YnI+CiAgICAgPGRpdiBjbGFz
cz0iaW5mbyI+Ci0gICAgICAgIEVudGVyIGEgdXJsOjxpbnB1dCAgdHlwZT0idGV4dCIgc2l6ZT0i
OTAiIG1heGxlbmd0aD0iMjA0OCIgb25jaGFuZ2U9InNldFVSTCh0aGlzLnZhbHVlLCAndmlkLTEn
KSIgPgorICAgICAgICBFbnRlciBhIHVybDo8aW5wdXQgIHR5cGU9InRleHQiIHNpemU9IjkwIiBt
YXhsZW5ndGg9IjIwNDgiIG9uY2hhbmdlPSJzZXRVUkwodGhpcy52YWx1ZSkiID4KICAgICAgICAg
PGJyPgogICAgICAgICA8aW5wdXQgaWQ9ImNsZWFyX2xvZyIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0i
Q2xlYXIiIG9uY2xpY2s9ImNsZWFybG9nKCkiPiAKICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNr
Ym94IiBpZD0ibG9nLXByb2dyZXNzIj4gbG9nICdwcm9ncmVzcycgZXZlbnRzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNw
cAkocmV2aXNpb24gODU2MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbi5oIgogCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKyNpbmNsdWRl
ICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpA
QCAtNDUsMzAgKzQ2LDI1IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIGNvbnN0IGZsb2F0IGludmFsaWRUaW1lID0gLTEuMGY7Ci0KIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
KE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX3F1
ZXVlZE5vdGlmaWNhdGlvbnMoKQogICAgICwgbV9xdWV1ZU11dGV4KCkKLSAgICAsIG1fbWFpblRo
cmVhZENhbGxQZW5kaW5nKGZhbHNlKQogICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6
OkVtcHR5KQogICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAg
ICAsIG1fcHJlbG9hZChNZWRpYVBsYXllcjo6QXV0bykKICAgICAsIG1fc2NhbGVGYWN0b3IoMSwg
MSkKICAgICAsIG1fY2FjaGVkTWF4VGltZUxvYWRlZCgwKQogICAgICwgbV9jYWNoZWRNYXhUaW1l
U2Vla2FibGUoMCkKLSAgICAsIG1fY2FjaGVkRHVyYXRpb24oaW52YWxpZFRpbWUpCi0gICAgLCBt
X3JlcG9ydGVkRHVyYXRpb24oaW52YWxpZFRpbWUpCi0gICAgLCBtX3NlZWtUbyhpbnZhbGlkVGlt
ZSkKKyAgICAsIG1fY2FjaGVkRHVyYXRpb24oaW52YWxpZFRpbWUoKSkKKyAgICAsIG1fcmVwb3J0
ZWREdXJhdGlvbihpbnZhbGlkVGltZSgpKQorICAgICwgbV9zZWVrVG8oaW52YWxpZFRpbWUoKSkK
ICAgICAsIG1fcmVxdWVzdGVkUmF0ZSgxKQotICAgICwgbV9kZWxheUNhbGxiYWNrcyhmYWxzZSkK
LSAgICAsIG1faGF2ZVByZXBhcmVkVG9QbGF5KGZhbHNlKQorICAgICwgbV9kZWxheUNhbGxiYWNr
cygwKQorICAgICwgbV9tYWluVGhyZWFkQ2FsbFBlbmRpbmcoZmFsc2UpCiAgICAgLCBtX2Fzc2V0
SXNQbGF5YWJsZShmYWxzZSkKICAgICAsIG1fdmlzaWJsZShmYWxzZSkKLSAgICAsIG1fdmlkZW9G
cmFtZUhhc0RyYXduKGZhbHNlKQogICAgICwgbV9sb2FkaW5nTWV0YWRhdGEoZmFsc2UpCi0gICAg
LCBtX2RlbGF5aW5nTG9hZChmYWxzZSkKICAgICAsIG1faXNBbGxvd2VkVG9SZW5kZXIoZmFsc2Up
CiAgICAgLCBtX2NhY2hlZEhhc0F1ZGlvKGZhbHNlKQogICAgICwgbV9jYWNoZWRIYXNWaWRlbyhm
YWxzZSkKQEAgLTE2NywxNyArMTYzLDYgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OmhhcwogICAgIHJldHVybiBoYXNMYXllclJlbmRlcmVyKCkgfHwgaGFzQ29udGV4dFJl
bmRlcmVyKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpyZXN1
bWVMb2FkKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OnJlc3VtZUxvYWQoJXApIiwgdGhpcyk7Ci0KLSAgICBBU1NFUlQobV9kZWxheWluZ0xvYWQp
OwotICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7Ci0KLSAgICBpZiAobV9hc3NldFVSTC5sZW5n
dGgoKSkKLSAgICAgICAgcHJlcGFyZVRvUGxheSgpOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmxvYWQoJXApIiwgdGhpcyk7CkBA
IC0xOTEsMjAgKzE3NiwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
bG9hCiAgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogICAgIH0KIAotICAg
IG1fdmlkZW9GcmFtZUhhc0RyYXduID0gZmFsc2U7CiAgICAgbV9hc3NldFVSTCA9IHVybDsKIAog
ICAgIC8vIERvbid0IGRvIGFueSBtb3JlIHdvcmsgaWYgdGhlIHVybCBpcyBlbXB0eS4KICAgICBp
ZiAoIXVybC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJlbG9hZCA9
PSBNZWRpYVBsYXllcjo6Tm9uZSkgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OmxvYWQoJXApIC0gcHJlbG9hZD09bm9uZSBzbyByZXR1cm5pbmci
LCB0aGlzKTsKLSAgICAgICAgbV9kZWxheWluZ0xvYWQgPSB0cnVlOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgcHJlcGFyZVRvUGxheSgpOworICAgIHNldFByZWxvYWQobV9wcmVsb2Fk
KTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnBsYXlhYmlsaXR5
S25vd24oKQpAQCAtMjMyLDIyICsyMTAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6cHJlCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpwcmVwYXJlVG9QbGF5KCVwKSIsIHRoaXMpOwogCi0gICAgbV9wcmVsb2FkID0gTWVk
aWFQbGF5ZXI6OkF1dG87Ci0gICAgaWYgKG1faGF2ZVByZXBhcmVkVG9QbGF5KQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9oYXZlUHJlcGFyZWRUb1BsYXkgPSB0cnVlOwotCi0gICAgbV9kZWxheWlu
Z0xvYWQgPSBmYWxzZTsKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAg
IEZyYW1lKiBmcmFtZSA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKSA/IG1fcGxheWVyLT5mcmFtZVZp
ZXcoKS0+ZnJhbWUoKSA6IDA7Ci0gICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9
IGZyYW1lID8gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNh
Y2hlSG9zdCgpIDogMDsKLSAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0g
MDsKLSAgICBpZiAoY2FjaGVIb3N0ICYmIGNhY2hlSG9zdC0+c2hvdWxkTG9hZFJlc291cmNlRnJv
bUFwcGxpY2F0aW9uQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0KG1fYXNzZXRVUkwpLCByZXNvdXJjZSkg
JiYgcmVzb3VyY2UpCi0gICAgICAgIGNyZWF0ZUFWUGxheWVyRm9yQ2FjaGVSZXNvdXJjZShyZXNv
dXJjZSk7Ci0gICAgZWxzZQotI2VuZGlmICAgIAotICAgIGNyZWF0ZUFWUGxheWVyRm9yVVJMKG1f
YXNzZXRVUkwpOwotICAgIGNoZWNrUGxheWFiaWxpdHkoKTsKKyAgICBzZXRQcmVsb2FkKE1lZGlh
UGxheWVyOjpBdXRvKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OnBsYXkoKQpAQCAtMjY5LDIyICsyMzIsMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnBhdQogICAgIHBsYXRmb3JtUGF1c2UoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmKQotewotICAgIC8vIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MsIG9ubHkgbmVlZCB0byByZW1l
bWJlciB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gZHJhd24uCi0gICAgbV92aWRlb0ZyYW1lSGFzRHJh
d24gPSB0cnVlOwotfQotCiBmbG9hdCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmR1
cmF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCi0gICAgICAg
IHJldHVybiAwOworICAgIGlmIChtX2NhY2hlZER1cmF0aW9uICE9IGludmFsaWRUaW1lKCkpCisg
ICAgICAgIHJldHVybiBtX2NhY2hlZER1cmF0aW9uOwogCi0gICAgaWYgKG1fY2FjaGVkRHVyYXRp
b24gPT0gaW52YWxpZFRpbWUpIHsKLSAgICAgICAgbV9jYWNoZWREdXJhdGlvbiA9IHBsYXRmb3Jt
RHVyYXRpb24oKTsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGTWFj
OjpkdXJhdGlvbiglcCkgLSBjYWNoaW5nICVmIiwgdGhpcywgbV9jYWNoZWREdXJhdGlvbik7Ci0g
ICAgfQorICAgIGZsb2F0IGR1cmF0aW9uID0gcGxhdGZvcm1EdXJhdGlvbigpOworICAgIGlmICgh
ZHVyYXRpb24gfHwgZHVyYXRpb24gPT0gaW52YWxpZFRpbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CiAKKyAgICBtX2NhY2hlZER1cmF0aW9uID0gZHVyYXRpb247CisgICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGTWFjOjpkdXJhdGlvbiglcCkgLSBjYWNoaW5nICVmIiwgdGhpcywg
bV9jYWNoZWREdXJhdGlvbik7CiAgICAgcmV0dXJuIG1fY2FjaGVkRHVyYXRpb247CiB9CiAKQEAg
LTMyNiw3ICsyODQsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vl
CiAgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gbV9zZWVrVG8gIT0gaW52YWxpZFRpbWU7CisgICAgcmV0dXJuIG1fc2Vla1Rv
ICE9IGludmFsaWRUaW1lKCk7CiB9CiAKIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CkBAIC0zNDYsNiArMzA0LDggQEAgSW50U2l6ZSBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6c2V0TmF0dXJhbFNpemUoSW50U2l6ZSBzaXplKQogeworICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjpzaXplQ2hhbmdlZCglcCkgLSBz
aXplID0gJWQgeCAlZCIsIHRoaXMsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKICAg
ICBJbnRTaXplIG9sZFNpemUgPSBtX2NhY2hlZE5hdHVyYWxTaXplOwogICAgIG1fY2FjaGVkTmF0
dXJhbFNpemUgPSBzaXplOwogICAgIGlmIChvbGRTaXplICE9IG1fY2FjaGVkTmF0dXJhbFNpemUp
CkBAIC00MzIsMjQgKzM5MiwyMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6dXBkCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CiAg
ICAgZWxzZSB7CiAgICAgICAgIC8vIC1sb2FkVmFsdWVzQXN5bmNocm9ub3VzbHlGb3JLZXlzOmNv
bXBsZXRpb25IYW5kbGVyOiBoYXMgaW52b2tlZCBpdHMgaGFuZGxlcjsgdGVzdCBzdGF0dXMgb2Yg
a2V5cyBhbmQgZGV0ZXJtaW5lIHN0YXRlLgotICAgICAgICBBVkFzc2V0U3RhdHVzIGF2QXNzZXRT
dGF0dXMgPSBhc3NldFN0YXR1cygpOworICAgICAgICBBc3NldFN0YXR1cyBhdkFzc2V0U3RhdHVz
ID0gYXNzZXRTdGF0dXMoKTsKICAgICAgICAgSXRlbVN0YXR1cyBpdGVtU3RhdHVzID0gcGxheWVy
SXRlbVN0YXR1cygpOwogICAgICAgICAKICAgICAgICAgbV9hc3NldElzUGxheWFibGUgPSAoYXZB
c3NldFN0YXR1cyA9PSBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNQbGF5YWJsZSk7CiAgICAgICAg
IGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhICYmIGF2QXNzZXRT
dGF0dXMgPiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNMb2FkaW5nKSB7CiAgICAgICAgICAgICBp
ZiAobV9hc3NldElzUGxheWFibGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbVN0YXR1cyA9
PSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1Vua25vd24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGF2QXNzZXRTdGF0dXMgPT0gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzRmFpbGVk
IHx8IG1fcHJlbG9hZCA+IE1lZGlhUGxheWVyOjpNZXRhRGF0YSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgbWF5IGhhdmUgYSBwbGF5YWJsZSBhc3NldCB0aGF0IGRvZXNuJ3Qgc3Vw
cG9ydCBpbnNwZWN0aW9uIHByaW9yIHRvIHBsYXliYWNrOyBnbyBhaGVhZCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFuZCBjcmVhdGUgdGhlIEFWUGxheWVySXRlbSBub3cuIFdoZW4gdGhl
IEFWUGxheWVySXRlbSBiZWNvbWVzIHJlYWR5IHRvIHBsYXksIHdlIHdpbGwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBoYXZlIGFjY2VzcyB0byBpdHMgbWV0YWRhdGEuIE9yIHdlIG1heSBo
YXZlIGJlZW4gYXNrZWQgdG8gYmVjb21lIHJlYWR5IHRvIHBsYXkgaW1tZWRpYXRlbHkuCisgICAg
ICAgICAgICAgICAgaWYgKGF2QXNzZXRTdGF0dXMgPT0gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVz
TG9hZGVkKQorICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU1ldGFkYXRhOworICAgICAgICAgICAgICAgIGlmIChpdGVtU3RhdHVzIDw9IE1lZGlhUGxh
eWVyQVZQbGF5ZXJJdGVtU3RhdHVzVW5rbm93bikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
YXZBc3NldFN0YXR1cyA9PSBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNGYWlsZWQgfHwgbV9wcmVs
b2FkID4gTWVkaWFQbGF5ZXI6Ok1ldGFEYXRhIHx8IGlzTGl2ZVN0cmVhbSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGUgYXNzZXQgaXMgcGxheWFibGUgYnV0IGRvZXNuJ3Qgc3Vw
cG9ydCBpbnNwZWN0aW9uIHByaW9yIHRvIHBsYXliYWNrIChlZy4gc3RyZWFtaW5nIGZpbGVzKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHdlIGFyZSBzdXBwb3NlZCB0byBwcmVwYXJl
IGZvciBwbGF5YmFjayBpbW1lZGlhdGVseSwgc28gY3JlYXRlIHRoZSBwbGF5ZXIgaXRlbSBub3cu
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpM
b2FkaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZVRvUGxheSgpOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmIChhdkFzc2V0U3RhdHVzID09IE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0xvYWRlZCkK
LSAgICAgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRh
ZGF0YTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gRklYIE1FOiBm
ZXRjaCB0aGUgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBAInBsYXlhYmxlIiBrZXkgdG8gZGlz
dGluZ3Vpc2ggYmV0d2VlbiBmb3JtYXQgCiAgICAgICAgICAgICAgICAgLy8gYW5kIG5ldHdvcmsg
ZXJyb3JzLgpAQCAtNDYxLDggKzQyMCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjp1cGQKICAgICAgICAgICAgIGlmIChzZWVraW5nKCkpCiAgICAgICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEg
PyBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhIDogTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwog
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgbWF4TG9hZGVkID0gbWF4
VGltZUxvYWRlZCgpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbVN0YXR1cykgeworICAg
ICAgICAgICAgICAgIGNhc2UgTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNEb2VzTm90RXhp
c3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1Vu
a25vd246CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNGYWlsZWQ6CkBAIC00NzEsMjIgKzQzMCwyNSBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dXBkCiAgICAgICAgICAgICAg
ICAgY2FzZSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrTGlrZWx5VG9LZWVw
VXA6CiAgICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
RW5vdWdoRGF0YTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1JlYWR5VG9QbGF5OgorCiAgICAgICAg
ICAgICAgICAgY2FzZSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVy
RnVsbDoKKyAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
SWRsZTsKKworICAgICAgICAgICAgICAgIGNhc2UgTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0
dXNSZWFkeVRvUGxheToKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlYWR5U3RhdGUg
aXMgYWxyZWFkeSBIYXZlRW5vdWdoRGF0YSwgZG9uJ3QgZ28gbG93ZXIgYmVjYXVzZSBvZiB0aGlz
IHN0YXRlIGNoYW5nZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBN
ZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgICAgIGNhc2UgTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNQ
bGF5YmFja0J1ZmZlckVtcHR5OgotICAgICAgICAgICAgICAgICAgICBpZiAobWF4TG9hZGVkID4g
Y3VycmVudFRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1heFRpbWVMb2FkZWQoKSA+
IGN1cnJlbnRUaW1lKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3Vy
cmVudERhdGE7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmIChpdGVtU3RhdHVzID49IE1lZGlhUGxheWVyQVZQbGF5ZXJJ
dGVtU3RhdHVzUmVhZHlUb1BsYXkpCi0gICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRl
ID0gKG1heExvYWRlZCA9PSBkdXJhdGlvbigpKSA/IE1lZGlhUGxheWVyOjpMb2FkZWQgOiBNZWRp
YVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbVN0YXR1cyAhPSBNZWRp
YVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVyRnVsbCAmJiBpdGVtU3RhdHVz
ID49IE1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUmVhZHlUb1BsYXkpCisgICAgICAgICAg
ICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gKG1heFRpbWVMb2FkZWQoKSA9PSBkdXJhdGlvbigp
KSA/IE1lZGlhUGxheWVyOjpMb2FkZWQgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQ5NSw2ICs0NTcsOCBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dXBkCiAgICAgICAgIHNldFVwVmlkZW9SZW5kZXJpbmco
KTsKIAogICAgIGlmICghbV9oYXZlUmVwb3J0ZWRGaXJzdFZpZGVvRnJhbWUgJiYgbV9jYWNoZWRI
YXNWaWRlbyAmJiBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkpIHsKKyAgICAgICAgaWYgKG1fcmVh
ZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEpCisgICAgICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOwogICAgICAgICBtX2hhdmVS
ZXBvcnRlZEZpcnN0VmlkZW9GcmFtZSA9IHRydWU7CiAgICAgICAgIG1fcGxheWVyLT5maXJzdFZp
ZGVvRnJhbWVBdmFpbGFibGUoKTsKICAgICB9CkBAIC01MzAsMTYgKzQ5NCw2IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZXQKICAgICBwbGF0Zm9ybVNldFZpc2libGUo
dmlzaWJsZSk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpoYXNB
dmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QKLXsKLSAgICBpZiAoY3VycmVudFJlbmRlcmluZ01v
ZGUoKSA9PSBNZWRpYVJlbmRlcmluZ1RvTGF5ZXIpCi0gICAgICAgIHJldHVybiB2aWRlb0xheWVy
SXNSZWFkeVRvRGlzcGxheSgpOwotCi0gICAgLy8gV2hlbiB1c2luZyB0aGUgc29mdHdhcmUgcmVu
ZGVyZXIgd2UgaG9wZSBzb21lb25lIHdpbGwgc2lnbmFsIHRoYXQgYSBmcmFtZSBpcyBhdmFpbGFi
bGUgc28gd2UgbWlnaHQgYXMgd2VsbAotICAgIC8vIHdhaXQgdW50aWwgd2Uga25vdyB0aGF0IGEg
ZnJhbWUgaGFzIGJlZW4gZHJhd24uCi0gICAgcmV0dXJuIG1fdmlkZW9GcmFtZUhhc0RyYXduOwot
fQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6YWNjZWxlcmF0ZWRSZW5k
ZXJpbmdTdGF0ZUNoYW5nZWQoKQogewogICAgIC8vIFNldCB1cCBvciBjaGFuZ2UgdGhlIHJlbmRl
cmluZyBwYXRoIGlmIG5lY2Vzc2FyeS4KQEAgLTU0OSw2ICs1MDMsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6YWNjCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6bWV0YWRhdGFMb2FkZWQoKQogewogICAgIG1fbG9hZGluZ01ldGFkYXRhID0gZmFs
c2U7CisgICAgdHJhY2tzQ2hhbmdlZCgpOwogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCkBAIC01
NzUsNyArNTMwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmxvYQog
ICAgIC8vIHNvIHJlcG9ydCBkdXJhdGlvbiBjaGFuZ2VkIHdoZW4gdGhlIGVzdGltYXRlIGlzIHVw
YXRlZC4KICAgICBmbG9hdCBkdXIgPSBkdXJhdGlvbigpOwogICAgIGlmIChkdXIgIT0gbV9yZXBv
cnRlZER1cmF0aW9uKSB7Ci0gICAgICAgIGlmIChtX3JlcG9ydGVkRHVyYXRpb24gIT0gaW52YWxp
ZFRpbWUpCisgICAgICAgIGlmIChtX3JlcG9ydGVkRHVyYXRpb24gIT0gaW52YWxpZFRpbWUoKSkK
ICAgICAgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKICAgICAgICAgbV9yZXBv
cnRlZER1cmF0aW9uID0gZHVyOwogICAgIH0KQEAgLTU5MCw3ICs1NDUsNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dGltCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjp0aW1lQ2hhbmdlZCglcCkgLSB0aW1lID0gJWYiLCB0
aGlzLCB0aW1lKTsKIAotICAgIGlmIChtX3NlZWtUbyA9PSBpbnZhbGlkVGltZSkKKyAgICBpZiAo
bV9zZWVrVG8gPT0gaW52YWxpZFRpbWUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQVZG
b3VuZGF0aW9uIG1heSBjYWxsIG91ciBvYnNlcnZlciBtb3JlIHRoYW4gb25jZSBkdXJpbmcgYSBz
ZWVrLCBhbmQgd2UgY2FuJ3QgY3VycmVudGx5IHRlbGwKQEAgLTYwMCw3ICs1NTUsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6dGltCiAKICAgICBmbG9hdCBjdXJyZW50
UmF0ZSA9IHJhdGUoKTsKICAgICBpZiAoKGN1cnJlbnRSYXRlID4gMCAmJiB0aW1lID49IG1fc2Vl
a1RvKSB8fCAoY3VycmVudFJhdGUgPCAwICYmIHRpbWUgPD0gbV9zZWVrVG8pIHx8IChhYnMobV9z
ZWVrVG8gLSB0aW1lKSA8PSBzbWFsbFNlZWtEZWx0YSkpIHsKLSAgICAgICAgbV9zZWVrVG8gPSBp
bnZhbGlkVGltZTsKKyAgICAgICAgbV9zZWVrVG8gPSBpbnZhbGlkVGltZSgpOwogICAgICAgICB1
cGRhdGVTdGF0ZXMoKTsKICAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiAgICAgfQpA
QCAtNjExLDcgKzU2Niw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpz
ZWUKICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtD
b21wbGV0ZWQoJXApIC0gZmluaXNoZWQgPSAlZCIsIHRoaXMsIGZpbmlzaGVkKTsKICAgICAKICAg
ICBpZiAoZmluaXNoZWQpCi0gICAgICAgIG1fc2Vla1RvID0gaW52YWxpZFRpbWU7CisgICAgICAg
IG1fc2Vla1RvID0gaW52YWxpZFRpbWUoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OmRpZEVuZCgpCkBAIC02MjgsNyArNTgzLDYgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246OmRpZAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6cmVwYWludCgpCiB7Ci0gICAgbV92aWRlb0ZyYW1lSGFzRHJhd24gPSB0cnVlOwog
ICAgIG1fcGxheWVyLT5yZXBhaW50KCk7CiB9CiAKQEAgLTY0Niw4ICs2MDAsMzYgQEAgTWVkaWFQ
bGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQbGF5ZXJQcgogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlByZWxvYWQgcHJlbG9hZCkK
IHsKICAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwotICAgIGlmIChtX2RlbGF5aW5nTG9hZCAmJiBt
X3ByZWxvYWQgIT0gTWVkaWFQbGF5ZXI6Ok5vbmUpCi0gICAgICAgIHJlc3VtZUxvYWQoKTsKKyAg
ICBpZiAoIW1fYXNzZXRVUkwubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldERl
bGF5Q2FsbGJhY2tzKHRydWUpOworCisgICAgaWYgKG1fcHJlbG9hZCA+PSBNZWRpYVBsYXllcjo6
TWV0YURhdGEgJiYgYXNzZXRTdGF0dXMoKSA9PSBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNEb2Vz
Tm90RXhpc3QpIHsKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAg
ICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVW
aWV3KCktPmZyYW1lKCkgOiAwOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdCogY2FjaGVI
b3N0ID0gZnJhbWUgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0
aW9uQ2FjaGVIb3N0KCkgOiAwOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJl
c291cmNlOworICAgICAgICBpZiAoY2FjaGVIb3N0ICYmIGNhY2hlSG9zdC0+c2hvdWxkTG9hZFJl
c291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0KG1fYXNzZXRVUkwpLCBy
ZXNvdXJjZSkgJiYgcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIC8vIEFWRm91bmRhdGlvbiBjYW4n
dCBvcGVuIGFyYml0cmFyeSBkYXRhIHBvaW50ZXJzLCBzbyBpZiB0aGlzIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZSBkb2Vzbid0IAorICAgICAgICAgICAgLy8gaGF2ZSBhIHZhbGlkIGxvY2FsIHBh
dGgsIGp1c3Qgb3BlbiB0aGUgcmVzb3VyY2UncyBvcmlnaW5hbCBVUkwuCisgICAgICAgICAgICBp
ZiAocmVzb3VyY2UtPnBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY3JlYXRlQVZB
c3NldEZvclVSTChyZXNvdXJjZS0+dXJsKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGNyZWF0ZUFWQXNzZXRGb3JDYWNoZVJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAg
fSBlbHNlCisjZW5kaWYgICAgCisgICAgICAgICAgICBjcmVhdGVBVkFzc2V0Rm9yVVJMKG1fYXNz
ZXRVUkwpOworCisgICAgICAgIGNyZWF0ZUFWUGxheWVyKCk7CisKKyAgICAgICAgY2hlY2tQbGF5
YWJpbGl0eSgpOworICAgIH0KKworICAgIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1
dG8gJiYgcGxheWVySXRlbVN0YXR1cygpID09IE1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVz
RG9lc05vdEV4aXN0KQorICAgICAgICBjcmVhdGVBVlBsYXllckl0ZW0oKTsKKworICAgIHNldERl
bGF5Q2FsbGJhY2tzKGZhbHNlKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnNldERlbGF5Q2FsbGJhY2tzKGJvb2wgZGVsYXkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lvbiA4
NTYzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDEw
ICsxNDIsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+
IGJ1ZmZlcmVkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVsb2FkKE1l
ZGlhUGxheWVyOjpQcmVsb2FkKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9G
cmFtZSgpIGNvbnN0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0
dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCA9IDA7
CkBAIC0xNTksMTIgKzE1OCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzRnVsbHNjcmVlbigpIGNvbnN0OwogCiAgICAgLy8gUmVxdWlyZWQgaW50ZXJmYWNlcyBmb3Ig
Y29uY3JldGUgZGVyaXZlZCBjbGFzc2VzLgotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBVlBsYXll
ckZvclVSTChjb25zdCBTdHJpbmcmIHVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVB
VkFzc2V0Rm9yVVJMKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
QVZQbGF5ZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFWUGxheWVySXRlbSgpID0g
MDsKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVBVlBsYXllckZvckNhY2hlUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBVkFzc2V0Rm9yQ2FjaGVSZXNvdXJjZShB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqKSA9IDA7CiAjZW5kaWYKIAogICAgIGVudW0gSXRlbVN0
YXR1cyB7CisgICAgICAgIE1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzRG9lc05vdEV4aXN0
LAogICAgICAgICBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1Vua25vd24sCiAgICAgICAg
IE1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzRmFpbGVkLAogICAgICAgICBNZWRpYVBsYXll
ckFWUGxheWVySXRlbVN0YXR1c1JlYWR5VG9QbGF5LApAQCAtMTc0LDcgKzE3Niw4IEBAIHByb3Rl
Y3RlZDoKICAgICB9OwogICAgIHZpcnR1YWwgSXRlbVN0YXR1cyBwbGF5ZXJJdGVtU3RhdHVzKCkg
Y29uc3QgPSAwOwogCi0gICAgZW51bSBBVkFzc2V0U3RhdHVzIHsKKyAgICBlbnVtIEFzc2V0U3Rh
dHVzIHsKKyAgICAgICAgTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzRG9lc05vdEV4aXN0LAogICAg
ICAgICBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNVbmtub3duLAogICAgICAgICBNZWRpYVBsYXll
ckFWQXNzZXRTdGF0dXNMb2FkaW5nLAogICAgICAgICBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNG
YWlsZWQsCkBAIC0xODIsNyArMTg1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBNZWRpYVBsYXll
ckFWQXNzZXRTdGF0dXNMb2FkZWQsCiAgICAgICAgIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c1Bs
YXlhYmxlLAogICAgIH07Ci0gICAgdmlydHVhbCBBVkFzc2V0U3RhdHVzIGFzc2V0U3RhdHVzKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgQXNzZXRTdGF0dXMgYXNzZXRTdGF0dXMoKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1TZXRWaXNpYmxlKGJvb2wpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1QbGF5KCkgPSAwOwpAQCAtMjA2LDEzICsyMDksMTMgQEAg
cHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVZpZGVvTGF5ZXIoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lWaWRlb0xheWVyKCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCB2aWRlb0xheWVySXNSZWFkeVRvRGlzcGxheSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
Ym9vbCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBi
b29sIGhhc0NvbnRleHRSZW5kZXJlcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFz
TGF5ZXJSZW5kZXJlcigpIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgcmVzdW1l
TG9hZCgpOwogICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CiAKICAgICB2b2lkIHNldEhhc1ZpZGVv
KGJvb2wgYikgeyBtX2NhY2hlZEhhc1ZpZGVvID0gYjsgfTsKQEAgLTIzNiwxNCArMjM5LDE0IEBA
IHByb3RlY3RlZDoKICAgICBib29sIGhhc1NldFVwVmlkZW9SZW5kZXJpbmcoKSBjb25zdDsKIAog
ICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDYWxsYmFjayh2b2lkKik7CisgICAgCisgICAgZmxv
YXQgaW52YWxpZFRpbWUoKSBjb25zdCB7IHJldHVybiAtMS4wZjsgfQogCiBwcml2YXRlOgotCiAg
ICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwogCiAgICAgVmVjdG9yPE5vdGlmaWNhdGlvbj4gbV9x
dWV1ZWROb3RpZmljYXRpb25zOwogICAgIE11dGV4IG1fcXVldWVNdXRleDsKLSAgICBib29sIG1f
bWFpblRocmVhZENhbGxQZW5kaW5nOwogCiAgICAgbXV0YWJsZSBSZWZQdHI8VGltZVJhbmdlcz4g
bV9jYWNoZWRMb2FkZWRUaW1lUmFuZ2VzOwogCkBAIC0yNjMsMTIgKzI2NiwxMCBAQCBwcml2YXRl
OgogICAgIGZsb2F0IG1fc2Vla1RvOwogICAgIGZsb2F0IG1fcmVxdWVzdGVkUmF0ZTsKICAgICBp
bnQgbV9kZWxheUNhbGxiYWNrczsKLSAgICBib29sIG1faGF2ZVByZXBhcmVkVG9QbGF5OworICAg
IGJvb2wgbV9tYWluVGhyZWFkQ2FsbFBlbmRpbmc7CiAgICAgYm9vbCBtX2Fzc2V0SXNQbGF5YWJs
ZTsKICAgICBib29sIG1fdmlzaWJsZTsKLSAgICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwog
ICAgIGJvb2wgbV9sb2FkaW5nTWV0YWRhdGE7Ci0gICAgYm9vbCBtX2RlbGF5aW5nTG9hZDsKICAg
ICBib29sIG1faXNBbGxvd2VkVG9SZW5kZXI7CiAgICAgYm9vbCBtX2NhY2hlZEhhc0F1ZGlvOwog
ICAgIGJvb2wgbV9jYWNoZWRIYXNWaWRlbzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkocmV2aXNpb24gODU2
MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCwx
MiArODgsMTMgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGZsb2F0IG1lZGlhVGltZUZvclRpbWVW
YWx1ZShmbG9hdCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZQbGF5ZXIoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZQbGF5ZXJGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwp
OworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBVlBsYXllckl0ZW0oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlQVZBc3NldEZvclVSTChjb25zdCBTdHJpbmcmIHVybCk7CiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZQbGF5ZXJG
b3JDYWNoZVJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSopOworICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVBVkFzc2V0Rm9yQ2FjaGVSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqKTsKICNlbmRpZgogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpJdGVtU3RhdHVzIHBsYXllckl0ZW1TdGF0dXMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6QVZBc3NldFN0YXR1cyBhc3NldFN0YXR1cygpIGNv
bnN0OworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpBc3NldFN0
YXR1cyBhc3NldFN0YXR1cygpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNoZWNrUGxheWFi
aWxpdHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmF0ZSgpOwpAQCAtMTA3LDEyICsxMDgs
MTMgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Mb2FkaW5nTWV0YWRhdGEoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2l6ZUNoYW5nZWQoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBoYXNB
dmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ29u
dGV4dFZpZGVvUmVuZGVyZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNvbnRleHRWaWRl
b1JlbmRlcmVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVmlkZW9MYXllcigpOwogICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95VmlkZW9MYXllcigpOwotICAgIHZpcnR1YWwgYm9vbCB2aWRl
b0xheWVySXNSZWFkeVRvRGlzcGxheSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGhhc0Nv
bnRleHRSZW5kZXJlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXllclJlbmRlcmVy
KCkgY29uc3Q7CkBAIC0xMjcsNiArMTI5LDggQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8V2Vi
Q29yZUFWRk1vdmllT2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOwogICAgIFJldGFpblB0cjxBVkFz
c2V0SW1hZ2VHZW5lcmF0b3I+IG1faW1hZ2VHZW5lcmF0b3I7CiAgICAgaWQgbV90aW1lT2JzZXJ2
ZXI7CisgICAgYm9vbCBtX3ZpZGVvRnJhbWVIYXNEcmF3bjsKKyAgICBib29sIG1faGF2ZUNoZWNr
ZWRQbGF5YWJpbGl0eTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZpc2lvbiA4NTYz
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgs
NiArMTM4LDggQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6TWVkaQogICAg
IDogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKHBsYXllcikKICAgICAsIG1fb2JqY09i
c2VydmVyKEFkb3B0TlMsIFtbV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgYWxsb2NdIGluaXRXaXRo
Q2FsbGJhY2s6dGhpc10pCiAgICAgLCBtX3RpbWVPYnNlcnZlcigwKQorICAgICwgbV92aWRlb0Zy
YW1lSGFzRHJhd24oZmFsc2UpCisgICAgLCBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkoZmFsc2Up
CiB7CiB9CiAKQEAgLTIzNCw3NyArMjM2LDEwMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6CiAgICAgbV92aWRlb0xheWVyID0gMDsKIH0KIAotYm9vbCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp2aWRlb0xheWVySXNSZWFkeVRvRGlzcGxheSgp
IGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omhhc0F2YWls
YWJsZVZpZGVvRnJhbWUoKSBjb25zdAogewotICAgIHJldHVybiAobV92aWRlb0xheWVyICYmIFtt
X3ZpZGVvTGF5ZXIuZ2V0KCkgaXNSZWFkeUZvckRpc3BsYXldKTsKKyAgICByZXR1cm4gKG1fdmlk
ZW9GcmFtZUhhc0RyYXduIHx8IChtX3ZpZGVvTGF5ZXIgJiYgW21fdmlkZW9MYXllci5nZXQoKSBp
c1JlYWR5Rm9yRGlzcGxheV0pKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpjcmVhdGVBVlBsYXllckZvclVSTChjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZBc3NldEZvclVSTChj
b25zdCBTdHJpbmcmIHVybCkKIHsKKyAgICBpZiAobV9hdkFzc2V0KQorICAgICAgICByZXR1cm47
CisKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpj
cmVhdGVBVkFzc2V0Rm9yVVJMKCVwKSIsIHRoaXMpOworCiAgICAgc2V0RGVsYXlDYWxsYmFja3Mo
dHJ1ZSk7CiAKLSAgICBpZiAoIW1fYXZBc3NldCkgewotICAgICAgICBOU1VSTCAqY29jb2FVUkwg
PSBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKTsKLSAgICAgICAgbV9hdkFzc2V0LmFkb3B0TlMo
W1tBVlVSTEFzc2V0IGFsbG9jXSBpbml0V2l0aFVSTDpjb2NvYVVSTCBvcHRpb25zOm5pbF0pOwot
ICAgIH0KLSAgICAKLSAgICBjcmVhdGVBVlBsYXllcigpOworICAgIE5TVVJMICpjb2NvYVVSTCA9
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOworICAgIG1fYXZBc3NldC5hZG9wdE5TKFtbQVZV
UkxBc3NldCBhbGxvY10gaW5pdFdpdGhVUkw6Y29jb2FVUkwgb3B0aW9uczpuaWxdKTsKKyAgICBt
X2hhdmVDaGVja2VkUGxheWFiaWxpdHkgPSBmYWxzZTsKKworICAgIHNldERlbGF5Q2FsbGJhY2tz
KGZhbHNlKTsKIH0KIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVyRm9yQ2Fj
aGVSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yQ2FjaGVSZXNv
dXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlKQogewotICAgIC8vIEFWRm91
bmRhdGlvbiBjYW4ndCBvcGVuIGFyYml0cmFyeSBkYXRhIHBvaW50ZXJzLCBzbyBpZiB0aGlzIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSBkb2Vzbid0IAotICAgIC8vIGhhdmUgYSB2YWxpZCBsb2Nh
bCBwYXRoLCBqdXN0IG9wZW4gdGhlIHJlc291cmNlJ3Mgb3JpZ2luYWwgVVJMLgotICAgIGlmIChy
ZXNvdXJjZS0+cGF0aCgpLmlzRW1wdHkoKSkgewotICAgICAgICBjcmVhdGVBVlBsYXllckZvclVS
TChyZXNvdXJjZS0+dXJsKCkpOworICAgIGlmIChtX2F2QXNzZXQpCiAgICAgICAgIHJldHVybjsK
LSAgICB9CisKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpjcmVhdGVBVkFzc2V0Rm9yQ2FjaGVSZXNvdXJjZSglcCkiLCB0aGlzKTsKKworICAgIC8v
IEFWRm91bmRhdGlvbiBjYW4ndCBvcGVuIGFyYml0cmFyeSBkYXRhIHBvaW50ZXJzLgorICAgIEFT
U0VSVCghcmVzb3VyY2UtPnBhdGgoKS5pc0VtcHR5KCkpOwogICAgIAogICAgIHNldERlbGF5Q2Fs
bGJhY2tzKHRydWUpOwogCi0gICAgaWYgKCFtX2F2QXNzZXQpIHsKLSAgICAgICAgTlNVUkwqIGxv
Y2FsVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpyZXNvdXJjZS0+cGF0aCgpXTsKLSAgICAg
ICAgbV9hdkFzc2V0LmFkb3B0TlMoW1tBVlVSTEFzc2V0IGFsbG9jXSBpbml0V2l0aFVSTDpsb2Nh
bFVSTCBvcHRpb25zOm5pbF0pOwotICAgIH0KKyAgICBOU1VSTCogbG9jYWxVUkwgPSBbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOnJlc291cmNlLT5wYXRoKCldOworICAgIG1fYXZBc3NldC5hZG9wdE5T
KFtbQVZVUkxBc3NldCBhbGxvY10gaW5pdFdpdGhVUkw6bG9jYWxVUkwgb3B0aW9uczpuaWxdKTsK
KyAgICBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkgPSBmYWxzZTsKIAotICAgIGNyZWF0ZUFWUGxh
eWVyKCk7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwogfQogI2VuZGlmCiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIoKQogewot
ICAgIGlmICghbV9hdlBsYXllcikgewotICAgICAgICBtX2F2UGxheWVyLmFkb3B0TlMoW1tBVlBs
YXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICAKLSAgICAgICAgW21fYXZQbGF5ZXIuZ2V0KCkg
YWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAInJhdGUiIG9wdGlv
bnM6bmlsIGNvbnRleHQ6KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9u
Q29udGV4dFBsYXllcl07Ci0gICAgICAgIAotICAgICAgICAvLyBBZGQgYSB0aW1lIG9ic2VydmVy
LCBhc2sgdG8gYmUgY2FsbGVkIGluZnJlcXVlbnRseSBiZWNhdXNlIHdlIGRvbid0IHJlYWxseSB3
YW50IHBlcmlvZGljIGNhbGxiYWNrcyBidXQKLSAgICAgICAgLy8gb3VyIG9ic2VydmVyIHdpbGwg
YWxzbyBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBzZWVrIGhhcHBlbnMuCi0gICAgICAgIGNvbnN0IGRv
dWJsZSB2ZXJ5TG9uZ0ludGVydmFsID0gNjAqNjAqNjAqMjQqMzA7Ci0gICAgICAgIFdlYkNvcmVB
VkZNb3ZpZU9ic2VydmVyICpvYnNlcnZlciA9IG1fb2JqY09ic2VydmVyLmdldCgpOwotICAgICAg
ICBtX3RpbWVPYnNlcnZlciA9IFttX2F2UGxheWVyLmdldCgpIGFkZFBlcmlvZGljVGltZU9ic2Vy
dmVyRm9ySW50ZXJ2YWw6Q01UaW1lTWFrZVdpdGhTZWNvbmRzKHZlcnlMb25nSW50ZXJ2YWwsIDEw
KSBxdWV1ZTpuaWwgdXNpbmdCbG9jazpeKENNVGltZSB0aW1lKXsKLSAgICAgICAgICAgIFtvYnNl
cnZlciB0aW1lQ2hhbmdlZDpDTVRpbWVHZXRTZWNvbmRzKHRpbWUpXTsKLSAgICAgICAgfV07Ci0g
ICAgfQorICAgIGlmIChtX2F2UGxheWVyKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1f
YXZQbGF5ZXJJdGVtKSB7Ci0gICAgICAgIC8vIENyZWF0ZSB0aGUgcGxheWVyIGl0ZW0gc28gd2Ug
Y2FuIG1lZGlhIGRhdGEuIAotICAgICAgICBtX2F2UGxheWVySXRlbS5hZG9wdE5TKFtbQVZQbGF5
ZXJJdGVtIGFsbG9jXSBpbml0V2l0aEFzc2V0Om1fYXZBc3NldC5nZXQoKV0pOwotICAgICAgICAK
LSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjptX29iamNPYnNlcnZlci5nZXQoKXNlbGVjdG9yOkBzZWxlY3RvcihkaWRFbmQ6KSBuYW1lOkFW
UGxheWVySXRlbURpZFBsYXlUb0VuZFRpbWVOb3RpZmljYXRpb24gb2JqZWN0Om1fYXZQbGF5ZXJJ
dGVtLmdldCgpXTsKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpjcmVhdGVBVlBsYXllciglcCkiLCB0aGlzKTsKIAotICAgICAgICBmb3IgKE5TU3Ry
aW5nICprZXlOYW1lIGluIGl0ZW1LVk9Qcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICBbbV9hdlBs
YXllckl0ZW0uZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0
aDprZXlOYW1lIG9wdGlvbnM6bmlsIGNvbnRleHQ6KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRh
dGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllckl0ZW1dOworICAgIHNldERlbGF5Q2FsbGJhY2tz
KHRydWUpOwogCi0gICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJlcGxhY2VDdXJyZW50SXRlbVdp
dGhQbGF5ZXJJdGVtOm1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKLSAgICB9CisgICAgbV9hdlBsYXll
ci5hZG9wdE5TKFtbQVZQbGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbbV9hdlBsYXllci5nZXQo
KSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAicmF0ZSIgb3B0
aW9uczpuaWwgY29udGV4dDoodm9pZCAqKU1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRp
b25Db250ZXh0UGxheWVyXTsKKyAgICAKKyAgICAvLyBBZGQgYSB0aW1lIG9ic2VydmVyLCBhc2sg
dG8gYmUgY2FsbGVkIGluZnJlcXVlbnRseSBiZWNhdXNlIHdlIGRvbid0IHJlYWxseSB3YW50IHBl
cmlvZGljIGNhbGxiYWNrcyBidXQKKyAgICAvLyBvdXIgb2JzZXJ2ZXIgd2lsbCBhbHNvIGJlIGNh
bGxlZCB3aGVuZXZlciBhIHNlZWsgaGFwcGVucy4KKyAgICBjb25zdCBkb3VibGUgdmVyeUxvbmdJ
bnRlcnZhbCA9IDYwKjYwKjYwKjI0KjMwOworICAgIFdlYkNvcmVBVkZNb3ZpZU9ic2VydmVyICpv
YnNlcnZlciA9IG1fb2JqY09ic2VydmVyLmdldCgpOworICAgIG1fdGltZU9ic2VydmVyID0gW21f
YXZQbGF5ZXIuZ2V0KCkgYWRkUGVyaW9kaWNUaW1lT2JzZXJ2ZXJGb3JJbnRlcnZhbDpDTVRpbWVN
YWtlV2l0aFNlY29uZHModmVyeUxvbmdJbnRlcnZhbCwgMTApIHF1ZXVlOm5pbCB1c2luZ0Jsb2Nr
Ol4oQ01UaW1lIHRpbWUpeworICAgICAgICBbb2JzZXJ2ZXIgdGltZUNoYW5nZWQ6Q01UaW1lR2V0
U2Vjb25kcyh0aW1lKV07CisgICAgfV07CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQ
bGF5ZXJJdGVtKCkKK3sKKyAgICBpZiAobV9hdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybjsK
KworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNy
ZWF0ZUFWUGxheWVySXRlbSglcCkiLCB0aGlzKTsKKworICAgIEFTU0VSVChtX2F2UGxheWVyKTsK
KworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworCisgICAgLy8gQ3JlYXRlIHRoZSBwbGF5
ZXIgaXRlbSBzbyB3ZSBjYW4gbWVkaWEgZGF0YS4gCisgICAgbV9hdlBsYXllckl0ZW0uYWRvcHRO
UyhbW0FWUGxheWVySXRlbSBhbGxvY10gaW5pdFdpdGhBc3NldDptX2F2QXNzZXQuZ2V0KCldKTsK
KyAgICAKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOm1fb2JqY09ic2VydmVyLmdldCgpc2VsZWN0b3I6QHNlbGVjdG9yKGRpZEVuZDopIG5hbWU6
QVZQbGF5ZXJJdGVtRGlkUGxheVRvRW5kVGltZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9hdlBsYXll
ckl0ZW0uZ2V0KCldOworCisgICAgZm9yIChOU1N0cmluZyAqa2V5TmFtZSBpbiBpdGVtS1ZPUHJv
cGVydGllcygpKQorICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9v
YmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDprZXlOYW1lIG9wdGlvbnM6bmlsIGNvbnRleHQ6
KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllckl0
ZW1dOworCisgICAgW21fYXZQbGF5ZXIuZ2V0KCkgcmVwbGFjZUN1cnJlbnRJdGVtV2l0aFBsYXll
ckl0ZW06bV9hdlBsYXllckl0ZW0uZ2V0KCldOwogCiAgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFs
c2UpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNoZWNr
UGxheWFiaWxpdHkoKQogeworICAgIGlmIChtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkgPSB0cnVlOworCiAgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2hlY2tQbGF5
YWJpbGl0eSglcCkiLCB0aGlzKTsKIAogICAgIFttX2F2QXNzZXQuZ2V0KCkgbG9hZFZhbHVlc0Fz
eW5jaHJvbm91c2x5Rm9yS2V5czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6QCJwbGF5YWJsZSJd
IGNvbXBsZXRpb25IYW5kbGVyOl57CkBAIC0zMTQsNyArMzQwLDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmJlZ2luTG9hZGluZ01ldGFkYXRhKCkKIHsKLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF5YWJpbGl0eUtub3duKCVwKSAt
IHJlcXVlc3RpbmcgbWV0YWRhdGEgbG9hZGluZyIsIHRoaXMpOworICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJlZ2luTG9hZGluZ01ldGFkYXRhKCVw
KSAtIHJlcXVlc3RpbmcgbWV0YWRhdGEgbG9hZGluZyIsIHRoaXMpOwogICAgIFttX2F2QXNzZXQu
Z2V0KCkgbG9hZFZhbHVlc0FzeW5jaHJvbm91c2x5Rm9yS2V5czpbYXNzZXRNZXRhZGF0YUtleU5h
bWVzKCkgcmV0YWluXSBjb21wbGV0aW9uSGFuZGxlcjpeewogICAgICAgICBbbV9vYmpjT2JzZXJ2
ZXIuZ2V0KCkgbWV0YWRhdGFMb2FkZWRdOwogICAgIH1dOwpAQCAtMzIzLDcgKzM0OSw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6SXRlbVN0YXR1cyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpwbGF5ZXJJdGVtU3RhdHVzKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYXZQbGF5ZXJJdGVt
KQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBs
YXllckFWUGxheWVySXRlbVN0YXR1c1Vua25vd247CisgICAgICAgIHJldHVybiBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzRG9lc05v
dEV4aXN0OwogCiAgICAgQVZQbGF5ZXJJdGVtU3RhdHVzIHN0YXR1cyA9IFttX2F2UGxheWVySXRl
bS5nZXQoKSBzdGF0dXNdOwogICAgIGlmIChzdGF0dXMgPT0gQVZQbGF5ZXJJdGVtU3RhdHVzVW5r
bm93bikKQEAgLTMzMiw5ICszNTgsOSBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
Okl0ZW1TdGF0CiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzRmFpbGVkOwogICAgIGlmIChbbV9hdlBsYXll
ckl0ZW0uZ2V0KCkgaXNQbGF5YmFja0xpa2VseVRvS2VlcFVwXSkKICAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0
dXNQbGF5YmFja0xpa2VseVRvS2VlcFVwOwotICAgIGlmIChidWZmZXJlZCgpLT5jb250YWluKGR1
cmF0aW9uKCkpKQorICAgIGlmIChbbV9hdlBsYXllckl0ZW0uZ2V0KCkgaXNQbGF5YmFja0J1ZmZl
ckZ1bGxdKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpN
ZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVyRnVsbDsKLSAgICBpZiAo
YnVmZmVyZWQoKS0+Y29udGFpbihjdXJyZW50VGltZSgpKSkKKyAgICBpZiAoW21fYXZQbGF5ZXJJ
dGVtLmdldCgpIGlzUGxheWJhY2tCdWZmZXJFbXB0eV0pCiAgICAgICAgIHJldHVybiBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUGxh
eWJhY2tCdWZmZXJFbXB0eTsKIAogICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUmVhZHlUb1BsYXk7CkBAIC0zODUs
MjEgKzQxMSwyNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAK
IGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtRHVyYXRp
b24oKSBjb25zdAogewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCAhbV9hdlBsYXll
ckl0ZW0pCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghbV9hdkFzc2V0KQorICAgICAgICBy
ZXR1cm4gaW52YWxpZFRpbWUoKTsKICAgICAKLSAgICBmbG9hdCBkdXJhdGlvbjsKLSAgICBDTVRp
bWUgY21EdXJhdGlvbiA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBkdXJhdGlvbl07CisgICAgQ01U
aW1lIGNtRHVyYXRpb247CisgICAgCisgICAgLy8gQ2hlY2sgdGhlIGF2aXRlbSBpZiB3ZSBoYXZl
IG9uZSwgc29tZSBhc3NldHMgbmV2ZXIgcmVwb3J0IGR1cmF0aW9uLgorICAgIGlmIChtX2F2UGxh
eWVySXRlbSkKKyAgICAgICAgY21EdXJhdGlvbiA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBkdXJh
dGlvbl07CisgICAgZWxzZQorICAgICAgICBjbUR1cmF0aW9uPSBbbV9hdkFzc2V0LmdldCgpIGR1
cmF0aW9uXTsKKwogICAgIGlmIChDTVRJTUVfSVNfTlVNRVJJQyhjbUR1cmF0aW9uKSkKLSAgICAg
ICAgZHVyYXRpb24gPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoY21E
dXJhdGlvbikpOwotICAgIGVsc2UgaWYgKENNVElNRV9JU19JTkRFRklOSVRFKGNtRHVyYXRpb24p
KQotICAgICAgICBkdXJhdGlvbiA9IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6ZHVyYXRpb24oJXApIC0gaW52YWxpZCBkdXJhdGlvbiwgcmV0dXJuaW5nIDAi
LCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgICAgICByZXR1cm4gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChDTVRpbWVHZXRTZWNvbmRzKGNtRHVyYXRpb24pKTsKIAotICAgIHJl
dHVybiBkdXJhdGlvbjsKKyAgICBpZiAoQ01USU1FX0lTX0lOREVGSU5JVEUoY21EdXJhdGlvbikp
CisgICAgICAgIHJldHVybiBudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7CisKKyAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkdXJhdGlv
biglcCkgLSBpbnZhbGlkIGR1cmF0aW9uLCByZXR1cm5pbmcgLTEiLCB0aGlzKTsKKyAgICByZXR1
cm4gaW52YWxpZFRpbWUoKTsKIH0KIAogZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6Y3VycmVudFRpbWUoKSBjb25zdApAQCAtNTM1LDEwICs1NjUsMTAgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIG1fYXZBc3NldCA9IGFzc2V0
OwogfQogCi1NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OkFWQXNzZXRTdGF0dXMgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YXNzZXRTdGF0dXMoKSBjb25zdAorTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpBc3NldFN0YXR1cyBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjphc3NldFN0YXR1cygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2F2
QXNzZXQpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNVbmtub3duOwor
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzRG9lc05vdEV4aXN0OwogCiAg
ICAgZm9yIChOU1N0cmluZyAqa2V5TmFtZSBpbiBhc3NldE1ldGFkYXRhS2V5TmFtZXMoKSkgewog
ICAgICAgICBBVktleVZhbHVlU3RhdHVzIGtleVN0YXR1cyA9IFttX2F2QXNzZXQuZ2V0KCkgc3Rh
dHVzT2ZWYWx1ZUZvcktleTprZXlOYW1lIGVycm9yOm5pbF07CkBAIC01NDcsNiArNTc3LDcgQEAg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpBVkFzc2V0UwogICAgICAgICAKICAgICAg
ICAgaWYgKGtleVN0YXR1cyA9PSBBVktleVZhbHVlU3RhdHVzRmFpbGVkKQogICAgICAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0ZhaWxlZDsgLy8gQXQgbGVhc3Qgb25lIGtl
eSBjb3VsZCBub3QgYmUgbG9hZGVkLgorCiAgICAgICAgIGlmIChrZXlTdGF0dXMgPT0gQVZLZXlW
YWx1ZVN0YXR1c0NhbmNlbGxlZCkKICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNz
ZXRTdGF0dXNDYW5jZWxsZWQ7IC8vIExvYWRpbmcgb2YgYXQgbGVhc3Qgb25lIGtleSB3YXMgY2Fu
Y2VsbGVkLgogICAgIH0KQEAgLTU4Nyw3ICs2MTgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBz
ZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7CiAKLSAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OnBhaW50KGNvbnRleHQsIHJlY3QpOworICAgIG1fdmlkZW9GcmFtZUhhc0RyYXduID0g
dHJ1ZTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKQEAgLTY2
MiwzNyArNjkzLDU0IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMK
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0cmFja3NDaGFuZ2Vk
KCkKIHsKKyAgICBpZiAoIW1fYXZBc3NldCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gVGhp
cyBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHRyYWNrcyBjb2xsZWN0aW9uIGNoYW5nZXMgc28gY2Fj
aGUgaGFzVmlkZW8gYW5kIGhhc0F1ZGlvIHNpbmNlIHdlIGFyZQogICAgIC8vIGFza2VkIGFib3V0
IHRob3NlIGZhaXJseSBmZXF1ZW50bHkuCi0gICAgYm9vbCBoYXNWaWRlbyA9IGZhbHNlOwotICAg
IGJvb2wgaGFzQXVkaW8gPSBmYWxzZTsKLSAgICBib29sIGhhc0NhcHRpb25zID0gZmFsc2U7Ci0g
ICAgTlNBcnJheSAqdHJhY2tzID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIHRyYWNrc107Ci0gICAg
Zm9yIChBVlBsYXllckl0ZW1UcmFjayAqdHJhY2sgaW4gdHJhY2tzKSB7Ci0gICAgICAgIGlmIChb
dHJhY2sgaXNFbmFibGVkXSkgewotICAgICAgICAgICAgQVZBc3NldFRyYWNrICphc3NldFRyYWNr
ID0gW3RyYWNrIGFzc2V0VHJhY2tdOwotICAgICAgICAgICAgaWYgKFtbYXNzZXRUcmFjayBtZWRp
YVR5cGVdIGlzRXF1YWxUb1N0cmluZzpBVk1lZGlhVHlwZVZpZGVvXSkKLSAgICAgICAgICAgICAg
ICBoYXNWaWRlbyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChbW2Fzc2V0VHJhY2sgbWVk
aWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVBdWRpb10pCi0gICAgICAgICAgICAg
ICAgaGFzQXVkaW8gPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAoW1thc3NldFRyYWNrIG1l
ZGlhVHlwZV0gaXNFcXVhbFRvU3RyaW5nOkFWTWVkaWFUeXBlQ2xvc2VkQ2FwdGlvbl0pCi0gICAg
ICAgICAgICAgICAgaGFzQ2FwdGlvbnMgPSB0cnVlOworICAgIGlmICghbV9hdlBsYXllckl0ZW0p
IHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHBsYXllciBpdGVtIHlldCwgc28gY2hlY2sg
d2l0aCB0aGUgYXNzZXQgYmVjYXVzZSBzb21lIGFzc2V0cyBzdXBwb3J0IGluc3BlY3Rpb24KKyAg
ICAgICAgLy8gcHJpb3IgdG8gYmVjb21pbmcgcmVhZHkgdG8gcGxheS4KKyAgICAgICAgc2V0SGFz
VmlkZW8oW1ttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzV2l0aE1lZGlhQ2hhcmFjdGVyaXN0aWM6QVZN
ZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsXSBjb3VudF0pOworICAgICAgICBzZXRIYXNBdWRpbyhb
W21fYXZBc3NldC5nZXQoKSB0cmFja3NXaXRoTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hh
cmFjdGVyaXN0aWNBdWRpYmxlXSBjb3VudF0pOworICAgICAgICBzZXRIYXNDbG9zZWRDYXB0aW9u
cyhbW21fYXZBc3NldC5nZXQoKSB0cmFja3NXaXRoTWVkaWFUeXBlOkFWTWVkaWFUeXBlQ2xvc2Vk
Q2FwdGlvbl0gY291bnRdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBib29sIGhhc1ZpZGVvID0g
ZmFsc2U7CisgICAgICAgIGJvb2wgaGFzQXVkaW8gPSBmYWxzZTsKKyAgICAgICAgYm9vbCBoYXND
YXB0aW9ucyA9IGZhbHNlOworICAgICAgICBOU0FycmF5ICp0cmFja3MgPSBbbV9hdlBsYXllckl0
ZW0uZ2V0KCkgdHJhY2tzXTsKKyAgICAgICAgZm9yIChBVlBsYXllckl0ZW1UcmFjayAqdHJhY2sg
aW4gdHJhY2tzKSB7CisgICAgICAgICAgICBpZiAoW3RyYWNrIGlzRW5hYmxlZF0pIHsKKyAgICAg
ICAgICAgICAgICBBVkFzc2V0VHJhY2sgKmFzc2V0VHJhY2sgPSBbdHJhY2sgYXNzZXRUcmFja107
CisgICAgICAgICAgICAgICAgaWYgKFtbYXNzZXRUcmFjayBtZWRpYVR5cGVdIGlzRXF1YWxUb1N0
cmluZzpBVk1lZGlhVHlwZVZpZGVvXSkKKyAgICAgICAgICAgICAgICAgICAgaGFzVmlkZW8gPSB0
cnVlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFtbYXNzZXRUcmFjayBtZWRpYVR5cGVdIGlz
RXF1YWxUb1N0cmluZzpBVk1lZGlhVHlwZUF1ZGlvXSkKKyAgICAgICAgICAgICAgICAgICAgaGFz
QXVkaW8gPSB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFtbYXNzZXRUcmFjayBtZWRp
YVR5cGVdIGlzRXF1YWxUb1N0cmluZzpBVk1lZGlhVHlwZUNsb3NlZENhcHRpb25dKQorICAgICAg
ICAgICAgICAgICAgICBoYXNDYXB0aW9ucyA9IHRydWU7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KKyAgICAgICAgc2V0SGFzVmlkZW8oaGFzVmlkZW8pOworICAgICAgICBzZXRIYXNBdWRpbyho
YXNBdWRpbyk7CisgICAgICAgIHNldEhhc0Nsb3NlZENhcHRpb25zKGhhc0NhcHRpb25zKTsKICAg
ICB9Ci0gICAgc2V0SGFzVmlkZW8oaGFzVmlkZW8pOwotICAgIHNldEhhc0F1ZGlvKGhhc0F1ZGlv
KTsKLSAgICBzZXRIYXNDbG9zZWRDYXB0aW9ucyhoYXNDYXB0aW9ucyk7CisKKyAgICBMT0coTWVk
aWEsICJXZWJDb3JlQVZGTW92aWVPYnNlcnZlcjp0cmFja3NDaGFuZ2VkKCVwKSAtIGhhc1ZpZGVv
ID0gJXMsIGhhc0F1ZGlvID0gJXMsIGhhc0NhcHRpb25zID0gJXMiLCAKKyAgICAgICAgdGhpcywg
Ym9vbFN0cmluZyhoYXNWaWRlbygpKSwgYm9vbFN0cmluZyhoYXNBdWRpbygpKSwgYm9vbFN0cmlu
ZyhoYXNDbG9zZWRDYXB0aW9ucygpKSk7CiAKICAgICBzaXplQ2hhbmdlZCgpOwogfQogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNpemVDaGFuZ2VkKCkKIHsKKyAg
ICBpZiAoIW1fYXZBc3NldCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgTlNBcnJheSAqdHJhY2tz
ID0gW21fYXZBc3NldC5nZXQoKSB0cmFja3NdOwogCiAgICAgLy8gU29tZSBhc3NldHMgZG9uJ3Qg
cmVwb3J0IHRyYWNrIHByb3BlcnRpZXMgdW50aWwgdGhleSBhcmUgY29tcGxldGVseSByZWFkeSB0
byBwbGF5LCBidXQgd2UKICAgICAvLyB3YW50IHRvIHJlcG9ydCBhIHNpemUgYXMgZWFybHkgYXMg
cG9zc2libGUgc28gdXNlIHByZXNlbnRhdGlvblNpemUgd2hlbiBhbiBhc3NldCBoYXMgbm8gdHJh
Y2tzLgotICAgIGlmICghW3RyYWNrcyBjb3VudF0pIHsKKyAgICBpZiAobV9hdlBsYXllckl0ZW0g
JiYgIVt0cmFja3MgY291bnRdKSB7CiAgICAgICAgIHNldE5hdHVyYWxTaXplKEludFNpemUoW21f
YXZQbGF5ZXJJdGVtLmdldCgpIHByZXNlbnRhdGlvblNpemVdKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Cg==
</data>
<flag name="review"
          id="85068"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>