<?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>53020</bug_id>
          
          <creation_ts>2011-01-24 09:51:49 -0800</creation_ts>
          <short_desc>[Meta] Convert HTMLMediaElement to use the new shadow DOM</short_desc>
          <delta_ts>2011-04-19 18:01:17 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53122</dependson>
    
    <dependson>53190</dependson>
    
    <dependson>53245</dependson>
    
    <dependson>53252</dependson>
    
    <dependson>53314</dependson>
    
    <dependson>54356</dependson>
    
    <dependson>55006</dependson>
    
    <dependson>55065</dependson>
    
    <dependson>55099</dependson>
    
    <dependson>55152</dependson>
    
    <dependson>55157</dependson>
    
    <dependson>55515</dependson>
    
    <dependson>55614</dependson>
    
    <dependson>55722</dependson>
    
    <dependson>55972</dependson>
    
    <dependson>56038</dependson>
    
    <dependson>56044</dependson>
    
    <dependson>56473</dependson>
    
    <dependson>56498</dependson>
    
    <dependson>56969</dependson>
    
    <dependson>58203</dependson>
    
    <dependson>58204</dependson>
    
    <dependson>58205</dependson>
          <blocked>49027</blocked>
    
    <blocked>57163</blocked>
    
    <blocked>58345</blocked>
    
    <blocked>48698</blocked>
    
    <blocked>56573</blocked>
    
    <blocked>58157</blocked>
    
    <blocked>58163</blocked>
    
    <blocked>58250</blocked>
    
    <blocked>58347</blocked>
    
    <blocked>58952</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>fischman</cc>
    
    <cc>jberlin</cc>
    
    <cc>morrita</cc>
    
    <cc>sjl</cc>
    
    <cc>vrk</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>339071</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-24 09:51:49 -0800</bug_when>
    <thetext>A master bug to track progress on refactoring audio/video to use the new shadow DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339505</commentid>
    <comment_count>1</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-01-24 22:30:53 -0800</bug_when>
    <thetext>This looks not to depend, but related to Bug 53001 (what&apos;s I&apos;m working now.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339646</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-25 07:37:34 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; This looks not to depend, but related to Bug 53001 (what&apos;s I&apos;m working now.)

I was going to keep m_mediaElement and let you get rid of it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340086</commentid>
    <comment_count>3</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-01-25 18:53:22 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; This looks not to depend, but related to Bug 53001 (what&apos;s I&apos;m working now.)
&gt; 
&gt; I was going to keep m_mediaElement and let you get rid of it :)
wow, thanks ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351694</commentid>
    <comment_count>4</comment_count>
      <attachid>82545</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-15 16:05:52 -0800</bug_when>
    <thetext>Created attachment 82545
WIP: Mostly working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351697</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-15 16:07:21 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=82545) [details]
&gt; WIP: Mostly working.

This is more of a rewrite rather than a refactoring, I&apos;ll probably have to land it in chunks, but first I need to understand how to do it. This patch is part of this understanding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358074</commentid>
    <comment_count>6</comment_count>
      <attachid>83849</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-25 11:25:22 -0800</bug_when>
    <thetext>Created attachment 83849
WIP: Progress checkpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358076</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-25 11:26:04 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=83849) [details]
&gt; WIP: Progress checkpoint.

Need to implement proper relatedTarget retargeting before going further...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361936</commentid>
    <comment_count>8</comment_count>
      <attachid>84627</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-03 14:21:10 -0800</bug_when>
    <thetext>Created attachment 84627
WIP: Another checkpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361944</commentid>
    <comment_count>9</comment_count>
      <attachid>84627</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-03 14:31:23 -0800</bug_when>
    <thetext>Comment on attachment 84627
WIP: Another checkpoint.

Didn&apos;t mean to mark for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363981</commentid>
    <comment_count>10</comment_count>
      <attachid>85053</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-08 09:13:49 -0800</bug_when>
    <thetext>Created attachment 85053
WIP: Another checkpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367041</commentid>
    <comment_count>11</comment_count>
      <attachid>85689</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-14 10:16:05 -0700</bug_when>
    <thetext>Created attachment 85689
Another checkpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371445</commentid>
    <comment_count>12</comment_count>
      <attachid>86469</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-22 10:13:46 -0700</bug_when>
    <thetext>Created attachment 86469
WIP: Checkpoint after more whittling away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381854</commentid>
    <comment_count>13</comment_count>
      <attachid>88736</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-07 16:58:34 -0700</bug_when>
    <thetext>Created attachment 88736
Nearly ready for landing. Bake on EWSs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381859</commentid>
    <comment_count>14</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-07 17:00:42 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=88736) [details]
&gt; Nearly ready for landing. Bake on EWSs.

This is not a patch for review -- still cleaning up various bits. Just want to let the EWS to get a whiff of it.

Yes, it&apos;s a whopper. And I apologize, I attempted to whittle it down as much as I could. Eric, I would really like some of your time tomorrow to go over it and hopefully decorate the tree with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381930</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-07 19:04:17 -0700</bug_when>
    <thetext>Attachment 88736 did not build on win:
Build output: http://queues.webkit.org/results/8347819</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382272</commentid>
    <comment_count>16</comment_count>
      <attachid>88736</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 09:05:04 -0700</bug_when>
    <thetext>Comment on attachment 88736
Nearly ready for landing. Bake on EWSs.

will fix Win. Also need to plumb hooks for enter/exit full screen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382394</commentid>
    <comment_count>17</comment_count>
      <attachid>88736</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-08 11:08:06 -0700</bug_when>
    <thetext>Comment on attachment 88736
Nearly ready for landing. Bake on EWSs.

Nice cleanup!

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        are now using a set of higher fidelity set of hooks that notify MediaControls

Nit: you probably only want one &quot;set&quot; here

&gt; Source/WebCore/html/shadow/MediaControls.cpp:138
&gt; +    // FIXME: ONLY APPEND WHEN SUPPORTS SEEKBACK

Bug number (http://webkit.org/b/57163 maybe)?

&gt; Source/WebCore/html/shadow/MediaControls.cpp:143
&gt; +    // FIXME: ONLY APPEND WHEN SUPPORTS SEEKFORWARD

Ditto.

&gt; Source/WebCore/html/shadow/MediaControls.cpp:158
&gt; +    RefPtr&lt;MediaControlFullscreenButtonElement&gt; fullScreenButton = MediaControlFullscreenButtonElement::create(mediaElement);
&gt; +    controls-&gt;m_fullScreenButton = fullScreenButton.get();
&gt; +    panel-&gt;appendChild(fullScreenButton.release(), ec, true);

Not all movies/themes support fullscreen, so it is probably worth a &quot;FIXME:&quot; and a bug number here too.

&gt; Source/WebCore/html/shadow/MediaControls.cpp:264
&gt; +    // FIXME: Make more efficient.

Might as well write up a bug now and include the number here.

&gt; Source/WebCore/html/shadow/MediaControls.cpp:366
&gt; +void MediaControls::reportedError()
&gt;  {
&gt; -    return m_controlsShadowRoot ? m_controlsShadowRoot-&gt;renderBox() : 0;
&gt; -}
&gt; -
&gt; -void MediaControls::updateControlVisibility()
&gt; -{
    SNIP
&gt; +    if (m_volumeSliderContainer)
&gt; +        m_volumeSliderContainer-&gt;hide();
&gt; +    if (m_toggleClosedCaptionsButton &amp;&amp; !page-&gt;theme()-&gt;hasOwnDisabledStateHandlingFor(MediaToggleClosedCaptionsButtonPart))
&gt; +        m_toggleClosedCaptionsButton-&gt;hide();
&gt; +}

Is there any reason to not hide the fullscreen button too?

&gt; Source/WebCore/html/shadow/MediaControls.cpp:373
&gt; +    if (m_mediaElement-&gt;supportsFullscreen())
&gt; +        m_fullScreenButton-&gt;show();
&gt; +    else
&gt; +        m_fullScreenButton-&gt;hide();

Why do this when the network state changes? The availability of state-based controls (eg. fullscreen, captions, volume) is based on media features so it might be better to do this when the readyState changes.

&gt; Source/WebCore/html/shadow/MediaControls.cpp:385
&gt; +void MediaControls::loadedMetadata()
&gt; +{
&gt; +    if (m_statusDisplay)
&gt; +        m_statusDisplay-&gt;hide();
&gt;  
&gt; -    m_opacityAnimationFrom = animateFrom;
&gt; -    m_opacityAnimationTo = animateTo;
&gt; +    reset();
&gt; +}

It might be more useful to have a generic &quot;readyStateChanged&quot; function.

&gt; Source/WebCore/rendering/MediaControlElements.cpp:87
&gt; +    // FIXME: Make more efficient.

Bug number?

&gt; Source/WebCore/rendering/MediaControlElements.cpp:94
&gt; +    // FIXME: Make more efficient.

Ditto.

&gt; Source/WebCore/rendering/MediaControlElements.cpp:305
&gt; +    style()-&gt;setProperty(displayString(), &quot;none&quot;, ec);

Is there any reason to not use a static String for &quot;none&quot;?

&gt; Source/WebCore/rendering/MediaControlElements.cpp:633
&gt; +MediaControlTimelineElement::MediaControlTimelineElement(HTMLMediaElement* mediaElement, MediaControls* controls)
&gt;      : MediaControlInputElement(mediaElement, MediaSlider)
&gt; +    , m_controls(controls)
&gt;  {
&gt; +    setAttribute(precisionAttr, &quot;float&quot;);
&gt;  }

It’s not a good idea to call functions like this from inside the constructor when the object hasn’t been adopted by its first owner. It can lead to RefCounted assertions if anything ref/derefs. We used to do this throughout the media controls classes, but Darin fixed them a while ago. 

It looks like you already do this in the create() function anyway.

&gt; Source/WebCore/rendering/MediaControlElements.cpp:664
&gt; +        // FIXME: This is fired 3 times on every click. We should not be doing that.

Bug number?

&gt; Source/WebCore/rendering/MediaControlElements.cpp:701
&gt;  inline MediaControlVolumeSliderElement::MediaControlVolumeSliderElement(HTMLMediaElement* mediaElement)
&gt;      : MediaControlInputElement(mediaElement, MediaVolumeSlider)
&gt;  {
&gt; +    setAttribute(precisionAttr, &quot;float&quot;);
&gt; +    setAttribute(maxAttr, &quot;1&quot;);
&gt;  }

Shouldn&apos;t do this in the constructor.

&gt; Source/WebCore/rendering/MediaControlElements.h:79
&gt; +    // FIXME: These should be part of some InlineStylableElement.

Bug number?

&gt; Source/WebCore/rendering/MediaControlElements.h:157
&gt; +    // FIXME: These should be part of some InlineStylableElement.

Ditto.

&gt; Source/WebCore/rendering/MediaControlElements.h:229
&gt; +    // FIXME: PERHAPS MAKE EXPLICIT PLAY/PAUSE CALLS.

Ditto.

&gt; Source/WebCore/rendering/RenderMedia.cpp:54
&gt; +// FIXME: Move to RenderVideo
&gt;  HTMLMediaElement* RenderMedia::mediaElement() const

Does this really need to move to RenderVideo? Bug number of so please.

&gt; Source/WebCore/rendering/RenderMedia.cpp:91
&gt; +void RenderMedia::paint(PaintInfo&amp; paintInfo, int tx, int ty)
&gt;  {
&gt; -    m_controls-&gt;update();
&gt; +    RenderImage::paint(paintInfo, tx, ty);
&gt;  }

What does this do?

&gt; Source/WebCore/rendering/RenderThemeMac.mm:-1998
&gt; -    case MediaRewindButtonPart:
&gt; -        if (mediaElement-&gt;isFullscreen())
&gt; -            return mediaElement-&gt;movieLoadType() == MediaPlayer::LiveStream 
&gt; -                || mediaElement-&gt;movieLoadType() == MediaPlayer::StoredStream;
&gt; -    case MediaSeekForwardButtonPart:
&gt; -    case MediaSeekBackButtonPart:
&gt; -        if (mediaElement-&gt;isFullscreen())
&gt; -            return mediaElement-&gt;movieLoadType() != MediaPlayer::StoredStream 
&gt; -                &amp;&amp; mediaElement-&gt;movieLoadType() != MediaPlayer::LiveStream;

This needs to be handled somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382531</commentid>
    <comment_count>18</comment_count>
      <attachid>88736</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 13:50:18 -0700</bug_when>
    <thetext>Comment on attachment 88736
Nearly ready for landing. Bake on EWSs.

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

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +        are now using a set of higher fidelity set of hooks that notify MediaControls
&gt; 
&gt; Nit: you probably only want one &quot;set&quot; here

Done.

&gt;&gt; Source/WebCore/html/shadow/MediaControls.cpp:138
&gt;&gt; +    // FIXME: ONLY APPEND WHEN SUPPORTS SEEKBACK
&gt; 
&gt; Bug number (http://webkit.org/b/57163 maybe)?

Done.

&gt;&gt; Source/WebCore/html/shadow/MediaControls.cpp:143
&gt;&gt; +    // FIXME: ONLY APPEND WHEN SUPPORTS SEEKFORWARD
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/html/shadow/MediaControls.cpp:158
&gt;&gt; +    panel-&gt;appendChild(fullScreenButton.release(), ec, true);
&gt; 
&gt; Not all movies/themes support fullscreen, so it is probably worth a &quot;FIXME:&quot; and a bug number here too.

Done.

&gt;&gt; Source/WebCore/html/shadow/MediaControls.cpp:264
&gt;&gt; +    // FIXME: Make more efficient.
&gt; 
&gt; Might as well write up a bug now and include the number here.

Done. Bug 58157 filed.

&gt;&gt; Source/WebCore/html/shadow/MediaControls.cpp:366

&gt; 
&gt; SNIP

That is a good idea. Hid the fullscreen button.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.cpp:87
&gt;&gt; +    // FIXME: Make more efficient.
&gt; 
&gt; Bug number?

Done.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.cpp:94
&gt;&gt; +    // FIXME: Make more efficient.
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.cpp:305
&gt;&gt; +    style()-&gt;setProperty(displayString(), &quot;none&quot;, ec);
&gt; 
&gt; Is there any reason to not use a static String for &quot;none&quot;?

Fixed.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.cpp:633
&gt;&gt;  }
&gt; 
&gt; It’s not a good idea to call functions like this from inside the constructor when the object hasn’t been adopted by its first owner. It can lead to RefCounted assertions if anything ref/derefs. We used to do this throughout the media controls classes, but Darin fixed them a while ago. 
&gt; 
&gt; It looks like you already do this in the create() function anyway.

DOH! I totally thought I fixed it. Fixed now.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.cpp:664
&gt;&gt; +        // FIXME: This is fired 3 times on every click. We should not be doing that.
&gt; 
&gt; Bug number?

Done.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.cpp:701
&gt;&gt;  }
&gt; 
&gt; Shouldn&apos;t do this in the constructor.

Sorry. Removed.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.h:79
&gt;&gt; +    // FIXME: These should be part of some InlineStylableElement.
&gt; 
&gt; Bug number?

FIXME removed, this is obsolete now.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.h:157
&gt;&gt; +    // FIXME: These should be part of some InlineStylableElement.
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/rendering/MediaControlElements.h:229
&gt;&gt; +    // FIXME: PERHAPS MAKE EXPLICIT PLAY/PAUSE CALLS.
&gt; 
&gt; Ditto.

This was an old idea, comment obsolete now.

&gt;&gt; Source/WebCore/rendering/RenderMedia.cpp:54
&gt;&gt;  HTMLMediaElement* RenderMedia::mediaElement() const
&gt; 
&gt; Does this really need to move to RenderVideo? Bug number of so please.

No, not really -- early ideas. Comment obsolete now, removed :)

&gt;&gt; Source/WebCore/rendering/RenderMedia.cpp:91
&gt;&gt;  }
&gt; 
&gt; What does this do?

This is my debugging code! :) Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382547</commentid>
    <comment_count>19</comment_count>
      <attachid>88736</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 14:02:15 -0700</bug_when>
    <thetext>Comment on attachment 88736
Nearly ready for landing. Bake on EWSs.

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

&gt;&gt; Source/WebCore/html/shadow/MediaControls.cpp:373
&gt;&gt; +        m_fullScreenButton-&gt;hide();
&gt; 
&gt; Why do this when the network state changes? The availability of state-based controls (eg. fullscreen, captions, volume) is based on media features so it might be better to do this when the readyState changes.

I am going to investigate this after landing. Feeling skittish about changing the logic now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382609</commentid>
    <comment_count>20</comment_count>
      <attachid>88736</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 15:45:42 -0700</bug_when>
    <thetext>Comment on attachment 88736
Nearly ready for landing. Bake on EWSs.

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

&gt;&gt; Source/WebCore/rendering/RenderThemeMac.mm:-1998
&gt;&gt; -                &amp;&amp; mediaElement-&gt;movieLoadType() != MediaPlayer::LiveStream;
&gt; 
&gt; This needs to be handled somewhere.

I added enteredFullscreen/exitedFullscreen callbacks and moved the magic there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382611</commentid>
    <comment_count>21</comment_count>
      <attachid>88888</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-08 15:50:43 -0700</bug_when>
    <thetext>Created attachment 88888
Put your seats in the upright position.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382620</commentid>
    <comment_count>22</comment_count>
      <attachid>88888</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-08 15:56:46 -0700</bug_when>
    <thetext>Comment on attachment 88888
Put your seats in the upright position.

All bucked in!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382833</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-04-09 19:54:59 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; All bucked in!

Can I buy an &quot;L&quot; please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382837</commentid>
    <comment_count>24</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-09 20:06:01 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; All bucked in!
&gt; 
&gt; Can I buy an &quot;L&quot; please?

L is for lucky! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382881</commentid>
    <comment_count>25</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-10 07:57:23 -0700</bug_when>
    <thetext>Committed r83397: &lt;http://trac.webkit.org/changeset/83397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382915</commentid>
    <comment_count>26</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-10 11:14:54 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Committed r83397: &lt;http://trac.webkit.org/changeset/83397&gt;

It looks like this change broke /fast/layers/video-layer.html on Windows:

http://build.webkit.org/builders/Windows%207%20Release%20%28Tests%29/builds/11438
http://build.webkit.org/results/Windows%207%20Release%20(Tests)/r83397%20(11439)/fast/layers/video-layer-pretty-diff.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382918</commentid>
    <comment_count>27</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-10 11:32:34 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; Committed r83397: &lt;http://trac.webkit.org/changeset/83397&gt;
&gt; 
&gt; It looks like this change broke /fast/layers/video-layer.html on Windows:
&gt; 
&gt; http://build.webkit.org/builders/Windows%207%20Release%20%28Tests%29/builds/11438
&gt; http://build.webkit.org/results/Windows%207%20Release%20(Tests)/r83397%20(11439)/fast/layers/video-layer-pretty-diff.html

yup, working on fixing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82545</attachid>
            <date>2011-02-15 16:05:52 -0800</date>
            <delta_ts>2011-02-25 11:25:20 -0800</delta_ts>
            <desc>WIP: Mostly working.</desc>
            <filename>bug-53020-20110215160551.patch</filename>
            <type>text/plain</type>
            <size>79274</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMzM2ODcwMjc2ODc3OWFl
ZjIwYmIyOTYxNjViMTA2YmU0N2MzYTdkLi4wMTllYTNhNzljZGJiMDY5OTk0ZmNlN2U3OGM0ZjVm
MWI3MTczMTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDItMTUgIERpbWl0
cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbTWV0YV0gQ29udmVydCBIVE1MTWVkaWFFbGVt
ZW50IHRvIHVzZSB0aGUgbmV3IHNoYWRvdyBET00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDIwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09Q
UyEpCisKKyAgICAgICAgKiBjc3MvbWVkaWFDb250cm9scy5jc3M6CisgICAgICAgICg6Oi13ZWJr
aXQtbWVkaWEtY29udHJvbHMpOgorICAgICAgICAoYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtY3VycmVudC10aW1lLWRpc3BsYXksIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1
cnJlbnQtdGltZS1kaXNwbGF5KToKKyAgICAgICAgKiBjc3MvbWVkaWFDb250cm9sc1F1aWNrVGlt
ZS5jc3M6CisgICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRp
bWUtZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVudC10aW1lLWRp
c3BsYXkpOgorICAgICAgICAoYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1h
aW5pbmctZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5p
bmctZGlzcGxheSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUHJvZ3Jlc3NUaW1lckZpcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlhQ29udHJvbHMpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250cm9scyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6Ok1lZGlhQ29udHJvbHMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbHM6OnVwZGF0ZVRpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbHM6OnNoYWRvd1BzZXVkb0lkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbHM6OmF0dGFjaCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5o
OgorICAgICAgICAoV2ViQ29yZTo6dG9NZWRpYUNvbnRyb2xzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sRWxlbWVudDo6TWVkaWFDb250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnVwZGF0ZVRpbWVsaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2hvd1ZvbHVtZVNsaWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmhpZGVWb2x1bWVTbGlkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpkaXNwbGF5VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnNoYWRvd1Bz
ZXVkb0lkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6dXBk
YXRlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpjaGFuZ2VPcGFjaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6b3BhY2l0eUFuaW1hdGlvblRp
bWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxp
bmVDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUaW1lbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OnVwZGF0ZVRpbWVEaXNwbGF5KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1l
bnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVs
ZW1lbnQ6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
Q29udGFpbmVyRWxlbWVudDo6aGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xT
dGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
dHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50
Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhQ29udHJvbFRpbWVE
aXNwbGF5OjpSZW5kZXJNZWRpYUNvbnRyb2xUaW1lRGlzcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZWRpYUNvbnRyb2xUaW1lRGlzcGxheTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sVGltZURpc3Bs
YXlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxl
bWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6UmVuZGVyTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWVkaWE6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6
CisKIDIwMTEtMDItMDggIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNv
bnRyb2xzLmNzcwppbmRleCA4ODE0NGI0NmRmZDMzZGYwMzU1OTk5OGEzMmE1M2IzZGU5N2I0N2U5
Li5lMzllMDUwNWI5NDJhN2NjZTEzMjgxMTQwN2QyODk3NGNmNDY3ODZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL21lZGlhQ29udHJvbHMuY3NzCkBAIC0yOSw2ICsyOSwxMyBAQCBhdWRpbyB7CiAgICAgaGVp
Z2h0OiAxNnB4OwogfQogCis6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMgeworICAgIHdpZHRoOiBp
bmhlcml0OworICAgIGhlaWdodDogaW5oZXJpdDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg
ICAgZGlzcGxheTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBh
bmVsLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CiAgICAgZGlzcGxheTog
LXdlYmtpdC1ib3g7CiAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOwpAQCAtODAs
NiArODcsMTAgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUtY29udGFp
bmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy0KIAogYXVkaW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXksIHZpZGVvOjotd2Via2l0LW1lZGlhLWNv
bnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5IHsKICAgICBkaXNwbGF5OiBub25lOworICAgIG92
ZXJmbG93OiBoaWRkZW47CisgICAgLXdlYmtpdC1ib3gtZmxleDogMC4xOworICAgIHdoaXRlLXNw
YWNlOiBub3dyYXA7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwogfQogCiBhdWRpbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5IHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXVpY2tUaW1lLmNzcyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9tZWRpYUNvbnRyb2xzUXVpY2tUaW1lLmNzcwppbmRleCAwNmYzMWFlNWE5NGY4MDE3OTk3
YmFiMGZlZjUyYWJlY2I0YjliZTIwLi42M2U4NDU2MDdjZjVlNGE4NWNmZmI2NTdjNDRkYzVjOWI2
YjM1MDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc1F1aWNr
VGltZS5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdWlja1RpbWUu
Y3NzCkBAIC02OSwxNCArNjksMTQgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGlt
ZWxpbmUtY29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy0KIGF1ZGlvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSB7CiAgICAgLXdlYmtpdC11c2Vy
LXNlbGVjdDogbm9uZTsKICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJv
eC1mbGV4OiAwOwotICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKLSAgICAtd2Via2l0LWJv
eC1hbGlnbjogY2VudGVyOworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgLXdlYmtpdC1ib3gt
ZmxleDogMC4xOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgdGV4dC1hbGlnbjogY2Vu
dGVyOworCiAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgIGZvbnQ6IC13ZWJraXQtc21hbGwtY29u
dHJvbDsKICAgICBmb250LXNpemU6IDlweDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHdp
ZHRoOiA0NXB4OwogICAgIGNvbG9yOiB3aGl0ZTsKICAgICB0ZXh0LXNoYWRvdzogYmxhY2sgMHB4
IDFweCAxcHg7CiAKQEAgLTkxLDE0ICs5MSwxNCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbAog
YXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSwgdmlk
ZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSB7CiAgICAg
LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAg
ICAtd2Via2l0LWJveC1mbGV4OiAwOwotICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKLSAg
ICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAg
LXdlYmtpdC1ib3gtZmxleDogMC4xOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgdGV4
dC1hbGlnbjogY2VudGVyOworCiAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgIGZvbnQ6IC13ZWJr
aXQtc21hbGwtY29udHJvbDsKICAgICBmb250LXNpemU6IDlweDsKLSAgICBvdmVyZmxvdzogaGlk
ZGVuOwotICAgIHdpZHRoOiA0NXB4OwogICAgIGNvbG9yOiB3aGl0ZTsKICAgICB0ZXh0LXNoYWRv
dzogYmxhY2sgMHB4IDFweCAxcHg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCmluZGV4IDJjZjQ3Y2M2MmU1YTcxZjYzMzk4ZjYyYTMyY2NiMjI0NWM0MDkxMGMuLmQ5
NjJkNGRmMjQ0YWZmMTRiZDAzZTU5ZGNiMzVmZjgwNzkwYTIwNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMjE2LDEyICsyMTYsOSBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNl
cnZlRGVjbHMpCiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGNvbnRyb2xzQXR0cikg
ewogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICAgICAgaWYgKCFpc1Zp
ZGVvKCkgJiYgYXR0YWNoZWQoKSAmJiAoY29udHJvbHMoKSAhPSAocmVuZGVyZXIoKSAhPSAwKSkp
IHsKLSAgICAgICAgICAgIGRldGFjaCgpOwotICAgICAgICAgICAgYXR0YWNoKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRh
dGVGcm9tRWxlbWVudCgpOworICAgICAgICBpZiAoIWNvbnRyb2xzKCkgJiYgIWhhc01lZGlhQ29u
dHJvbHMoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZW5zdXJlTWVkaWFDb250cm9s
cygpOwogI2Vsc2UKICAgICAgICAgaWYgKG1fcGxheWVyKQogICAgICAgICAgICAgbV9wbGF5ZXIt
PnNldENvbnRyb2xzKGNvbnRyb2xzKCkpOwpAQCAtMzY1LDEwICszNjIsOCBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmF0dGFjaCgpCiAKICAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CiAKLSAg
ICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQo
KTsKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICBlbHNlIGlmIChtX3By
b3h5V2lkZ2V0KSB7CisgICAgaWYgKG1fcHJveHlXaWRnZXQpIHsKICAgICAgICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9
IGZyYW1lID8gZnJhbWUtPmxvYWRlcigpIDogMDsKICAgICAgICAgaWYgKGxvYWRlcikKQEAgLTE1
ODQsNiArMTU3OSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheWJhY2tQcm9ncmVzc1Rp
bWVyRmlyZWQoVGltZXI8SFRNTE1lZGlhRWxlbWVudD4qKQogICAgICAgICByZXR1cm47CiAKICAg
ICBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudCh0cnVlKTsKKyAgICBpZiAoaGFzTWVkaWFDb250cm9s
cygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVRpbWVsaW5lKCk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IGRlYWwgd2l0aCBjdWUgcmFuZ2VzIGhlcmUKIH0KQEAgLTIxMDEsNiArMjA5
OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKICAgICAgICAg
ICAgIG1fcGxheWVyLT5wYXVzZSgpOwogICAgICAgICByZWZyZXNoQ2FjaGVkVGltZSgpOwogICAg
ICAgICBtX3BsYXliYWNrUHJvZ3Jlc3NUaW1lci5zdG9wKCk7CisgICAgICAgIG1lZGlhQ29udHJv
bHMoKS0+dXBkYXRlVGltZWxpbmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAg
LTIxMjQsNiArMjEyMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRl
KCkKICAgICAgICAgICAgIG1fcGxheWVyLT5wbGF5KCk7CiAgICAgICAgIH0KIAorICAgICAgICBt
ZWRpYUNvbnRyb2xzKCktPnVwZGF0ZVRpbWVsaW5lKCk7CiAgICAgICAgIHN0YXJ0UGxheWJhY2tQ
cm9ncmVzc1RpbWVyKCk7CiAgICAgICAgIG1fcGxheWluZyA9IHRydWU7CiAKQEAgLTIxNDAsNiAr
MjEzOSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAg
ICAgICBpZiAoY291bGRQbGF5SWZFbm91Z2hEYXRhKCkpCiAgICAgICAgICAgICBtX3BsYXllci0+
cHJlcGFyZVRvUGxheSgpOworCisgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+dXBkYXRlVGltZWxp
bmUoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHJlbmRlcmVyKCkpCkBAIC0yMjg4LDEwICsyMjg5
LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKICAgICBpZiAod2lkZ2V0KQogICAgICAgICB3aWRnZXQtPmhhbmRsZUV2ZW50KGV2ZW50
KTsKICNlbHNlCi0gICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNNZWRpYSgpKQot
ICAgICAgICB0b1JlbmRlck1lZGlhKHJlbmRlcmVyKCkpLT5jb250cm9scygpLT5mb3J3YXJkRXZl
bnQoZXZlbnQpOwotICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwogICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICNlbmRp
ZgogfQpAQCAtMjUyOCw3ICsyNTI1LDIzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U2hv
dWxkRGVsYXlMb2FkRXZlbnQoYm9vbCBzaG91bGREZWxheSkKICAgICBlbHNlCiAgICAgICAgIGRv
Y3VtZW50KCktPmRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKIH0KLSAgICAKKworYm9v
bCBIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNvbnRyb2xzKCkKK3sKKyAgICByZXR1cm4gc2hh
ZG93Um9vdCgpOworfQorCitNZWRpYUNvbnRyb2xzKiBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUNv
bnRyb2xzKCkKK3sKKyAgICByZXR1cm4gdG9NZWRpYUNvbnRyb2xzKHNoYWRvd1Jvb3QoKSk7Cit9
CisKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm9scygpCit7CisgICAg
aWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIHNldFNoYWRvd1Jvb3QoTWVkaWFDb250
cm9sczo6Y3JlYXRlKHRoaXMpKTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgKaW5kZXggOTc3OGZkNGQzODQ2OTVhMmExNTgwNjczOTRhYmQ4Y2Vh
MmUwOWJhMi4uNmRiYzEzOTViZTRhN2QzNjIxYTE1MjhmYjFiNDA0YzYwOTU0M2Q1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKIGNsYXNzIEhUTUxTb3VyY2VFbGVtZW50Owor
Y2xhc3MgTWVkaWFDb250cm9sczsKIGNsYXNzIE1lZGlhRXJyb3I7CiBjbGFzcyBLVVJMOwogY2xh
c3MgVGltZVJhbmdlczsKQEAgLTE3Niw2ICsxNzcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzb3Vy
Y2VXaWxsQmVSZW1vdmVkKEhUTUxTb3VyY2VFbGVtZW50Kik7CiAgICAgdm9pZCBzb3VyY2VXYXNB
ZGRlZChIVE1MU291cmNlRWxlbWVudCopOwogCisgICAgTWVkaWFDb250cm9scyogbWVkaWFDb250
cm9scygpOworCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MTWVkaWFFbGVtZW50KCk7CkBA
IC0yOTgsNiArMzAxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRUaW1l
KCk7CiAgICAgdm9pZCByZWZyZXNoQ2FjaGVkVGltZSgpIGNvbnN0OwogCisgICAgYm9vbCBoYXNN
ZWRpYUNvbnRyb2xzKCk7CisgICAgdm9pZCBlbnN1cmVNZWRpYUNvbnRyb2xzKCk7CisKICAgICAv
LyBSZXN0cmljdGlvbnMgdG8gY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3JzLiBUaGlzIGlzIGVmZmVj
dGl2ZWx5IGEgY29tcGlsZSB0aW1lIGNob2ljZSBhdCB0aGUgbW9tZW50CiAgICAgLy8gYmVjYXVz
ZSB0aGVyZSBhcmUgbm8gYWNjZXNzb3IgZnVuY3Rpb25zLgogICAgIGVudW0gQmVoYXZpb3JSZXN0
cmljdGlvbnMgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNw
cAppbmRleCA3MzFhOTM0MGE4MGEyM2QyMTYwYmRmNWM1NWU4ZjhjYWEzMmZjYTQ3Li5lNWNlNmY0
NWE5ZTU1NzA4NzU1YWI5NGFkNzZkZGQyYjBkYTFkZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApAQCAtNDcsNTI1ICs0NywxMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgY29u
c3QgZG91YmxlIGNUaW1lVXBkYXRlUmVwZWF0RGVsYXkgPSAwLjI7Ci1zdGF0aWMgY29uc3QgZG91
YmxlIGNPcGFjaXR5QW5pbWF0aW9uUmVwZWF0RGVsYXkgPSAwLjA1OwotCiBNZWRpYUNvbnRyb2xz
OjpNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IG1f
bWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKLSAgICAsIG1fdGltZVVwZGF0ZVRpbWVyKHRoaXMs
ICZNZWRpYUNvbnRyb2xzOjp0aW1lVXBkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fb3BhY2l0eUFu
aW1hdGlvblRpbWVyKHRoaXMsICZNZWRpYUNvbnRyb2xzOjpvcGFjaXR5QW5pbWF0aW9uVGltZXJG
aXJlZCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwgbV9vcGFj
aXR5QW5pbWF0aW9uRHVyYXRpb24oMCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20oMCkK
LSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblRvKDEuMGYpCi0gICAgLCBtX21vdXNlT3ZlcihmYWxz
ZSkKLXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVTdHlsZSgpCi17Ci0gICAgaWYg
KCFtX2NvbnRyb2xzU2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFu
ZWwpCi0gICAgICAgIG1fcGFuZWwtPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fbXV0ZUJ1dHRv
bikKLSAgICAgICAgbV9tdXRlQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3BsYXlC
dXR0b24pCi0gICAgICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9z
ZWVrQmFja0J1dHRvbikKLSAgICAgICAgbV9zZWVrQmFja0J1dHRvbi0+dXBkYXRlU3R5bGUoKTsK
LSAgICBpZiAobV9zZWVrRm9yd2FyZEJ1dHRvbikKLSAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRv
bi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9yZXdpbmRCdXR0b24pCi0gICAgICAgIG1fcmV3
aW5kQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3JldHVyblRvUmVhbHRpbWVCdXR0
b24pCi0gICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAg
ICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbikKLSAgICAgICAgbV90b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9zdGF0dXNEaXNwbGF5
KQotICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fdGlt
ZWxpbmVDb250YWluZXIpCi0gICAgICAgIG1fdGltZWxpbmVDb250YWluZXItPnVwZGF0ZVN0eWxl
KCk7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZVN0eWxl
KCk7Ci0gICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbikKLSAgICAgICAgbV9mdWxsc2NyZWVuQnV0
dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX2N1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAg
ICAgbV9jdXJyZW50VGltZURpc3BsYXktPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fdGltZVJl
bWFpbmluZ0Rpc3BsYXkpCi0gICAgICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnVwZGF0ZVN0
eWxlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKQotICAgICAgICBtX3ZvbHVt
ZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXJN
dXRlQnV0dG9uKQotICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPnVwZGF0ZVN0eWxl
KCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBk
YXRlU3R5bGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpkZXN0cm95KCkKLXsKLSAgICBB
U1NFUlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOwotCi0gICAgaWYgKG1fY29udHJvbHNT
aGFkb3dSb290ICYmIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpKSB7Ci0KLSAgICAg
ICAgLy8gZGV0YWNoIHRoZSBwYW5lbCBiZWZvcmUgcmVtb3ZpbmcgdGhlIHNoYWRvdyByZW5kZXJl
ciB0byBwcmV2ZW50IGEgY3Jhc2ggaW4gbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpIAot
ICAgICAgICAvLyAgd2hlbiBkaXNwbGF5OiBzdHlsZSBjaGFuZ2VzCi0gICAgICAgIG1fcGFuZWwt
PmRldGFjaCgpOwotCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW1vdmVD
aGlsZChtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fY29udHJv
bHNTaGFkb3dSb290LT5kZXRhY2goKTsKLSAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSAw
OwotICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGUoKQotewotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+Y29u
dHJvbHMoKSB8fCAhbWVkaWEtPmluQWN0aXZlRG9jdW1lbnQoKSkgewotICAgICAgICBpZiAobV9j
b250cm9sc1NoYWRvd1Jvb3QpIHsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5k
ZXRhY2goKTsKLSAgICAgICAgICAgIG1fcGFuZWwgPSAwOwotICAgICAgICAgICAgbV9tdXRlQnV0
dG9uID0gMDsKLSAgICAgICAgICAgIG1fcGxheUJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3N0
YXR1c0Rpc3BsYXkgPSAwOwotICAgICAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lciA9IDA7Ci0g
ICAgICAgICAgICBtX3RpbWVsaW5lID0gMDsKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24g
PSAwOwotICAgICAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBt
X3Jld2luZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24g
PSAwOwotICAgICAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXkgPSAwOwotICAgICAgICAgICAg
bV90aW1lUmVtYWluaW5nRGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0
b24gPSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXIgPSAwOwotICAgICAg
ICAgICAgbV92b2x1bWVTbGlkZXIgPSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRl
QnV0dG9uID0gMDsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gMDsKLSAgICAg
ICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSAwOwotICAgICAgICB9Ci0gICAg
ICAgIG1fb3BhY2l0eUFuaW1hdGlvblRvID0gMS4wZjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0
aW9uVGltZXIuc3RvcCgpOwotICAgICAgICBtX3RpbWVVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290KSB7Ci0g
ICAgICAgIGNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpOwotICAgICAgICBjcmVhdGVQYW5lbCgp
OwotICAgICAgICBpZiAobV9wYW5lbCkgewotICAgICAgICAgICAgY3JlYXRlUmV3aW5kQnV0dG9u
KCk7Ci0gICAgICAgICAgICBjcmVhdGVQbGF5QnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVTdGF0dXNEaXNwbGF5
KCk7Ci0gICAgICAgICAgICBjcmVhdGVUaW1lbGluZUNvbnRhaW5lcigpOwotICAgICAgICAgICAg
aWYgKG1fdGltZWxpbmVDb250YWluZXIpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVDdXJyZW50
VGltZURpc3BsYXkoKTsKLSAgICAgICAgICAgICAgICBjcmVhdGVUaW1lbGluZSgpOwotICAgICAg
ICAgICAgICAgIGNyZWF0ZVRpbWVSZW1haW5pbmdEaXNwbGF5KCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjcmVhdGVTZWVrQmFja0J1dHRvbigpOwotICAgICAgICAgICAgY3JlYXRlU2Vl
a0ZvcndhcmRCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVGdWxsc2NyZWVuQnV0dG9uKCk7Ci0gICAgICAg
ICAgICBjcmVhdGVNdXRlQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVWb2x1bWVTbGlkZXJD
b250YWluZXIoKTsKLSAgICAgICAgICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikgewot
ICAgICAgICAgICAgICAgIGNyZWF0ZVZvbHVtZVNsaWRlcigpOwotICAgICAgICAgICAgICAgIGNy
ZWF0ZVZvbHVtZVNsaWRlck11dGVCdXR0b24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1fcGFuZWwtPmF0dGFjaCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1lZGlhLT5j
YW5QbGF5KCkpIHsKLSAgICAgICAgaWYgKG1fdGltZVVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCi0g
ICAgICAgICAgICBtX3RpbWVVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIGlmIChtZWRp
YS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgbV90aW1l
bGluZSAmJiBtX3RpbWVsaW5lLT5yZW5kZXJlcigpICYmIG1fdGltZWxpbmUtPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmRpc3BsYXkoKSAhPSBOT05FKSB7Ci0gICAgICAgIG1fdGltZVVwZGF0ZVRpbWVy
LnN0YXJ0UmVwZWF0aW5nKGNUaW1lVXBkYXRlUmVwZWF0RGVsYXkpOwotICAgIH0KLQotICAgIGlm
IChtX3BhbmVsKSB7Ci0gICAgICAgIC8vIHVwZGF0ZSgpIG1pZ2h0IGFsdGVyIHRoZSBvcGFjaXR5
IG9mIHRoZSBlbGVtZW50LCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlCi0gICAg
ICAgIC8vIG9mIGFuIGFuaW1hdGlvbi4gVGhpcyBpcyB0aGUgb25seSBlbGVtZW50IGNvbmNlcm5l
ZCBhcyB3ZSBhbmltYXRlIG9ubHkgdGhpcyBlbGVtZW50LgotICAgICAgICBmbG9hdCBvcGFjaXR5
QmVmb3JlQ2hhbmdpbmdTdHlsZSA9IG1fcGFuZWwtPnJlbmRlcmVyKCkgPyBtX3BhbmVsLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5vcGFjaXR5KCkgOiAwOwotICAgICAgICBtX3BhbmVsLT51cGRhdGUo
KTsKLSAgICAgICAgY2hhbmdlT3BhY2l0eShtX3BhbmVsLmdldCgpLCBvcGFjaXR5QmVmb3JlQ2hh
bmdpbmdTdHlsZSk7Ci0gICAgfQotICAgIGlmIChtX211dGVCdXR0b24pCi0gICAgICAgIG1fbXV0
ZUJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fcGxheUJ1dHRvbikKLSAgICAgICAgbV9wbGF5
QnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV90aW1lbGluZUNvbnRhaW5lcikKLSAgICAgICAg
bV90aW1lbGluZUNvbnRhaW5lci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29u
dGFpbmVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlKCk7Ci0gICAg
aWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZSgpOwotICAgIGlmICht
X2N1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXktPnVwZGF0
ZSgpOwotICAgIGlmIChtX3RpbWVSZW1haW5pbmdEaXNwbGF5KQotICAgICAgICBtX3RpbWVSZW1h
aW5pbmdEaXNwbGF5LT51cGRhdGUoKTsKLSAgICBpZiAobV9zZWVrQmFja0J1dHRvbikKLSAgICAg
ICAgbV9zZWVrQmFja0J1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fc2Vla0ZvcndhcmRCdXR0
b24pCi0gICAgICAgIG1fc2Vla0ZvcndhcmRCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3Jl
d2luZEJ1dHRvbikKLSAgICAgICAgbV9yZXdpbmRCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmICht
X3JldHVyblRvUmVhbHRpbWVCdXR0b24pCi0gICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRv
bi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAg
ICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3N0
YXR1c0Rpc3BsYXkpCi0gICAgICAgIG1fc3RhdHVzRGlzcGxheS0+dXBkYXRlKCk7Ci0gICAgaWYg
KG1fZnVsbHNjcmVlbkJ1dHRvbikKLSAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT51cGRhdGUo
KTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyLT51cGRh
dGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uKQotICAgICAgICBtX3ZvbHVt
ZVNsaWRlck11dGVCdXR0b24tPnVwZGF0ZSgpOwotCi0gICAgdXBkYXRlVGltZURpc3BsYXkoKTsK
LSAgICB1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6
OmNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRyb2xzU2hh
ZG93Um9vdCk7Ci0gICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSBNZWRpYUNvbnRyb2xTaGFkb3dS
b290RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX21lZGlhRWxlbWVudC0+
cmVuZGVyZXIoKS0+YWRkQ2hpbGQobV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBhbmVsKCkKLXsKLSAgICBBU1NFUlQoIW1f
cGFuZWwpOwotICAgIG1fcGFuZWwgPSBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmNyZWF0ZSht
X21lZGlhRWxlbWVudCk7Ci0gICAgbV9wYW5lbC0+YXR0YWNoVG9QYXJlbnQobV9jb250cm9sc1No
YWRvd1Jvb3QuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZU11dGVCdXR0
b24oKQotewotICAgIEFTU0VSVCghbV9tdXRlQnV0dG9uKTsKLSAgICBtX211dGVCdXR0b24gPSBN
ZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAg
ICBtX211dGVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBsYXlCdXR0b24oKQotewotICAgIEFTU0VSVCghbV9wbGF5
QnV0dG9uKTsKLSAgICBtX3BsYXlCdXR0b24gPSBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3BsYXlCdXR0b24tPmF0dGFjaFRvUGFy
ZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVNlZWtC
YWNrQnV0dG9uKCkKLXsKLSAgICBBU1NFUlQoIW1fc2Vla0JhY2tCdXR0b24pOwotICAgIG1fc2Vl
a0JhY2tCdXR0b24gPSBNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZSht
X21lZGlhRWxlbWVudCk7Ci0gICAgbV9zZWVrQmFja0J1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9w
YW5lbC5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlU2Vla0ZvcndhcmRC
dXR0b24oKQotewotICAgIEFTU0VSVCghbV9zZWVrRm9yd2FyZEJ1dHRvbik7Ci0gICAgbV9zZWVr
Rm9yd2FyZEJ1dHRvbiA9IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT5hdHRhY2hUb1Bh
cmVudChtX3BhbmVsLmdldCgpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVSZXdp
bmRCdXR0b24oKQotewotICAgIEFTU0VSVCghbV9yZXdpbmRCdXR0b24pOwotICAgIG1fcmV3aW5k
QnV0dG9uID0gTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFF
bGVtZW50KTsKLSAgICBtX3Jld2luZEJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQo
KSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlUmV0dXJuVG9SZWFsdGltZUJ1dHRv
bigpCi17Ci0gICAgQVNTRVJUKCFtX3JldHVyblRvUmVhbHRpbWVCdXR0b24pOwotICAgIG1fcmV0
dXJuVG9SZWFsdGltZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25F
bGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1
dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250
cm9sczo6Y3JlYXRlVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oKQotewotICAgIEFTU0VSVCgh
bV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbik7Ci0gICAgbV90b2dnbGVDbG9zZWRDYXB0aW9u
c0J1dHRvbiA9IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
LT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xz
OjpjcmVhdGVTdGF0dXNEaXNwbGF5KCkKLXsKLSAgICBBU1NFUlQoIW1fc3RhdHVzRGlzcGxheSk7
Ci0gICAgbV9zdGF0dXNEaXNwbGF5ID0gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6
OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9zdGF0dXNEaXNwbGF5LT5hdHRhY2hUb1Bh
cmVudChtX3BhbmVsLmdldCgpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVUaW1l
bGluZUNvbnRhaW5lcigpCi17Ci0gICAgQVNTRVJUKCFtX3RpbWVsaW5lQ29udGFpbmVyKTsKLSAg
ICBtX3RpbWVsaW5lQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVt
ZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdGltZWxpbmVDb250YWluZXItPmF0
dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNy
ZWF0ZVRpbWVsaW5lKCkKLXsKLSAgICBBU1NFUlQoIW1fdGltZWxpbmUpOwotICAgIG1fdGltZWxp
bmUgPSBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7
Ci0gICAgbV90aW1lbGluZS0+c2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOwot
ICAgIG1fdGltZWxpbmUtPmF0dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkp
OwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcigp
Ci17Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcik7Ci0gICAgbV92b2x1bWVT
bGlkZXJDb250YWluZXIgPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50
OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5h
dHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
cmVhdGVWb2x1bWVTbGlkZXIoKQotewotICAgIEFTU0VSVCghbV92b2x1bWVTbGlkZXIpOwotICAg
IG1fdm9sdW1lU2xpZGVyID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6Y3JlYXRl
KG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3ZvbHVtZVNsaWRlci0+c2V0QXR0cmlidXRlKHByZWNp
c2lvbkF0dHIsICJmbG9hdCIpOwotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRBdHRyaWJ1dGUobWF4
QXR0ciwgIjEiKTsKLSAgICBtX3ZvbHVtZVNsaWRlci0+c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwg
U3RyaW5nOjpudW1iZXIobV9tZWRpYUVsZW1lbnQtPnZvbHVtZSgpKSk7Ci0gICAgbV92b2x1bWVT
bGlkZXItPmF0dGFjaFRvUGFyZW50KG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLmdldCgpKTsKLX0K
LQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVWb2x1bWVTbGlkZXJNdXRlQnV0dG9uKCkKLXsK
LSAgICBBU1NFUlQoIW1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbik7Ci0gICAgbV92b2x1bWVTbGlk
ZXJNdXRlQnV0dG9uID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ6
OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT5h
dHRhY2hUb1BhcmVudChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci5nZXQoKSk7Ci19Ci0KLXZvaWQg
TWVkaWFDb250cm9sczo6Y3JlYXRlQ3VycmVudFRpbWVEaXNwbGF5KCkKKyAgICA6IEhUTUxEaXZF
bGVtZW50KGRpdlRhZywgbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV9tZWRpYUVs
ZW1lbnQobWVkaWFFbGVtZW50KQogewotICAgIEFTU0VSVCghbV9jdXJyZW50VGltZURpc3BsYXkp
OwotICAgIG1fY3VycmVudFRpbWVEaXNwbGF5ID0gTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNw
bGF5RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX2N1cnJlbnRUaW1lRGlz
cGxheS0+YXR0YWNoVG9QYXJlbnQobV90aW1lbGluZUNvbnRhaW5lci5nZXQoKSk7CiB9CiAKLXZv
aWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVGltZVJlbWFpbmluZ0Rpc3BsYXkoKQorUGFzc1JlZlB0
cjxNZWRpYUNvbnRyb2xzPiBNZWRpYUNvbnRyb2xzOjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50KQogewotICAgIEFTU0VSVCghbV90aW1lUmVtYWluaW5nRGlzcGxheSk7Ci0g
ICAgbV90aW1lUmVtYWluaW5nRGlzcGxheSA9IE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNw
bGF5RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3RpbWVSZW1haW5pbmdE
aXNwbGF5LT5hdHRhY2hUb1BhcmVudChtX3RpbWVsaW5lQ29udGFpbmVyLmdldCgpKTsKLX0KLQot
dm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVGdWxsc2NyZWVuQnV0dG9uKCkKLXsKLSAgICBBU1NF
UlQoIW1fZnVsbHNjcmVlbkJ1dHRvbik7Ci0gICAgbV9mdWxsc2NyZWVuQnV0dG9uID0gTWVkaWFD
b250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0g
ICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0K
KyAgICBSZWZQdHI8TWVkaWFDb250cm9scz4gZWxlbWVudCA9IGFkb3B0UmVmKG5ldyBNZWRpYUNv
bnRyb2xzKG1lZGlhRWxlbWVudCkpOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OnRpbWVVcGRhdGVU
aW1lckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbHM+KikKLXsKLSAgICBpZiAobV90aW1lbGluZSkK
LSAgICAgICAgbV90aW1lbGluZS0+dXBkYXRlKGZhbHNlKTsKLSAgICB1cGRhdGVUaW1lRGlzcGxh
eSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRpbWVEaXNwbGF5KCkKLXsKLSAg
ICBBU1NFUlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOwotCi0gICAgaWYgKCFtX2N1cnJl
bnRUaW1lRGlzcGxheSB8fCAhbV9jdXJyZW50VGltZURpc3BsYXktPnJlbmRlcmVyKCkgfHwgbV9j
dXJyZW50VGltZURpc3BsYXktPnJlbmRlcmVyKCktPnN0eWxlKCktPmRpc3BsYXkoKSA9PSBOT05F
IHx8IG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgbm93ID0gbV9tZWRpYUVsZW1l
bnQtPmN1cnJlbnRUaW1lKCk7Ci0gICAgZmxvYXQgZHVyYXRpb24gPSBtX21lZGlhRWxlbWVudC0+
ZHVyYXRpb24oKTsKLQotICAgIC8vIEFsbG93IHRoZSB0aGVtZSB0byBmb3JtYXQgdGhlIHRpbWUK
KyAgICAvLyBGSVhNRTogV0hBVCBUTyBETyBXSVRIIGVjPz8hPyE/IT8hCiAgICAgRXhjZXB0aW9u
Q29kZSBlYzsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0SW5uZXJUZXh0KG1fbWVkaWFF
bGVtZW50LT5yZW5kZXJlcigpLT50aGVtZSgpLT5mb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRp
bWUobm93LCBkdXJhdGlvbiksIGVjKTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3Vy
cmVudFZhbHVlKG5vdyk7Ci0gICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+c2V0SW5uZXJUZXh0
KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT50aGVtZSgpLT5mb3JtYXRNZWRpYUNvbnRyb2xz
UmVtYWluaW5nVGltZShub3csIGR1cmF0aW9uKSwgZWMpOwotICAgIG1fdGltZVJlbWFpbmluZ0Rp
c3BsYXktPnNldEN1cnJlbnRWYWx1ZShub3cgLSBkdXJhdGlvbik7Ci19CiAKLVJlbmRlckJveCog
TWVkaWFDb250cm9sczo6cmVuZGVyQm94KCkKLXsKLSAgICByZXR1cm4gbV9jb250cm9sc1NoYWRv
d1Jvb3QgPyBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyQm94KCkgOiAwOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OnVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5KCkKLXsKLSAgICBpZiAoIW1f
cGFuZWwgfHwgIW1fcGFuZWwtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IERvbid0IGZhZGUgZm9yIGF1ZGlvIGNvbnRyb2xzLgotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+aGFzVmlkZW8oKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1lZGlhLT5yZW5kZXJlcigpKTsKLQotICAgIC8vIERv
bid0IGZhZGUgaWYgdGhlIG1lZGlhIGVsZW1lbnQgaXMgbm90IHZpc2libGUKLSAgICBpZiAobWVk
aWEtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBzaG91bGRIaWRlQ29udHJvbGxlciA9ICFtX21vdXNl
T3ZlciAmJiAhbWVkaWEtPmNhblBsYXkoKTsKLQotICAgIC8vIERvIGZhZGluZyBtYW51YWxseSwg
Y3NzIGFuaW1hdGlvbnMgZG9uJ3Qgd29yayB3aXRoIHNoYWRvdyB0cmVlcwotCi0gICAgZmxvYXQg
YW5pbWF0ZUZyb20gPSBtX3BhbmVsLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vcGFjaXR5KCk7Ci0g
ICAgZmxvYXQgYW5pbWF0ZVRvID0gc2hvdWxkSGlkZUNvbnRyb2xsZXIgPyAwLjBmIDogMS4wZjsK
LQotICAgIGlmIChhbmltYXRlRnJvbSA9PSBhbmltYXRlVG8pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX29wYWNpdHlBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGlm
IChtX29wYWNpdHlBbmltYXRpb25UbyA9PSBhbmltYXRlVG8pCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoYW5pbWF0ZUZyb20gPCBhbmltYXRlVG8pCi0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvbkR1
cmF0aW9uID0gbV9wYW5lbC0+cmVuZGVyZXIoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVJ
bkR1cmF0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlv
biA9IG1fcGFuZWwtPnJlbmRlcmVyKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlT3V0RHVy
YXRpb24oKTsKLQotICAgIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20gPSBhbmltYXRlRnJvbTsKLSAg
ICBtX29wYWNpdHlBbmltYXRpb25UbyA9IGFuaW1hdGVUbzsKLQotICAgIG1fb3BhY2l0eUFuaW1h
dGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9vcGFjaXR5QW5pbWF0aW9uVGlt
ZXIuc3RhcnRSZXBlYXRpbmcoY09wYWNpdHlBbmltYXRpb25SZXBlYXREZWxheSk7Ci19Ci0KLXZv
aWQgTWVkaWFDb250cm9sczo6Y2hhbmdlT3BhY2l0eShIVE1MRWxlbWVudCogZSwgZmxvYXQgb3Bh
Y2l0eSkKLXsKLSAgICBpZiAoIWUgfHwgIWUtPnJlbmRlcmVyKCkgfHwgIWUtPnJlbmRlcmVyKCkt
PnN0eWxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHMgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmUoZS0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgcy0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKLSAgICAvLyB6LWluZGV4IGNhbid0IGJlIGF1dG8gaWYgb3BhY2l0eSBp
cyB1c2VkCi0gICAgcy0+c2V0WkluZGV4KDApOwotICAgIGUtPnJlbmRlcmVyKCktPnNldFN0eWxl
KHMucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpvcGFjaXR5QW5pbWF0aW9u
VGltZXJGaXJlZChUaW1lcjxNZWRpYUNvbnRyb2xzPiopCi17Ci0gICAgZG91YmxlIHRpbWUgPSBj
dXJyZW50VGltZSgpIC0gbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lOwotICAgIGlmICh0aW1l
ID49IG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uKSB7Ci0gICAgICAgIHRpbWUgPSBtX29wYWNp
dHlBbmltYXRpb25EdXJhdGlvbjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3Rv
cCgpOwotICAgIH0KLSAgICBmbG9hdCBvcGFjaXR5ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdCht
X29wYWNpdHlBbmltYXRpb25Gcm9tICsgKG1fb3BhY2l0eUFuaW1hdGlvblRvIC0gbV9vcGFjaXR5
QW5pbWF0aW9uRnJvbSkgKiB0aW1lIC8gbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24pOwotICAg
IGNoYW5nZU9wYWNpdHkobV9wYW5lbC5nZXQoKSwgb3BhY2l0eSk7Ci19Ci0KLXZvaWQgTWVkaWFD
b250cm9sczo6dXBkYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKGJvb2wgdmlzaWJsZSkKLXsKLSAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpIHx8ICFtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lciB8fCAhbV92b2x1bWVTbGlkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh2aXNp
YmxlICYmICFtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+aXNWaXNpYmxlKCkpIHsKLSAgICAgICAg
aWYgKCFtX211dGVCdXR0b24gfHwgIW1fbXV0ZUJ1dHRvbi0+cmVuZGVyZXIoKSB8fCAhbV9tdXRl
QnV0dG9uLT5yZW5kZXJCb3goKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IHMgPSBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c3R5bGVGb3JFbGVt
ZW50KCk7Ci0gICAgICAgIGludCBoZWlnaHQgPSBzLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSA/IDAg
OiBzLT5oZWlnaHQoKS52YWx1ZSgpOwotICAgICAgICBpbnQgd2lkdGggPSBzLT53aWR0aCgpLmlz
UGVyY2VudCgpID8gMCA6IHMtPndpZHRoKCkudmFsdWUoKTsKLSAgICAgICAgSW50UG9pbnQgb2Zm
c2V0ID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+dm9sdW1l
U2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24obV9tdXRlQnV0dG9uLT5yZW5kZXJlcigpLT5ub2Rl
KCksIEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgICAgICBpbnQgeCA9IG9mZnNldC54KCkg
KyBtX211dGVCdXR0b24tPnJlbmRlckJveCgpLT5vZmZzZXRMZWZ0KCk7Ci0gICAgICAgIGludCB5
ID0gb2Zmc2V0LnkoKSArIG1fbXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCktPm9mZnNldFRvcCgpOwot
Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zZXRQb3NpdGlvbih4LCB5KTsKLSAg
ICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICAg
IG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGUoKTsKLSAgICAgICAgbV92b2x1bWVTbGlk
ZXItPnVwZGF0ZSgpOwotICAgIH0gZWxzZSBpZiAoIXZpc2libGUgJiYgbV92b2x1bWVTbGlkZXJD
b250YWluZXItPmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
LT5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnVw
ZGF0ZVN0eWxlKCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmZvcndhcmRFdmVu
dChFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
KTsKLQotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgbV9jb250cm9sc1NoYWRvd1Jv
b3QpIHsKLSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNl
RXZlbnQqPihldmVudCk7Ci0gICAgICAgIEludFBvaW50IHBvaW50KG1vdXNlRXZlbnQtPmFic29s
dXRlTG9jYXRpb24oKSk7Ci0KLSAgICAgICAgYm9vbCBkZWZhdWx0SGFuZGxlZCA9IGZhbHNlOwot
ICAgICAgICBpZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uICYmIG1fdm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpIHsKLSAgICAgICAgICAgIG1fdm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgICAgICBkZWZhdWx0
SGFuZGxlZCA9IGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBzaG93Vm9sdW1lU2xpZGVyID0gZmFsc2U7Ci0gICAgICAgIGlmICghZGVmYXVsdEhhbmRs
ZWQgJiYgbV9tdXRlQnV0dG9uICYmIG1fbXV0ZUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpIHsKLSAg
ICAgICAgICAgIG1fbXV0ZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAg
ICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkK
LSAgICAgICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lciAmJiBtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lci0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1
ZTsKLQotICAgICAgICBpZiAobV92b2x1bWVTbGlkZXIgJiYgbV92b2x1bWVTbGlkZXItPmhpdFRl
c3QocG9pbnQpKSB7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlci0+ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7Ci0gICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihzaG93Vm9sdW1lU2xp
ZGVyKTsKLQotICAgICAgICBpZiAobV9wbGF5QnV0dG9uICYmIG1fcGxheUJ1dHRvbi0+aGl0VGVz
dChwb2ludCkpCi0gICAgICAgICAgICBtX3BsYXlCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3NlZWtCYWNrQnV0dG9uICYmIG1fc2Vla0JhY2tCdXR0
b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9zZWVrQmFja0J1dHRvbi0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fc2Vla0ZvcndhcmRCdXR0b24g
JiYgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBtX3Nl
ZWtGb3J3YXJkQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBp
ZiAobV9yZXdpbmRCdXR0b24gJiYgbV9yZXdpbmRCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAg
ICAgICAgICAgbV9yZXdpbmRCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0g
ICAgICAgIGlmIChtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gJiYgbV9yZXR1cm5Ub1JlYWx0aW1l
QnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1
dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICBpZiAobV90b2dnbGVD
bG9zZWRDYXB0aW9uc0J1dHRvbiAmJiBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5oaXRU
ZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3RpbWVsaW5lICYmIG1f
dGltZWxpbmUtPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV90aW1lbGluZS0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbiAm
JiBtX2Z1bGxzY3JlZW5CdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9mdWxs
c2NyZWVuQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAg
ICAgIG1fbW91c2VPdmVyID0gdHJ1ZTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xWaXNpYmls
aXR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlb3V0RXZlbnQpIHsKLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIHNjcm9sbGJhciB0
aHVtYiBjYXB0dXJlcyBtb3VzZSBldmVudHMsIHdlIHNob3VsZCB0cmVhdCB0aGUgbW91c2UgYXMg
c3RpbGwgYmVpbmcgb3ZlciBvdXIgcmVuZGVyZXIgaWYgdGhlIG5ldyB0YXJnZXQgaXMgYSBkZXNj
ZW5kYW50Ci0gICAgICAgICAgICBOb2RlKiBtb3VzZU92ZXJOb2RlID0gbW91c2VFdmVudC0+cmVs
YXRlZFRhcmdldCgpID8gbW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpLT50b05vZGUoKSA6IDA7
Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIG1vdXNlT3ZlclJlbmRlcmVyID0gbW91c2VPdmVy
Tm9kZSA/IG1vdXNlT3Zlck5vZGUtPnJlbmRlcmVyKCkgOiAwOwotICAgICAgICAgICAgbV9tb3Vz
ZU92ZXIgPSBtb3VzZU92ZXJSZW5kZXJlciAmJiBtb3VzZU92ZXJSZW5kZXJlci0+aXNEZXNjZW5k
YW50T2YobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgdXBkYXRlQ29u
dHJvbFZpc2liaWxpdHkoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gV2Ugd2FudCB0aGUg
dGltZWxpbmUgc2xpZGVyIHRvIGJlIGF0IGxlYXN0IDEwMCBwaXhlbHMgd2lkZS4KLXN0YXRpYyBj
b25zdCBpbnQgbWluV2lkdGhUb0Rpc3BsYXlUaW1lRGlzcGxheXMgPSAxNiArIDE2ICsgNDUgKyAx
MDAgKyA0NSArIDE2ICsgMTsKLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVUaW1lRGlzcGxh
eVZpc2liaWxpdHkoKQotewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7
Ci0KLSAgICBpZiAoIW1fY3VycmVudFRpbWVEaXNwbGF5ICYmICFtX3RpbWVSZW1haW5pbmdEaXNw
bGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgd2lkdGggPSBtX21lZGlhRWxlbWVudC0+
cmVuZGVyQm94KCktPndpZHRoKCk7Ci0gICAgYm9vbCBzaG91bGRTaG93VGltZURpc3BsYXlzID0g
d2lkdGggPj0gbWluV2lkdGhUb0Rpc3BsYXlUaW1lRGlzcGxheXMgKiBtX21lZGlhRWxlbWVudC0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgbV9jdXJyZW50VGlt
ZURpc3BsYXktPnNldFZpc2libGUoc2hvdWxkU2hvd1RpbWVEaXNwbGF5cyk7Ci0gICAgbV90aW1l
UmVtYWluaW5nRGlzcGxheS0+c2V0VmlzaWJsZShzaG91bGRTaG93VGltZURpc3BsYXlzKTsKLX0K
KyAgICBSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBwYW5lbCA9IE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCwgZWMpOworICAgIGVsZW1lbnQtPm1f
cGFuZWwgPSBwYW5lbC5nZXQoKTsKKyAgICBlbGVtZW50LT5hcHBlbmRDaGlsZChwYW5lbC5yZWxl
YXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOworfQorCit2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0
ZVRpbWVsaW5lKCkKK3sKKyAgICAvLyBGSVhNRTogVEhJUyBQTFVNQklORy1USFJPVUdIIElTIFNB
RC4KKyAgICBtX3BhbmVsLT51cGRhdGVUaW1lbGluZSgpOworfQorCitjb25zdCBBdG9taWNTdHJp
bmcmIE1lZGlhQ29udHJvbHM6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scyIp
KTsKKyAgICByZXR1cm4gaWQ7Cit9CisKKy8vIEZJWE1FOiBSRU1PVkUgQkVGT1JFIExBTkRJTkch
ISEKK3ZvaWQgTWVkaWFDb250cm9sczo6YXR0YWNoKCkKK3sKKyAgICBIVE1MRGl2RWxlbWVudDo6
YXR0YWNoKCk7Cit9CisKKy8vdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGUoKQorLy97CisvLyAg
ICAvLyBGSVhNRTogRklORCBBIFBMQUNFIEZPUiBUSElTIENPREUhISEhIQorLy8gICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWEgPSBtX21lZGlhRWxlbWVudDsKKy8vICAgIGlmICghbWVkaWEtPmNv
bnRyb2xzKCkgfHwgIW1lZGlhLT5pbkFjdGl2ZURvY3VtZW50KCkpIHsKKy8vICAgICAgICAvLyBG
SVhNRTogVEhJUyBTSE9VTEQgQkUgTU9SRSBFTEVHQU5UISEhCisvLyAgICAgICAgLy8gRklYTUU6
IEFMU08gTk8gQ09ERSBUTyBTSE9XIENPTlRST0xTIEFHQUlOISEhCisvLyAgICAgICAgaWYgKHJl
bmRlcmVyKCkpIHsKKy8vICAgICAgICAgICAgcmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0RGlzcGxh
eShOT05FKTsKKy8vICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworLy8gICAgICAg
IH0KKy8vICAgICAgICBtX29wYWNpdHlBbmltYXRpb25UbyA9IDEuMGY7CisvLyAgICAgICAgbV9v
cGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOworLy8gICAgICAgIG1fdGltZVVwZGF0ZVRpbWVy
LnN0b3AoKTsKKy8vICAgICAgICByZXR1cm47CisvLyAgICB9CisvLworLy8gICAgaWYgKG1lZGlh
LT5jYW5QbGF5KCkpIHsKKy8vICAgICAgICBpZiAobV90aW1lVXBkYXRlVGltZXIuaXNBY3RpdmUo
KSkKKy8vICAgICAgICAgICAgbV90aW1lVXBkYXRlVGltZXIuc3RvcCgpOworLy8gICAgfSBlbHNl
IGlmIChtZWRpYS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUg
JiYgbV90aW1lbGluZSAmJiBtX3RpbWVsaW5lLT5yZW5kZXJlcigpICYmIG1fdGltZWxpbmUtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmRpc3BsYXkoKSAhPSBOT05FKSB7CisvLyAgICAgICAgbV90aW1l
VXBkYXRlVGltZXIuc3RhcnRSZXBlYXRpbmcoY1RpbWVVcGRhdGVSZXBlYXREZWxheSk7CisvLyAg
ICB9CisvLworLy8gICAgaWYgKG1fcGFuZWwpIHsKKy8vICAgICAgICAvLyB1cGRhdGUoKSBtaWdo
dCBhbHRlciB0aGUgb3BhY2l0eSBvZiB0aGUgZWxlbWVudCwgZXNwZWNpYWxseSBpZiB3ZSBhcmUg
aW4gdGhlIG1pZGRsZQorLy8gICAgICAgIC8vIG9mIGFuIGFuaW1hdGlvbi4gVGhpcyBpcyB0aGUg
b25seSBlbGVtZW50IGNvbmNlcm5lZCBhcyB3ZSBhbmltYXRlIG9ubHkgdGhpcyBlbGVtZW50Lgor
Ly8gICAgICAgIGZsb2F0IG9wYWNpdHlCZWZvcmVDaGFuZ2luZ1N0eWxlID0gbV9wYW5lbC0+cmVu
ZGVyZXIoKSA/IG1fcGFuZWwtPnJlbmRlcmVyKCktPnN0eWxlKCktPm9wYWNpdHkoKSA6IDA7Cisv
LyAgICAgICAgbV9wYW5lbC0+dXBkYXRlKCk7CisvLyAgICAgICAgY2hhbmdlT3BhY2l0eShtX3Bh
bmVsLmdldCgpLCBvcGFjaXR5QmVmb3JlQ2hhbmdpbmdTdHlsZSk7CisvLyAgICB9CisvLyAgICBp
ZiAobV9tdXRlQnV0dG9uKQorLy8gICAgICAgIG1fbXV0ZUJ1dHRvbi0+dXBkYXRlKCk7CisvLyAg
ICBpZiAobV9wbGF5QnV0dG9uKQorLy8gICAgICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlKCk7Cisv
LyAgICBpZiAobV90aW1lbGluZUNvbnRhaW5lcikKKy8vICAgICAgICBtX3RpbWVsaW5lQ29udGFp
bmVyLT51cGRhdGUoKTsKKy8vICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKKy8vICAg
ICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlKCk7CisvLyAgICBpZiAobV90aW1l
bGluZSkKKy8vICAgICAgICBtX3RpbWVsaW5lLT51cGRhdGUoKTsKKy8vICAgIGlmIChtX2N1cnJl
bnRUaW1lRGlzcGxheSkKKy8vICAgICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+dXBkYXRlKCk7
CisvLyAgICBpZiAobV90aW1lUmVtYWluaW5nRGlzcGxheSkKKy8vICAgICAgICBtX3RpbWVSZW1h
aW5pbmdEaXNwbGF5LT51cGRhdGUoKTsKKy8vICAgIGlmIChtX3NlZWtCYWNrQnV0dG9uKQorLy8g
ICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPnVwZGF0ZSgpOworLy8gICAgaWYgKG1fc2Vla0Zvcndh
cmRCdXR0b24pCisvLyAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+dXBkYXRlKCk7CisvLyAg
ICBpZiAobV9yZXdpbmRCdXR0b24pCisvLyAgICAgICAgbV9yZXdpbmRCdXR0b24tPnVwZGF0ZSgp
OworLy8gICAgaWYgKG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbikKKy8vICAgICAgICBtX3JldHVy
blRvUmVhbHRpbWVCdXR0b24tPnVwZGF0ZSgpOworLy8gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24pCisvLyAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBk
YXRlKCk7CisvLyAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQorLy8gICAgICAgIG1fc3RhdHVzRGlz
cGxheS0+dXBkYXRlKCk7CisvLyAgICBpZiAobV9mdWxsc2NyZWVuQnV0dG9uKQorLy8gICAgICAg
IG1fZnVsbHNjcmVlbkJ1dHRvbi0+dXBkYXRlKCk7CisvLyAgICBpZiAobV92b2x1bWVTbGlkZXIp
CisvLyAgICAgICAgbV92b2x1bWVTbGlkZXItPnVwZGF0ZSgpOworLy8gICAgaWYgKG1fdm9sdW1l
U2xpZGVyTXV0ZUJ1dHRvbikKKy8vICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPnVw
ZGF0ZSgpOworLy8KKy8vICAgIHVwZGF0ZVRpbWVEaXNwbGF5KCk7CisvLyAgICB1cGRhdGVDb250
cm9sVmlzaWJpbGl0eSgpOworLy99CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9scy5oCmluZGV4IDk4ZTAxN2Y5ZGJkMmQzOTY3MmNkY2FkZWZkYTkzMWJmMjRl
Y2FiOTkuLmZjOGU0MWUwNDM5YzRlNDAwM2NhYTkxZmM5N2RhMTVmZTI4OGI3YWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKQEAgLTI5LDYgKzI5LDcgQEAK
IAogI2lmIEVOQUJMRShWSURFTykKIAorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTQxLDcgKzQyLDYg
QEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDsKIGNs
YXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sU2Vl
a0J1dHRvbkVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDsKIGNs
YXNzIE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDsKQEAgLTUyLDg4ICs1MiwzNSBAQCBjbGFzcyBNZWRp
YUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDsK
IGNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ7Ci1jbGFzcyBN
ZWRpYUNvbnRyb2xFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OwogY2xh
c3MgTWVkaWFQbGF5ZXI7CiAKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlck1lZGlhOwog
Ci1jbGFzcyBNZWRpYUNvbnRyb2xzIHsKKy8vIEZJWE1FOiBSZW5hbWUgdG8gTWVkaWFDb250cm9s
Um9vdEVsZW1lbnQuCitjbGFzcyBNZWRpYUNvbnRyb2xzIDogcHVibGljIEhUTUxEaXZFbGVtZW50
IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQqKTsKLQotICAg
IHZvaWQgZGVzdHJveSgpOwotICAgIHZvaWQgdXBkYXRlKCk7Ci0gICAgdm9pZCB1cGRhdGVTdHls
ZSgpOwotICAgIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7Ci0gICAgdm9pZCB1cGRhdGVUaW1l
RGlzcGxheSgpOwotICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXlWaXNpYmlsaXR5KCk7Ci0KLSAg
ICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxsb3cgUmVuZGVyTWVkaWE6OmxheW91
dCB0d2VhayB0aGUgcG9zaXRpb24gb2YgY29udHJvbHMuCi0gICAgLy8gT25jZSBzaGFkb3cgRE9N
IHJlZmFjdG9yaW5nIGlzIGNvbXBsZXRlLCB0aGUgdHdlYWtpbmcgd2lsbCBiZSBpbiBNZWRpYUNv
bnRyb2xzU2hhZG93Um9vdCBhbmQgdGhpcyBhY2Nlc3NvciB3aWxsIG5vIGxvbmdlciBiZSBuZWNl
c3NhcnkuCi0gICAgUmVuZGVyQm94KiByZW5kZXJCb3goKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxNZWRpYUNvbnRyb2xzPiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwogCisgICAgdm9pZCB1
cGRhdGVUaW1lbGluZSgpOwogcHJpdmF0ZToKLSAgICB2b2lkIGNyZWF0ZUNvbnRyb2xzU2hhZG93
Um9vdCgpOwotICAgIHZvaWQgZGVzdHJveUNvbnRyb2xzU2hhZG93Um9vdCgpOwotICAgIHZvaWQg
Y3JlYXRlUGFuZWwoKTsKLSAgICB2b2lkIGNyZWF0ZU11dGVCdXR0b24oKTsKLSAgICB2b2lkIGNy
ZWF0ZVBsYXlCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVNlZWtCYWNrQnV0dG9uKCk7Ci0gICAg
dm9pZCBjcmVhdGVTZWVrRm9yd2FyZEJ1dHRvbigpOwotICAgIHZvaWQgY3JlYXRlUmV3aW5kQnV0
dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKCk7Ci0gICAgdm9p
ZCBjcmVhdGVUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbigpOwotICAgIHZvaWQgY3JlYXRlU3Rh
dHVzRGlzcGxheSgpOwotICAgIHZvaWQgY3JlYXRlVGltZWxpbmVDb250YWluZXIoKTsKLSAgICB2
b2lkIGNyZWF0ZVRpbWVsaW5lKCk7Ci0gICAgdm9pZCBjcmVhdGVWb2x1bWVTbGlkZXJDb250YWlu
ZXIoKTsKLSAgICB2b2lkIGNyZWF0ZVZvbHVtZVNsaWRlcigpOwotICAgIHZvaWQgY3JlYXRlVm9s
dW1lU2xpZGVyTXV0ZUJ1dHRvbigpOwotICAgIHZvaWQgY3JlYXRlQ3VycmVudFRpbWVEaXNwbGF5
KCk7Ci0gICAgdm9pZCBjcmVhdGVUaW1lUmVtYWluaW5nRGlzcGxheSgpOwotICAgIHZvaWQgY3Jl
YXRlRnVsbHNjcmVlbkJ1dHRvbigpOwotCi0gICAgdm9pZCB0aW1lVXBkYXRlVGltZXJGaXJlZChU
aW1lcjxNZWRpYUNvbnRyb2xzPiopOwotCi0gICAgdm9pZCB1cGRhdGVDb250cm9sVmlzaWJpbGl0
eSgpOwotICAgIHZvaWQgY2hhbmdlT3BhY2l0eShIVE1MRWxlbWVudCosIGZsb2F0IG9wYWNpdHkp
OwotICAgIHZvaWQgb3BhY2l0eUFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8TWVkaWFDb250cm9s
cz4qKTsKLQotICAgIHZvaWQgdXBkYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKGJvb2wgdmlzaWJs
ZSk7CisgICAgTWVkaWFDb250cm9scyhIVE1MTWVkaWFFbGVtZW50Kik7CiAKIHByaXZhdGU6Ci0g
ICAgUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBtX2NvbnRyb2xzU2hhZG93
Um9vdDsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sRWxlbWVudD4gbV9wYW5lbDsKLSAgICBSZWZQ
dHI8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ+IG1fbXV0ZUJ1dHRvbjsKLSAgICBSZWZQ
dHI8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IG1fcGxheUJ1dHRvbjsKLSAgICBSZWZQ
dHI8TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ+IG1fc2Vla0JhY2tCdXR0b247Ci0gICAg
UmVmUHRyPE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50PiBtX3NlZWtGb3J3YXJkQnV0dG9u
OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50PiBtX3Jld2luZEJ1
dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1l
bnQ+IG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IG1fdGltZWxpbmU7
Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ+IG1fdm9sdW1lU2xp
ZGVyOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudD4gbV92b2x1bWVT
bGlkZXJNdXRlQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9u
RWxlbWVudD4gbV9mdWxsc2NyZWVuQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lckVsZW1lbnQ+IG1fdGltZWxpbmVDb250YWluZXI7Ci0gICAgUmVmUHRyPE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IG1fdm9sdW1lU2xpZGVyQ29u
dGFpbmVyOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ+IG1fY3Vy
cmVudFRpbWVEaXNwbGF5OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1l
bnQ+IG1fdGltZVJlbWFpbmluZ0Rpc3BsYXk7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFN0YXR1
c0Rpc3BsYXlFbGVtZW50PiBtX3N0YXR1c0Rpc3BsYXk7CisgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGF0dGFj
aCgpOwogCisgICAgLy8gRklYTUU6IEFSRSBUSEVTRSBFVkVOIE5FRURFRD8hPworICAgIE1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudCogbV9wYW5lbDsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21l
ZGlhRWxlbWVudDsKLSAgICBUaW1lcjxNZWRpYUNvbnRyb2xzPiBtX3RpbWVVcGRhdGVUaW1lcjsK
LSAgICBUaW1lcjxNZWRpYUNvbnRyb2xzPiBtX29wYWNpdHlBbmltYXRpb25UaW1lcjsKLQotICAg
IGRvdWJsZSBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91YmxlIG1fb3BhY2l0
eUFuaW1hdGlvbkR1cmF0aW9uOwotICAgIGZsb2F0IG1fb3BhY2l0eUFuaW1hdGlvbkZyb207Ci0g
ICAgZmxvYXQgbV9vcGFjaXR5QW5pbWF0aW9uVG87Ci0KLSAgICBib29sIG1fbW91c2VPdmVyOwog
fTsKIAoraW5saW5lIE1lZGlhQ29udHJvbHMqIHRvTWVkaWFDb250cm9scyhOb2RlKiBub2RlKQor
eworICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNZWRpYUNvbnRyb2xzKj4obm9kZSk7Cit9CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggNjUzYTM1NWY0MWNm
MmUzZjMzOTBmN2M4MDVlZjc4YThlYWQzNTBjOS4uOTk1MjIxODYwZmU0OWQ3MDAyZTc0NDY1MTFi
OTliMmFiNjE3ZjM1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCkBAIC02NSwxNTEgKzY1LDIzNCBAQCBzdGF0aWMgY29uc3QgZmxv
YXQgY1NlZWtSZXBlYXREZWxheSA9IDAuMWY7CiBzdGF0aWMgY29uc3QgZmxvYXQgY1N0ZXBUaW1l
ID0gMC4wN2Y7CiBzdGF0aWMgY29uc3QgZmxvYXQgY1NlZWtUaW1lID0gMC4yZjsKIAotaW5saW5l
IE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50OjpNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxl
bWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK01lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogSFRNTERpdkVsZW1lbnQoZGl2
VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCisgICAgLCBtX21lZGlhRWxlbWVudChtZWRp
YUVsZW1lbnQpCiB7Ci0gICAgc2V0U2hhZG93SG9zdChtZWRpYUVsZW1lbnQpOwogfQogCi1QYXNz
UmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBNZWRpYUNvbnRyb2xTaGFkb3dS
b290RWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJl
ZihuZXcgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQobWVkaWFFbGVtZW50KSk7Ci0KLSAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJvb3RTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsK
LSAgICByb290U3R5bGUtPmluaGVyaXRGcm9tKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5
bGUoKSk7Ci0gICAgcm9vdFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICByb290U3R5bGUt
PnNldFBvc2l0aW9uKFJlbGF0aXZlUG9zaXRpb24pOworLy9QYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBNZWRpYUNvbnRyb2xFbGVtZW50OjpzdHlsZUZvckVsZW1lbnQoKQorLy97CisvLyAgICBBU1NF
UlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOworLy8gICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRo
aXMsIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLCB0cnVlKTsKKy8vICAgIGlm
ICghc3R5bGUpCisvLyAgICAgICAgcmV0dXJuIDA7CisvLworLy8gICAgLy8gRklYTUU6IFRISVMg
U0hPVUxEIEpVU1QgV09SSyBGT1IgU0hBRE9XIERPTSBFTEVNRU5UUy4KKy8vICAgIC8vIHRleHQt
ZGVjb3JhdGlvbiBjYW4ndCBiZSBvdmVycmlkZWQgZnJvbSBDU1MuIFNvIHdlIGRvIGl0IGhlcmUu
CisvLyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3
MDE1CisvLyAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb24oVEROT05FKTsKKy8vICAgIHN0eWxl
LT5zZXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChURE5PTkUpOworLy8KKy8vICAgIHJldHVybiBz
dHlsZTsKKy8vfQogCi0gICAgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdCogcmVuZGVyZXIg
PSBuZXcgKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyTWVk
aWFDb250cm9sU2hhZG93Um9vdChlbGVtZW50LmdldCgpKTsKLSAgICByZW5kZXJlci0+c2V0U3R5
bGUocm9vdFN0eWxlLnJlbGVhc2UoKSk7Ci0KLSAgICBlbGVtZW50LT5zZXRSZW5kZXJlcihyZW5k
ZXJlcik7Ci0gICAgZWxlbWVudC0+c2V0QXR0YWNoZWQoKTsKLSAgICBlbGVtZW50LT5zZXRJbkRv
Y3VtZW50KCk7Citib29sIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUqIHN0eWxlKQoreworICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkpOwogCi0g
ICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOworICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6
cmVuZGVyZXJJc05lZWRlZChzdHlsZSkgJiYgcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+
cmVuZGVyZXIoKQorICAgICAgICAmJiAoIXN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgfHwgZG9jdW1l
bnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHN0eWxl
LT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KSk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9s
U2hhZG93Um9vdEVsZW1lbnQ6OmRldGFjaCgpCisvLyBGSVhNRTogUkVNT1ZFIEJFRk9SRSBMQU5E
SU5HISEhCit2b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCiB7Ci0gICAgSFRNTERp
dkVsZW1lbnQ6OmRldGFjaCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBzaGFkb3cgRE9N
IHVzZXMgRWxlbWVudDo6c2V0U2hhZG93Um9vdCgpLgotICAgIHNldFNoYWRvd0hvc3QoMCk7Cisg
ICAgSFRNTERpdkVsZW1lbnQ6OmF0dGFjaCgpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLU1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFn
LCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCi0gICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVs
ZW1lbnQpCisvL3N0YXRpYyBjb25zdCBkb3VibGUgY1RpbWVVcGRhdGVSZXBlYXREZWxheSA9IDAu
MjsKK3N0YXRpYyBjb25zdCBkb3VibGUgY09wYWNpdHlBbmltYXRpb25SZXBlYXREZWxheSA9IDAu
MDU7CisKK2lubGluZSBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVs
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCisgICAgOiBNZWRpYUNvbnRy
b2xFbGVtZW50KG1lZGlhRWxlbWVudCkKKyAgICAsIG1fcGxheUJ1dHRvbigwKQorICAgICwgbV9z
dGF0dXNEaXNwbGF5KDApCisgICAgLCBtX3RpbWVsaW5lQ29udGFpbmVyKDApCisgICAgLCBtX3Rv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKDApCisgICAgLCBtX211dGVCdXR0b24oMCkKKyAgICAs
IG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKDApCisgICAgLCBtX29wYWNpdHlBbmltYXRpb25UaW1l
cih0aGlzLCAmTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpvcGFjaXR5QW5pbWF0aW9uVGltZXJG
aXJlZCkKKyAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZSgwKQorICAgICwgbV9vcGFj
aXR5QW5pbWF0aW9uRHVyYXRpb24oMCkKKyAgICAsIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20oMCkK
KyAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblRvKDEuMGYpCisgICAgLCBtX21vdXNlT3ZlcihmYWxz
ZSkKIHsKLSAgICBzZXRJbkRvY3VtZW50KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVu
dDo6YXR0YWNoVG9QYXJlbnQoRWxlbWVudCogcGFyZW50KQorUGFzc1JlZlB0cjxNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8gRklY
TUU6IFRoaXMgY29kZSBzZWVtcyB2ZXJ5IHdyb25nLiAgV2h5IGFyZSB3ZSBtYWdpY2FsbHkgYWRk
aW5nIHx0aGlzfCB0byB0aGUgRE9NIGhlcmU/Ci0gICAgLy8gICAgICAgIFdlIHNob3VsZG4ndCBi
ZSBjYWxsaW5nIHBhcnNlciBBUEkgbWV0aG9kcyBvdXRzaWRlIG9mIHRoZSBwYXJzZXIhCi0gICAg
cGFyZW50LT5wYXJzZXJBZGRDaGlsZCh0aGlzKTsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50PiBwYW5lbCA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQo
bWVkaWFFbGVtZW50KSk7CisKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoTWVkaWFDb250cm9sUmV3
aW5kQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCksIGVjLCB0cnVlKTsKKyAgICBp
ZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IFVwZGF0ZSBwbGF5IGJ1
dHRvbiB3aGVuIHBsYXlpbmcgc3RhcnRzIGZyb20gRE9NISEhCisgICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50PiBwbGF5QnV0dG9uID0gTWVkaWFDb250cm9sUGxheUJ1dHRv
bkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIHBhbmVsLT5tX3BsYXlCdXR0b24g
PSBwbGF5QnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChwbGF5QnV0dG9uLnJl
bGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBwYW5lbC0+YXBwZW5kQ2hpbGQoTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVs
ZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudD4gc3RhdHVzRGlzcGxheSA9IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50Ojpj
cmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBwYW5lbC0+bV9zdGF0dXNEaXNwbGF5ID0gc3RhdHVz
RGlzcGxheS5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoc3RhdHVzRGlzcGxheS5yZWxl
YXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gdGltZWxpbmVDb250
YWluZXIgPSBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtZWRp
YUVsZW1lbnQsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcGFu
ZWwtPm1fdGltZWxpbmVDb250YWluZXIgPSB0aW1lbGluZUNvbnRhaW5lci5nZXQoKTsKKyAgICBw
YW5lbC0+YXBwZW5kQ2hpbGQodGltZWxpbmVDb250YWluZXIucmVsZWFzZSgpLCBlYywgdHJ1ZSk7
CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBhbmVsLT5hcHBlbmRDaGls
ZChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQp
LCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBhbmVs
LT5hcHBlbmRDaGlsZChNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShtZWRpYUVsZW1lbnQpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIC8vIEZJWE1FOiBVcGRhdGUgY2MgYnV0dG9uIHdoZW4gdHVybmluZyBvbi9vZmYg
ZnJvbSBET00hISEhCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uRWxlbWVudD4gdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSBNZWRpYUNvbnRyb2xU
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwor
ICAgIHBhbmVsLT5tX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uID0gdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHRvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoTWVkaWFDb250cm9sRnVsbHNjcmVl
bkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpLCBlYywgdHJ1ZSk7CisKKyAgICAv
LyBGSVhNRTogVXBkYXRlIG11dGVCdXR0b24gd2hlbiBtdXRpbmcgZnJvbSBET00hISEKKyAgICBS
ZWZQdHI8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ+IG11dGVCdXR0b24gPSBNZWRpYUNv
bnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgcGFuZWwt
Pm1fbXV0ZUJ1dHRvbiA9IG11dGVCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxk
KG11dGVCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJF
bGVtZW50PiB2b2x1bWVTbGlkZXJDb250YWluZXIgPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJD
b250YWluZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50LCBlYyk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHBhbmVsLT5tX3ZvbHVtZVNsaWRlckNvbnRhaW5lciA9
IHZvbHVtZVNsaWRlckNvbnRhaW5lci5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQodm9s
dW1lU2xpZGVyQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcGFuZWwucmVsZWFzZSgpOwogfQogCi12b2lk
IE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZSgpCit2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudDo6dXBkYXRlVGltZWxpbmUoKQogewotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICBy
ZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHVwZGF0ZVN0eWxlKCk7CisgICAg
bV90aW1lbGluZUNvbnRhaW5lci0+dXBkYXRlVGltZWxpbmUoKTsKIH0KIAotUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gTWVkaWFDb250cm9sRWxlbWVudDo6c3R5bGVGb3JFbGVtZW50KCkKK3ZvaWQg
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzaG93Vm9sdW1lU2xpZGVyKCkKIHsKLSAgICBBU1NF
UlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlz
LCBtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSwgdHJ1ZSk7Ci0gICAgaWYgKCFz
dHlsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgLy8gdGV4dC1kZWNvcmF0aW9uIGNh
bid0IGJlIG92ZXJyaWRlZCBmcm9tIENTUy4gU28gd2UgZG8gaXQgaGVyZS4KLSAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDE1Ci0gICAgc3R5bGUt
PnNldFRleHREZWNvcmF0aW9uKFRETk9ORSk7Ci0gICAgc3R5bGUtPnNldFRleHREZWNvcmF0aW9u
c0luRWZmZWN0KFRETk9ORSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQoKS0+aGFzQXVkaW8oKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIHN0eWxlOworICAgIG1fdm9sdW1lU2xpZGVy
Q29udGFpbmVyLT5zaG93KCk7CiB9CiAKLWJvb2wgTWVkaWFDb250cm9sRWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudDo6aGlkZVZvbHVtZVNsaWRlcigpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2Uo
KSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQoKS0+aGFzQXVkaW8oKSkKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgcmV0dXJuIEhUTUxEaXZFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAm
JiBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpCi0gICAgICAgICYmICgh
c3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNo
b3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoc3R5bGUtPmFwcGVhcmFuY2UoKSwgbV9tZWRpYUVs
ZW1lbnQpKTsKKyAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+aGlkZSgpOwogfQotICAgIAot
dm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjphdHRhY2goKQorCisKK01lZGlhQ29udHJvbEVsZW1l
bnRUeXBlIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGlzcGxheVR5cGUoKSBjb25zdAogewot
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKLSAgICBp
ZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBuZWVkc1JlbmRlcmVyID0gcmVu
ZGVyZXJJc05lZWRlZChzdHlsZS5nZXQoKSk7Ci0gICAgaWYgKCFuZWVkc1JlbmRlcmVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVy
KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7
Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHJlbmRlcmVyLT5zZXRT
dHlsZShzdHlsZS5nZXQoKSk7Ci0gICAgc2V0UmVuZGVyZXIocmVuZGVyZXIpOwotICAgIGlmIChw
YXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIC8vIEZp
bmQgbmV4dCBzaWJsaW5nIHdpdGggYSByZW5kZXJlciB0byBkZXRlcm1pbmUgd2hlcmUgdG8gaW5z
ZXJ0LgotICAgICAgICBOb2RlKiBzaWJsaW5nID0gbmV4dFNpYmxpbmcoKTsKLSAgICAgICAgd2hp
bGUgKHNpYmxpbmcgJiYgIXNpYmxpbmctPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICBzaWJsaW5n
ID0gc2libGluZy0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcGFyZW50Tm9kZSgpLT5yZW5kZXJl
cigpLT5hZGRDaGlsZChyZW5kZXJlciwgc2libGluZyA/IHNpYmxpbmctPnJlbmRlcmVyKCkgOiAw
KTsKLSAgICB9Ci0gICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7CisgICAgcmV0dXJuIE1lZGlh
Q29udHJvbHNQYW5lbDsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xQYW5l
bEVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCIpKTsK
KyAgICByZXR1cm4gaWQ7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlU3R5
bGUoKQordm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnVwZGF0ZVZpc2liaWxpdHkoKQog
ewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
KQorICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwotICAgIGlmICghc3R5bGUpCisg
ICAgLy8gRG9uJ3QgZmFkZSBmb3IgYXVkaW8gY29udHJvbHMuCisgICAgSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWEgPSBtZWRpYUVsZW1lbnQoKTsKKyAgICBpZiAoIW1lZGlhLT5oYXNWaWRlbygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBib29sIG5lZWRzUmVuZGVyZXIgPSByZW5kZXJlcklzTmVl
ZGVkKHN0eWxlLmdldCgpKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJl
cigpOwotICAgIGlmIChyZW5kZXJlcigpICYmICFuZWVkc1JlbmRlcmVyKQotICAgICAgICBkZXRh
Y2goKTsKLSAgICBlbHNlIGlmICghcmVuZGVyZXIoKSAmJiBuZWVkc1JlbmRlcmVyKQotICAgICAg
ICBhdHRhY2goKTsKLSAgICBlbHNlIGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgIHJlbmRlcmVy
KCktPnNldFN0eWxlKHN0eWxlLmdldCgpKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBp
ZiB0aGVyZSBpcyBhbnkgaW5uZXJUZXh0IHJlbmRlcmVyLCBpdCBpcyB1cGRhdGVkIGFzIHdlbGwu
Ci0gICAgICAgIGlmIChmaXJzdENoaWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5yZW5kZXJlcigpKQot
ICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5yZW5kZXJlcigpLT5zZXRTdHlsZShzdHlsZS5nZXQo
KSk7CisgICAgQVNTRVJUKG1lZGlhLT5yZW5kZXJlcigpKTsKKworICAgIC8vIERvbid0IGZhZGUg
aWYgdGhlIG1lZGlhIGVsZW1lbnQgaXMgbm90IHZpc2libGUKKyAgICBpZiAobWVkaWEtPnJlbmRl
cmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgYm9vbCBzaG91bGRIaWRlQ29udHJvbGxlciA9ICFtX21vdXNlT3ZlciAmJiAh
bWVkaWEtPmNhblBsYXkoKTsKKworICAgIC8vIERvIGZhZGluZyBtYW51YWxseSwgY3NzIGFuaW1h
dGlvbnMgZG9uJ3Qgd29yayB3aXRoIHNoYWRvdyB0cmVlcworICAgIC8vIEZJWE1FOiBUSEVZIERP
IE5PVyEhISEhISEKKworICAgIGZsb2F0IGFuaW1hdGVGcm9tID0gcmVuZGVyZXIoKS0+c3R5bGUo
KS0+b3BhY2l0eSgpOworICAgIGZsb2F0IGFuaW1hdGVUbyA9IHNob3VsZEhpZGVDb250cm9sbGVy
ID8gMC4wZiA6IDEuMGY7CisKKyAgICBpZiAoYW5pbWF0ZUZyb20gPT0gYW5pbWF0ZVRvKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuaXNBY3RpdmUo
KSkgeworICAgICAgICBpZiAobV9vcGFjaXR5QW5pbWF0aW9uVG8gPT0gYW5pbWF0ZVRvKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdG9wKCk7
CiAgICAgfQotfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgaWYgKGFu
aW1hdGVGcm9tIDwgYW5pbWF0ZVRvKQorICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlv
biA9IGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0
aW9uKCk7CisgICAgZWxzZQorICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbiA9IGRv
Y3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigp
OwogCi1pbmxpbmUgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbEVs
ZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotICAgIDogTWVkaWFDb250cm9s
RWxlbWVudChtZWRpYUVsZW1lbnQpCi17Ci19CisgICAgbV9vcGFjaXR5QW5pbWF0aW9uRnJvbSA9
IGFuaW1hdGVGcm9tOworICAgIG1fb3BhY2l0eUFuaW1hdGlvblRvID0gYW5pbWF0ZVRvOwogCi1Q
YXNzUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudD4gTWVkaWFDb250cm9sUGFuZWxFbGVt
ZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50KG1lZGlhRWxlbWVudCkpOwor
ICAgIG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9v
cGFjaXR5QW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoY09wYWNpdHlBbmltYXRpb25SZXBl
YXREZWxheSk7CiB9CiAKLU1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIE1lZGlhQ29udHJvbFBhbmVs
RWxlbWVudDo6ZGlzcGxheVR5cGUoKSBjb25zdAorc3RhdGljIHZvaWQgY2hhbmdlT3BhY2l0eShI
VE1MRWxlbWVudCogZSwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICByZXR1cm4gTWVkaWFDb250cm9s
c1BhbmVsOworICAgIGlmICghZSB8fCAhZS0+cmVuZGVyZXIoKSB8fCAhZS0+cmVuZGVyZXIoKS0+
c3R5bGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcyA9IFJl
bmRlclN0eWxlOjpjbG9uZShlLT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKKyAgICBzLT5zZXRPcGFj
aXR5KG9wYWNpdHkpOworICAgIC8vIHotaW5kZXggY2FuJ3QgYmUgYXV0byBpZiBvcGFjaXR5IGlz
IHVzZWQKKyAgICBzLT5zZXRaSW5kZXgoMCk7CisgICAgZS0+cmVuZGVyZXIoKS0+c2V0U3R5bGUo
cy5yZWxlYXNlKCkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFBhbmVs
RWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAordm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVs
ZW1lbnQ6Om9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbFBhbmVs
RWxlbWVudD4qKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwg
KCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsIikpOwotICAgIHJldHVybiBpZDsKKyAgICBk
b3VibGUgdGltZSA9IGN1cnJlbnRUaW1lKCkgLSBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWU7
CisgICAgaWYgKHRpbWUgPj0gbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24pIHsKKyAgICAgICAg
dGltZSA9IG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uOworICAgICAgICBtX29wYWNpdHlBbmlt
YXRpb25UaW1lci5zdG9wKCk7CisgICAgfQorICAgIGZsb2F0IG9wYWNpdHkgPSBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KG1fb3BhY2l0eUFuaW1hdGlvbkZyb20gKyAobV9vcGFjaXR5QW5pbWF0aW9u
VG8gLSBtX29wYWNpdHlBbmltYXRpb25Gcm9tKSAqIHRpbWUgLyBtX29wYWNpdHlBbmltYXRpb25E
dXJhdGlvbik7CisgICAgY2hhbmdlT3BhY2l0eSh0aGlzLCBvcGFjaXR5KTsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE5LDkgKzMwMiwyOSBAQCBpbmxpbmUgTWVk
aWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUNv
bnRhaW5lckVsZW1lbgogewogfQogCi1QYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVh
dGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQorUGFzc1JlZlB0cjxNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
RWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUaW1lbGlu
ZUNvbnRhaW5lckVsZW1lbnQobWVkaWFFbGVtZW50KSk7CisgICAgUmVmUHRyPE1lZGlhQ29udHJv
bFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gY29udGFpbmVyID0gYWRvcHRSZWYobmV3IE1lZGlh
Q29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChtZWRpYUVsZW1lbnQpKTsKKworICAgIFJl
ZlB0cjxNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50PiBjdXJyZW50VGltZURp
c3BsYXkgPSBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50OjpjcmVhdGUobWVk
aWFFbGVtZW50KTsKKyAgICBjb250YWluZXItPm1fY3VycmVudFRpbWVEaXNwbGF5ID0gY3VycmVu
dFRpbWVEaXNwbGF5LmdldCgpOworICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoY3VycmVudFRp
bWVEaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiB0aW1lbGlu
ZSA9IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7Cisg
ICAgY29udGFpbmVyLT5tX3RpbWVsaW5lID0gdGltZWxpbmUuZ2V0KCk7CisgICAgY29udGFpbmVy
LT5hcHBlbmRDaGlsZCh0aW1lbGluZS5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVSZW1haW5p
bmdEaXNwbGF5RWxlbWVudD4gdGltZVJlbWFpbmluZ0Rpc3BsYXkgPSBNZWRpYUNvbnRyb2xUaW1l
UmVtYWluaW5nRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRh
aW5lci0+bV90aW1lUmVtYWluaW5nRGlzcGxheSA9IHRpbWVSZW1haW5pbmdEaXNwbGF5LmdldCgp
OworICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodGltZVJlbWFpbmluZ0Rpc3BsYXkucmVsZWFz
ZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBjb250YWluZXIucmVsZWFzZSgpOwogfQogCiBib29sIE1lZGlhQ29udHJvbFRpbWVsaW5l
Q29udGFpbmVyRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCkBA
IC0yMzcsNiArMzQwLDMzIEBAIGJvb2wgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICByZXR1cm4gIWlz
bmFuKGR1cmF0aW9uKSAmJiAhaXNpbmYoZHVyYXRpb24pOwogfQogCit2b2lkIE1lZGlhQ29udHJv
bFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGltZWxpbmUoKQoreworICAgIG1fdGlt
ZWxpbmUtPnVwZGF0ZSgpOworICAgIHVwZGF0ZVRpbWVEaXNwbGF5KCk7Cit9CisKK3ZvaWQgTWVk
aWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50Ojp1cGRhdGVUaW1lRGlzcGxheSgpCit7
CisgICAgLy8gRklYTUU6IERFVUdMSUZZCisvLyAgICBpZiAoIW1fY3VycmVudFRpbWVEaXNwbGF5
LT5yZW5kZXJlcigpIHx8IG1fY3VycmVudFRpbWVEaXNwbGF5LT5yZW5kZXJlcigpLT5zdHlsZSgp
LT5kaXNwbGF5KCkgPT0gTk9ORSkKKy8vICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBub3cg
PSBtZWRpYUVsZW1lbnQoKS0+Y3VycmVudFRpbWUoKTsKKyAgICBmbG9hdCBkdXJhdGlvbiA9IG1l
ZGlhRWxlbWVudCgpLT5kdXJhdGlvbigpOworCisgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCkt
PnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFsbG93
IHRoZSB0aGVtZSB0byBmb3JtYXQgdGhlIHRpbWUKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAg
IG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQoZG9jdW1lbnQoKS0+cGFnZSgpLT50
aGVtZSgpLT5mb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUobm93LCBkdXJhdGlvbiksIGVj
KTsKKyAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3VycmVudFZhbHVlKG5vdyk7CisgICAg
bV90aW1lUmVtYWluaW5nRGlzcGxheS0+c2V0SW5uZXJUZXh0KGRvY3VtZW50KCktPnBhZ2UoKS0+
dGhlbWUoKS0+Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUobm93LCBkdXJhdGlvbiks
IGVjKTsKKyAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93IC0g
ZHVyYXRpb24pOworfQorCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lckVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
TWVkaWFUaW1lbGluZUNvbnRhaW5lcjsKQEAgLTI1NSwyOSArMzg1LDY1IEBAIGlubGluZSBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJDb250YWluCiAgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKICAgICAsIG1feCgwKQogICAg
ICwgbV95KDApCisgICAgLCBtX3NsaWRlcigwKQorICAgICwgbV9tdXRlQnV0dG9uKDApCiB7CiB9
CiAKLVBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4g
TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK1Bhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50KG1lZGlhRWxlbWVudCkpOworICAgIFJlZlB0cjxNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBjb250YWluZXIgPSBhZG9wdFJlZihuZXcg
TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChtZWRpYUVsZW1lbnQpKTsK
KworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50PiBzbGlkZXIgPSBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAg
ICBjb250YWluZXItPm1fc2xpZGVyID0gc2xpZGVyLmdldCgpOworICAgIGNvbnRhaW5lci0+YXBw
ZW5kQ2hpbGQoc2xpZGVyLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbkVsZW1lbnQ+IG11dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0
dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udGFpbmVyLT5tX211dGVC
dXR0b24gPSBtdXRlQnV0dG9uLmdldCgpOworICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQobXV0
ZUJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIGNvbnRhaW5lci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnN0
eWxlRm9yRWxlbWVudCgpCisvL1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbFZv
bHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpCisvL3sKKy8vICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBNZWRpYUNvbnRyb2xFbGVtZW50OjpzdHlsZUZv
ckVsZW1lbnQoKTsKKy8vICAgIHN0eWxlLT5zZXRQb3NpdGlvbihBYnNvbHV0ZVBvc2l0aW9uKTsK
Ky8vICAgIHN0eWxlLT5zZXRMZWZ0KExlbmd0aChtX3gsIEZpeGVkKSk7CisvLyAgICBzdHlsZS0+
c2V0VG9wKExlbmd0aChtX3ksIEZpeGVkKSk7CisvLyAgICBzdHlsZS0+c2V0RGlzcGxheShtX2lz
VmlzaWJsZSA/IEJMT0NLIDogTk9ORSk7CisvLyAgICByZXR1cm4gc3R5bGU7CisvL30KKwordm9p
ZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpzaG93KCkKIHsKLSAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gTWVkaWFDb250cm9sRWxlbWVudDo6c3R5bGVG
b3JFbGVtZW50KCk7Ci0gICAgc3R5bGUtPnNldFBvc2l0aW9uKEFic29sdXRlUG9zaXRpb24pOwot
ICAgIHN0eWxlLT5zZXRMZWZ0KExlbmd0aChtX3gsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFRv
cChMZW5ndGgobV95LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXREaXNwbGF5KG1faXNWaXNpYmxl
ID8gQkxPQ0sgOiBOT05FKTsKLSAgICByZXR1cm4gc3R5bGU7CisgICAgLy8gRklYTUU6IEFSRSBU
SEVTRSBSRUFMTFkgTkVDRVNTQVJZPyEKKyAgICBpZiAoIW1fbXV0ZUJ1dHRvbiB8fCAhbV9tdXRl
QnV0dG9uLT5yZW5kZXJlcigpIHx8ICFtX211dGVCdXR0b24tPnJlbmRlckJveCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoaXNWaXNpYmxlKCkpCisgICAgICAgIHJldHVybjsKKworLy8g
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzID0gbV92b2x1bWVTbGlkZXJDb250YWluZXItPnN0eWxl
Rm9yRWxlbWVudCgpOworLy8gICAgaW50IGhlaWdodCA9IHMtPmhlaWdodCgpLmlzUGVyY2VudCgp
ID8gMCA6IHMtPmhlaWdodCgpLnZhbHVlKCk7CisvLyAgICBpbnQgd2lkdGggPSBzLT53aWR0aCgp
LmlzUGVyY2VudCgpID8gMCA6IHMtPndpZHRoKCkudmFsdWUoKTsKKy8vICAgIEludFBvaW50IG9m
ZnNldCA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnZvbHVt
ZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKG1fbXV0ZUJ1dHRvbi0+cmVuZGVyZXIoKS0+bm9k
ZSgpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKy8vICAgIGludCB4ID0gb2Zmc2V0LngoKSAr
IG1fbXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCktPm9mZnNldExlZnQoKTsKKy8vICAgIGludCB5ID0g
b2Zmc2V0LnkoKSArIG1fbXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCktPm9mZnNldFRvcCgpOworLy8K
Ky8vICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zZXRQb3NpdGlvbih4LCB5KTsKKy8vICAg
IG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zZXRWaXNpYmxlKHRydWUpOworLy8gICAgbV92b2x1
bWVTbGlkZXItPnVwZGF0ZSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNv
bnRhaW5lckVsZW1lbnQ6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpoaWRlKCkKIHsKLSAgICBpZiAodmlzaWJs
ZSA9PSBtX2lzVmlzaWJsZSkKKyAgICBpZiAoIWlzVmlzaWJsZSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnNldFBvc2l0aW9uKGludCB4LCBpbnQgeSkKQEAgLTI4
OCwxNCArNDU0LDYgQEAgdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpzZXRQb3NpdGlvbihpbnQgeCwgaW50IHkpCiAgICAgbV95ID0geTsKIH0KIAotYm9vbCBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpoaXRUZXN0KGNvbnN0IElu
dFBvaW50JiBhYnNQb2ludCkKLXsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5z
dHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlcigpLT50aGVt
ZSgpLT5oaXRUZXN0TWVkaWFDb250cm9sUGFydChyZW5kZXJlcigpLCBhYnNQb2ludCk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI7CkBAIC0zMjAsMTAgKzQ3OCw5IEBA
IFBhc3NSZWZQdHI8TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+IE1lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUNv
bnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChtZWRpYUVsZW1lbnQpKTsKIH0KIAorLy8gRklYTUU6
IFRISVMgSVMgTk9UIENBTExFRCBBTllNT1JFLgogdm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudDo6dXBkYXRlKCkKIHsKLSAgICBNZWRpYUNvbnRyb2xFbGVtZW50Ojp1cGRhdGUo
KTsKLQogICAgIC8vIEdldCB0aGUgbmV3IHN0YXRlIHRoYXQgd2UnbGwgaGF2ZSB0byBkaXNwbGF5
LgogICAgIFN0YXRlQmVpbmdEaXNwbGF5ZWQgbmV3U3RhdGVUb0Rpc3BsYXkgPSBOb3RoaW5nOwog
CkBAIC0zNzksMjYgKzUzNiw2IEBAIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250
cm9sSW5wdXRFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVuCiB7CiB9CiAKLXZv
aWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjphdHRhY2hUb1BhcmVudChFbGVtZW50KiBwYXJl
bnQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgY29kZSBzZWVtcyB2ZXJ5IHdyb25nLiAgV2h5IGFy
ZSB3ZSBtYWdpY2FsbHkgYWRkaW5nIHx0aGlzfCB0byB0aGUgRE9NIGhlcmU/Ci0gICAgLy8gICAg
ICAgIFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIHBhcnNlciBBUEkgbWV0aG9kcyBvdXRzaWRlIG9m
IHRoZSBwYXJzZXIhCi0gICAgcGFyZW50LT5wYXJzZXJBZGRDaGlsZCh0aGlzKTsKLX0KLQotdm9p
ZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZSgpCi17Ci0gICAgdXBkYXRlRGlzcGxh
eVR5cGUoKTsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRl
RnJvbUVsZW1lbnQoKTsKLSAgICB1cGRhdGVTdHlsZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpCi17Ci0g
ICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRo
aXMsIDAsIHRydWUpOwotfQotCiBib29sIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KCkt
PnBhZ2UoKSk7CkBAIC00MDcsNjkgKzU0NCw2IEBAIGJvb2wgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICAgICAgJiYgKCFz
dHlsZS0+aGFzQXBwZWFyYW5jZSgpIHx8IGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+c2hv
dWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChzdHlsZS0+YXBwZWFyYW5jZSgpLCBtZWRpYUVsZW1l
bnQoKSkpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0YWNoKCkKLXsK
LSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAg
aWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgbmVlZHNSZW5kZXJl
ciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpOwotICAgIGlmICghbmVlZHNSZW5kZXJl
cikKLSAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVS
ZW5kZXJlcihtZWRpYUVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUu
Z2V0KCkpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJl
ci0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAg
ICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKSkgewotICAgICAg
ICAvLyBGaW5kIG5leHQgc2libGluZyB3aXRoIGEgcmVuZGVyZXIgdG8gZGV0ZXJtaW5lIHdoZXJl
IHRvIGluc2VydC4KLSAgICAgICAgTm9kZSogc2libGluZyA9IG5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgIHdoaWxlIChzaWJsaW5nICYmICFzaWJsaW5nLT5yZW5kZXJlcigpKQotICAgICAgICAgICAg
c2libGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHBhcmVudE5vZGUoKS0+
cmVuZGVyZXIoKS0+YWRkQ2hpbGQocmVuZGVyZXIsIHNpYmxpbmcgPyBzaWJsaW5nLT5yZW5kZXJl
cigpIDogMCk7Ci0gICAgfSAgCi0gICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7Ci0gICAgLy8g
RklYTUU6IEN1cnJlbnRseSwgTWVpZGFDb250cm9sSW5wdXQgY2lyY3VtdmVudHMgdGhlIG5vcm1h
bCBhdHRhY2htZW50Ci0gICAgLy8gYW5kIHN0eWxlIHJlY2FsYyBjeWNsZSBhbmQgdGh1cyB3ZSBu
ZWVkIHRvIGFkZCBleHRyYSBsb2dpYyB0byBiZSBhd2FyZSBvZgotICAgIC8vIHRoZSBzaGFkb3cg
RE9NLiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBtZWRpYSBjb250cm9scyBhcmUgdHJhbnNpdGlvbmVk
IHRvIHVzZSB0aGUgcmVndWxhcgotICAgIC8vIHN0eWxlIGNhbGN1bGF0aW9uLgotICAgIGlmIChO
b2RlKiBzaGFkb3dOb2RlID0gc2hhZG93Um9vdCgpKQotICAgICAgICBzaGFkb3dOb2RlLT5hdHRh
Y2goKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZVN0eWxlKCkK
LXsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCgpIHx8ICFtZWRpYUVsZW1lbnQoKS0+cmVuZGVyZXIo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUg
PSBzdHlsZUZvckVsZW1lbnQoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgYm9vbCBuZWVkc1JlbmRlcmVyID0gcmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQo
KSkgJiYgcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICBpZiAo
cmVuZGVyZXIoKSAmJiAhbmVlZHNSZW5kZXJlcikKLSAgICAgICAgZGV0YWNoKCk7Ci0gICAgZWxz
ZSBpZiAoIXJlbmRlcmVyKCkgJiYgbmVlZHNSZW5kZXJlcikKLSAgICAgICAgYXR0YWNoKCk7Ci0g
ICAgZWxzZSBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5
bGUuZ2V0KCkpOwotCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgTWVpZGFDb250cm9sSW5wdXQg
Y2lyY3VtdmVudHMgdGhlIG5vcm1hbCBhdHRhY2htZW50Ci0gICAgLy8gYW5kIHN0eWxlIHJlY2Fs
YyBjeWNsZSBhbmQgdGh1cyB3ZSBuZWVkIHRvIGFkZCBleHRyYSBsb2dpYyB0byBiZSBhd2FyZSBv
ZgotICAgIC8vIHRoZSBzaGFkb3cgRE9NLiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBtZWRpYSBjb250
cm9scyBhcmUgdHJhbnNpdGlvbmVkIHRvIHVzZQotICAgIC8vIHRoZSBuZXcgc2hhZG93IERPTS4K
LSAgICBpZiAoTm9kZSogc2hhZG93Tm9kZSA9IHNoYWRvd1Jvb3QoKSkKLSAgICAgICAgc2hhZG93
Tm9kZS0+cmVjYWxjU3R5bGUoTm9kZTo6Rm9yY2UpOwotfQotCi1ib29sIE1lZGlhQ29udHJvbElu
cHV0RWxlbWVudDo6aGl0VGVzdChjb25zdCBJbnRQb2ludCYgYWJzUG9pbnQpCi17Ci0gICAgaWYg
KHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQotICAg
ICAgICByZXR1cm4gcmVuZGVyZXIoKS0+dGhlbWUoKS0+aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQo
cmVuZGVyZXIoKSwgYWJzUG9pbnQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudDo6c2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVu
dFR5cGUgZGlzcGxheVR5cGUpCiB7CiAgICAgaWYgKGRpc3BsYXlUeXBlID09IG1fZGlzcGxheVR5
cGUpCkBAIC00OTgsOCArNTcyLDE0IEBAIHZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAgICAgIG1lZGlhRWxlbWVu
dCgpLT5zZXRNdXRlZCghbWVkaWFFbGVtZW50KCktPm11dGVkKCkpOworICAgICAgICB1cGRhdGVE
aXNwbGF5VHlwZSgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9
CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7
CisgICAgICAgIC8vIEZJWE1FOiBEVUdMSUZZISEhIQorICAgICAgICBzdGF0aWNfY2FzdDxNZWRp
YUNvbnRyb2xQYW5lbEVsZW1lbnQqPihwYXJlbnROb2RlKCkpLT5zaG93Vm9sdW1lU2xpZGVyKCk7
CisgICAgfQorCiAgICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVu
dCk7CiB9CiAKQEAgLTU1MCw2ICs2MzAsNyBAQCB2b2lkIE1lZGlhQ29udHJvbFBsYXlCdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICBtZWRpYUVs
ZW1lbnQoKS0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7
CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KICAgICBIVE1MSW5w
dXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKQEAgLTc0MCw4ICs4MjEsMTAg
QEAgdm9pZCBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGUKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICBtZWRpYUVsZW1lbnQoKS0+c2V0Q2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKCFtZWRpYUVsZW1lbnQoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkp
OwogICAgICAgICBzZXRDaGVja2VkKG1lZGlhRWxlbWVudCgpLT5jbG9zZWRDYXB0aW9uc1Zpc2li
bGUoKSk7CisgICAgICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KKwogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwogfQogCkBAIC03NjEsNiArODQ0LDcgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnNo
YWRvd1BzZXVkb0kKIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6TWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKICAgICA6IE1lZGlh
Q29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQsIE1lZGlhU2xpZGVyKQogeworICAgIHNl
dEF0dHJpYnV0ZShwcmVjaXNpb25BdHRyLCAiZmxvYXQiKTsKIH0KIAogUGFzc1JlZlB0cjxNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3Jl
YXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTc5NCw4ICs4NzgsMTAgQEAg
dm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogICAgIH0KIAogICAgIFJlbmRlclNsaWRlciogc2xpZGVyID0gdG9SZW5kZXJT
bGlkZXIocmVuZGVyZXIoKSk7Ci0gICAgaWYgKHNsaWRlciAmJiBzbGlkZXItPmluRHJhZ01vZGUo
KSkKLSAgICAgICAgdG9SZW5kZXJNZWRpYShtZWRpYUVsZW1lbnQoKS0+cmVuZGVyZXIoKSktPmNv
bnRyb2xzKCktPnVwZGF0ZVRpbWVEaXNwbGF5KCk7CisgICAgaWYgKHNsaWRlciAmJiBzbGlkZXIt
PmluRHJhZ01vZGUoKSkgeworICAgICAgICAvLyBGSVhNRTogREVVR0xJRlkhISEhIQorICAgICAg
ICBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQqPihwYXJl
bnROb2RlKCkpLT51cGRhdGVUaW1lRGlzcGxheSgpOworICAgIH0KIAogICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCiAgICAgICAgIG1lZGlhRWxlbWVu
dCgpLT5lbmRTY3J1YmJpbmcoKTsKQEAgLTgwOCw3ICs4OTQsNiBAQCB2b2lkIE1lZGlhQ29udHJv
bFRpbWVsaW5lRWxlbWVudDo6dXBkYXRlKGJvb2wgdXBkYXRlRHVyYXRpb24pCiAgICAgICAgIHNl
dEF0dHJpYnV0ZShtYXhBdHRyLCBTdHJpbmc6Om51bWJlcihpc2Zpbml0ZShkdXJhdGlvbikgPyBk
dXJhdGlvbiA6IDApKTsKICAgICB9CiAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIobWVkaWFF
bGVtZW50KCktPmN1cnJlbnRUaW1lKCkpKTsKLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6
OnVwZGF0ZSgpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdApAQCAtODUzLDEyICs5MzgsMTIgQEAgdm9p
ZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldmVudCkKICAgICB9CiB9CiAKKy8vIEZJWE1FOiBUSElTIElTIE5PVCBDQUxMRUQgQU5Z
TU9SRS4KIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6dXBkYXRlKCkKIHsK
ICAgICBmbG9hdCB2b2x1bWUgPSBtZWRpYUVsZW1lbnQoKS0+dm9sdW1lKCk7CiAgICAgaWYgKHZh
bHVlKCkudG9GbG9hdCgpICE9IHZvbHVtZSkKICAgICAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1i
ZXIodm9sdW1lKSk7Ci0gICAgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGUoKTsKIH0K
IAogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50Ojpz
aGFkb3dQc2V1ZG9JZCgpIGNvbnN0CkBAIC05MTEsMzYgKzk5Niw0MSBAQCBjb25zdCBBdG9taWNT
dHJpbmcmIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9J
ZCgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIE1l
ZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVt
ZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IE1lZGlhQ29udHJvbEVs
ZW1lbnQobWVkaWFFbGVtZW50KQotICAgICwgbV9jdXJyZW50VmFsdWUoMCkKLSAgICAsIG1faXNW
aXNpYmxlKHRydWUpCi17Ci19CitjbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xUaW1lRGlzcGxheSA6
IHB1YmxpYyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyTWVkaWFDb250cm9sVGlt
ZURpc3BsYXkoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKK307CiAKLVBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6c3R5bGVG
b3JFbGVtZW50KCkKK1JlbmRlck1lZGlhQ29udHJvbFRpbWVEaXNwbGF5OjpSZW5kZXJNZWRpYUNv
bnRyb2xUaW1lRGlzcGxheShOb2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKIHsK
LSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gTWVkaWFDb250cm9sRWxlbWVudDo6c3R5
bGVGb3JFbGVtZW50KCk7Ci0gICAgaWYgKCFtX2lzVmlzaWJsZSkgewotICAgICAgICBzdHlsZSA9
IFJlbmRlclN0eWxlOjpjbG9uZShzdHlsZS5nZXQoKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgoMCwgRml4ZWQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxlOwogfQogCi12b2lk
IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6c2V0VmlzaWJsZShib29sIHZpc2libGUp
CisvLyBXZSB3YW50IHRoZSB0aW1lbGluZSBzbGlkZXIgdG8gYmUgYXQgbGVhc3QgMTAwIHBpeGVs
cyB3aWRlLgorc3RhdGljIGNvbnN0IGludCBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyA9
IDQ1ICsgMTAwICsgNDU7CisKK3ZvaWQgUmVuZGVyTWVkaWFDb250cm9sVGltZURpc3BsYXk6Omxh
eW91dCgpCiB7Ci0gICAgaWYgKHZpc2libGUgPT0gbV9pc1Zpc2libGUpCisgICAgUmVuZGVyQmxv
Y2s6OmxheW91dCgpOworICAgIC8vIEZJWE1FOiBGSUdVUkUgT1VUIEhPVyBUTyBDT0xMQVBTRSBM
RU5HVEgsIExJS0UgT1JJR0lOQUwgREVTSUdOLgorICAgIFJlbmRlckJveCogdGltZWxpbmVCb3gg
PSB0b1JlbmRlckJveChwYXJlbnQoKSk7CisgICAgaWYgKCF0aW1lbGluZUJveCkKICAgICAgICAg
cmV0dXJuOwotICAgIG1faXNWaXNpYmxlID0gdmlzaWJsZTsKIAotICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgdXNlZCBkdXJpbmcgdGhlIFJlbmRlck1lZGlhOjpsYXlvdXQoKQotICAgIC8vIGNhbGws
IHdoZXJlIHdlIGNhbm5vdCBjaGFuZ2UgdGhlIHJlbmRlcmVyIGF0IHRoaXMgdGltZS4KLSAgICBp
ZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPnN0eWxlKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBpbnQgd2lkdGggPSB0aW1lbGluZUJveC0+d2lkdGgoKTsKKyAgICBzdHlsZSgpLT5zZXRW
aXNpYmlsaXR5KHdpZHRoIDwgbWluV2lkdGhUb0Rpc3BsYXlUaW1lRGlzcGxheXMgKiBzdHlsZSgp
LT5lZmZlY3RpdmVab29tKCkgPyBISURERU4gOiBWSVNJQkxFKTsKK30KKworaW5saW5lIE1lZGlh
Q29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKKyAgICA6IE1lZGlhQ29udHJvbEVsZW1l
bnQobWVkaWFFbGVtZW50KQorICAgICwgbV9jdXJyZW50VmFsdWUoMCkKK3sKK30KIAotICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKLSAgICByZW5kZXJl
cigpLT5zZXRTdHlsZShzdHlsZS5nZXQoKSk7CitSZW5kZXJPYmplY3QqIE1lZGlhQ29udHJvbFRp
bWVEaXNwbGF5RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5k
ZXJTdHlsZSopCit7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlck1lZGlhQ29udHJvbFRp
bWVEaXNwbGF5KHRoaXMpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVu
dDo6c2V0Q3VycmVudFZhbHVlKGZsb2F0IHRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCmluZGV4IGZmOTU0MWQxZmNmMzhhMDBiMDYwOTFk
MzEyYzk2ZDY1M2QwZWUyYjguLjQyNDJkMGZhZDY4ZjdmNDAwMDUxYTdlYjA0OWRlMTZlMTU1ZmQ1
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5oCkBAIC03MSwyNCArNzEsMTEgQEAgZW51bSBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSB7CiAK
IEhUTUxNZWRpYUVsZW1lbnQqIHRvUGFyZW50TWVkaWFFbGVtZW50KFJlbmRlck9iamVjdCopOwog
Ci1jbGFzcyBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxl
bWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93
Um9vdEVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RF
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKLX07Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxl
bWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZvaWQgYXR0
YWNoVG9QYXJlbnQoRWxlbWVudCopOwotICAgIHZvaWQgdXBkYXRlKCk7Ci0gICAgdm9pZCB1cGRh
dGVTdHlsZSgpOwogCiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5
VHlwZSgpIGNvbnN0ID0gMDsKIApAQCAtOTksNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKKy8vICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KCk7CiAKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFDb250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KQEAgLTEwOSwzOCArOTYsODMgQEAgcHJpdmF0ZToKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCitjbGFzcyBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDsK
K2NsYXNzIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OworY2xhc3MgTWVkaWFDb250
cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVs
ZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50Owor
CiBjbGFzcyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxl
bWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxF
bGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7CisKKyAgICB2b2lkIHVwZGF0ZVRpbWVsaW5lKCk7CisgICAgdm9pZCBzaG93
Vm9sdW1lU2xpZGVyKCk7CisgICAgdm9pZCBoaWRlVm9sdW1lU2xpZGVyKCk7CisKKyAgICB2b2lk
IHVwZGF0ZVZpc2liaWxpdHkoKTsKKyAgICB2b2lkIG9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVk
KFRpbWVyPE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudD4qKTsKIAogcHJpdmF0ZToKICAgICBNZWRp
YUNvbnRyb2xQYW5lbEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogICAgIHZpcnR1YWwgTWVk
aWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKLX07CiAKKyAgICBNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogbV9wbGF5QnV0dG9uOworICAgIE1lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXlFbGVtZW50KiBtX3N0YXR1c0Rpc3BsYXk7CisgICAgTWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50KiBtX3RpbWVsaW5lQ29udGFpbmVyOworICAgIE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudCogbV90b2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCogbV9tdXRl
QnV0dG9uOworICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQqIG1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyOworCisgICAgVGltZXI8TWVkaWFDb250cm9sUGFuZWxFbGVt
ZW50PiBtX29wYWNpdHlBbmltYXRpb25UaW1lcjsKKworICAgIGRvdWJsZSBtX29wYWNpdHlBbmlt
YXRpb25TdGFydFRpbWU7CisgICAgZG91YmxlIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uOwor
ICAgIGZsb2F0IG1fb3BhY2l0eUFuaW1hdGlvbkZyb207CisgICAgZmxvYXQgbV9vcGFjaXR5QW5p
bWF0aW9uVG87CisKKyAgICBib29sIG1fbW91c2VPdmVyOworfTsKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCitjbGFzcyBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlF
bGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OworY2xhc3MgTWVkaWFD
b250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OworCiBjbGFzcyBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXJFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKEhUTUxNZWRp
YUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2b2lkIHVwZGF0ZVRpbWVsaW5lKCk7
CisgICAgdm9pZCB1cGRhdGVUaW1lRGlzcGxheSgpOwogCiBwcml2YXRlOgogICAgIE1lZGlhQ29u
dHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgdmly
dHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3Q7CisKKyAgICBNZWRp
YUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1lRGlzcGxheTsK
KyAgICBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQqIG1fdGltZWxpbmU7CisgICAgTWVkaWFD
b250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50KiBtX3RpbWVSZW1haW5pbmdEaXNwbGF5
OwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitjbGFzcyBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
TXV0ZUJ1dHRvbkVsZW1lbnQ7CisKIGNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRh
aW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVu
dD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxl
bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworLy8g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKKyAg
ICB2b2lkIHNob3coKTsKKyAgICB2b2lkIGhpZGUoKTsKICAgICBib29sIGlzVmlzaWJsZSgpIHsg
cmV0dXJuIG1faXNWaXNpYmxlOyB9CiAgICAgdm9pZCBzZXRQb3NpdGlvbihpbnQgeCwgaW50IHkp
OwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBJbnRQb2ludCYgYWJzUG9pbnQpOwpAQCAtMTUyLDYg
KzE4NCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faXNWaXNpYmxlOwogICAgIGludCBtX3gs
IG1feTsKKyAgICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KiBtX3NsaWRlcjsKKyAg
ICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudCogbV9tdXRlQnV0dG9u
OwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc3LDEyICsyMTEs
NiBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgOiBwdWJsaWMg
SFRNTElucHV0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdm9pZCBhdHRhY2hUb1BhcmVudChFbGVt
ZW50Kik7Ci0gICAgdm9pZCB1cGRhdGUoKTsKLSAgICB2b2lkIHVwZGF0ZVN0eWxlKCk7Ci0KLSAg
ICBib29sIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsKLQogICAgIE1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5VHlw
ZTsgfQogCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYUVsZW1lbnQ7IH0KQEAgLTE5MywxMSArMjIxLDggQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgc2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwogCiBwcml2YXRl
OgotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSopOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKLQogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJv
bEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlRGlzcGxheVR5cGUoKSB7IH0KQEAgLTM4Nyw4ICs0MTIsNiBAQCBwcml2YXRlOgogCiBjbGFz
cyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxl
bWVudCB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotCiAgICAgdm9pZCBz
ZXRDdXJyZW50VmFsdWUoZmxvYXQpOwogICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudFZhbHVlOyB9CiAKQEAgLTM5Niw5ICs0MTksOSBAQCBwcm90ZWN0ZWQ6
CiAgICAgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsK
IAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
RWxlbWVudCgpOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKICAgICBmbG9hdCBtX2N1cnJlbnRWYWx1ZTsKLSAg
ICBib29sIG1faXNWaXNpYmxlOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtNDI2LDE1ICs0NDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTWVkaWFDb250cm9s
RWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdCA6IHB1
YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93
Um9vdChFbGVtZW50KiBlKSA6IFJlbmRlckJsb2NrKGUpIHsgfQotICAgIHZvaWQgc2V0UGFyZW50
KFJlbmRlck9iamVjdCogcCkgeyBSZW5kZXJPYmplY3Q6OnNldFBhcmVudChwKTsgfQotfTsKLSAg
ICAKKyAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogfSAvL25hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAppbmRleCAxNmNk
ODc0ZDkyYmM3YThkODQyNzgzMWE3MDM0ZGJhNjFjMjM4NjExLi45MmM4NGVkMTIxNjRlNTZhNmFk
YmJkNTVmOTM0MzJjZDk3NGFhMTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVkaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYS5jcHAKQEAgLTI5LDIxICsyOSwxNyBAQAogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAK
ICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxl
bWVudHMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogUmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvKQog
ICAgIDogUmVuZGVySW1hZ2UodmlkZW8pCi0gICAgLCBtX2NvbnRyb2xzKG5ldyBNZWRpYUNvbnRy
b2xzKHZpZGVvKSkKIHsKICAgICBzZXRJbWFnZVJlc291cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6
OmNyZWF0ZSgpKTsKIH0KIAogUmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKEhUTUxNZWRpYUVsZW1l
bnQqIHZpZGVvLCBjb25zdCBJbnRTaXplJiBpbnRyaW5zaWNTaXplKQogICAgIDogUmVuZGVySW1h
Z2UodmlkZW8pCi0gICAgLCBtX2NvbnRyb2xzKG5ldyBNZWRpYUNvbnRyb2xzKHZpZGVvKSkKIHsK
ICAgICBzZXRJbWFnZVJlc291cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsKICAg
ICBzZXRJbnRyaW5zaWNTaXplKGludHJpbnNpY1NpemUpOwpAQCAtNTMsMzggKzQ5LDI5IEBAIFJl
bmRlck1lZGlhOjp+UmVuZGVyTWVkaWEoKQogewogfQogCi12b2lkIFJlbmRlck1lZGlhOjpkZXN0
cm95KCkKLXsKLSAgICBtX2NvbnRyb2xzLT5kZXN0cm95KCk7Ci0gICAgUmVuZGVySW1hZ2U6OmRl
c3Ryb3koKTsKLX0KLQorLy8gRklYTUU6IE1vdmUgdG8gUmVuZGVyVmlkZW8KIEhUTUxNZWRpYUVs
ZW1lbnQqIFJlbmRlck1lZGlhOjptZWRpYUVsZW1lbnQoKSBjb25zdAogeyAKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG5vZGUoKSk7IAogfQogCi12b2lkIFJlbmRl
ck1lZGlhOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlckltYWdlOjpzdHlsZURpZENoYW5nZShkaWZm
LCBvbGRTdHlsZSk7Ci0gICAgbV9jb250cm9scy0+dXBkYXRlU3R5bGUoKTsKLX0KLQogdm9pZCBS
ZW5kZXJNZWRpYTo6bGF5b3V0KCkKIHsKICAgICBJbnRTaXplIG9sZFNpemUgPSBjb250ZW50Qm94
UmVjdCgpLnNpemUoKTsKIAogICAgIFJlbmRlckltYWdlOjpsYXlvdXQoKTsKIAotICAgIFJlbmRl
ckJveCogY29udHJvbHNSZW5kZXJlciA9IG1fY29udHJvbHMtPnJlbmRlckJveCgpOworICAgIC8v
IEZJWE1FOiBBU1NVTUVTIEZJUlNUIENISUxEIElTIFNIQURPVyBST09UIEJPWC4KKyAgICAvLyBG
SVhNRTogTUFLRSBQQVJUIE9GIE1lZGlhQ29udHJvbHMuCisgICAgUmVuZGVyQm94KiBjb250cm9s
c1JlbmRlcmVyID0gdG9SZW5kZXJCb3gobV9jaGlsZHJlbi5maXJzdENoaWxkKCkpOwogICAgIGlm
ICghY29udHJvbHNSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOworCiAgICAgSW50U2l6ZSBuZXdT
aXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAgICAgaWYgKG5ld1NpemUgIT0gb2xkU2l6
ZSB8fCBjb250cm9sc1JlbmRlcmVyLT5uZWVkc0xheW91dCgpKSB7CiAKLSAgICAgICAgbV9jb250
cm9scy0+dXBkYXRlVGltZURpc3BsYXlWaXNpYmlsaXR5KCk7CisvLyAgICAgICAgbV9jb250cm9s
cy0+dXBkYXRlVGltZURpc3BsYXlWaXNpYmlsaXR5KCk7CiAKLSAgICAgICAgY29udHJvbHNSZW5k
ZXJlci0+c2V0TG9jYXRpb24oYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9w
KCkgKyBwYWRkaW5nVG9wKCkpOwogICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5zdHlsZSgpLT5z
ZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiAgICAgICAgIGNvbnRy
b2xzUmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRoKCksIEZp
eGVkKSk7CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KHRydWUsIGZh
bHNlKTsKQEAgLTkzLDkgKzgwLDkgQEAgdm9pZCBSZW5kZXJNZWRpYTo6bGF5b3V0KCkKICAgICB9
CiB9CiAKLXZvaWQgUmVuZGVyTWVkaWE6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3ZvaWQgUmVuZGVy
TWVkaWE6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAg
ICBtX2NvbnRyb2xzLT51cGRhdGUoKTsKKyAgICBSZW5kZXJJbWFnZTo6cGFpbnQocGFpbnRJbmZv
LCB0eCwgdHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYS5oCmluZGV4IDc2NThlZjZjMTg0YzM5ODMyZTRjNWQ4MmY4Zjg3YTVi
NjUwYjUwMzEuLjU5NjRlYTRlNGM1ZGMxZDU2NDAzNWNhMThiOTc2YzYwMTBlYjkyMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCkBAIC0zMyw3ICszMyw2IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNv
bnRyb2xzOwogCiBjbGFzcyBSZW5kZXJNZWRpYSA6IHB1YmxpYyBSZW5kZXJJbWFnZSB7CiBwdWJs
aWM6CkBAIC00NSwyOSArNDQsMjEgQEAgcHVibGljOgogICAgIFJlbmRlck9iamVjdENoaWxkTGlz
dCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogCiAgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KCkgY29uc3Q7Ci0gICAgTWVkaWFDb250cm9scyogY29udHJvbHMo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcml2YXRlOgorICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCBS
ZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVu
KCk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENo
aWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKTsKLSAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyTWVkaWEiOyB9CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWEo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCi0KLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotCiAgICAgdmly
dHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIE93blB0cjxNZWRpYUNvbnRyb2xzPiBtX2NvbnRyb2xzOwog
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogfTsKIApAQCAtNzcsMTEgKzY4
LDYgQEAgaW5saW5lIFJlbmRlck1lZGlhKiB0b1JlbmRlck1lZGlhKFJlbmRlck9iamVjdCogb2Jq
ZWN0KQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZWRpYSo+KG9iamVjdCk7CiB9CiAK
LWlubGluZSBNZWRpYUNvbnRyb2xzKiBSZW5kZXJNZWRpYTo6Y29udHJvbHMoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2NvbnRyb2xzLmdldCgpOwotfQotCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55
b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvUmVuZGVyTWVkaWEoY29uc3Qg
UmVuZGVyTWVkaWEqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAK
aW5kZXggYjBiNzczNTg1NmU3MTkxMzkxNDQ0OWUxY2Y4YzI3NTE0NjU3ODc3Ny4uNmVmNjEzNDIx
MmRjNjcwNzFjNmRhMWYyZjdlNjZjNjNhNzM4ZmNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCkBAIC00ODEsMTQgKzQ4MSw2IEBAIGJvb2wgUmVuZGVyVGhlbWU6
OnBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywKIH0KIAogI2lmIEVOQUJMRShWSURFTykKLWJvb2wgUmVuZGVyVGhlbWU6OmhpdFRlc3RN
ZWRpYUNvbnRyb2xQYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgSW50UG9pbnQmIGFic1BvaW50
KQotewotICAgIGlmICghby0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gby0+YWJzb2x1dGVUb0xvY2FsKGFic1BvaW50LCBmYWxz
ZSwgdHJ1ZSk7ICAvLyByZXNwZWN0IHRyYW5zZm9ybXMKLSAgICByZXR1cm4gdG9SZW5kZXJCb3go
byktPmJvcmRlckJveFJlY3QoKS5jb250YWlucyhyb3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCkp
OwotfQogCiBib29sIFJlbmRlclRoZW1lOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENv
bnRyb2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5oCmluZGV4IGJjZThkNzg1NWFlODljMTY1NzMwN2U1NTdhOTNlYTdiMjBkOWQ4MDgu
LjIwYzM2MmVmOGQwNTMwYzc4YWU3YjNhZjNjMGM5YjA5YWJkODM3ZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCkBAIC0xNzgsNyArMTc4LDYgQEAgcHVibGljOgogCiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIC8vIE1lZGlhIGNvbnRyb2xzCi0gICAgdmlydHVhbCBib29s
IGhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IEludFBvaW50JiBh
YnNQb2ludCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQo
Q29udHJvbFBhcnQsIEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXkoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgZG91YmxlIG1l
ZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpIHsgcmV0dXJuIDAuMTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83849</attachid>
            <date>2011-02-25 11:25:22 -0800</date>
            <delta_ts>2011-03-03 14:21:07 -0800</delta_ts>
            <desc>WIP: Progress checkpoint.</desc>
            <filename>bug-53020-20110225112521.patch</filename>
            <type>text/plain</type>
            <size>100478</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk2OTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjYTIwZDkyOGJmOGM5NDhj
OWJmMWExNDRiMWM4OGU5YmE2MDM4ZDEyLi41ZmVkOTg0MzI1NmEzYmM1MjIxYWFmZjFhYTlkZGVi
ZmE5MGI1MjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI0IEBACisyMDExLTAyLTI1ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW01ldGFdIENvbnZlcnQgSFRNTE1lZGlhRWxl
bWVudCB0byB1c2UgdGhlIG5ldyBzaGFkb3cgRE9NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzAyMAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9P
UFMhKQorCisgICAgICAgICogY3NzL21lZGlhQ29udHJvbHMuY3NzOgorICAgICAgICAoOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzKToKKyAgICAgICAgKGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1j
dXJyZW50LXRpbWUtZGlzcGxheSk6CisgICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uKToKKyAgICAgICAgKiBjc3MvbWVkaWFDb250
cm9sc1F1aWNrVGltZS5jc3M6CisgICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy1jdXJyZW50LXRpbWUtZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtY3Vy
cmVudC10aW1lLWRpc3BsYXkpOgorICAgICAgICAoYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdGltZS1yZW1haW5pbmctZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dGltZS1yZW1haW5pbmctZGlzcGxheSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3JrU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6aGFzTWVkaWFDb250cm9scyk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYUNvbnRyb2xzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhQ29udHJvbHMpOgor
ICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvc2hhZG93
L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6TWVk
aWFDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6c2hvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xzOjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6
Om1ha2VUcmFuc3BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjptYWtl
T3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sczo6cGxheWluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpw
YXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpyZXBvcnRlZEVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OmNoYW5nZWROZXR3b3JrU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6bG9hZGVkTWV0YWRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpzaGFkb3dQc2V1ZG9JZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjphdHRhY2gpOgorICAgICAgICAqIGh0bWwv
c2hhZG93L01lZGlhQ29udHJvbHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvTWVkaWFDb250cm9s
cyk6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp3ZWJr
aXRUcmFuc2l0aW9uU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Om9wYWNpdHlTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sRWxlbWVudDo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbEVsZW1lbnQ6Om1ha2VPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sRWxlbWVudDo6bWFrZVRyYW5zcGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbEVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQ
YW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFBhbmVsRWxlbWVudDo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6OnBsYXlpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
UGFuZWxFbGVtZW50OjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5l
bEVsZW1lbnQ6OnJlcG9ydGVkRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
UGFuZWxFbGVtZW50OjpjaGFuZ2VkTmV0d29ya1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6bG9hZGVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpjaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmls
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2hvd1Zv
bHVtZVNsaWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6
OmhpZGVWb2x1bWVTbGlkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxp
bmVDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXJFbGVtZW50OjpzZXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGltZURpc3BsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI6OlJl
bmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6
OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNo
b3cpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpoaWRlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNv
bnRyb2xNdXRlQnV0dG9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6TWVkaWFDb250
cm9sU2Vla0J1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUmV0
dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVC
dXR0b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpzZXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVl
bkJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFDb250cm9sVGlt
ZURpc3BsYXk6OlJlbmRlck1lZGlhQ29udHJvbFRpbWVEaXNwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1lZGlhQ29udHJvbFRpbWVEaXNwbGF5OjpsYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lRGlz
cGxheUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZURpc3BsYXlF
bGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29udHJv
bEVsZW1lbnRzLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpSZW5kZXJNZWRpYSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZWRpYTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpw
YWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWVkaWFDb250cm9sczo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaG91bGRS
ZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjp2
b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKToKKwogMjAxMS0w
Mi0yNSAgTmVkIEhvbGJyb29rICA8bmhvbGJyb29rQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL21l
ZGlhQ29udHJvbHMuY3NzIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHMuY3NzCmlu
ZGV4IDg4MTQ0YjQ2ZGZkMzNkZjAzNTU5OTk4YTMyYTUzYjNkZTk3YjQ3ZTkuLjBhYjE3OWVlYWFj
ZGUzMzZmZjA0NmVlNDgxMzlhYjVmNzUwZWFkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9tZWRpYUNvbnRyb2xzLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250
cm9scy5jc3MKQEAgLTI5LDYgKzI5LDEzIEBAIGF1ZGlvIHsKICAgICBoZWlnaHQ6IDE2cHg7CiB9
CiAKKzo6LXdlYmtpdC1tZWRpYS1jb250cm9scyB7CisgICAgd2lkdGg6IGluaGVyaXQ7CisgICAg
aGVpZ2h0OiBpbmhlcml0OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBkaXNwbGF5OiBi
bG9jazsKK30KKwogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwsIHZpZGVvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsIHsKICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsK
ICAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7CkBAIC04MCw2ICs4NywxMCBAQCBh
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS1jb250YWluZXIsIHZpZGVvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1j
dXJyZW50LXRpbWUtZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVu
dC10aW1lLWRpc3BsYXkgewogICAgIGRpc3BsYXk6IG5vbmU7CisgICAgb3ZlcmZsb3c6IGhpZGRl
bjsKKyAgICAtd2Via2l0LWJveC1mbGV4OiAwLjE7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsK
KyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXksIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXRpbWUtcmVtYWluaW5nLWRpc3BsYXkgewpAQCAtOTksMTEgKzExMCw5IEBAIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy10aW1lbGluZSB7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1z
bGlkZXItY29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xp
ZGVyLWNvbnRhaW5lciB7Ci0gICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdm9sdW1lLXNsaWRlciB7Ci0gICAgZGlzcGxheTogbm9uZTsKICAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBpbml0aWFsOwogICAgIGJvcmRlcjogaW5pdGlhbDsKICAgICBjb2xvcjogaW5oZXJpdDsK
QEAgLTE2Niw3ICsxNzUsNiBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUt
Y2xvc2VkLWNhcHRpb25zLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaQogCiBhdWRpbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uIHsKICAgICAtd2Vi
a2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1zbGlkZXItbXV0ZS1idXR0b247Ci0gICAgZGlz
cGxheTogbm9uZTsKICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsOwogICAgIGJvcmRlcjog
aW5pdGlhbDsKICAgICBjb2xvcjogaW5oZXJpdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9tZWRpYUNvbnRyb2xzUXVpY2tUaW1lLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRp
YUNvbnRyb2xzUXVpY2tUaW1lLmNzcwppbmRleCAwNmYzMWFlNWE5NGY4MDE3OTk3YmFiMGZlZjUy
YWJlY2I0YjliZTIwLi42M2U4NDU2MDdjZjVlNGE4NWNmZmI2NTdjNDRkYzVjOWI2YjM1MDFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc1F1aWNrVGltZS5jc3MK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdWlja1RpbWUuY3NzCkBAIC02
OSwxNCArNjksMTQgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUtY29u
dGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy0KIGF1ZGlvOjotd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1j
b250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSB7CiAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDog
bm9uZTsKICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0LWJveC1mbGV4OiAw
OwotICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKLSAgICAtd2Via2l0LWJveC1hbGlnbjog
Y2VudGVyOworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgLXdlYmtpdC1ib3gtZmxleDogMC4x
OworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworCiAg
ICAgY3Vyc29yOiBkZWZhdWx0OwogICAgIGZvbnQ6IC13ZWJraXQtc21hbGwtY29udHJvbDsKICAg
ICBmb250LXNpemU6IDlweDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHdpZHRoOiA0NXB4
OwogICAgIGNvbG9yOiB3aGl0ZTsKICAgICB0ZXh0LXNoYWRvdzogYmxhY2sgMHB4IDFweCAxcHg7
CiAKQEAgLTkxLDE0ICs5MSwxNCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJy
ZW50LXRpbWUtZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbAogYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSwgdmlkZW86Oi13ZWJr
aXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSB7CiAgICAgLXdlYmtpdC11
c2VyLXNlbGVjdDogbm9uZTsKICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICAtd2Via2l0
LWJveC1mbGV4OiAwOwotICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKLSAgICAtd2Via2l0
LWJveC1hbGlnbjogY2VudGVyOworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgLXdlYmtpdC1i
b3gtZmxleDogMC4xOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworCiAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgIGZvbnQ6IC13ZWJraXQtc21hbGwt
Y29udHJvbDsKICAgICBmb250LXNpemU6IDlweDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAg
IHdpZHRoOiA0NXB4OwogICAgIGNvbG9yOiB3aGl0ZTsKICAgICB0ZXh0LXNoYWRvdzogYmxhY2sg
MHB4IDFweCAxcHg7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmlu
ZGV4IGJlZDk2ODU2Mjk4NzgzZTVkYjgzOWY4MmNiN2QxZmVhYzFjMGFhMTUuLjc5MmM5ZjkxODVm
ZWMyZTFhYjM5MDM2NGRiMTBhMDc4MTEzYjk4ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCkBAIC0xNjEs
NiArMTYyLDcgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW0KICAgICAsIG1fc2VuZFByb2dyZXNz
RXZlbnRzKHRydWUpCiAgICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKICAgICAsIG1fY2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKGZhbHNlKQorICAgICwgbV9tb3VzZU92ZXIoZmFsc2UpCiAjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAgICAgLCBtX25lZWRXaWRnZXRVcGRhdGUoZmFs
c2UpCiAjZW5kaWYKQEAgLTIxNiwxMiArMjE4LDE0IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKICAg
ICB9CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gY29udHJvbHNBdHRyKSB7CiAjaWYgIUVOQUJM
RShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgICAgICBpZiAoIWlzVmlkZW8oKSAmJiBhdHRh
Y2hlZCgpICYmIChjb250cm9scygpICE9IChyZW5kZXJlcigpICE9IDApKSkgewotICAgICAgICAg
ICAgZGV0YWNoKCk7Ci0gICAgICAgICAgICBhdHRhY2goKTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50
KCk7CisgICAgICAgIGlmIChjb250cm9scygpKSB7CisgICAgICAgICAgICBpZiAoIWhhc01lZGlh
Q29udHJvbHMoKSkgeworICAgICAgICAgICAgICAgIGVuc3VyZU1lZGlhQ29udHJvbHMoKTsKKyAg
ICAgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlc2V0KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnNob3coKTsKKyAgICAgICAgfSBlbHNlIGlmICho
YXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmhpZGUoKTsK
ICNlbHNlCiAgICAgICAgIGlmIChtX3BsYXllcikKICAgICAgICAgICAgIG1fcGxheWVyLT5zZXRD
b250cm9scyhjb250cm9scygpKTsKQEAgLTMxNCw2ICszMTgsNyBAQCBib29sIEhUTUxNZWRpYUVs
ZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQogCiAgICAgcmV0dXJu
IHRydWU7CiAjZWxzZQorICAgIC8vIEZJWE1FOiBXVEYgSVMgVEhJUz8hCiAgICAgcmV0dXJuIGNv
bnRyb2xzKCkgPyBIVE1MRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSkgOiBmYWxzZTsK
ICNlbmRpZgogfQpAQCAtMzY1LDEwICszNzAsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmF0
dGFjaCgpCiAKICAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CiAKLSAgICBpZiAocmVuZGVyZXIo
KSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKICNpZiBFTkFCTEUo
UExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICBlbHNlIGlmIChtX3Byb3h5V2lkZ2V0KSB7Cisg
ICAgaWYgKG1fcHJveHlXaWRnZXQpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKICAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lID8gZnJhbWUt
PmxvYWRlcigpIDogMDsKICAgICAgICAgaWYgKGxvYWRlcikKQEAgLTg4Myw2ICs4ODYsOCBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIHN0YXRlKQogICAgICAgICAgICAgbm9uZVN1cHBvcnRlZCgpOwogCiAgICAgICAgIHVw
ZGF0ZURpc3BsYXlTdGF0ZSgpOworICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAg
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXBvcnRlZEVycm9yKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTkxMSw2ICs5MTYsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNl
dE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQogICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTsKICAgICAgICAgbV9jb21wbGV0ZWx5TG9hZGVk
ID0gdHJ1ZTsKICAgICB9CisKKyAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICBt
ZWRpYUNvbnRyb2xzKCktPmNoYW5nZWROZXR3b3JrU3RhdGUoKTsKIH0KIAogdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllclJlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKikKQEAg
LTk2MCw2ICs5NjgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZF
X01FVEFEQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9NRVRBREFUQSkgewogICAgICAgICBzY2hlZHVs
ZUV2ZW50KGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKICAgICAgICAgc2NoZWR1
bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVkbWV0YWRhdGFFdmVudCk7CisgICAgICAgIGlmICho
YXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmxvYWRlZE1l
dGFkYXRhKCk7CiAgICAgICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyZXIo
KS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICAgICAgbV9wbGF5ZXItPnNlZWsoMCk7CkBAIC0x
NTg4LDYgKzE1OTgsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwbGF5YmFja1Byb2dyZXNz
VGltZXJGaXJlZChUaW1lcjxIVE1MTWVkaWFFbGVtZW50PiopCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KHRydWUpOworICAgIGlmIChoYXNNZWRpYUNvbnRy
b2xzKCkpIHsKKyAgICAgICAgaWYgKCFtX21vdXNlT3ZlciAmJiBjb250cm9scygpKQorICAgICAg
ICAgICAgbWVkaWFDb250cm9scygpLT5tYWtlVHJhbnNwYXJlbnQoKTsKKyAgICAgICAgbWVkaWFD
b250cm9scygpLT5wbGF5aW5nKCk7CisgICAgfQogICAgIAogICAgIC8vIEZJWE1FOiBkZWFsIHdp
dGggY3VlIHJhbmdlcyBoZXJlCiB9CkBAIC0yMTA1LDYgKzIxMjAsOCBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgICAgICBtX3BsYXllci0+cGF1c2Uo
KTsKICAgICAgICAgcmVmcmVzaENhY2hlZFRpbWUoKTsKICAgICAgICAgbV9wbGF5YmFja1Byb2dy
ZXNzVGltZXIuc3RvcCgpOworICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAg
ICAgICAgbWVkaWFDb250cm9scygpLT5wYXVzZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtMjEyOCw2ICsyMTQ1LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQ
bGF5U3RhdGUoKQogICAgICAgICAgICAgbV9wbGF5ZXItPnBsYXkoKTsKICAgICAgICAgfQogCisg
ICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xz
KCktPnBsYXkoKTsKICAgICAgICAgc3RhcnRQbGF5YmFja1Byb2dyZXNzVGltZXIoKTsKICAgICAg
ICAgbV9wbGF5aW5nID0gdHJ1ZTsKIApAQCAtMjE0NCw2ICsyMTYzLDkgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogCiAgICAgICAgIGlmIChjb3VsZFBsYXlJZkVu
b3VnaERhdGEoKSkKICAgICAgICAgICAgIG1fcGxheWVyLT5wcmVwYXJlVG9QbGF5KCk7CisKKyAg
ICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMo
KS0+cGF1c2UoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHJlbmRlcmVyKCkpCkBAIC0yMjkyLDEw
ICsyMzE0LDE4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiAgICAgaWYgKHdpZGdldCkKICAgICAgICAgd2lkZ2V0LT5oYW5kbGVFdmVu
dChldmVudCk7CiAjZWxzZQotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzTWVk
aWEoKSkKLSAgICAgICAgdG9SZW5kZXJNZWRpYShyZW5kZXJlcigpKS0+Y29udHJvbHMoKS0+Zm9y
d2FyZEV2ZW50KGV2ZW50KTsKLSAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgIE1v
dXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwor
ICAgICAgICBpZiAobW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpICE9IHRoaXMpIHsKKyAgICAg
ICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkg
eworICAgICAgICAgICAgICAgIG1fbW91c2VPdmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBp
ZiAoaGFzTWVkaWFDb250cm9scygpICYmIGNvbnRyb2xzKCkgJiYgIWNhblBsYXkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5tYWtlT3BhcXVlKCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQp
CisgICAgICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICNlbmRpZgog
fQpAQCAtMjQ2OSw2ICsyNDk5LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUoYm9vbCBjbG9zZWRDYXB0aW9uVmlzaWJsZSkKIAogICAgIG1fY2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlID0gY2xvc2VkQ2FwdGlvblZpc2libGU7CiAgICAgbV9wbGF5ZXItPnNl
dENsb3NlZENhcHRpb25zVmlzaWJsZShjbG9zZWRDYXB0aW9uVmlzaWJsZSk7CisgICAgaWYgKGhh
c01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkQ2xvc2Vk
Q2FwdGlvbnNWaXNpYmlsaXR5KCk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRl
cmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CkBAIC0yNTMyLDcgKzI1NjQsMjMgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRTaG91bGREZWxheUxvYWRFdmVudChib29sIHNob3VsZERl
bGF5KQogICAgIGVsc2UKICAgICAgICAgZG9jdW1lbnQoKS0+ZGVjcmVtZW50TG9hZEV2ZW50RGVs
YXlDb3VudCgpOwogfQotICAgIAorCitib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlhQ29u
dHJvbHMoKQoreworICAgIHJldHVybiBzaGFkb3dSb290KCk7Cit9CisKK01lZGlhQ29udHJvbHMq
IEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29udHJvbHMoKQoreworICAgIHJldHVybiB0b01lZGlh
Q29udHJvbHMoc2hhZG93Um9vdCgpKTsKK30KKwordm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbnN1
cmVNZWRpYUNvbnRyb2xzKCkKK3sKKyAgICBpZiAoIWhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAg
ICAgc2V0U2hhZG93Um9vdChNZWRpYUNvbnRyb2xzOjpjcmVhdGUodGhpcykpOworfQorCiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBkNjlkNDZm
NWU1YTE3YTFkYjlmOGMxNjhiMTA4OGVlM2M5YWFkODk2Li40MWE5ZmNjNTIzMmM1YjUyYmZmMjIw
MDUyYjUwOGJjYTJjMzU4ODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aApAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50Owog
Y2xhc3MgSFRNTFNvdXJjZUVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xzOwogY2xhc3MgTWVk
aWFFcnJvcjsKIGNsYXNzIEtVUkw7CiBjbGFzcyBUaW1lUmFuZ2VzOwpAQCAtMTc2LDYgKzE3Nyw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNvdXJjZVdpbGxCZVJlbW92ZWQoSFRNTFNvdXJjZUVsZW1l
bnQqKTsKICAgICB2b2lkIHNvdXJjZVdhc0FkZGVkKEhUTUxTb3VyY2VFbGVtZW50Kik7CiAKKyAg
ICBNZWRpYUNvbnRyb2xzKiBtZWRpYUNvbnRyb2xzKCk7CisKIHByb3RlY3RlZDoKICAgICBIVE1M
TWVkaWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1
YWwgfkhUTUxNZWRpYUVsZW1lbnQoKTsKQEAgLTI5OCw2ICszMDEsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgaW52YWxpZGF0ZUNhY2hlZFRpbWUoKTsKICAgICB2b2lkIHJlZnJlc2hDYWNoZWRUaW1l
KCkgY29uc3Q7CiAKKyAgICBib29sIGhhc01lZGlhQ29udHJvbHMoKTsKKyAgICB2b2lkIGVuc3Vy
ZU1lZGlhQ29udHJvbHMoKTsKKwogICAgIC8vIFJlc3RyaWN0aW9ucyB0byBjaGFuZ2UgZGVmYXVs
dCBiZWhhdmlvcnMuIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBjb21waWxlIHRpbWUgY2hvaWNlIGF0
IHRoZSBtb21lbnQKICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBubyBhY2Nlc3NvciBmdW5jdGlv
bnMuCiAgICAgZW51bSBCZWhhdmlvclJlc3RyaWN0aW9ucyB7CkBAIC0zODUsNiArMzkxLDcgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW4gOiAxOwogICAgIGJvb2wgbV9jbG9z
ZWRDYXB0aW9uc1Zpc2libGUgOiAxOworICAgIGJvb2wgbV9tb3VzZU92ZXIgOiAxOwogCiAjaWYg
RU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAgICAgYm9vbCBtX25lZWRXaWRnZXRVcGRh
dGUgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApp
bmRleCA3MzFhOTM0MGE4MGEyM2QyMTYwYmRmNWM1NWU4ZjhjYWEzMmZjYTQ3Li45NjU1NjI4MmU1
Y2M0MjU1MmYyODcyY2I5N2FhNTgyNmMwZjI1MjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApAQCAtNDcsNTI1ICs0NywxMjMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgY29uc3Qg
ZG91YmxlIGNUaW1lVXBkYXRlUmVwZWF0RGVsYXkgPSAwLjI7Ci1zdGF0aWMgY29uc3QgZG91Ymxl
IGNPcGFjaXR5QW5pbWF0aW9uUmVwZWF0RGVsYXkgPSAwLjA1OwotCiBNZWRpYUNvbnRyb2xzOjpN
ZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IG1fbWVk
aWFFbGVtZW50KG1lZGlhRWxlbWVudCkKLSAgICAsIG1fdGltZVVwZGF0ZVRpbWVyKHRoaXMsICZN
ZWRpYUNvbnRyb2xzOjp0aW1lVXBkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fb3BhY2l0eUFuaW1h
dGlvblRpbWVyKHRoaXMsICZNZWRpYUNvbnRyb2xzOjpvcGFjaXR5QW5pbWF0aW9uVGltZXJGaXJl
ZCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwgbV9vcGFjaXR5
QW5pbWF0aW9uRHVyYXRpb24oMCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20oMCkKLSAg
ICAsIG1fb3BhY2l0eUFuaW1hdGlvblRvKDEuMGYpCi0gICAgLCBtX21vdXNlT3ZlcihmYWxzZSkK
LXsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVTdHlsZSgpCi17Ci0gICAgaWYgKCFt
X2NvbnRyb2xzU2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFuZWwp
Ci0gICAgICAgIG1fcGFuZWwtPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fbXV0ZUJ1dHRvbikK
LSAgICAgICAgbV9tdXRlQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3BsYXlCdXR0
b24pCi0gICAgICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9zZWVr
QmFja0J1dHRvbikKLSAgICAgICAgbV9zZWVrQmFja0J1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAg
ICBpZiAobV9zZWVrRm9yd2FyZEJ1dHRvbikKLSAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+
dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9yZXdpbmRCdXR0b24pCi0gICAgICAgIG1fcmV3aW5k
QnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3JldHVyblRvUmVhbHRpbWVCdXR0b24p
Ci0gICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBp
ZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbikKLSAgICAgICAgbV90b2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQot
ICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fdGltZWxp
bmVDb250YWluZXIpCi0gICAgICAgIG1fdGltZWxpbmVDb250YWluZXItPnVwZGF0ZVN0eWxlKCk7
Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZVN0eWxlKCk7
Ci0gICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbikKLSAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9u
LT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX2N1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAg
bV9jdXJyZW50VGltZURpc3BsYXktPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fdGltZVJlbWFp
bmluZ0Rpc3BsYXkpCi0gICAgICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnVwZGF0ZVN0eWxl
KCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKQotICAgICAgICBtX3ZvbHVtZVNs
aWRlckNvbnRhaW5lci0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXJNdXRl
QnV0dG9uKQotICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPnVwZGF0ZVN0eWxlKCk7
Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBkYXRl
U3R5bGUoKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpkZXN0cm95KCkKLXsKLSAgICBBU1NF
UlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOwotCi0gICAgaWYgKG1fY29udHJvbHNTaGFk
b3dSb290ICYmIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpKSB7Ci0KLSAgICAgICAg
Ly8gZGV0YWNoIHRoZSBwYW5lbCBiZWZvcmUgcmVtb3ZpbmcgdGhlIHNoYWRvdyByZW5kZXJlciB0
byBwcmV2ZW50IGEgY3Jhc2ggaW4gbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpIAotICAg
ICAgICAvLyAgd2hlbiBkaXNwbGF5OiBzdHlsZSBjaGFuZ2VzCi0gICAgICAgIG1fcGFuZWwtPmRl
dGFjaCgpOwotCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW1vdmVDaGls
ZChtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fY29udHJvbHNT
aGFkb3dSb290LT5kZXRhY2goKTsKLSAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSAwOwot
ICAgIH0KLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGUoKQotewotICAgIEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+Y29udHJv
bHMoKSB8fCAhbWVkaWEtPmluQWN0aXZlRG9jdW1lbnQoKSkgewotICAgICAgICBpZiAobV9jb250
cm9sc1NoYWRvd1Jvb3QpIHsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRh
Y2goKTsKLSAgICAgICAgICAgIG1fcGFuZWwgPSAwOwotICAgICAgICAgICAgbV9tdXRlQnV0dG9u
ID0gMDsKLSAgICAgICAgICAgIG1fcGxheUJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3N0YXR1
c0Rpc3BsYXkgPSAwOwotICAgICAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lciA9IDA7Ci0gICAg
ICAgICAgICBtX3RpbWVsaW5lID0gMDsKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24gPSAw
OwotICAgICAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3Jl
d2luZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSAw
OwotICAgICAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXkgPSAwOwotICAgICAgICAgICAgbV90
aW1lUmVtYWluaW5nRGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24g
PSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXIgPSAwOwotICAgICAgICAg
ICAgbV92b2x1bWVTbGlkZXIgPSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0
dG9uID0gMDsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gMDsKLSAgICAgICAg
ICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSAwOwotICAgICAgICB9Ci0gICAgICAg
IG1fb3BhY2l0eUFuaW1hdGlvblRvID0gMS4wZjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9u
VGltZXIuc3RvcCgpOwotICAgICAgICBtX3RpbWVVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290KSB7Ci0gICAg
ICAgIGNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpOwotICAgICAgICBjcmVhdGVQYW5lbCgpOwot
ICAgICAgICBpZiAobV9wYW5lbCkgewotICAgICAgICAgICAgY3JlYXRlUmV3aW5kQnV0dG9uKCk7
Ci0gICAgICAgICAgICBjcmVhdGVQbGF5QnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVSZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVTdGF0dXNEaXNwbGF5KCk7
Ci0gICAgICAgICAgICBjcmVhdGVUaW1lbGluZUNvbnRhaW5lcigpOwotICAgICAgICAgICAgaWYg
KG1fdGltZWxpbmVDb250YWluZXIpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVDdXJyZW50VGlt
ZURpc3BsYXkoKTsKLSAgICAgICAgICAgICAgICBjcmVhdGVUaW1lbGluZSgpOwotICAgICAgICAg
ICAgICAgIGNyZWF0ZVRpbWVSZW1haW5pbmdEaXNwbGF5KCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjcmVhdGVTZWVrQmFja0J1dHRvbigpOwotICAgICAgICAgICAgY3JlYXRlU2Vla0Zv
cndhcmRCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVGdWxsc2NyZWVuQnV0dG9uKCk7Ci0gICAgICAgICAg
ICBjcmVhdGVNdXRlQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVWb2x1bWVTbGlkZXJDb250
YWluZXIoKTsKLSAgICAgICAgICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikgewotICAg
ICAgICAgICAgICAgIGNyZWF0ZVZvbHVtZVNsaWRlcigpOwotICAgICAgICAgICAgICAgIGNyZWF0
ZVZvbHVtZVNsaWRlck11dGVCdXR0b24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1f
cGFuZWwtPmF0dGFjaCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1lZGlhLT5jYW5Q
bGF5KCkpIHsKLSAgICAgICAgaWYgKG1fdGltZVVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgICAgICBtX3RpbWVVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIGlmIChtZWRpYS0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgbV90aW1lbGlu
ZSAmJiBtX3RpbWVsaW5lLT5yZW5kZXJlcigpICYmIG1fdGltZWxpbmUtPnJlbmRlcmVyKCktPnN0
eWxlKCktPmRpc3BsYXkoKSAhPSBOT05FKSB7Ci0gICAgICAgIG1fdGltZVVwZGF0ZVRpbWVyLnN0
YXJ0UmVwZWF0aW5nKGNUaW1lVXBkYXRlUmVwZWF0RGVsYXkpOwotICAgIH0KLQotICAgIGlmICht
X3BhbmVsKSB7Ci0gICAgICAgIC8vIHVwZGF0ZSgpIG1pZ2h0IGFsdGVyIHRoZSBvcGFjaXR5IG9m
IHRoZSBlbGVtZW50LCBlc3BlY2lhbGx5IGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlCi0gICAgICAg
IC8vIG9mIGFuIGFuaW1hdGlvbi4gVGhpcyBpcyB0aGUgb25seSBlbGVtZW50IGNvbmNlcm5lZCBh
cyB3ZSBhbmltYXRlIG9ubHkgdGhpcyBlbGVtZW50LgotICAgICAgICBmbG9hdCBvcGFjaXR5QmVm
b3JlQ2hhbmdpbmdTdHlsZSA9IG1fcGFuZWwtPnJlbmRlcmVyKCkgPyBtX3BhbmVsLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5vcGFjaXR5KCkgOiAwOwotICAgICAgICBtX3BhbmVsLT51cGRhdGUoKTsK
LSAgICAgICAgY2hhbmdlT3BhY2l0eShtX3BhbmVsLmdldCgpLCBvcGFjaXR5QmVmb3JlQ2hhbmdp
bmdTdHlsZSk7Ci0gICAgfQotICAgIGlmIChtX211dGVCdXR0b24pCi0gICAgICAgIG1fbXV0ZUJ1
dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fcGxheUJ1dHRvbikKLSAgICAgICAgbV9wbGF5QnV0
dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV90aW1lbGluZUNvbnRhaW5lcikKLSAgICAgICAgbV90
aW1lbGluZUNvbnRhaW5lci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFp
bmVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlKCk7Ci0gICAgaWYg
KG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZSgpOwotICAgIGlmIChtX2N1
cnJlbnRUaW1lRGlzcGxheSkKLSAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXktPnVwZGF0ZSgp
OwotICAgIGlmIChtX3RpbWVSZW1haW5pbmdEaXNwbGF5KQotICAgICAgICBtX3RpbWVSZW1haW5p
bmdEaXNwbGF5LT51cGRhdGUoKTsKLSAgICBpZiAobV9zZWVrQmFja0J1dHRvbikKLSAgICAgICAg
bV9zZWVrQmFja0J1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fc2Vla0ZvcndhcmRCdXR0b24p
Ci0gICAgICAgIG1fc2Vla0ZvcndhcmRCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3Jld2lu
ZEJ1dHRvbikKLSAgICAgICAgbV9yZXdpbmRCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3Jl
dHVyblRvUmVhbHRpbWVCdXR0b24pCi0gICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+
dXBkYXRlKCk7Ci0gICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAg
IG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3N0YXR1
c0Rpc3BsYXkpCi0gICAgICAgIG1fc3RhdHVzRGlzcGxheS0+dXBkYXRlKCk7Ci0gICAgaWYgKG1f
ZnVsbHNjcmVlbkJ1dHRvbikKLSAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT51cGRhdGUoKTsK
LSAgICBpZiAobV92b2x1bWVTbGlkZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyLT51cGRhdGUo
KTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uKQotICAgICAgICBtX3ZvbHVtZVNs
aWRlck11dGVCdXR0b24tPnVwZGF0ZSgpOwotCi0gICAgdXBkYXRlVGltZURpc3BsYXkoKTsKLSAg
ICB1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNy
ZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRyb2xzU2hhZG93
Um9vdCk7Ci0gICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSBNZWRpYUNvbnRyb2xTaGFkb3dSb290
RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX21lZGlhRWxlbWVudC0+cmVu
ZGVyZXIoKS0+YWRkQ2hpbGQobV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpOwotfQot
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBhbmVsKCkKLXsKLSAgICBBU1NFUlQoIW1fcGFu
ZWwpOwotICAgIG1fcGFuZWwgPSBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmNyZWF0ZShtX21l
ZGlhRWxlbWVudCk7Ci0gICAgbV9wYW5lbC0+YXR0YWNoVG9QYXJlbnQobV9jb250cm9sc1NoYWRv
d1Jvb3QuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZU11dGVCdXR0b24o
KQotewotICAgIEFTU0VSVCghbV9tdXRlQnV0dG9uKTsKLSAgICBtX211dGVCdXR0b24gPSBNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBt
X211dGVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIE1l
ZGlhQ29udHJvbHM6OmNyZWF0ZVBsYXlCdXR0b24oKQotewotICAgIEFTU0VSVCghbV9wbGF5QnV0
dG9uKTsKLSAgICBtX3BsYXlCdXR0b24gPSBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6
Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3BsYXlCdXR0b24tPmF0dGFjaFRvUGFyZW50
KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVNlZWtCYWNr
QnV0dG9uKCkKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgbWVkaWFFbGVtZW50LT5kb2N1
bWVudCgpKQogewotICAgIEFTU0VSVCghbV9zZWVrQmFja0J1dHRvbik7Ci0gICAgbV9zZWVrQmFj
a0J1dHRvbiA9IE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVk
aWFFbGVtZW50KTsKLSAgICBtX3NlZWtCYWNrQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVs
LmdldCgpKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVTZWVrRm9yd2FyZEJ1dHRv
bigpCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbHM+IE1lZGlhQ29udHJvbHM6OmNyZWF0ZShIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKCFtX3NlZWtGb3J3YXJk
QnV0dG9uKTsKLSAgICBtX3NlZWtGb3J3YXJkQnV0dG9uID0gTWVkaWFDb250cm9sU2Vla0Zvcndh
cmRCdXR0b25FbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fc2Vla0Zvcndh
cmRCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbHM6OmNyZWF0ZVJld2luZEJ1dHRvbigpCi17Ci0gICAgQVNTRVJUKCFtX3Jld2luZEJ1
dHRvbik7Ci0gICAgbV9yZXdpbmRCdXR0b24gPSBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVt
ZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcmV3aW5kQnV0dG9uLT5hdHRhY2hU
b1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KKyAgICBSZWZQdHI8TWVkaWFDb250cm9scz4gZWxl
bWVudCA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xzKG1lZGlhRWxlbWVudCkpOwogCi12b2lk
IE1lZGlhQ29udHJvbHM6OmNyZWF0ZVJldHVyblRvUmVhbHRpbWVCdXR0b24oKQotewotICAgIEFT
U0VSVCghbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKTsKLSAgICBtX3JldHVyblRvUmVhbHRpbWVC
dXR0b24gPSBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPmF0dGFjaFRv
UGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKCkKLXsKLSAgICBBU1NFUlQoIW1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24pOwotICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSBNZWRp
YUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlh
RWxlbWVudCk7Ci0gICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+YXR0YWNoVG9QYXJl
bnQobV9wYW5lbC5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlU3RhdHVz
RGlzcGxheSgpCi17Ci0gICAgQVNTRVJUKCFtX3N0YXR1c0Rpc3BsYXkpOwotICAgIG1fc3RhdHVz
RGlzcGxheSA9IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobV9tZWRp
YUVsZW1lbnQpOwotICAgIG1fc3RhdHVzRGlzcGxheS0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5n
ZXQoKSk7Ci19CisgICAgLy8gRklYTUU6IFdIQVQgVE8gRE8gV0lUSCBlYz8/IT8hPyE/IQorICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVGltZWxpbmVD
b250YWluZXIoKQotewotICAgIEFTU0VSVCghbV90aW1lbGluZUNvbnRhaW5lcik7Ci0gICAgbV90
aW1lbGluZUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6
Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5hdHRhY2hU
b1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KKyAgICBSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxF
bGVtZW50PiBwYW5lbCA9IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxl
bWVudCwgZWMpOworICAgIGVsZW1lbnQtPm1fcGFuZWwgPSBwYW5lbC5nZXQoKTsKKyAgICBlbGVt
ZW50LT5hcHBlbmRDaGlsZChwYW5lbC5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiAwOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRpbWVsaW5l
KCkKLXsKLSAgICBBU1NFUlQoIW1fdGltZWxpbmUpOwotICAgIG1fdGltZWxpbmUgPSBNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV90aW1l
bGluZS0+c2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOwotICAgIG1fdGltZWxp
bmUtPmF0dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOworICAgIHJldHVy
biBlbGVtZW50LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVWb2x1
bWVTbGlkZXJDb250YWluZXIoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpzaG93KCkKIHsKLSAgICBB
U1NFUlQoIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKTsKLSAgICBtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSht
X21lZGlhRWxlbWVudCk7Ci0gICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmF0dGFjaFRvUGFy
ZW50KG1fcGFuZWwuZ2V0KCkpOworICAgIC8vIEZJWE1FOiBUSElTIFBMVU1CSU5HLVRIUk9VR0gg
SVMgU0FELgorICAgIG1fcGFuZWwtPnNob3coKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
cmVhdGVWb2x1bWVTbGlkZXIoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpoaWRlKCkKIHsKLSAgICBB
U1NFUlQoIW1fdm9sdW1lU2xpZGVyKTsKLSAgICBtX3ZvbHVtZVNsaWRlciA9IE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV92b2x1
bWVTbGlkZXItPnNldEF0dHJpYnV0ZShwcmVjaXNpb25BdHRyLCAiZmxvYXQiKTsKLSAgICBtX3Zv
bHVtZVNsaWRlci0+c2V0QXR0cmlidXRlKG1heEF0dHIsICIxIik7Ci0gICAgbV92b2x1bWVTbGlk
ZXItPnNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIFN0cmluZzo6bnVtYmVyKG1fbWVkaWFFbGVtZW50
LT52b2x1bWUoKSkpOwotICAgIG1fdm9sdW1lU2xpZGVyLT5hdHRhY2hUb1BhcmVudChtX3ZvbHVt
ZVNsaWRlckNvbnRhaW5lci5nZXQoKSk7CisgICAgLy8gRklYTUU6IFRISVMgUExVTUJJTkctVEhS
T1VHSCBJUyBTQUQuCisgICAgbV9wYW5lbC0+aGlkZSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJv
bHM6OmNyZWF0ZVZvbHVtZVNsaWRlck11dGVCdXR0b24oKQordm9pZCBNZWRpYUNvbnRyb2xzOjpt
YWtlVHJhbnNwYXJlbnQoKQogewotICAgIEFTU0VSVCghbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9u
KTsKLSAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3ZvbHVt
ZVNsaWRlck11dGVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
LmdldCgpKTsKKyAgICBtX3BhbmVsLT5tYWtlVHJhbnNwYXJlbnQoKTsKIH0KIAotdm9pZCBNZWRp
YUNvbnRyb2xzOjpjcmVhdGVDdXJyZW50VGltZURpc3BsYXkoKQordm9pZCBNZWRpYUNvbnRyb2xz
OjptYWtlT3BhcXVlKCkKIHsKLSAgICBBU1NFUlQoIW1fY3VycmVudFRpbWVEaXNwbGF5KTsKLSAg
ICBtX2N1cnJlbnRUaW1lRGlzcGxheSA9IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVs
ZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXkt
PmF0dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOworICAgIG1fcGFuZWwt
Pm1ha2VPcGFxdWUoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVUaW1lUmVtYWlu
aW5nRGlzcGxheSgpCit2b2lkIE1lZGlhQ29udHJvbHM6OnJlc2V0KCkKIHsKLSAgICBBU1NFUlQo
IW1fdGltZVJlbWFpbmluZ0Rpc3BsYXkpOwotICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXkgPSBN
ZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxl
bWVudCk7Ci0gICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+YXR0YWNoVG9QYXJlbnQobV90aW1l
bGluZUNvbnRhaW5lci5nZXQoKSk7CisgICAgLy8gRklYTUU6IFRISVMgUExVTUJJTkctVEhST1VH
SCBJUyBTQUQuCisgICAgbV9wYW5lbC0+cmVzZXQoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xz
OjpjcmVhdGVGdWxsc2NyZWVuQnV0dG9uKCkKK3ZvaWQgTWVkaWFDb250cm9sczo6cGxheSgpCiB7
Ci0gICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5CdXR0b24pOwotICAgIG1fZnVsbHNjcmVlbkJ1dHRv
biA9IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpjcmVhdGUobV9tZWRpYUVs
ZW1lbnQpOwotICAgIG1fZnVsbHNjcmVlbkJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5n
ZXQoKSk7CisgICAgLy8gRklYTUU6IFRISVMgUExVTUJJTkctVEhST1VHSCBJUyBTQUQuCisgICAg
bV9wYW5lbC0+cGxheSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OnRpbWVVcGRhdGVUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbHM+KikKK3ZvaWQgTWVkaWFDb250cm9sczo6cGxheWlu
ZygpCiB7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZShm
YWxzZSk7Ci0gICAgdXBkYXRlVGltZURpc3BsYXkoKTsKKyAgICAvLyBGSVhNRTogVEhJUyBQTFVN
QklORy1USFJPVUdIIElTIFNBRC4KKyAgICBtX3BhbmVsLT5wbGF5aW5nKCk7CiB9CiAKLXZvaWQg
TWVkaWFDb250cm9sczo6dXBkYXRlVGltZURpc3BsYXkoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpw
YXVzZSgpCiB7Ci0gICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAg
IGlmICghbV9jdXJyZW50VGltZURpc3BsYXkgfHwgIW1fY3VycmVudFRpbWVEaXNwbGF5LT5yZW5k
ZXJlcigpIHx8IG1fY3VycmVudFRpbWVEaXNwbGF5LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5kaXNw
bGF5KCkgPT0gTk9ORSB8fCBtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IG5vdyA9
IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpOwotICAgIGZsb2F0IGR1cmF0aW9uID0gbV9t
ZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7Ci0KLSAgICAvLyBBbGxvdyB0aGUgdGhlbWUgdG8gZm9y
bWF0IHRoZSB0aW1lCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBtX2N1cnJlbnRUaW1lRGlz
cGxheS0+c2V0SW5uZXJUZXh0KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT50aGVtZSgpLT5m
b3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUobm93LCBkdXJhdGlvbiksIGVjKTsKLSAgICBt
X2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3VycmVudFZhbHVlKG5vdyk7Ci0gICAgbV90aW1lUmVt
YWluaW5nRGlzcGxheS0+c2V0SW5uZXJUZXh0KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT50
aGVtZSgpLT5mb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShub3csIGR1cmF0aW9uKSwg
ZWMpOwotICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnNldEN1cnJlbnRWYWx1ZShub3cgLSBk
dXJhdGlvbik7CisgICAgLy8gRklYTUU6IFRISVMgUExVTUJJTkctVEhST1VHSCBJUyBTQUQuCisg
ICAgbV9wYW5lbC0+cGF1c2UoKTsKIH0KIAotUmVuZGVyQm94KiBNZWRpYUNvbnRyb2xzOjpyZW5k
ZXJCb3goKQordm9pZCBNZWRpYUNvbnRyb2xzOjpyZXBvcnRlZEVycm9yKCkKIHsKLSAgICByZXR1
cm4gbV9jb250cm9sc1NoYWRvd1Jvb3QgPyBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyQm94
KCkgOiAwOworICAgIG1fcGFuZWwtPnJlcG9ydGVkRXJyb3IoKTsKIH0KIAotdm9pZCBNZWRpYUNv
bnRyb2xzOjp1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpCit2b2lkIE1lZGlhQ29udHJvbHM6OmNo
YW5nZWROZXR3b3JrU3RhdGUoKQogewotICAgIGlmICghbV9wYW5lbCB8fCAhbV9wYW5lbC0+cmVu
ZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3QgZmFkZSBmb3IgYXVkaW8g
Y29udHJvbHMuCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWEgPSBtX21lZGlhRWxlbWVudDsK
LSAgICBpZiAoIW1lZGlhLT5oYXNWaWRlbygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQobWVkaWEtPnJlbmRlcmVyKCkpOwotCi0gICAgLy8gRG9uJ3QgZmFkZSBpZiB0aGUgbWVkaWEg
ZWxlbWVudCBpcyBub3QgdmlzaWJsZQotICAgIGlmIChtZWRpYS0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBi
b29sIHNob3VsZEhpZGVDb250cm9sbGVyID0gIW1fbW91c2VPdmVyICYmICFtZWRpYS0+Y2FuUGxh
eSgpOwotCi0gICAgLy8gRG8gZmFkaW5nIG1hbnVhbGx5LCBjc3MgYW5pbWF0aW9ucyBkb24ndCB3
b3JrIHdpdGggc2hhZG93IHRyZWVzCi0KLSAgICBmbG9hdCBhbmltYXRlRnJvbSA9IG1fcGFuZWwt
PnJlbmRlcmVyKCktPnN0eWxlKCktPm9wYWNpdHkoKTsKLSAgICBmbG9hdCBhbmltYXRlVG8gPSBz
aG91bGRIaWRlQ29udHJvbGxlciA/IDAuMGYgOiAxLjBmOwotCi0gICAgaWYgKGFuaW1hdGVGcm9t
ID09IGFuaW1hdGVUbykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb3BhY2l0eUFuaW1h
dGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgaWYgKG1fb3BhY2l0eUFuaW1hdGlvblRv
ID09IGFuaW1hdGVUbykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9vcGFjaXR5QW5p
bWF0aW9uVGltZXIuc3RvcCgpOwotICAgIH0KLQotICAgIGlmIChhbmltYXRlRnJvbSA8IGFuaW1h
dGVUbykKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24gPSBtX3BhbmVsLT5yZW5k
ZXJlcigpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZUluRHVyYXRpb24oKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uID0gbV9wYW5lbC0+cmVuZGVyZXIo
KS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpOwotCi0gICAgbV9vcGFj
aXR5QW5pbWF0aW9uRnJvbSA9IGFuaW1hdGVGcm9tOwotICAgIG1fb3BhY2l0eUFuaW1hdGlvblRv
ID0gYW5pbWF0ZVRvOwotCi0gICAgbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVu
dFRpbWUoKTsKLSAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjT3Bh
Y2l0eUFuaW1hdGlvblJlcGVhdERlbGF5KTsKKyAgICAvLyBGSVhNRTogVEhJUyBQTFVNQklORy1U
SFJPVUdIIElTIFNBRC4KKyAgICBtX3BhbmVsLT5jaGFuZ2VkTmV0d29ya1N0YXRlKCk7CiB9CiAK
LXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlT3BhY2l0eShIVE1MRWxlbWVudCogZSwgZmxvYXQg
b3BhY2l0eSkKK3ZvaWQgTWVkaWFDb250cm9sczo6bG9hZGVkTWV0YWRhdGEoKQogewotICAgIGlm
ICghZSB8fCAhZS0+cmVuZGVyZXIoKSB8fCAhZS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcyA9IFJlbmRlclN0eWxlOjpjbG9u
ZShlLT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKLSAgICBzLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwot
ICAgIC8vIHotaW5kZXggY2FuJ3QgYmUgYXV0byBpZiBvcGFjaXR5IGlzIHVzZWQKLSAgICBzLT5z
ZXRaSW5kZXgoMCk7Ci0gICAgZS0+cmVuZGVyZXIoKS0+c2V0U3R5bGUocy5yZWxlYXNlKCkpOwor
ICAgIC8vIEZJWE1FOiBUSElTIFBMVU1CSU5HLVRIUk9VR0ggSVMgU0FELgorICAgIG1fcGFuZWwt
PmxvYWRlZE1ldGFkYXRhKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6b3BhY2l0eUFuaW1h
dGlvblRpbWVyRmlyZWQoVGltZXI8TWVkaWFDb250cm9scz4qKQordm9pZCBNZWRpYUNvbnRyb2xz
OjpjaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCkKIHsKLSAgICBkb3VibGUgdGltZSA9
IGN1cnJlbnRUaW1lKCkgLSBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgaWYgKHRp
bWUgPj0gbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24pIHsKLSAgICAgICAgdGltZSA9IG1fb3Bh
Y2l0eUFuaW1hdGlvbkR1cmF0aW9uOwotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5z
dG9wKCk7Ci0gICAgfQotICAgIGZsb2F0IG9wYWNpdHkgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KG1fb3BhY2l0eUFuaW1hdGlvbkZyb20gKyAobV9vcGFjaXR5QW5pbWF0aW9uVG8gLSBtX29wYWNp
dHlBbmltYXRpb25Gcm9tKSAqIHRpbWUgLyBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbik7Ci0g
ICAgY2hhbmdlT3BhY2l0eShtX3BhbmVsLmdldCgpLCBvcGFjaXR5KTsKKyAgICBtX3BhbmVsLT5j
aGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9s
czo6dXBkYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKGJvb2wgdmlzaWJsZSkKK2NvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sczo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewotICAgIGlm
ICghbV9tZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkgfHwgIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
IHx8ICFtX3ZvbHVtZVNsaWRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHZpc2libGUg
JiYgIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5pc1Zpc2libGUoKSkgewotICAgICAgICBpZiAo
IW1fbXV0ZUJ1dHRvbiB8fCAhbV9tdXRlQnV0dG9uLT5yZW5kZXJlcigpIHx8ICFtX211dGVCdXR0
b24tPnJlbmRlckJveCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gcyA9IG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zdHlsZUZvckVsZW1lbnQo
KTsKLSAgICAgICAgaW50IGhlaWdodCA9IHMtPmhlaWdodCgpLmlzUGVyY2VudCgpID8gMCA6IHMt
PmhlaWdodCgpLnZhbHVlKCk7Ci0gICAgICAgIGludCB3aWR0aCA9IHMtPndpZHRoKCkuaXNQZXJj
ZW50KCkgPyAwIDogcy0+d2lkdGgoKS52YWx1ZSgpOwotICAgICAgICBJbnRQb2ludCBvZmZzZXQg
PSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT52b2x1bWVTbGlk
ZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihtX211dGVCdXR0b24tPnJlbmRlcmVyKCktPm5vZGUoKSwg
SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIGludCB4ID0gb2Zmc2V0LngoKSArIG1f
bXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCktPm9mZnNldExlZnQoKTsKLSAgICAgICAgaW50IHkgPSBv
ZmZzZXQueSgpICsgbV9tdXRlQnV0dG9uLT5yZW5kZXJCb3goKS0+b2Zmc2V0VG9wKCk7Ci0KLSAg
ICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNldFBvc2l0aW9uKHgsIHkpOwotICAgICAg
ICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgICAgbV92
b2x1bWVTbGlkZXJDb250YWluZXItPnVwZGF0ZSgpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+
dXBkYXRlKCk7Ci0gICAgfSBlbHNlIGlmICghdmlzaWJsZSAmJiBtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lci0+aXNWaXNpYmxlKCkpIHsKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNl
dFZpc2libGUoZmFsc2UpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRl
U3R5bGUoKTsKLSAgICB9CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlk
LCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMiKSk7CisgICAgcmV0dXJuIGlkOwogfQogCi12b2lk
IE1lZGlhQ29udHJvbHM6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCisvLyBGSVhNRTogUkVN
T1ZFIEJFRk9SRSBMQU5ESU5HISEhCit2b2lkIE1lZGlhQ29udHJvbHM6OmF0dGFjaCgpCiB7Ci0g
ICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAgIGlmIChldmVudC0+
aXNNb3VzZUV2ZW50KCkgJiYgbV9jb250cm9sc1NoYWRvd1Jvb3QpIHsKLSAgICAgICAgTW91c2VF
dmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAg
ICAgIEludFBvaW50IHBvaW50KG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSk7Ci0KLSAg
ICAgICAgYm9vbCBkZWZhdWx0SGFuZGxlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV92b2x1bWVT
bGlkZXJNdXRlQnV0dG9uICYmIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+aGl0VGVzdChwb2lu
dCkpIHsKLSAgICAgICAgICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0gICAgICAgICAgICBkZWZhdWx0SGFuZGxlZCA9IGV2ZW50LT5kZWZh
dWx0SGFuZGxlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaG93Vm9sdW1lU2xpZGVy
ID0gZmFsc2U7Ci0gICAgICAgIGlmICghZGVmYXVsdEhhbmRsZWQgJiYgbV9tdXRlQnV0dG9uICYm
IG1fbXV0ZUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpIHsKLSAgICAgICAgICAgIG1fbXV0ZUJ1dHRv
bi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKLSAgICAgICAgICAgICAgICBzaG93
Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3ZvbHVtZVNs
aWRlckNvbnRhaW5lciAmJiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+aGl0VGVzdChwb2ludCkp
Ci0gICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV92
b2x1bWVTbGlkZXIgJiYgbV92b2x1bWVTbGlkZXItPmhpdFRlc3QocG9pbnQpKSB7Ci0gICAgICAg
ICAgICBtX3ZvbHVtZVNsaWRlci0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAg
ICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0
ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihzaG93Vm9sdW1lU2xpZGVyKTsKLQotICAgICAgICBpZiAo
bV9wbGF5QnV0dG9uICYmIG1fcGxheUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAg
ICBtX3BsYXlCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlm
IChtX3NlZWtCYWNrQnV0dG9uICYmIG1fc2Vla0JhY2tCdXR0b24tPmhpdFRlc3QocG9pbnQpKQot
ICAgICAgICAgICAgbV9zZWVrQmFja0J1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
Ci0KLSAgICAgICAgaWYgKG1fc2Vla0ZvcndhcmRCdXR0b24gJiYgbV9zZWVrRm9yd2FyZEJ1dHRv
bi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT5kZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV9yZXdpbmRCdXR0b24gJiYg
bV9yZXdpbmRCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9yZXdpbmRCdXR0
b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3JldHVyblRv
UmVhbHRpbWVCdXR0b24gJiYgbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLT5oaXRUZXN0KHBvaW50
KSkKLSAgICAgICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7Ci0KLSAgICAgICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiAm
JiBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAg
ICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOwotCi0gICAgICAgIGlmIChtX3RpbWVsaW5lICYmIG1fdGltZWxpbmUtPmhpdFRlc3QocG9p
bnQpKQotICAgICAgICAgICAgbV90aW1lbGluZS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
Ci0KLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbiAmJiBtX2Z1bGxzY3JlZW5CdXR0b24t
PmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5kZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgICAgIG1fbW91c2VPdmVyID0gdHJ1
ZTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsK
LSAgICAgICAgICAgIC8vIFdoZW4gdGhlIHNjcm9sbGJhciB0aHVtYiBjYXB0dXJlcyBtb3VzZSBl
dmVudHMsIHdlIHNob3VsZCB0cmVhdCB0aGUgbW91c2UgYXMgc3RpbGwgYmVpbmcgb3ZlciBvdXIg
cmVuZGVyZXIgaWYgdGhlIG5ldyB0YXJnZXQgaXMgYSBkZXNjZW5kYW50Ci0gICAgICAgICAgICBO
b2RlKiBtb3VzZU92ZXJOb2RlID0gbW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpID8gbW91c2VF
dmVudC0+cmVsYXRlZFRhcmdldCgpLT50b05vZGUoKSA6IDA7Ci0gICAgICAgICAgICBSZW5kZXJP
YmplY3QqIG1vdXNlT3ZlclJlbmRlcmVyID0gbW91c2VPdmVyTm9kZSA/IG1vdXNlT3Zlck5vZGUt
PnJlbmRlcmVyKCkgOiAwOwotICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSBtb3VzZU92ZXJSZW5k
ZXJlciAmJiBtb3VzZU92ZXJSZW5kZXJlci0+aXNEZXNjZW5kYW50T2YobV9tZWRpYUVsZW1lbnQt
PnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBIVE1MRGl2RWxlbWVudDo6YXR0YWNoKCk7CiB9CiAKLS8vIFdl
IHdhbnQgdGhlIHRpbWVsaW5lIHNsaWRlciB0byBiZSBhdCBsZWFzdCAxMDAgcGl4ZWxzIHdpZGUu
Ci1zdGF0aWMgY29uc3QgaW50IG1pbldpZHRoVG9EaXNwbGF5VGltZURpc3BsYXlzID0gMTYgKyAx
NiArIDQ1ICsgMTAwICsgNDUgKyAxNiArIDE7Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRl
VGltZURpc3BsYXlWaXNpYmlsaXR5KCkKLXsKLSAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCkpOwotCi0gICAgaWYgKCFtX2N1cnJlbnRUaW1lRGlzcGxheSAmJiAhbV90aW1lUmVt
YWluaW5nRGlzcGxheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHdpZHRoID0gbV9tZWRp
YUVsZW1lbnQtPnJlbmRlckJveCgpLT53aWR0aCgpOwotICAgIGJvb2wgc2hvdWxkU2hvd1RpbWVE
aXNwbGF5cyA9IHdpZHRoID49IG1pbldpZHRoVG9EaXNwbGF5VGltZURpc3BsYXlzICogbV9tZWRp
YUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIG1f
Y3VycmVudFRpbWVEaXNwbGF5LT5zZXRWaXNpYmxlKHNob3VsZFNob3dUaW1lRGlzcGxheXMpOwot
ICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnNldFZpc2libGUoc2hvdWxkU2hvd1RpbWVEaXNw
bGF5cyk7Ci19CisvLyB2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZSgpCisvLyB7CisvLyAgICAv
LyBGSVhNRTogRklORCBBIFBMQUNFIEZPUiBUSElTIENPREUhISEhIQorLy8gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWEgPSBtX21lZGlhRWxlbWVudDsKKy8vICAgIGlmICghbWVkaWEtPmNvbnRy
b2xzKCkgfHwgIW1lZGlhLT5pbkFjdGl2ZURvY3VtZW50KCkpIHsKKy8vICAgICAgICAvLyBGSVhN
RTogVEhJUyBTSE9VTEQgQkUgTU9SRSBFTEVHQU5UISEhCisvLyAgICAgICAgLy8gRklYTUU6IEFM
U08gTk8gQ09ERSBUTyBTSE9XIENPTlRST0xTIEFHQUlOISEhCisvLyAgICAgICAgaWYgKHJlbmRl
cmVyKCkpIHsKKy8vICAgICAgICAgICAgcmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0RGlzcGxheShO
T05FKTsKKy8vICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworLy8gICAgICAgIH0K
Ky8vICAgICAgICBtX29wYWNpdHlBbmltYXRpb25UbyA9IDEuMGY7CisvLyAgICAgICAgbV9vcGFj
aXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOworLy8gICAgICAgIG1fdGltZVVwZGF0ZVRpbWVyLnN0
b3AoKTsKKy8vICAgICAgICByZXR1cm47CisvLyB9CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9scy5oCmluZGV4IDk4ZTAxN2Y5ZGJkMmQzOTY3MmNkY2FkZWZk
YTkzMWJmMjRlY2FiOTkuLjJhMWQzMGM4MmJmZGEwMjljZGUyNGMzODMxMjVlMDRjZGE5YzdlOWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2lmIEVOQUJMRShWSURFTykKIAorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTQx
LDcgKzQyLDYgQEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxl
bWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFD
b250cm9sU2Vla0J1dHRvbkVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxl
bWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBNZWRp
YUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJv
bFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDsKQEAgLTUyLDg4ICs1Miw0OCBAQCBj
bGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xT
dGF0dXNEaXNwbGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ7
Ci1jbGFzcyBNZWRpYUNvbnRyb2xFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sUGFuZWxFbGVt
ZW50OwogY2xhc3MgTWVkaWFQbGF5ZXI7CiAKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRl
ck1lZGlhOwogCi1jbGFzcyBNZWRpYUNvbnRyb2xzIHsKKy8vIEZJWE1FOiBSZW5hbWUgdG8gTWVk
aWFDb250cm9sUm9vdEVsZW1lbnQuCitjbGFzcyBNZWRpYUNvbnRyb2xzIDogcHVibGljIEhUTUxE
aXZFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xzPiBjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCopOworCisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9p
ZCBtYWtlVHJhbnNwYXJlbnQoKTsKKyAgICB2b2lkIG1ha2VPcGFxdWUoKTsKKworICAgIHZvaWQg
cmVzZXQoKTsKIAotICAgIHZvaWQgZGVzdHJveSgpOwotICAgIHZvaWQgdXBkYXRlKCk7Ci0gICAg
dm9pZCB1cGRhdGVTdHlsZSgpOwotICAgIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7Ci0gICAg
dm9pZCB1cGRhdGVUaW1lRGlzcGxheSgpOwotICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXlWaXNp
YmlsaXR5KCk7CisgICAgdm9pZCBwbGF5aW5nKCk7CisgICAgdm9pZCBwbGF5KCk7CisgICAgdm9p
ZCBwYXVzZSgpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHRvIGFsbG93IFJl
bmRlck1lZGlhOjpsYXlvdXQgdHdlYWsgdGhlIHBvc2l0aW9uIG9mIGNvbnRyb2xzLgotICAgIC8v
IE9uY2Ugc2hhZG93IERPTSByZWZhY3RvcmluZyBpcyBjb21wbGV0ZSwgdGhlIHR3ZWFraW5nIHdp
bGwgYmUgaW4gTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QgYW5kIHRoaXMgYWNjZXNzb3Igd2lsbCBu
byBsb25nZXIgYmUgbmVjZXNzYXJ5LgotICAgIFJlbmRlckJveCogcmVuZGVyQm94KCk7CisgICAg
dm9pZCByZXBvcnRlZEVycm9yKCk7CisgICAgdm9pZCBjaGFuZ2VkTmV0d29ya1N0YXRlKCk7Cisg
ICAgdm9pZCBsb2FkZWRNZXRhZGF0YSgpOworICAgIHZvaWQgY2hhbmdlZENsb3NlZENhcHRpb25z
VmlzaWJpbGl0eSgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgY3JlYXRlQ29udHJvbHNTaGFkb3dS
b290KCk7Ci0gICAgdm9pZCBkZXN0cm95Q29udHJvbHNTaGFkb3dSb290KCk7Ci0gICAgdm9pZCBj
cmVhdGVQYW5lbCgpOwotICAgIHZvaWQgY3JlYXRlTXV0ZUJ1dHRvbigpOwotICAgIHZvaWQgY3Jl
YXRlUGxheUJ1dHRvbigpOwotICAgIHZvaWQgY3JlYXRlU2Vla0JhY2tCdXR0b24oKTsKLSAgICB2
b2lkIGNyZWF0ZVNlZWtGb3J3YXJkQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVSZXdpbmRCdXR0
b24oKTsKLSAgICB2b2lkIGNyZWF0ZVJldHVyblRvUmVhbHRpbWVCdXR0b24oKTsKLSAgICB2b2lk
IGNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVTdGF0
dXNEaXNwbGF5KCk7Ci0gICAgdm9pZCBjcmVhdGVUaW1lbGluZUNvbnRhaW5lcigpOwotICAgIHZv
aWQgY3JlYXRlVGltZWxpbmUoKTsKLSAgICB2b2lkIGNyZWF0ZVZvbHVtZVNsaWRlckNvbnRhaW5l
cigpOwotICAgIHZvaWQgY3JlYXRlVm9sdW1lU2xpZGVyKCk7Ci0gICAgdm9pZCBjcmVhdGVWb2x1
bWVTbGlkZXJNdXRlQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVDdXJyZW50VGltZURpc3BsYXko
KTsKLSAgICB2b2lkIGNyZWF0ZVRpbWVSZW1haW5pbmdEaXNwbGF5KCk7Ci0gICAgdm9pZCBjcmVh
dGVGdWxsc2NyZWVuQnV0dG9uKCk7Ci0KLSAgICB2b2lkIHRpbWVVcGRhdGVUaW1lckZpcmVkKFRp
bWVyPE1lZGlhQ29udHJvbHM+Kik7Ci0KLSAgICB2b2lkIHVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5
KCk7Ci0gICAgdm9pZCBjaGFuZ2VPcGFjaXR5KEhUTUxFbGVtZW50KiwgZmxvYXQgb3BhY2l0eSk7
Ci0gICAgdm9pZCBvcGFjaXR5QW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxNZWRpYUNvbnRyb2xz
PiopOwotCi0gICAgdm9pZCB1cGRhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoYm9vbCB2aXNpYmxl
KTsKKyAgICBNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQqKTsKIAogcHJpdmF0ZToKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IG1fY29udHJvbHNTaGFkb3dS
b290OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xFbGVtZW50PiBtX3BhbmVsOwotICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudD4gbV9tdXRlQnV0dG9uOwotICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gbV9wbGF5QnV0dG9uOwotICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudD4gbV9zZWVrQmFja0J1dHRvbjsKLSAgICBS
ZWZQdHI8TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ+IG1fc2Vla0ZvcndhcmRCdXR0b247
Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IG1fcmV3aW5kQnV0
dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVu
dD4gbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUb2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gbV90aW1lbGluZTsK
LSAgICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudD4gbV92b2x1bWVTbGlk
ZXI7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50PiBtX3ZvbHVtZVNs
aWRlck11dGVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25F
bGVtZW50PiBtX2Z1bGxzY3JlZW5CdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVs
aW5lQ29udGFpbmVyRWxlbWVudD4gbV90aW1lbGluZUNvbnRhaW5lcjsKLSAgICBSZWZQdHI8TWVk
aWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gbV92b2x1bWVTbGlkZXJDb250
YWluZXI7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudD4gbV9jdXJy
ZW50VGltZURpc3BsYXk7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVu
dD4gbV90aW1lUmVtYWluaW5nRGlzcGxheTsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sU3RhdHVz
RGlzcGxheUVsZW1lbnQ+IG1fc3RhdHVzRGlzcGxheTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnQq
IG1fbWVkaWFFbGVtZW50OwotICAgIFRpbWVyPE1lZGlhQ29udHJvbHM+IG1fdGltZVVwZGF0ZVRp
bWVyOwotICAgIFRpbWVyPE1lZGlhQ29udHJvbHM+IG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyOwot
Ci0gICAgZG91YmxlIG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZTsKLSAgICBkb3VibGUgbV9v
cGFjaXR5QW5pbWF0aW9uRHVyYXRpb247Ci0gICAgZmxvYXQgbV9vcGFjaXR5QW5pbWF0aW9uRnJv
bTsKLSAgICBmbG9hdCBtX29wYWNpdHlBbmltYXRpb25UbzsKLQotICAgIGJvb2wgbV9tb3VzZU92
ZXI7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworCisgICAgTWVkaWFDb250cm9sUGFuZWxF
bGVtZW50KiBtX3BhbmVsOwogfTsKIAoraW5saW5lIE1lZGlhQ29udHJvbHMqIHRvTWVkaWFDb250
cm9scyhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xzKj4obm9kZSk7Cit9CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAK
aW5kZXggNjUzYTM1NWY0MWNmMmUzZjMzOTBmN2M4MDVlZjc4YThlYWQzNTBjOS4uYTc1ZDZlZGMy
ZDE4M2EzOTdlODUwM2Q2Mjk2NGU3NjlkZGVlODkxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC00NCw2ICs0NCw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NSwxNDAgKzY2LDI5OSBAQCBz
dGF0aWMgY29uc3QgZmxvYXQgY1NlZWtSZXBlYXREZWxheSA9IDAuMWY7CiBzdGF0aWMgY29uc3Qg
ZmxvYXQgY1N0ZXBUaW1lID0gMC4wN2Y7CiBzdGF0aWMgY29uc3QgZmxvYXQgY1NlZWtUaW1lID0g
MC4yZjsKIAotaW5saW5lIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50OjpNZWRpYUNvbnRy
b2xTaGFkb3dSb290RWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlh
Q29udHJvbEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogSFRN
TERpdkVsZW1lbnQoZGl2VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCisgICAgLCBtX21l
ZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCisgICAgLCBtX29wYXF1ZSh0cnVlKQogewotICAgIHNl
dFNoYWRvd0hvc3QobWVkaWFFbGVtZW50KTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xT
aGFkb3dSb290RWxlbWVudD4gTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmNyZWF0ZShI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitzdGF0aWMgY29uc3QgU3RyaW5nJiBkaXNw
bGF5U3RyaW5nKCkKIHsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+
IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQobWVk
aWFFbGVtZW50KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHMsICgiZGlzcGxh
eSIpKTsKKyAgICByZXR1cm4gczsKK30KIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcm9vdFN0
eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIHJvb3RTdHlsZS0+aW5oZXJpdEZyb20o
bWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKLSAgICByb290U3R5bGUtPnNldERp
c3BsYXkoQkxPQ0spOwotICAgIHJvb3RTdHlsZS0+c2V0UG9zaXRpb24oUmVsYXRpdmVQb3NpdGlv
bik7CitzdGF0aWMgY29uc3QgU3RyaW5nJiB3ZWJraXRUcmFuc2l0aW9uU3RyaW5nKCkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcywgKCItd2Via2l0LXRyYW5zaXRpb24iKSk7
CisgICAgcmV0dXJuIHM7Cit9CiAKLSAgICBSZW5kZXJNZWRpYUNvbnRyb2xTaGFkb3dSb290KiBy
ZW5kZXJlciA9IG5ldyAobWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgpKSBS
ZW5kZXJNZWRpYUNvbnRyb2xTaGFkb3dSb290KGVsZW1lbnQuZ2V0KCkpOwotICAgIHJlbmRlcmVy
LT5zZXRTdHlsZShyb290U3R5bGUucmVsZWFzZSgpKTsKK3N0YXRpYyBjb25zdCBTdHJpbmcmIG9w
YWNpdHlTdHJpbmcoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzLCAoIm9w
YWNpdHkiKSk7CisgICAgcmV0dXJuIHM7Cit9CiAKLSAgICBlbGVtZW50LT5zZXRSZW5kZXJlcihy
ZW5kZXJlcik7Ci0gICAgZWxlbWVudC0+c2V0QXR0YWNoZWQoKTsKLSAgICBlbGVtZW50LT5zZXRJ
bkRvY3VtZW50KCk7Cit2b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnNob3coKQoreworICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2UgbW9yZSBlZmZpY2llbnQuCisgICAg
c3R5bGUoKS0+cmVtb3ZlUHJvcGVydHkoZGlzcGxheVN0cmluZygpLCBlYyk7Cit9CiAKLSAgICBy
ZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7Cit2b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmhpZGUo
KQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2UgbW9yZSBlZmZp
Y2llbnQuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5vbmUsICgibm9uZSIpKTsK
KyAgICBzdHlsZSgpLT5zZXRQcm9wZXJ0eShkaXNwbGF5U3RyaW5nKCksIG5vbmUsIGVjKTsKIH0K
IAotdm9pZCBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6ZGV0YWNoKCkKK3ZvaWQgTWVk
aWFDb250cm9sRWxlbWVudDo6bWFrZU9wYXF1ZSgpCiB7Ci0gICAgSFRNTERpdkVsZW1lbnQ6OmRl
dGFjaCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBzaGFkb3cgRE9NIHVzZXMgRWxlbWVu
dDo6c2V0U2hhZG93Um9vdCgpLgotICAgIHNldFNoYWRvd0hvc3QoMCk7CisgICAgaWYgKG1fb3Bh
cXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
dHJhbnNpdGlvblZhbHVlLCAoKSk7CisgICAgaWYgKHRyYW5zaXRpb25WYWx1ZS5pc051bGwoKSkK
KyAgICAgICAgdHJhbnNpdGlvblZhbHVlID0gU3RyaW5nOjpmb3JtYXQoIm9wYWNpdHkgJS4xZ3Mi
LCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlv
bigpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgb3BhY2l0eVZhbHVlLCAoIjEi
KSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIHN0eWxlKCktPnNldFByb3BlcnR5KHdl
YmtpdFRyYW5zaXRpb25TdHJpbmcoKSwgdHJhbnNpdGlvblZhbHVlLCBlYyk7CisgICAgc3R5bGUo
KS0+c2V0UHJvcGVydHkob3BhY2l0eVN0cmluZygpLCBvcGFjaXR5VmFsdWUsIGVjKTsKKyAgICBt
X29wYXF1ZSA9IHRydWU7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Zv
aWQgTWVkaWFDb250cm9sRWxlbWVudDo6bWFrZVRyYW5zcGFyZW50KCkKK3sKKyAgICBpZiAoIW1f
b3BhcXVlKQorICAgICAgICByZXR1cm47CiAKLU1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotICAgIDogSFRNTERp
dkVsZW1lbnQoZGl2VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCi0gICAgLCBtX21lZGlh
RWxlbWVudChtZWRpYUVsZW1lbnQpCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRy
YW5zaXRpb25WYWx1ZSwgKCkpOworICAgIGlmICh0cmFuc2l0aW9uVmFsdWUuaXNOdWxsKCkpCisg
ICAgICAgIHRyYW5zaXRpb25WYWx1ZSA9IFN0cmluZzo6Zm9ybWF0KCJvcGFjaXR5ICUuMWdzIiwg
ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9u
KCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBvcGFjaXR5VmFsdWUsICgiMCIp
KTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2UgbW9yZSBlZmZp
Y2llbnQuCisgICAgc3R5bGUoKS0+c2V0UHJvcGVydHkod2Via2l0VHJhbnNpdGlvblN0cmluZygp
LCB0cmFuc2l0aW9uVmFsdWUsIGVjKTsKKyAgICBzdHlsZSgpLT5zZXRQcm9wZXJ0eShvcGFjaXR5
U3RyaW5nKCksIG9wYWNpdHlWYWx1ZSwgZWMpOworICAgIG1fb3BhcXVlID0gZmFsc2U7Cit9CisK
Ky8vIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbEVsZW1lbnQ6OnN0eWxlRm9y
RWxlbWVudCgpCisvLyB7CisvLyAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkp
OworLy8gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
LT5zdHlsZSgpLCB0cnVlKTsKKy8vICAgIGlmICghc3R5bGUpCisvLyAgICAgICAgcmV0dXJuIDA7
CisvLworLy8gICAgLy8gRklYTUU6IFRISVMgU0hPVUxEIEpVU1QgV09SSyBGT1IgU0hBRE9XIERP
TSBFTEVNRU5UUy4KKy8vICAgIC8vIHRleHQtZGVjb3JhdGlvbiBjYW4ndCBiZSBvdmVycmlkZWQg
ZnJvbSBDU1MuIFNvIHdlIGRvIGl0IGhlcmUuCisvLyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDE1CisvLyAgICBzdHlsZS0+c2V0VGV4dERlY29y
YXRpb24oVEROT05FKTsKKy8vICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChU
RE5PTkUpOworLy8KKy8vICAgIHJldHVybiBzdHlsZTsKKy8vIH0KKworLy8gRklYTUU6IFJFTU9W
RSBCRUZPUkUgTEFORElORyEhIQordm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjphdHRhY2goKQog
ewotICAgIHNldEluRG9jdW1lbnQoKTsKKyAgICBIVE1MRGl2RWxlbWVudDo6YXR0YWNoKCk7CiB9
CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6YXR0YWNoVG9QYXJlbnQoRWxlbWVudCogcGFy
ZW50KQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbmxpbmUgTWVkaWFDb250
cm9sUGFuZWxFbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1lbnQp
CisgICAgLCBtX3Jld2luZEJ1dHRvbigwKQorICAgICwgbV9wbGF5QnV0dG9uKDApCisgICAgLCBt
X3JldHVyblRvUmVhbFRpbWVCdXR0b24oMCkKKyAgICAsIG1fc3RhdHVzRGlzcGxheSgwKQorICAg
ICwgbV90aW1lbGluZUNvbnRhaW5lcigwKQorICAgICwgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbigwKQorICAgICwgbV9tdXRlQnV0dG9uKDApCisgICAgLCBtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lcigwKQorICAgICwgbV9mdWxsU2NyZWVuQnV0dG9uKDApCiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgY29kZSBzZWVtcyB2ZXJ5IHdyb25nLiAgV2h5IGFyZSB3ZSBtYWdpY2FsbHkgYWRkaW5nIHx0
aGlzfCB0byB0aGUgRE9NIGhlcmU/Ci0gICAgLy8gICAgICAgIFdlIHNob3VsZG4ndCBiZSBjYWxs
aW5nIHBhcnNlciBBUEkgbWV0aG9kcyBvdXRzaWRlIG9mIHRoZSBwYXJzZXIhCi0gICAgcGFyZW50
LT5wYXJzZXJBZGRDaGlsZCh0aGlzKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50Ojp1
cGRhdGUoKQorUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVy
KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgdXBkYXRlU3R5bGUoKTsKKyAgICBSZWZQdHI8
TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBwYW5lbCA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQobWVkaWFFbGVtZW50KSk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9s
UmV3aW5kQnV0dG9uRWxlbWVudD4gcmV3aW5kQnV0dG9uID0gTWVkaWFDb250cm9sUmV3aW5kQnV0
dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgcGFuZWwtPm1fcmV3aW5kQnV0
dG9uID0gcmV3aW5kQnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChyZXdpbmRC
dXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gcGxheUJ1dHRv
biA9IE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsK
KyAgICBwYW5lbC0+bV9wbGF5QnV0dG9uID0gcGxheUJ1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+
YXBwZW5kQ2hpbGQocGxheUJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRvUmVh
bHRpbWVCdXR0b25FbGVtZW50PiByZXR1cm5Ub1JlYWx0aW1lQnV0dG9uID0gTWVkaWFDb250cm9s
UmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAg
IHBhbmVsLT5tX3JldHVyblRvUmVhbFRpbWVCdXR0b24gPSByZXR1cm5Ub1JlYWx0aW1lQnV0dG9u
LmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChyZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLnJl
bGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAobWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnVzZXNNZWRp
YUNvbnRyb2xTdGF0dXNEaXNwbGF5KCkpIHsKKyAgICAgICAgUmVmUHRyPE1lZGlhQ29udHJvbFN0
YXR1c0Rpc3BsYXlFbGVtZW50PiBzdGF0dXNEaXNwbGF5ID0gTWVkaWFDb250cm9sU3RhdHVzRGlz
cGxheUVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgICAgICBwYW5lbC0+bV9zdGF0
dXNEaXNwbGF5ID0gc3RhdHVzRGlzcGxheS5nZXQoKTsKKyAgICAgICAgcGFuZWwtPmFwcGVuZENo
aWxkKHN0YXR1c0Rpc3BsYXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgICAgIGlmIChlYykK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+IHRpbWVsaW5lQ29udGFpbmVyID0gTWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50LCBlYyk7CisgICAg
aWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBhbmVsLT5tX3RpbWVsaW5lQ29udGFp
bmVyID0gdGltZWxpbmVDb250YWluZXIuZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHRp
bWVsaW5lQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogT05MWSBBUFBFTkQgV0hFTiBTVVBQT1JUUyBT
RUVLQkFDSworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRv
bkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiBPTkxZIEFQUEVORCBXSEVOIFNVUFBP
UlRTIFNFRUtGT1JXQVJECisgICAgcGFuZWwtPmFwcGVuZENoaWxkKE1lZGlhQ29udHJvbFNlZWtG
b3J3YXJkQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCksIGVjLCB0cnVlKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IFVwZGF0ZSBjYyBi
dXR0b24gd2hlbiB0dXJuaW5nIG9uL29mZiBmcm9tIERPTSEhISEKKyAgICAvLyBGSVhNRTogT25s
eSBhcHBlbmQgd2hlbiBoYXNDbG9zZWRDYXB0aW9ucy4KKyAgICBSZWZQdHI8TWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiB0b2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbiA9IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKG1lZGlhRWxlbWVudCk7CisgICAgcGFuZWwtPm1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24gPSB0b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5k
Q2hpbGQodG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7Cisg
ICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xG
dWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gZnVsbFNjcmVlbkJ1dHRvbiA9IE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBwYW5lbC0+
bV9mdWxsU2NyZWVuQnV0dG9uID0gZnVsbFNjcmVlbkJ1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+
YXBwZW5kQ2hpbGQoZnVsbFNjcmVlbkJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKworICAg
IC8vIEZJWE1FOiBVcGRhdGUgbXV0ZUJ1dHRvbiB3aGVuIG11dGluZyBmcm9tIERPTSEhIQorICAg
IC8vIEZJWE1FOiBPbmx5IGFwcGVuZCB3aGVuIGhhc0F1ZGlvLgorICAgIFJlZlB0cjxNZWRpYUNv
bnRyb2xNdXRlQnV0dG9uRWxlbWVudD4gbXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbE11dGVCdXR0
b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBwYW5lbC0+bV9tdXRlQnV0dG9u
ID0gbXV0ZUJ1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQobXV0ZUJ1dHRvbi5y
ZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgLy8gRklYTUU6IE9ubHkgYXBwZW5kIHdoZW4gaGFzQXVkaW8uCisgICAgUmVmUHRyPE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IHZvbHVtZVNsaWRlckNvbnRhaW5l
ciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtZWRp
YUVsZW1lbnQsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcGFu
ZWwtPm1fdm9sdW1lU2xpZGVyQ29udGFpbmVyID0gdm9sdW1lU2xpZGVyQ29udGFpbmVyLmdldCgp
OworICAgIHBhbmVsLT5hcHBlbmRDaGlsZCh2b2x1bWVTbGlkZXJDb250YWluZXIucmVsZWFzZSgp
LCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBwYW5lbC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29u
dHJvbEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpCit2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudDo6cmVzZXQoKQogewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7
Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0
b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5z
dHlsZSgpLCB0cnVlKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICAvLyB0ZXh0LWRlY29yYXRpb24gY2FuJ3QgYmUgb3ZlcnJpZGVkIGZyb20gQ1NTLiBTbyB3
ZSBkbyBpdCBoZXJlLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjcwMTUKLSAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb24oVEROT05FKTsKLSAg
ICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb25zSW5FZmZlY3QoVEROT05FKTsKKyAgICBjaGFuZ2Vk
TmV0d29ya1N0YXRlKCk7CisgICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQoKS0+ZHVy
YXRpb24oKTsKKyAgICBpZiAoIWlzbmFuKGR1cmF0aW9uKSkgeworICAgICAgICBtX3RpbWVsaW5l
Q29udGFpbmVyLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIG1fdGltZWxpbmVDb250
YWluZXItPnNob3coKTsKKyAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lci0+c2V0UG9zaXRpb24o
bWVkaWFFbGVtZW50KCktPmN1cnJlbnRUaW1lKCkpOworICAgIH0gZWxzZQorICAgICAgICBtX3Rp
bWVsaW5lQ29udGFpbmVyLT5oaWRlKCk7CisKKyAgICBpZiAobWVkaWFFbGVtZW50KCktPmhhc0F1
ZGlvKCkpCisgICAgICAgIG1fbXV0ZUJ1dHRvbi0+c2hvdygpOworICAgIGVsc2UKKyAgICAgICAg
bV9tdXRlQnV0dG9uLT5oaWRlKCk7CisKKyAgICBpZiAobWVkaWFFbGVtZW50KCktPmhhc0Nsb3Nl
ZENhcHRpb25zKCkpCisgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnNob3co
KTsKKyAgICBlbHNlCisgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmhpZGUo
KTsKKworICAgIGlmIChtZWRpYUVsZW1lbnQoKS0+bW92aWVMb2FkVHlwZSgpICE9IE1lZGlhUGxh
eWVyOjpMaXZlU3RyZWFtKSB7CisgICAgICAgIG1fcmV0dXJuVG9SZWFsVGltZUJ1dHRvbi0+aGlk
ZSgpOworICAgICAgICBtX3Jld2luZEJ1dHRvbi0+c2hvdygpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fcmV0dXJuVG9SZWFsVGltZUJ1dHRvbi0+c2hvdygpOworICAgICAgICBtX3Jld2luZEJ1
dHRvbi0+aGlkZSgpOworICAgIH0KIAotICAgIHJldHVybiBzdHlsZTsKKyAgICBtYWtlT3BhcXVl
KCk7CiB9CiAKLWJvb2wgTWVkaWFDb250cm9sRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSogc3R5bGUpCit2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6cGxheSgpCiB7
Ci0gICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7CisgICAgbV9wbGF5QnV0dG9uLT51cGRh
dGVEaXNwbGF5VHlwZSgpOworICAgIG1fdGltZWxpbmVDb250YWluZXItPnNldFBvc2l0aW9uKG1l
ZGlhRWxlbWVudCgpLT5jdXJyZW50VGltZSgpKTsKK30KIAotICAgIHJldHVybiBIVE1MRGl2RWxl
bWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSkgJiYgcGFyZW50Tm9kZSgpICYmIHBhcmVudE5v
ZGUoKS0+cmVuZGVyZXIoKQotICAgICAgICAmJiAoIXN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgfHwg
ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0
KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KSk7Cit2b2lkIE1lZGlhQ29udHJv
bFBhbmVsRWxlbWVudDo6cGxheWluZygpCit7CisgICAgbV90aW1lbGluZUNvbnRhaW5lci0+c2V0
UG9zaXRpb24obWVkaWFFbGVtZW50KCktPmN1cnJlbnRUaW1lKCkpOwogfQotICAgIAotdm9pZCBN
ZWRpYUNvbnRyb2xFbGVtZW50OjphdHRhY2goKQorCit2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudDo6cGF1c2UoKQogewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZv
ckVsZW1lbnQoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBu
ZWVkc1JlbmRlcmVyID0gcmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQoKSk7Ci0gICAgaWYgKCFu
ZWVkc1JlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNyZWF0ZVJlbmRlcmVyKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW5kZXJBcmVu
YSgpLCBzdHlsZS5nZXQoKSk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwot
ICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZS5nZXQoKSk7Ci0gICAgc2V0UmVuZGVyZXIocmVu
ZGVyZXIpOwotICAgIGlmIChwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigp
KSB7Ci0gICAgICAgIC8vIEZpbmQgbmV4dCBzaWJsaW5nIHdpdGggYSByZW5kZXJlciB0byBkZXRl
cm1pbmUgd2hlcmUgdG8gaW5zZXJ0LgotICAgICAgICBOb2RlKiBzaWJsaW5nID0gbmV4dFNpYmxp
bmcoKTsKLSAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgIXNpYmxpbmctPnJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcGFy
ZW50Tm9kZSgpLT5yZW5kZXJlcigpLT5hZGRDaGlsZChyZW5kZXJlciwgc2libGluZyA/IHNpYmxp
bmctPnJlbmRlcmVyKCkgOiAwKTsKLSAgICB9Ci0gICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7
CisgICAgbV9wbGF5QnV0dG9uLT51cGRhdGVEaXNwbGF5VHlwZSgpOworICAgIG1fdGltZWxpbmVD
b250YWluZXItPnNldFBvc2l0aW9uKG1lZGlhRWxlbWVudCgpLT5jdXJyZW50VGltZSgpKTsKKyAg
ICBtYWtlT3BhcXVlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlU3R5
bGUoKQordm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OnJlcG9ydGVkRXJyb3IoKQogewot
ICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm47CisgICAgbV90aW1lbGluZUNvbnRhaW5lci0+aGlkZSgpOworICAgIG1f
bXV0ZUJ1dHRvbi0+aGlkZSgpOworICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5oaWRlKCk7
CisgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOworfQogCi0gICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwotICAgIGlmICghc3R5
bGUpCi0gICAgICAgIHJldHVybjsKK3ZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpjaGFu
Z2VkTmV0d29ya1N0YXRlKCkKK3sKKyAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgcGxh
Y2U/CisgICAgaWYgKG1lZGlhRWxlbWVudCgpLT5zdXBwb3J0c0Z1bGxzY3JlZW4oKSkKKyAgICAg
ICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5zaG93KCk7CisgICAgZWxzZQorICAgICAgICBtX2Z1bGxT
Y3JlZW5CdXR0b24tPmhpZGUoKTsKIAotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVy
SXNOZWVkZWQoc3R5bGUuZ2V0KCkpICYmIHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnJl
bmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgIW5lZWRzUmVuZGVyZXIpCi0gICAgICAg
IGRldGFjaCgpOwotICAgIGVsc2UgaWYgKCFyZW5kZXJlcigpICYmIG5lZWRzUmVuZGVyZXIpCi0g
ICAgICAgIGF0dGFjaCgpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAgICAgcmVu
ZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IGlmIHRoZXJlIGlzIGFueSBpbm5lclRleHQgcmVuZGVyZXIsIGl0IGlzIHVwZGF0ZWQgYXMg
d2VsbC4KLSAgICAgICAgaWYgKGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCktPnJlbmRlcmVy
KCkpCi0gICAgICAgICAgICBmaXJzdENoaWxkKCktPnJlbmRlcmVyKCktPnNldFN0eWxlKHN0eWxl
LmdldCgpKTsKLSAgICB9CisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgYSByZWxvYWQuIEhv
dyBkbyB3ZSBrbm93PworICAgIGlmIChtX3N0YXR1c0Rpc3BsYXkpCisgICAgICAgIG1fc3RhdHVz
RGlzcGxheS0+dXBkYXRlKCk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K3ZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50Ojpsb2FkZWRNZXRhZGF0YSgpCit7CisgICAg
aWYgKG1fc3RhdHVzRGlzcGxheSkKKyAgICAgICAgbV9zdGF0dXNEaXNwbGF5LT5oaWRlKCk7CiAK
LWlubGluZSBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBhbmVsRWxlbWVu
dChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xFbGVt
ZW50KG1lZGlhRWxlbWVudCkKKyAgICByZXNldCgpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFBh
bmVsRWxlbWVudDo6Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCiB7CisgICAgbV90
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKIH0KIAotUGFz
c1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVu
dDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK3ZvaWQgTWVkaWFDb250
cm9sUGFuZWxFbGVtZW50OjpzaG93Vm9sdW1lU2xpZGVyKCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudChtZWRpYUVsZW1lbnQpKTsKKyAgICBpZiAo
IW1lZGlhRWxlbWVudCgpLT5oYXNBdWRpbygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Zv
bHVtZVNsaWRlckNvbnRhaW5lci0+c2hvdygpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFBhbmVs
RWxlbWVudDo6aGlkZVZvbHVtZVNsaWRlcigpCit7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQoKS0+
aGFzQXVkaW8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92b2x1bWVTbGlkZXJDb250YWlu
ZXItPmhpZGUoKTsKIH0KIAogTWVkaWFDb250cm9sRWxlbWVudFR5cGUgTWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50OjpkaXNwbGF5VHlwZSgpIGNvbnN0CkBAIC0yMTcsMjQgKzM3Nyw2NSBAQCBjb25z
dCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6c2hhZG93UHNldWRvSWQo
KSBjb25zdAogaW5saW5lIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6TWVk
aWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCkKICAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50KQogeworICAg
IGhpZGUoKTsKK30KKworUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVs
ZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVm
UHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gY29udGFpbmVyID0gYWRv
cHRSZWYobmV3IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChtZWRpYUVsZW1l
bnQpKTsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50
PiBjdXJyZW50VGltZURpc3BsYXkgPSBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVt
ZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250YWluZXItPm1fY3VycmVudFRpbWVE
aXNwbGF5ID0gY3VycmVudFRpbWVEaXNwbGF5LmdldCgpOworICAgIGNvbnRhaW5lci0+YXBwZW5k
Q2hpbGQoY3VycmVudFRpbWVEaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChl
YykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVF
bGVtZW50PiB0aW1lbGluZSA9IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1l
ZGlhRWxlbWVudCk7CisgICAgY29udGFpbmVyLT5tX3RpbWVsaW5lID0gdGltZWxpbmUuZ2V0KCk7
CisgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZCh0aW1lbGluZS5yZWxlYXNlKCksIGVjLCB0cnVl
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudD4gdGltZVJlbWFpbmluZ0Rpc3BsYXkgPSBN
ZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1l
bnQpOworICAgIGNvbnRhaW5lci0+bV90aW1lUmVtYWluaW5nRGlzcGxheSA9IHRpbWVSZW1haW5p
bmdEaXNwbGF5LmdldCgpOworICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodGltZVJlbWFpbmlu
Z0Rpc3BsYXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBjb250YWluZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRy
PE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxp
bmVDb250YWluZXJFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
KQordm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OnNldFBvc2l0aW9u
KGZsb2F0IGN1cnJlbnRUaW1lKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFDb250
cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KG1lZGlhRWxlbWVudCkpOworICAgIG1fdGltZWxp
bmUtPnNldFBvc2l0aW9uKGN1cnJlbnRUaW1lKTsKKyAgICB1cGRhdGVUaW1lRGlzcGxheSgpOwog
fQogCi1ib29sIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudDo6c2V0RHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCiB7Ci0gICAgaWYgKCFN
ZWRpYUNvbnRyb2xFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fdGltZWxpbmUtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKK30KIAot
ICAgIC8vIEFsd2F5cyBzaG93IHRoZSB0aW1lbGluZSBpZiB0aGUgdGhlbWUgZG9lc24ndCB1c2Ug
c3RhdHVzIGRpc3BsYXkgKE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywgZm9yIGluc3RhbmNl
KS4KLSAgICBpZiAoIWRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+dXNlc01lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisvLyBGSVhNRTogQ09NRSBV
UCBXSVRIIEEgV0FZIFRPIE5PVCBORUVEIFRIRSBNRURJQSBFTEVNRU5UIEhFUkUuCit2b2lkIE1l
ZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlVGltZURpc3BsYXkoKQor
eworICAgIC8vIEZJWE1FOiBERVVHTElGWQorLy8gICAgaWYgKCFtX2N1cnJlbnRUaW1lRGlzcGxh
eS0+cmVuZGVyZXIoKSB8fCBtX2N1cnJlbnRUaW1lRGlzcGxheS0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+ZGlzcGxheSgpID09IE5PTkUpCisvLyAgICAgICAgcmV0dXJuOwogCisgICAgZmxvYXQgbm93
ID0gbWVkaWFFbGVtZW50KCktPmN1cnJlbnRUaW1lKCk7CiAgICAgZmxvYXQgZHVyYXRpb24gPSBt
ZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKTsKLSAgICByZXR1cm4gIWlzbmFuKGR1cmF0aW9uKSAm
JiAhaXNpbmYoZHVyYXRpb24pOworCisgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2Uo
KTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFsbG93IHRoZSB0
aGVtZSB0byBmb3JtYXQgdGhlIHRpbWUKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIG1fY3Vy
cmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQoZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgp
LT5mb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUobm93LCBkdXJhdGlvbiksIGVjKTsKKyAg
ICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3VycmVudFZhbHVlKG5vdyk7CisgICAgbV90aW1l
UmVtYWluaW5nRGlzcGxheS0+c2V0SW5uZXJUZXh0KGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUo
KS0+Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUobm93LCBkdXJhdGlvbiksIGVjKTsK
KyAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93IC0gZHVyYXRp
b24pOwogfQogCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBNZWRpYUNvbnRyb2xUaW1lbGluZUNv
bnRhaW5lckVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkgY29uc3QKQEAgLTI1MCw1MiArNDUxLDg0IEBA
IGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50
OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotaW5saW5lIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6Ok1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50KQotICAgIDogTWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1lbnQpCi0g
ICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKLSAgICAsIG1feCgwKQotICAgICwgbV95KDApCitjbGFz
cyBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJCbG9jayB7
CitwdWJsaWM6CisgICAgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoTm9kZSopOwor
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKK307CisKK1JlbmRlck1lZGlhVm9sdW1lU2xpZGVy
Q29udGFpbmVyOjpSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihOb2RlKiBub2RlKQor
ICAgIDogUmVuZGVyQmxvY2sobm9kZSkKIHsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250
YWluZXJFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQordm9p
ZCBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KCkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQo
bWVkaWFFbGVtZW50KSk7CisgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOworICAgIGlmIChzdHls
ZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCAhcHJldmlvdXNTaWJsaW5nKCkgfHwgIXByZXZpb3Vz
U2libGluZygpLT5pc0JveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJ1
dHRvbkJveCA9IHRvUmVuZGVyQm94KHByZXZpb3VzU2libGluZygpKTsKKworICAgIGlmICh2aWV3
KCkpCisgICAgICAgIHZpZXcoKS0+ZGlzYWJsZUxheW91dFN0YXRlKCk7CisKKyAgICBJbnRQb2lu
dCBvZmZzZXQgPSB0aGVtZSgpLT52b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0
b25Cb3gsIEludFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICBzZXRYKG9mZnNldC54KCkg
KyBidXR0b25Cb3gtPm9mZnNldExlZnQoKSk7CisgICAgc2V0WShvZmZzZXQueSgpICsgYnV0dG9u
Qm94LT5vZmZzZXRUb3AoKSk7CisgICAgCisgICAgaWYgKHZpZXcoKSkKKyAgICAgICAgdmlldygp
LT5lbmFibGVMYXlvdXRTdGF0ZSgpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpzdHlsZUZvckVsZW1lbnQoKQor
aW5saW5lIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50KQorICAgIDogTWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1lbnQpCisgICAgLCBt
X3NsaWRlcigwKQorICAgICwgbV9tdXRlQnV0dG9uKDApCiB7Ci0gICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBzdHlsZSA9IE1lZGlhQ29udHJvbEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpOwotICAg
IHN0eWxlLT5zZXRQb3NpdGlvbihBYnNvbHV0ZVBvc2l0aW9uKTsKLSAgICBzdHlsZS0+c2V0TGVm
dChMZW5ndGgobV94LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRUb3AoTGVuZ3RoKG1feSwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0RGlzcGxheShtX2lzVmlzaWJsZSA/IEJMT0NLIDogTk9ORSk7
Ci0gICAgcmV0dXJuIHN0eWxlOworICAgIGhpZGUoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK1Bh
c3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKHZpc2libGUg
PT0gbV9pc1Zpc2libGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2lzVmlzaWJsZSA9IHZpc2li
bGU7CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+
IGNvbnRhaW5lciA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWlu
ZXJFbGVtZW50KG1lZGlhRWxlbWVudCkpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckVsZW1lbnQ+IHNsaWRlciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6
OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRhaW5lci0+bV9zbGlkZXIgPSBzbGlkZXIu
Z2V0KCk7CisgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChzbGlkZXIucmVsZWFzZSgpLCBlYywg
dHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudD4gbXV0ZUJ1dHRvbiA9IE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50
KTsKKyAgICBjb250YWluZXItPm1fbXV0ZUJ1dHRvbiA9IG11dGVCdXR0b24uZ2V0KCk7CisgICAg
Y29udGFpbmVyLT5hcHBlbmRDaGlsZChtdXRlQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOwor
ICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29udGFpbmVyLnJl
bGVhc2UoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpzZXRQb3NpdGlvbihpbnQgeCwgaW50IHkpCitSZW5kZXJPYmplY3QqIE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5h
KiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewotICAgIGlmICh4ID09IG1feCAmJiB5ID09IG1feSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1feCA9IHg7Ci0gICAgbV95ID0geTsKKyAgICByZXR1cm4g
bmV3IChhcmVuYSkgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIodGhpcyk7CiB9CiAK
LWJvb2wgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6aGl0VGVzdChj
b25zdCBJbnRQb2ludCYgYWJzUG9pbnQpCit2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNv
bnRhaW5lckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAg
IGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkK
LSAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnRoZW1lKCktPmhpdFRlc3RNZWRpYUNvbnRyb2xQ
YXJ0KHJlbmRlcmVyKCksIGFic1BvaW50KTsKKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8TW91
c2VFdmVudCo+KGV2ZW50KTsKKyAgICBpZiAoIW1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSB8
fCAhbW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpLT50b05vZGUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHRoaXMtPmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93RE9NKG1vdXNlRXZlbnQt
PnJlbGF0ZWRUYXJnZXQoKS0+dG9Ob2RlKCkpKQorICAgICAgICByZXR1cm47CiAKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgaGlkZSgpOwogfQogCisKIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI7CkBAIC0zMTMsNiAr
NTQ2LDcgQEAgaW5saW5lIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpNZWRpYUNv
bnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChIVE1MTWUKICAgICA6IE1lZGlhQ29udHJvbEVsZW1l
bnQobWVkaWFFbGVtZW50KQogICAgICwgbV9zdGF0ZUJlaW5nRGlzcGxheWVkKE5vdGhpbmcpCiB7
CisgICAgaGlkZSgpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlF
bGVtZW50PiBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTMyMiw4ICs1NTYsNiBAQCBQYXNzUmVmUHRyPE1l
ZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5
RWxlbWVudDo6YwogCiB2b2lkIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50Ojp1cGRh
dGUoKQogewotICAgIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZSgpOwotCiAgICAgLy8gR2V0
IHRoZSBuZXcgc3RhdGUgdGhhdCB3ZSdsbCBoYXZlIHRvIGRpc3BsYXkuCiAgICAgU3RhdGVCZWlu
Z0Rpc3BsYXllZCBuZXdTdGF0ZVRvRGlzcGxheSA9IE5vdGhpbmc7CiAKQEAgLTMzMiwxMiArNTY0
LDE4IEBAIHZvaWQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnVwZGF0ZSgpCiAg
ICAgZWxzZSBpZiAobWVkaWFFbGVtZW50KCktPm1vdmllTG9hZFR5cGUoKSA9PSBNZWRpYVBsYXll
cjo6TGl2ZVN0cmVhbSkKICAgICAgICAgbmV3U3RhdGVUb0Rpc3BsYXkgPSBMaXZlQnJvYWRjYXN0
OwogCi0gICAgLy8gUHJvcGFnYXRlIG9ubHkgaWYgbmVlZGVkLgogICAgIGlmIChuZXdTdGF0ZVRv
RGlzcGxheSA9PSBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBt
X3N0YXRlQmVpbmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRvRGlzcGxheTsKIAogICAgIEV4Y2VwdGlv
bkNvZGUgZTsKKworICAgIGlmIChtX3N0YXRlQmVpbmdEaXNwbGF5ZWQgPT0gTm90aGluZykKKyAg
ICAgICAgc3R5bGUoKS0+c2V0Q3NzVGV4dCgiIiwgZSk7CisgICAgZWxzZSBpZiAobmV3U3RhdGVU
b0Rpc3BsYXkgPT0gTm90aGluZykKKyAgICAgICAgc3R5bGUoKS0+c2V0Q3NzVGV4dCgiZGlzcGxh
eTogbm9uZSIsIGUpOworCisgICAgbV9zdGF0ZUJlaW5nRGlzcGxheWVkID0gbmV3U3RhdGVUb0Rp
c3BsYXk7CisKICAgICBzd2l0Y2ggKG1fc3RhdGVCZWluZ0Rpc3BsYXllZCkgewogICAgIGNhc2Ug
Tm90aGluZzoKICAgICAgICAgc2V0SW5uZXJUZXh0KCIiLCBlKTsKQEAgLTM1MSwxNCArNTg5LDYg
QEAgdm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkKICAgICB9
CiB9CiAKLWJvb2wgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIGlmICghTWVkaWFDb250cm9sRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSkgfHwgIWRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUo
KS0+dXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7Ci0gICAg
cmV0dXJuIChpc25hbihkdXJhdGlvbikgfHwgaXNpbmYoZHVyYXRpb24pKTsKLX0KLQogTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmRpc3Bs
YXlUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gTWVkaWFTdGF0dXNEaXNwbGF5OwpAQCAtMzc5
LDk2ICs2MDksMTggQEAgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW4KIHsKIH0KIAotdm9pZCBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmF0dGFjaFRvUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJlIHdlIG1h
Z2ljYWxseSBhZGRpbmcgfHRoaXN8IHRvIHRoZSBET00gaGVyZT8KLSAgICAvLyAgICAgICAgV2Ug
c2hvdWxkbid0IGJlIGNhbGxpbmcgcGFyc2VyIEFQSSBtZXRob2RzIG91dHNpZGUgb2YgdGhlIHBh
cnNlciEKLSAgICBwYXJlbnQtPnBhcnNlckFkZENoaWxkKHRoaXMpOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbElucHV0RWxlbWVudDo6dXBkYXRlKCkKK3ZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50OjpzaG93KCkKIHsKLSAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotICAgIGlmIChyZW5kZXJl
cigpKQotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHVwZGF0
ZVN0eWxlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbElucHV0
RWxlbWVudDo6c3R5bGVGb3JFbGVtZW50KCkKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5
bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhpcywgMCwgdHJ1ZSk7Ci19Ci0KLWJvb2wg
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBz
dHlsZSkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKLQotICAgIHJldHVybiBI
VE1MSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnROb2RlKCkg
JiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpCi0gICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKSB8fCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlh
Q29udHJvbFBhcnQoc3R5bGUtPmFwcGVhcmFuY2UoKSwgbWVkaWFFbGVtZW50KCkpKTsKKyAgICBF
eGNlcHRpb25Db2RlIGVjOworICAgIHN0eWxlKCktPnJlbW92ZVByb3BlcnR5KCJkaXNwbGF5Iiwg
ZWMpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0YWNoKCkKK3ZvaWQg
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpoaWRlKCkKIHsKLSAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVySXNOZWVkZWQo
c3R5bGUuZ2V0KCkpOwotICAgIGlmICghbmVlZHNSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwot
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtZWRpYUVsZW1lbnQo
KS0+cmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmICghcmVu
ZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUuZ2V0
KCkpOwotICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocGFyZW50Tm9kZSgpICYm
IHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKSkgewotICAgICAgICAvLyBGaW5kIG5leHQgc2libGlu
ZyB3aXRoIGEgcmVuZGVyZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydC4KLSAgICAgICAg
Tm9kZSogc2libGluZyA9IG5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYm
ICFzaWJsaW5nLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQo
cmVuZGVyZXIsIHNpYmxpbmcgPyBzaWJsaW5nLT5yZW5kZXJlcigpIDogMCk7Ci0gICAgfSAgCi0g
ICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7Ci0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgTWVp
ZGFDb250cm9sSW5wdXQgY2lyY3VtdmVudHMgdGhlIG5vcm1hbCBhdHRhY2htZW50Ci0gICAgLy8g
YW5kIHN0eWxlIHJlY2FsYyBjeWNsZSBhbmQgdGh1cyB3ZSBuZWVkIHRvIGFkZCBleHRyYSBsb2dp
YyB0byBiZSBhd2FyZSBvZgotICAgIC8vIHRoZSBzaGFkb3cgRE9NLiBSZW1vdmUgdGhpcyBvbmNl
IGFsbCBtZWRpYSBjb250cm9scyBhcmUgdHJhbnNpdGlvbmVkIHRvIHVzZSB0aGUgcmVndWxhcgot
ICAgIC8vIHN0eWxlIGNhbGN1bGF0aW9uLgotICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0gc2hh
ZG93Um9vdCgpKQotICAgICAgICBzaGFkb3dOb2RlLT5hdHRhY2goKTsKLX0KLQotdm9pZCBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZVN0eWxlKCkKLXsKLSAgICBpZiAoIW1lZGlhRWxl
bWVudCgpIHx8ICFtZWRpYUVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsK
LSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBuZWVkc1Jl
bmRlcmVyID0gcmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQoKSkgJiYgcGFyZW50Tm9kZSgpICYm
IHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiAhbmVlZHNS
ZW5kZXJlcikKLSAgICAgICAgZGV0YWNoKCk7Ci0gICAgZWxzZSBpZiAoIXJlbmRlcmVyKCkgJiYg
bmVlZHNSZW5kZXJlcikKLSAgICAgICAgYXR0YWNoKCk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXIo
KSkKLSAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotCi0gICAgLy8g
RklYTUU6IEN1cnJlbnRseSwgTWVpZGFDb250cm9sSW5wdXQgY2lyY3VtdmVudHMgdGhlIG5vcm1h
bCBhdHRhY2htZW50Ci0gICAgLy8gYW5kIHN0eWxlIHJlY2FsYyBjeWNsZSBhbmQgdGh1cyB3ZSBu
ZWVkIHRvIGFkZCBleHRyYSBsb2dpYyB0byBiZSBhd2FyZSBvZgotICAgIC8vIHRoZSBzaGFkb3cg
RE9NLiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBtZWRpYSBjb250cm9scyBhcmUgdHJhbnNpdGlvbmVk
IHRvIHVzZQotICAgIC8vIHRoZSBuZXcgc2hhZG93IERPTS4KLSAgICBpZiAoTm9kZSogc2hhZG93
Tm9kZSA9IHNoYWRvd1Jvb3QoKSkKLSAgICAgICAgc2hhZG93Tm9kZS0+cmVjYWxjU3R5bGUoTm9k
ZTo6Rm9yY2UpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgc3R5bGUoKS0+c2V0UHJvcGVy
dHkoImRpc3BsYXkiLCAibm9uZSIsIGVjKTsKIH0KIAotYm9vbCBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQ6OmhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KQotewotICAgIGlmIChyZW5k
ZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAg
cmV0dXJuIHJlbmRlcmVyKCktPnRoZW1lKCktPmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KHJlbmRl
cmVyKCksIGFic1BvaW50KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KIAogdm9pZCBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQ6OnNldERpc3BsYXlUeXBlKE1lZGlhQ29udHJvbEVsZW1lbnRUeXBl
IGRpc3BsYXlUeXBlKQogewpAQCAtNDg1LDYgKzYzNyw3IEBAIHZvaWQgTWVkaWFDb250cm9sSW5w
dXRFbGVtZW50OjpzZXREaXNwbGF5VHlwZShNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5
VHlwCiBpbmxpbmUgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbE11
dGVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250
cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCiAgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQobWVkaWFFbGVtZW50LCBkaXNwbGF5VHlwZSkKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NS
ZWZQdHI8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbE11dGVCdXR0
b25FbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAtNDk4
LDggKzY1MSwxNCBAQCB2b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICBtZWRpYUVsZW1lbnQoKS0+c2V0TXV0
ZWQoIW1lZGlhRWxlbWVudCgpLT5tdXRlZCgpKTsKKyAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUo
KTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQorICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAgICAv
LyBGSVhNRTogRFVHTElGWSEhISEKKyAgICAgICAgc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sUGFu
ZWxFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKS0+c2hvd1ZvbHVtZVNsaWRlcigpOworICAgIH0KKwog
ICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCkBA
IC01NTAsNiArNzA5LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgbWVkaWFFbGVtZW50KCktPnRv
Z2dsZVBsYXlTdGF0ZSgpOworICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwogICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CkBAIC01NzQsNiArNzM0LDcgQEAgaW5saW5lIE1l
ZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVu
dChIVE1MTWVkaWFFbGUKICAgICAsIG1fY2FwdHVyaW5nKGZhbHNlKQogICAgICwgbV9zZWVrVGlt
ZXIodGhpcywgJk1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpzZWVrVGltZXJGaXJlZCkK
IHsKKyAgICBoaWRlKCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQpAQCAtNjk3LDYgKzg1OCw3IEBAIGNv
bnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6c2hhZG93
UHNldWRvSWQoKSBjb25zdAogaW5saW5lIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0
b25FbGVtZW50OjpNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiAgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQobWVkaWFFbGVtZW50LCBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24pCiB7CisgICAgaGlk
ZSgpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25F
bGVtZW50PiBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTcyNiw2ICs4ODgsNyBAQCBjb25z
dCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50
OjpzaGFkb3dQc2V1ZG9JZCgpCiBpbmxpbmUgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVs
ZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogTWVkaWFDb250cm9s
SW5wdXRFbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24p
CiB7CisgICAgaGlkZSgpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b25FbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAt
NzQwLDggKzkwMywxMCBAQCB2b2lkIE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZQogICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAgICAgIG1lZGlhRWxlbWVu
dCgpLT5zZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoIW1lZGlhRWxlbWVudCgpLT5jbG9zZWRDYXB0
aW9uc1Zpc2libGUoKSk7CiAgICAgICAgIHNldENoZWNrZWQobWVkaWFFbGVtZW50KCktPmNsb3Nl
ZENhcHRpb25zVmlzaWJsZSgpKTsKKyAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQorCiAgICAgSFRNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKQEAgLTc2MSw2ICs5MjYsNyBA
QCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0
dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSQogTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
KQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFTbGlk
ZXIpCiB7CisgICAgc2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOwogfQogCiBQ
YXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxp
bmVFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAtNzg5
LDI4ICs5NTUsMzIgQEAgdm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogCiAgICAgZmxvYXQgdGltZSA9IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQodmFsdWUoKS50b0RvdWJsZSgpKTsKICAgICBpZiAodGltZSAhPSBtZWRpYUVs
ZW1lbnQoKS0+Y3VycmVudFRpbWUoKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBmaXJl
ZCAzIHRpbWVzIG9uIGV2ZXJ5IGNsaWNrLiBXZSBzaG91bGQgbm90IGJlIGRvaW5nIHRoYXQuCiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT5zZXRDdXJy
ZW50VGltZSh0aW1lLCBlYyk7CiAgICAgfQogCiAgICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIgPSB0
b1JlbmRlclNsaWRlcihyZW5kZXJlcigpKTsKLSAgICBpZiAoc2xpZGVyICYmIHNsaWRlci0+aW5E
cmFnTW9kZSgpKQotICAgICAgICB0b1JlbmRlck1lZGlhKG1lZGlhRWxlbWVudCgpLT5yZW5kZXJl
cigpKS0+Y29udHJvbHMoKS0+dXBkYXRlVGltZURpc3BsYXkoKTsKKyAgICBpZiAoc2xpZGVyICYm
IHNsaWRlci0+aW5EcmFnTW9kZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBERVVHTElGWSEhISEh
CisgICAgICAgIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVu
dCo+KHBhcmVudE5vZGUoKSktPnVwZGF0ZVRpbWVEaXNwbGF5KCk7CisgICAgfQogCiAgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKICAgICAgICAgbWVk
aWFFbGVtZW50KCktPmVuZFNjcnViYmluZygpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbFRpbWVs
aW5lRWxlbWVudDo6dXBkYXRlKGJvb2wgdXBkYXRlRHVyYXRpb24pIAordm9pZCBNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQ6OnNldFBvc2l0aW9uKGZsb2F0IGN1cnJlbnRUaW1lKSAKIHsKLSAg
ICBpZiAodXBkYXRlRHVyYXRpb24pIHsKLSAgICAgICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVs
ZW1lbnQoKS0+ZHVyYXRpb24oKTsKLSAgICAgICAgc2V0QXR0cmlidXRlKG1heEF0dHIsIFN0cmlu
Zzo6bnVtYmVyKGlzZmluaXRlKGR1cmF0aW9uKSA/IGR1cmF0aW9uIDogMCkpOwotICAgIH0KLSAg
ICBzZXRWYWx1ZShTdHJpbmc6Om51bWJlcihtZWRpYUVsZW1lbnQoKS0+Y3VycmVudFRpbWUoKSkp
OwotICAgIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6dXBkYXRlKCk7CisgICAgc2V0VmFsdWUo
U3RyaW5nOjpudW1iZXIoY3VycmVudFRpbWUpKTsKK30KKwordm9pZCBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OnNldER1cmF0aW9uKGZsb2F0IGR1cmF0aW9uKQoreworICAgIHNldEF0dHJp
YnV0ZShtYXhBdHRyLCBTdHJpbmc6Om51bWJlcihpc2Zpbml0ZShkdXJhdGlvbikgPyBkdXJhdGlv
biA6IDApKTsKIH0KIAorCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lIikp
OwpAQCAtODUzLDEyICsxMDIzLDEyIEBAIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgfQogfQogCisvLyBG
SVhNRTogVEhJUyBJUyBOT1QgQ0FMTEVEIEFOWU1PUkUuCiB2b2lkIE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckVsZW1lbnQ6OnVwZGF0ZSgpCiB7CiAgICAgZmxvYXQgdm9sdW1lID0gbWVkaWFFbGVt
ZW50KCktPnZvbHVtZSgpOwogICAgIGlmICh2YWx1ZSgpLnRvRmxvYXQoKSAhPSB2b2x1bWUpCiAg
ICAgICAgIHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZvbHVtZSkpOwotICAgIE1lZGlhQ29udHJv
bElucHV0RWxlbWVudDo6dXBkYXRlKCk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdApAQCAtODcy
LDYgKzEwNDIsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIGlubGluZSBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFGdWxsc2NyZWVuQnV0dG9uKQogeworICAgIGhpZGUo
KTsKIH0KIAogUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4g
TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQpCkBAIC05MTEsMzYgKzEwODIsNDEgQEAgY29uc3QgQXRvbWljU3Ry
aW5nJiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSWQo
KSBjb25zdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBNZWRp
YUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVu
dChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xFbGVt
ZW50KG1lZGlhRWxlbWVudCkKLSAgICAsIG1fY3VycmVudFZhbHVlKDApCi0gICAgLCBtX2lzVmlz
aWJsZSh0cnVlKQotewotfQorY2xhc3MgUmVuZGVyTWVkaWFDb250cm9sVGltZURpc3BsYXkgOiBw
dWJsaWMgUmVuZGVyQmxvY2sgeworcHVibGljOgorICAgIFJlbmRlck1lZGlhQ29udHJvbFRpbWVE
aXNwbGF5KE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Cit9OwogCi1QYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6OnN0eWxlRm9y
RWxlbWVudCgpCitSZW5kZXJNZWRpYUNvbnRyb2xUaW1lRGlzcGxheTo6UmVuZGVyTWVkaWFDb250
cm9sVGltZURpc3BsYXkoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCiB7Ci0g
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IE1lZGlhQ29udHJvbEVsZW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudCgpOwotICAgIGlmICghbV9pc1Zpc2libGUpIHsKLSAgICAgICAgc3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUuZ2V0KCkpOwotICAgICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKDAsIEZpeGVkKSk7Ci0gICAgfQotICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBN
ZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQor
Ly8gV2Ugd2FudCB0aGUgdGltZWxpbmUgc2xpZGVyIHRvIGJlIGF0IGxlYXN0IDEwMCBwaXhlbHMg
d2lkZS4KK3N0YXRpYyBjb25zdCBpbnQgbWluV2lkdGhUb0Rpc3BsYXlUaW1lRGlzcGxheXMgPSA0
NSArIDEwMCArIDQ1OworCit2b2lkIFJlbmRlck1lZGlhQ29udHJvbFRpbWVEaXNwbGF5OjpsYXlv
dXQoKQogewotICAgIGlmICh2aXNpYmxlID09IG1faXNWaXNpYmxlKQorICAgIFJlbmRlckJsb2Nr
OjpsYXlvdXQoKTsKKyAgICAvLyBGSVhNRTogRklHVVJFIE9VVCBIT1cgVE8gQ09MTEFQU0UgTEVO
R1RILCBMSUtFIE9SSUdJTkFMIERFU0lHTi4KKyAgICBSZW5kZXJCb3gqIHRpbWVsaW5lQm94ID0g
dG9SZW5kZXJCb3gocGFyZW50KCkpOworICAgIGlmICghdGltZWxpbmVCb3gpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIHVzZWQgZHVyaW5nIHRoZSBSZW5kZXJNZWRpYTo6bGF5b3V0KCkKLSAgICAvLyBjYWxsLCB3
aGVyZSB3ZSBjYW5ub3QgY2hhbmdlIHRoZSByZW5kZXJlciBhdCB0aGlzIHRpbWUuCi0gICAgaWYg
KCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5zdHlsZSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaW50IHdpZHRoID0gdGltZWxpbmVCb3gtPndpZHRoKCk7CisgICAgc3R5bGUoKS0+c2V0Vmlz
aWJpbGl0eSh3aWR0aCA8IG1pbldpZHRoVG9EaXNwbGF5VGltZURpc3BsYXlzICogc3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpID8gSElEREVOIDogVklTSUJMRSk7Cit9CiAKLSAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgcmVuZGVyZXIoKS0+c2V0
U3R5bGUoc3R5bGUuZ2V0KCkpOworaW5saW5lIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVu
dDo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCkKKyAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50KQorICAgICwg
bV9jdXJyZW50VmFsdWUoMCkKK3sKK30KKworUmVuZGVyT2JqZWN0KiBNZWRpYUNvbnRyb2xUaW1l
RGlzcGxheUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVy
U3R5bGUqKQoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJNZWRpYUNvbnRyb2xUaW1l
RGlzcGxheSh0aGlzKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6
OnNldEN1cnJlbnRWYWx1ZShmbG9hdCB0aW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTWVkaWFDb250cm9sRWxlbWVudHMuaAppbmRleCBmZjk1NDFkMWZjZjM4YTAwYjA2MDkxZDMx
MmM5NmQ2NTNkMGVlMmI4Li5jYmVhNjE2YmM2YmY1ZWJkZDk4NDEwMzFjODM4OTdmZDMzYzY1YTEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVu
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMu
aApAQCAtNzEsMjQgKzcxLDE1IEBAIGVudW0gTWVkaWFDb250cm9sRWxlbWVudFR5cGUgewogCiBI
VE1MTWVkaWFFbGVtZW50KiB0b1BhcmVudE1lZGlhRWxlbWVudChSZW5kZXJPYmplY3QqKTsKIAot
Y2xhc3MgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1l
bnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jv
b3RFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwotCi0gICAgdmlydHVhbCB2b2lk
IGRldGFjaCgpOwotICAgIAotcHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxl
bWVudChIVE1MTWVkaWFFbGVtZW50Kik7Ci19OwotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIGNsYXNzIE1lZGlhQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1l
bnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2b2lkIGF0dGFj
aFRvUGFyZW50KEVsZW1lbnQqKTsKLSAgICB2b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQgdXBkYXRl
U3R5bGUoKTsKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBJbmxp
bmVTdHlsYWJsZUVsZW1lbnQuCisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBzaG93KCk7Cisg
ICAgdm9pZCBtYWtlT3BhcXVlKCk7CisgICAgdm9pZCBtYWtlVHJhbnNwYXJlbnQoKTsKIAogICAg
IHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdCA9IDA7
CiAKQEAgLTk3LDYxICs4OCwxMDQgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIE1lZGlhQ29u
dHJvbEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogCi0gICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KCk7CisvLyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudCgpOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbV9tZWRpYUVsZW1l
bnQ7ICAgCisgICAgYm9vbCBtX29wYXF1ZSA6IDE7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKK2NsYXNzIE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ7Citj
bGFzcyBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFJl
dHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sU3RhdHVzRGlz
cGxheUVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ7
CitjbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ7Citj
bGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFZv
bHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
QnV0dG9uRWxlbWVudDsKKwogY2xhc3MgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50IDogcHVibGlj
IE1lZGlhQ29udHJvbEVsZW1lbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhQ29udHJvbFBhbmVsRWxlbWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVk
aWFFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCByZXNldCgpOworICAgIHZv
aWQgcGxheSgpOworICAgIHZvaWQgcGxheWluZygpOworICAgIHZvaWQgcGF1c2UoKTsKKworICAg
IHZvaWQgcmVwb3J0ZWRFcnJvcigpOworICAgIHZvaWQgY2hhbmdlZE5ldHdvcmtTdGF0ZSgpOwor
ICAgIHZvaWQgbG9hZGVkTWV0YWRhdGEoKTsKKyAgICB2b2lkIGNoYW5nZWRDbG9zZWRDYXB0aW9u
c1Zpc2liaWxpdHkoKTsKKworICAgIHZvaWQgc2hvd1ZvbHVtZVNsaWRlcigpOworICAgIHZvaWQg
aGlkZVZvbHVtZVNsaWRlcigpOwogCiBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwotfTsKIAorICAgIE1lZGlhQ29udHJvbFJld2luZEJ1
dHRvbkVsZW1lbnQqIG1fcmV3aW5kQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFBsYXlCdXR0b25F
bGVtZW50KiBtX3BsYXlCdXR0b247CisgICAgTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbkVsZW1lbnQqIG1fcmV0dXJuVG9SZWFsVGltZUJ1dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xT
dGF0dXNEaXNwbGF5RWxlbWVudCogbV9zdGF0dXNEaXNwbGF5OworICAgIE1lZGlhQ29udHJvbFRp
bWVsaW5lQ29udGFpbmVyRWxlbWVudCogbV90aW1lbGluZUNvbnRhaW5lcjsKKyAgICBNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQqIG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b247CisgICAgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQqIG1fbXV0ZUJ1
dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KiBtX3Zv
bHVtZVNsaWRlckNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxl
bWVudCogbV9mdWxsU2NyZWVuQnV0dG9uOworfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCitjbGFzcyBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50Owor
Y2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVGlt
ZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OworCiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUNv
bnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50
PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
Q29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0KTsKKyAgICB2
b2lkIHNldER1cmF0aW9uKGZsb2F0KTsKKyAgICB2b2lkIHVwZGF0ZVRpbWVEaXNwbGF5KCk7CiAK
IHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KEhUTUxN
ZWRpYUVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3Bs
YXlUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVy
U3R5bGUqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5
cGUoKSBjb25zdDsKKworICAgIE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQq
IG1fY3VycmVudFRpbWVEaXNwbGF5OworICAgIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCog
bV90aW1lbGluZTsKKyAgICBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQq
IG1fdGltZVJlbWFpbmluZ0Rpc3BsYXk7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKK2NsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ7CitjbGFzcyBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDsKKwogY2xhc3MgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xF
bGVtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwotCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKLSAg
ICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSB7IHJldHVybiBt
X2lzVmlzaWJsZTsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oaW50IHgsIGludCB5KTsKLSAgICBi
b29sIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBjcmVhdGUoSFRN
TE1lZGlhRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKICAgICBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7
CiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0
OwogCi0gICAgYm9vbCBtX2lzVmlzaWJsZTsKLSAgICBpbnQgbV94LCBtX3k7CisgICAgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCogbV9zbGlkZXI7CisgICAgTWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQqIG1fbXV0ZUJ1dHRvbjsKIH07CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2Niw3ICsyMDAsNiBAQCBwcml2YXRlOgogICAg
IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKIAog
ICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogCiAgICAg
ZW51bSBTdGF0ZUJlaW5nRGlzcGxheWVkIHsgTm90aGluZywgTG9hZGluZywgTGl2ZUJyb2FkY2Fz
dCB9OwpAQCAtMTc3LDExICsyMTAsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdm9p
ZCBhdHRhY2hUb1BhcmVudChFbGVtZW50Kik7Ci0gICAgdm9pZCB1cGRhdGUoKTsKLSAgICB2b2lk
IHVwZGF0ZVN0eWxlKCk7Ci0KLSAgICBib29sIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1Bv
aW50KTsKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBJbmxpbmVT
dHlsYWJsZUVsZW1lbnQuCisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBzaG93KCk7CiAKICAg
ICBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzcGxheVR5cGU7IH0KIApAQCAtMTkzLDExICsyMjQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBzZXREaXNwbGF5VHlwZShNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7CiAKIHByaXZhdGU6Ci0g
ICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKFJlbmRlclN0eWxlKik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlRm9yRWxlbWVudCgpOwotCiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFDb250cm9sRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVE
aXNwbGF5VHlwZSgpIHsgfQpAQCAtMjQyLDExICsyNjgsMTIgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1l
ZGlhRWxlbWVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqKTsKKyAgICAvLyBGSVhNRTogUEVSSEFQUyBNQUtFIEVYUExJQ0lUIFBMQVkvUEFVU0UgQ0FM
TFMuCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAKIHByaXZhdGU6CiAg
ICAgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogCi0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiB9OwogCkBAIC0zMzEsMTEgKzM1
OCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwog
CiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKIAogcHJpdmF0ZToKICAgICBNZWRpYUNvbnRy
b2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwog
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiB9OyAgICAKIApAQCAtMzQ2
LDcgKzM3Myw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotICAgIHZvaWQgdXBkYXRlKGJvb2wg
dXBkYXRlRHVyYXRpb24gPSB0cnVlKTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0KTsKKyAg
ICB2b2lkIHNldER1cmF0aW9uKGZsb2F0KTsKIAogcHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwpAQCAtMzg3LDggKzQxNSw2IEBAIHBy
aXZhdGU6CiAKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCA6IHB1YmxpYyBN
ZWRpYUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7
Ci0KICAgICB2b2lkIHNldEN1cnJlbnRWYWx1ZShmbG9hdCk7CiAgICAgZmxvYXQgY3VycmVudFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KIApAQCAtMzk2LDkgKzQyMiw5
IEBAIHByb3RlY3RlZDoKICAgICBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQoSFRNTE1l
ZGlhRWxlbWVudCopOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGVGb3JFbGVtZW50KCk7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogICAgIGZsb2F0IG1fY3Vy
cmVudFZhbHVlOwotICAgIGJvb2wgbV9pc1Zpc2libGU7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC00MjYsMTUgKzQ1Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xT
aGFkb3dSb290IDogcHVibGljIFJlbmRlckJsb2NrIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJNZWRp
YUNvbnRyb2xTaGFkb3dSb290KEVsZW1lbnQqIGUpIDogUmVuZGVyQmxvY2soZSkgeyB9Ci0gICAg
dm9pZCBzZXRQYXJlbnQoUmVuZGVyT2JqZWN0KiBwKSB7IFJlbmRlck9iamVjdDo6c2V0UGFyZW50
KHApOyB9Ci19OwotICAgIAorIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB9
IC8vbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEu
Y3BwCmluZGV4IGJiYjU4ODA2YmQwNTJlNTY1OWVlMzgyYzFlMjg5MDkxYzZmMzM4MzQuLjNjYzk2
MDk2OWYwZTY3MWZkYWVhZTQ4OGUzM2VhNGUwN2I4NjM3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1lZGlhLmNwcApAQCAtMjksMjIgKzI5LDE4IEBACiAjaW5jbHVkZSAiUmVu
ZGVyTWVkaWEuaCIKIAogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbHMuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyTWVkaWE6
OlJlbmRlck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvKQogICAgIDogUmVuZGVySW1hZ2Uo
dmlkZW8pCi0gICAgLCBtX2NvbnRyb2xzKG5ldyBNZWRpYUNvbnRyb2xzKHZpZGVvKSkKIHsKICAg
ICBzZXRJbWFnZVJlc291cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsKIH0KIAog
UmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvLCBjb25zdCBJ
bnRTaXplJiBpbnRyaW5zaWNTaXplKQogICAgIDogUmVuZGVySW1hZ2UodmlkZW8pCi0gICAgLCBt
X2NvbnRyb2xzKG5ldyBNZWRpYUNvbnRyb2xzKHZpZGVvKSkKIHsKICAgICBzZXRJbWFnZVJlc291
cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsKICAgICBzZXRJbnRyaW5zaWNTaXpl
KGludHJpbnNpY1NpemUpOwpAQCAtNTQsMzIgKzUwLDI0IEBAIFJlbmRlck1lZGlhOjp+UmVuZGVy
TWVkaWEoKQogewogfQogCi12b2lkIFJlbmRlck1lZGlhOjpkZXN0cm95KCkKLXsKLSAgICBtX2Nv
bnRyb2xzLT5kZXN0cm95KCk7Ci0gICAgUmVuZGVySW1hZ2U6OmRlc3Ryb3koKTsKLX0KLQorLy8g
RklYTUU6IE1vdmUgdG8gUmVuZGVyVmlkZW8KIEhUTUxNZWRpYUVsZW1lbnQqIFJlbmRlck1lZGlh
OjptZWRpYUVsZW1lbnQoKSBjb25zdAogeyAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1l
ZGlhRWxlbWVudCo+KG5vZGUoKSk7IAogfQogCi12b2lkIFJlbmRlck1lZGlhOjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQot
ewotICAgIFJlbmRlckltYWdlOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Ci0gICAg
bV9jb250cm9scy0+dXBkYXRlU3R5bGUoKTsKLX0KLQogdm9pZCBSZW5kZXJNZWRpYTo6bGF5b3V0
KCkKIHsKICAgICBJbnRTaXplIG9sZFNpemUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKIAog
ICAgIFJlbmRlckltYWdlOjpsYXlvdXQoKTsKIAotICAgIFJlbmRlckJveCogY29udHJvbHNSZW5k
ZXJlciA9IG1fY29udHJvbHMtPnJlbmRlckJveCgpOworICAgIC8vIEZJWE1FOiBBU1NVTUVTIEZJ
UlNUIENISUxEIElTIFNIQURPVyBST09UIEJPWC4KKyAgICAvLyBGSVhNRTogTUFLRSBQQVJUIE9G
IE1lZGlhQ29udHJvbHMuCisgICAgUmVuZGVyQm94KiBjb250cm9sc1JlbmRlcmVyID0gdG9SZW5k
ZXJCb3gobV9jaGlsZHJlbi5maXJzdENoaWxkKCkpOwogICAgIGlmICghY29udHJvbHNSZW5kZXJl
cikKICAgICAgICAgcmV0dXJuOworCiAgICAgSW50U2l6ZSBuZXdTaXplID0gY29udGVudEJveFJl
Y3QoKS5zaXplKCk7CiAgICAgaWYgKG5ld1NpemUgPT0gb2xkU2l6ZSAmJiAhY29udHJvbHNSZW5k
ZXJlci0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODksOSArNzcsNiBAQCB2
b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQogICAgIC8vIGFuZCB0aGlzIG1ldGhvZCB3aWxsIGJl
IGNhbGxlZCBtYW55IHRpbWVzIHBlciBzZWNvbmQgZHVyaW5nIHBsYXliYWNrLCB1c2UgYSBMYXlv
dXRTdGF0ZU1haW50YWluZXI6CiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVy
KHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1Jl
ZmxlY3Rpb24oKSB8fCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKIAot
ICAgIG1fY29udHJvbHMtPnVwZGF0ZVRpbWVEaXNwbGF5VmlzaWJpbGl0eSgpOwotCi0gICAgY29u
dHJvbHNSZW5kZXJlci0+c2V0TG9jYXRpb24oYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwg
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwogICAgIGNvbnRyb2xzUmVuZGVyZXItPnN0eWxl
KCktPnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKICAgICBjb250
cm9sc1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwogICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNl
KTsKQEAgLTEwMSw5ICs4Niw5IEBAIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91dCgpCiAgICAgc3Rh
dGVQdXNoZXIucG9wKCk7CiB9CiAKLXZvaWQgUmVuZGVyTWVkaWE6OnVwZGF0ZUZyb21FbGVtZW50
KCkKK3ZvaWQgUmVuZGVyTWVkaWE6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKIHsKLSAgICBtX2NvbnRyb2xzLT51cGRhdGUoKTsKKyAgICBSZW5kZXJJbWFnZTo6
cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCmluZGV4IDc2NThlZjZjMTg0YzM5ODMy
ZTRjNWQ4MmY4Zjg3YTViNjUwYjUwMzEuLjU5NjRlYTRlNGM1ZGMxZDU2NDAzNWNhMThiOTc2YzYw
MTBlYjkyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRp
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCkBAIC0zMyw3
ICszMyw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7
Ci1jbGFzcyBNZWRpYUNvbnRyb2xzOwogCiBjbGFzcyBSZW5kZXJNZWRpYSA6IHB1YmxpYyBSZW5k
ZXJJbWFnZSB7CiBwdWJsaWM6CkBAIC00NSwyOSArNDQsMjEgQEAgcHVibGljOgogICAgIFJlbmRl
ck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogCiAg
ICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3Q7Ci0gICAgTWVkaWFDb250
cm9scyogY29udHJvbHMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxl
bWVudCgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcml2
YXRlOgorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsg
cmV0dXJuIGNoaWxkcmVuKCk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxk
TGlzdCogdmlydHVhbENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogCi0g
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTWVkaWEiOyB9CiAgICAgdmlydHVh
bCBib29sIGlzTWVkaWEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0KLSAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpOwotCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIE93blB0cjxNZWRpYUNvbnRyb2xz
PiBtX2NvbnRyb2xzOwogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogfTsK
IApAQCAtNzcsMTEgKzY4LDYgQEAgaW5saW5lIFJlbmRlck1lZGlhKiB0b1JlbmRlck1lZGlhKFJl
bmRlck9iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZWRpYSo+
KG9iamVjdCk7CiB9CiAKLWlubGluZSBNZWRpYUNvbnRyb2xzKiBSZW5kZXJNZWRpYTo6Y29udHJv
bHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRyb2xzLmdldCgpOwotfQotCiAvLyBUaGlz
IHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvUmVu
ZGVyTWVkaWEoY29uc3QgUmVuZGVyTWVkaWEqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCmluZGV4IDBhM2Y4Zjc0OWE2ZWViYWRmZmVl
MzQzMTJhOTNhZDU1NDY4YzI2ZmIuLmRkNThjZDJlNDg4MzA1NmM0NTg5MDc4YzQyOTdlMDg0NGMw
OGVkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNv
bnRyb2xzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250
cm9scy5jcHAKQEAgLTE3OSwxNiArMTc5LDE2IEBAIGJvb2wgUmVuZGVyTWVkaWFDb250cm9sczo6
cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0LCBSCiAK
ICNlbmRpZgogCi1JbnRQb2ludCBSZW5kZXJNZWRpYUNvbnRyb2xzOjp2b2x1bWVTbGlkZXJPZmZz
ZXRGcm9tTXV0ZUJ1dHRvbihOb2RlKiBtdXRlQnV0dG9uLCBjb25zdCBJbnRTaXplJiBzaXplKQor
SW50UG9pbnQgUmVuZGVyTWVkaWFDb250cm9sczo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVC
dXR0b24oUmVuZGVyQm94KiBtdXRlQnV0dG9uQm94LCBjb25zdCBJbnRTaXplJiBzaXplKQogewog
ICAgIHN0YXRpYyBjb25zdCBpbnQgeE9mZnNldCA9IC00OwogICAgIHN0YXRpYyBjb25zdCBpbnQg
eU9mZnNldCA9IDU7CiAKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBtdXRlQnV0dG9uLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgaW50IHkgPSB5T2Zmc2V0ICogem9v
bUxldmVsICsgbXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCktPm9mZnNldEhlaWdodCgpIC0gc2l6ZS5o
ZWlnaHQoKTsKLSAgICBGbG9hdFBvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbi0+cmVuZGVyZXIo
KS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQobXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCktPm9m
ZnNldExlZnQoKSwgeSksIHRydWUsIHRydWUpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IG11dGVC
dXR0b25Cb3gtPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpbnQgeSA9IHlPZmZzZXQg
KiB6b29tTGV2ZWwgKyBtdXRlQnV0dG9uQm94LT5vZmZzZXRIZWlnaHQoKSAtIHNpemUuaGVpZ2h0
KCk7CisgICAgRmxvYXRQb2ludCBhYnNQb2ludCA9IG11dGVCdXR0b25Cb3gtPmxvY2FsVG9BYnNv
bHV0ZShGbG9hdFBvaW50KG11dGVCdXR0b25Cb3gtPm9mZnNldExlZnQoKSwgeSksIHRydWUsIHRy
dWUpOwogICAgIGlmIChhYnNQb2ludC55KCkgPCAwKQotICAgICAgICB5ID0gbXV0ZUJ1dHRvbi0+
cmVuZGVyQm94KCktPmhlaWdodCgpOworICAgICAgICB5ID0gbXV0ZUJ1dHRvbkJveC0+aGVpZ2h0
KCk7CiAgICAgcmV0dXJuIEludFBvaW50KHhPZmZzZXQgKiB6b29tTGV2ZWwsIHkpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaAppbmRleCA0
YzY2M2JjZmM5NjdiNjk1YTg3MWExYjc5MTNmNDJmMmI4N2RiZWU4Li4zZDNiMDE3NjU0ZWY0Mjkx
OTVjZGY0YjQ5OGYxZWIxNDRjYjE4NzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBib29sIHBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUs
IFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICBz
dGF0aWMgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqKTsKICNl
bmRpZgotICAgIHN0YXRpYyBJbnRQb2ludCB2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRv
bihOb2RlKiwgY29uc3QgSW50U2l6ZSYpOworICAgIHN0YXRpYyBJbnRQb2ludCB2b2x1bWVTbGlk
ZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJik7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcAppbmRleCBiMGI3NzM1ODU2ZTcxOTEzOTE0NDQ5ZTFjZjhjMjc1MTQ2NTc4Nzc3Li5j
NWEyODBmZDJjNDlhZjY2MjQzMWE1M2QyN2ExOGE0ZDJhYjRmZTczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTQ4MSwzMiArNDgxLDEwIEBAIGJvb2wgUmVu
ZGVyVGhlbWU6OnBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywKIH0KIAogI2lmIEVOQUJMRShWSURFTykKLWJvb2wgUmVuZGVyVGhlbWU6
OmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KFJlbmRlck9iamVjdCogbywgY29uc3QgSW50UG9pbnQm
IGFic1BvaW50KQotewotICAgIGlmICghby0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gby0+YWJzb2x1dGVUb0xvY2FsKGFic1Bv
aW50LCBmYWxzZSwgdHJ1ZSk7ICAvLyByZXNwZWN0IHRyYW5zZm9ybXMKLSAgICByZXR1cm4gdG9S
ZW5kZXJCb3gobyktPmJvcmRlckJveFJlY3QoKS5jb250YWlucyhyb3VuZGVkSW50UG9pbnQobG9j
YWxQb2ludCkpOwotfQogCi1ib29sIFJlbmRlclRoZW1lOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRy
b2xQYXJ0KENvbnRyb2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGUpCitib29sIFJlbmRlclRoZW1lOjpz
aG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBFbGVtZW50KikKIHsKLSAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFF
bGVtZW50Kj4oZSk7Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBNZWRpYU11dGVCdXR0
b25QYXJ0OgotICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpOwotICAgIGNh
c2UgTWVkaWFSZXdpbmRCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5t
b3ZpZUxvYWRUeXBlKCkgIT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Ci0gICAgY2FzZSBNZWRp
YVJldHVyblRvUmVhbHRpbWVCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50
LT5tb3ZpZUxvYWRUeXBlKCkgPT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Ci0gICAgY2FzZSBN
ZWRpYUZ1bGxzY3JlZW5CdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5z
dXBwb3J0c0Z1bGxzY3JlZW4oKTsKLSAgICBjYXNlIE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5oYXNDbG9zZWRDYXB0aW9u
cygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogU3RyaW5nIFJlbmRlclRoZW1lOjpmb3JtYXRNZWRpYUNvbnRyb2xzVGlt
ZShmbG9hdCB0aW1lKSBjb25zdApAQCAtNTM3LDEyICs1MTUsMTIgQEAgU3RyaW5nIFJlbmRlclRo
ZW1lOjpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwg
ZmxvYXQgZHUKICAgICByZXR1cm4gZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUg
LSBkdXJhdGlvbik7CiB9CiAKLUludFBvaW50IFJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZz
ZXRGcm9tTXV0ZUJ1dHRvbihOb2RlKiBtdXRlQnV0dG9uLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAorSW50UG9pbnQgUmVuZGVyVGhlbWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0
dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvblJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAogewogICAgIGludCB5ID0gLXNpemUuaGVpZ2h0KCk7Ci0gICAgRmxvYXRQb2ludCBhYnNQ
b2ludCA9IG11dGVCdXR0b24tPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50
KG11dGVCdXR0b24tPnJlbmRlckJveCgpLT5vZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0cnVlKTsK
KyAgICBGbG9hdFBvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvblJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uUmVuZGVyZXItPm9mZnNldExlZnQoKSwgeSksIHRy
dWUsIHRydWUpOwogICAgIGlmIChhYnNQb2ludC55KCkgPCAwKQotICAgICAgICB5ID0gbXV0ZUJ1
dHRvbi0+cmVuZGVyQm94KCktPmhlaWdodCgpOworICAgICAgICB5ID0gbXV0ZUJ1dHRvblJlbmRl
cmVyLT5oZWlnaHQoKTsKICAgICByZXR1cm4gSW50UG9pbnQoMCwgeSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggYmNlOGQ3ODU1YWU4OWMxNjU3MzA3ZTU1
N2E5M2VhN2IyMGQ5ZDgwOC4uNjAyYWNkNmRiZjBiN2VhMDdkZDNiOWMwMDRkOTBiY2Q3MTBmMzM3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKQEAgLTE3OCw3ICsxNzgs
NiBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgLy8gTWVkaWEgY29udHJvbHMK
LSAgICB2aXJ0dWFsIGJvb2wgaGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVuZGVy
TWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCopOwogICAgIHZpcnR1YWwgYm9v
bCB1c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBkb3VibGUgbWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCkgeyByZXR1cm4gMC4x
OyB9CkBAIC0xODgsNyArMTg3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1h
dE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJh
dGlvbikgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0aGUgbWVkaWEgdm9sdW1lIHNsaWRl
ciBjb250YWluZXIncyBvZmZzZXQgZnJvbSB0aGUgbXV0ZSBidXR0b24uCi0gICAgdmlydHVhbCBJ
bnRQb2ludCB2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihOb2RlKiwgY29uc3QgSW50
U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJv
bU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoTUVURVJfVEFHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMuaAppbmRleCA5ODM3YzJhZDcxMTZlNjAwMWJkM2UyOTE4NTFiZTI0ZThkNWI4ZmIxLi5k
OTUxZmY2MzA4OWU1ZmQ3MDEwZTMxYjFmOTE5NjcyMzRhZmQ3NDY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaApAQCAtMTY2LDcgKzE2Niw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9s
UGFydCwgRWxlbWVudCopOwogICAgIHZpcnR1YWwgYm9vbCB1c2VzTWVkaWFDb250cm9sU3RhdHVz
RGlzcGxheSgpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShS
ZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IHZvbHVtZVNsaWRlck9m
ZnNldEZyb21NdXRlQnV0dG9uKE5vZGUqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisgICAgdmly
dHVhbCBJbnRQb2ludCB2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gq
LCBjb25zdCBJbnRTaXplJikgY29uc3Q7CiAjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAzNTEwYTgxYWRlMzRhNmExZDkzODE5
NjA1ZDYyYzI3ZWI1YjRmMjFmLi42MzQ0YmZlYzI1ZDdkMDkyZDc1OTc1NzU4Yjg4Zjk2YjRkYWJk
ZGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0x
OTg3LDkgKzE5ODcsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzTWVkaWFDb250cm9sU3Rh
dHVzRGlzcGxheSgpCiAgICAgcmV0dXJuIG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0gTWVkaWFD
b250cm9sbGVyVGhlbWVRdWlja1RpbWU7CiB9CiAKLUludFBvaW50IFJlbmRlclRoZW1lTWFjOjp2
b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihOb2RlKiBtdXRlQnV0dG9uLCBjb25zdCBJ
bnRTaXplJiBzaXplKSBjb25zdAorSW50UG9pbnQgUmVuZGVyVGhlbWVNYWM6OnZvbHVtZVNsaWRl
ck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvblJlbmRlcmVyLCBjb25z
dCBJbnRTaXplJiBzaXplKSBjb25zdAogewotICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xz
Ojp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihtdXRlQnV0dG9uLCBzaXplKTsKKyAg
ICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sczo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVC
dXR0b24obXV0ZUJ1dHRvblJlbmRlcmVyLCBzaXplKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84627</attachid>
            <date>2011-03-03 14:21:10 -0800</date>
            <delta_ts>2011-03-08 09:13:46 -0800</delta_ts>
            <desc>WIP: Another checkpoint.</desc>
            <filename>bug-53020-20110303142109.patch</filename>
            <type>text/plain</type>
            <size>87289</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAyODEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9tZWRpYUNvbnRyb2xzLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNz
cwppbmRleCA4ODE0NGI0NmRmZDMzZGYwMzU1OTk5OGEzMmE1M2IzZGU5N2I0N2U5Li4wYWIxNzll
ZWFhY2RlMzM2ZmYwNDZlZTQ4MTM5YWI1Zjc1MGVhZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlh
Q29udHJvbHMuY3NzCkBAIC0yOSw2ICsyOSwxMyBAQCBhdWRpbyB7CiAgICAgaGVpZ2h0OiAxNnB4
OwogfQogCis6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMgeworICAgIHdpZHRoOiBpbmhlcml0Owor
ICAgIGhlaWdodDogaW5oZXJpdDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZGlzcGxh
eTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CiAgICAgZGlzcGxheTogLXdlYmtpdC1i
b3g7CiAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOwpAQCAtODAsNiArODcsMTAg
QEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUtY29udGFpbmVyLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtY3VycmVudC10aW1lLWRpc3BsYXksIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1
cnJlbnQtdGltZS1kaXNwbGF5IHsKICAgICBkaXNwbGF5OiBub25lOworICAgIG92ZXJmbG93OiBo
aWRkZW47CisgICAgLXdlYmtpdC1ib3gtZmxleDogMC4xOworICAgIHdoaXRlLXNwYWNlOiBub3dy
YXA7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1j
b250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5IHsKQEAgLTk5LDExICsxMTAsOSBAQCBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtdGltZWxpbmUgewogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1
bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1l
LXNsaWRlci1jb250YWluZXIgewotICAgIGRpc3BsYXk6IG5vbmU7CiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNv
bnRyb2xzLXZvbHVtZS1zbGlkZXIgewotICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgYmFja2dyb3Vu
ZC1jb2xvcjogaW5pdGlhbDsKICAgICBib3JkZXI6IGluaXRpYWw7CiAgICAgY29sb3I6IGluaGVy
aXQ7CkBAIC0xNjYsNyArMTc1LDYgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9n
Z2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGkKIAogYXVkaW86
Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiwgdmlkZW86
Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiB7CiAgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uOwotICAg
IGRpc3BsYXk6IG5vbmU7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKICAgICBib3Jk
ZXI6IGluaXRpYWw7CiAgICAgY29sb3I6IGluaGVyaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9sc1F1aWNrVGltZS5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
bWVkaWFDb250cm9sc1F1aWNrVGltZS5jc3MKaW5kZXggMDZmMzFhZTVhOTRmODAxNzk5N2JhYjBm
ZWY1MmFiZWNiNGI5YmUyMC4uNjNlODQ1NjA3Y2Y1ZTRhODVjZmZiNjU3YzQ0ZGM1YzliNmIzNTAx
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdWlja1RpbWUu
Y3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXVpY2tUaW1lLmNzcwpA
QCAtNjksMTQgKzY5LDE0IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5l
LWNvbnRhaW5lciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtCiBhdWRpbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXkgewogICAgIC13ZWJraXQtdXNlci1zZWxl
Y3Q6IG5vbmU7CiAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Ci0gICAgLXdlYmtpdC1ib3gtZmxl
eDogMDsKLSAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1ib3gtYWxp
Z246IGNlbnRlcjsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIC13ZWJraXQtYm94LWZsZXg6
IDAuMTsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsK
KwogICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7
CiAgICAgZm9udC1zaXplOiA5cHg7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICB3aWR0aDog
NDVweDsKICAgICBjb2xvcjogd2hpdGU7CiAgICAgdGV4dC1zaGFkb3c6IGJsYWNrIDBweCAxcHgg
MXB4OwogCkBAIC05MSwxNCArOTEsMTQgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
Y3VycmVudC10aW1lLWRpc3BsYXksIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2wKIGF1ZGlv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXksIHZpZGVvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXkgewogICAgIC13ZWJr
aXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Ci0gICAgLXdl
YmtpdC1ib3gtZmxleDogMDsKLSAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7Ci0gICAgLXdl
YmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIC13ZWJr
aXQtYm94LWZsZXg6IDAuMTsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIHRleHQtYWxp
Z246IGNlbnRlcjsKKwogICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICBmb250OiAtd2Via2l0LXNt
YWxsLWNvbnRyb2w7CiAgICAgZm9udC1zaXplOiA5cHg7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsK
LSAgICB3aWR0aDogNDVweDsKICAgICBjb2xvcjogd2hpdGU7CiAgICAgdGV4dC1zaGFkb3c6IGJs
YWNrIDBweCAxcHggMXB4OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAppbmRleCAyZWFkOWI4M2UxY2JiMmUzM2MzNjc2ZDZkMjE2ODhhOTVlYmFiNDBjLi43MmI5ODA3
MGZiYzJmZGUzNzFhNDViMmIyYWYyNTZlODc0ZWVkNTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFs
dWF0b3IuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgpAQCAt
MTYxLDYgKzE2Miw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX3NlbmRQcm9n
cmVzc0V2ZW50cyh0cnVlKQogICAgICwgbV9pc0Z1bGxzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2Ns
b3NlZENhcHRpb25zVmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQogI2lm
IEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRl
KGZhbHNlKQogI2VuZGlmCkBAIC0yMTgsMTIgKzIyMCwxNCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMp
CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGNvbnRyb2xzQXR0cikgewogI2lmICFF
TkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICAgICAgaWYgKCFpc1ZpZGVvKCkgJiYg
YXR0YWNoZWQoKSAmJiAoY29udHJvbHMoKSAhPSAocmVuZGVyZXIoKSAhPSAwKSkpIHsKLSAgICAg
ICAgICAgIGRldGFjaCgpOwotICAgICAgICAgICAgYXR0YWNoKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxl
bWVudCgpOworICAgICAgICBpZiAoY29udHJvbHMoKSkgeworICAgICAgICAgICAgaWYgKCFoYXNN
ZWRpYUNvbnRyb2xzKCkpIHsKKyAgICAgICAgICAgICAgICBlbnN1cmVNZWRpYUNvbnRyb2xzKCk7
CisgICAgICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXNldCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5zaG93KCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5oaWRl
KCk7CiAjZWxzZQogICAgICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgICAgICBtX3BsYXllci0+
c2V0Q29udHJvbHMoY29udHJvbHMoKSk7CkBAIC0zMTYsNiArMzIwLDcgQEAgYm9vbCBIVE1MTWVk
aWFFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKIAogICAgIHJl
dHVybiB0cnVlOwogI2Vsc2UKKyAgICAvLyBGSVhNRTogV1RGIElTIFRISVM/IQogICAgIHJldHVy
biBjb250cm9scygpID8gSFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpIDogZmFs
c2U7CiAjZW5kaWYKIH0KQEAgLTM2OSw4ICszNzQsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmF0dGFjaCgpCiAKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlRnJvbUVsZW1lbnQoKTsKKwogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQot
ICAgIGVsc2UgaWYgKG1fcHJveHlXaWRnZXQpIHsKKyAgICBpZiAobV9wcm94eVdpZGdldCkgewog
ICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgICAgICBGcmFt
ZUxvYWRlciogbG9hZGVyID0gZnJhbWUgPyBmcmFtZS0+bG9hZGVyKCkgOiAwOwogICAgICAgICBp
ZiAobG9hZGVyKQpAQCAtODg5LDYgKzg5NSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0
TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3RhdGUpCiAgICAgICAgICAg
ICBub25lU3VwcG9ydGVkKCk7CiAKICAgICAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7CisgICAg
ICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCkt
PnJlcG9ydGVkRXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTE3LDYgKzky
NSw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgc3RhdGUpCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19J
RExFOwogICAgICAgICBtX2NvbXBsZXRlbHlMb2FkZWQgPSB0cnVlOwogICAgIH0KKworICAgIGlm
IChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2hhbmdlZE5l
dHdvcmtTdGF0ZSgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVh
ZHlTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQpAQCAtOTY2LDYgKzk3Nyw4IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBzdGF0
ZSkKICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfTUVUQURBVEEgJiYgb2xkU3RhdGUgPCBI
QVZFX01FVEFEQVRBKSB7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmR1cmF0
aW9uY2hhbmdlRXZlbnQpOwogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2Fk
ZWRtZXRhZGF0YUV2ZW50KTsKKyAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsKICAgICAgICAgaWYgKHJl
bmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwog
ICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKQEAgLTE1MjUsOCArMTUzOCw4IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICAgICAgaWYgKCFwcm9jZXNz
aW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpKSB7CiAgICAgICAgICAgICBpZiAobV9wbGF5ZXIpIHsK
ICAgICAgICAgICAgICAgICBtX3BsYXllci0+c2V0TXV0ZWQobV9tdXRlZCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUZyb21FbGVtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMo
KSkKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkTXV0ZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLnZvbHVtZWNoYW5nZUV2ZW50KTsKQEAgLTE1OTMsNiArMTYwNiwxMSBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnBsYXliYWNrUHJvZ3Jlc3NUaW1lckZpcmVkKFRpbWVyPEhUTUxNZWRpYUVs
ZW1lbnQ+KikKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2NoZWR1bGVUaW1ldXBkYXRlRXZlbnQo
dHJ1ZSk7CisgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkgeworICAgICAgICBpZiAoIW1fbW91
c2VPdmVyICYmIGNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPm1ha2VU
cmFuc3BhcmVudCgpOworICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXlpbmcoKTsKKyAgICB9
CiAgICAgCiAgICAgLy8gRklYTUU6IGRlYWwgd2l0aCBjdWUgcmFuZ2VzIGhlcmUKIH0KQEAgLTIx
MDEsOCArMjExOSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVm9sdW1lKCkKICAg
ICAgICAgbV9wbGF5ZXItPnNldFZvbHVtZShtX3ZvbHVtZSAqIHZvbHVtZU11bHRpcGxpZXIpOwog
ICAgIH0KICAgICAKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlRnJvbUVsZW1lbnQoKTsKKyAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICBt
ZWRpYUNvbnRyb2xzKCktPmNoYW5nZWRWb2x1bWUobV92b2x1bWUpOwogfQogCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCkBAIC0yMTE1LDYgKzIxMzMsOCBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgICAgICBtX3BsYXll
ci0+cGF1c2UoKTsKICAgICAgICAgcmVmcmVzaENhY2hlZFRpbWUoKTsKICAgICAgICAgbV9wbGF5
YmFja1Byb2dyZXNzVGltZXIuc3RvcCgpOworICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygp
KQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5wYXVzZSgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIApAQCAtMjEzOCw2ICsyMTU4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAgICAgICAgICAgbV9wbGF5ZXItPnBsYXkoKTsKICAgICAg
ICAgfQogCisgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRp
YUNvbnRyb2xzKCktPnBsYXkoKTsKICAgICAgICAgc3RhcnRQbGF5YmFja1Byb2dyZXNzVGltZXIo
KTsKICAgICAgICAgbV9wbGF5aW5nID0gdHJ1ZTsKIApAQCAtMjE1NCw2ICsyMTc2LDkgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogCiAgICAgICAgIGlmIChjb3Vs
ZFBsYXlJZkVub3VnaERhdGEoKSkKICAgICAgICAgICAgIG1fcGxheWVyLT5wcmVwYXJlVG9QbGF5
KCk7CisKKyAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlh
Q29udHJvbHMoKS0+cGF1c2UoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHJlbmRlcmVyKCkpCkBA
IC0yMzAyLDEwICsyMzI3LDE4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgaWYgKHdpZGdldCkKICAgICAgICAgd2lkZ2V0LT5o
YW5kbGVFdmVudChldmVudCk7CiAjZWxzZQotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPmlzTWVkaWEoKSkKLSAgICAgICAgdG9SZW5kZXJNZWRpYShyZW5kZXJlcigpKS0+Y29udHJv
bHMoKS0+Zm9yd2FyZEV2ZW50KGV2ZW50KTsKLSAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7Cisg
ICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4o
ZXZlbnQpOworICAgICAgICBpZiAobW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpICE9IHRoaXMp
IHsKKyAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92
ZXJFdmVudCkgeworICAgICAgICAgICAgICAgIG1fbW91c2VPdmVyID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpICYmIGNvbnRyb2xzKCkgJiYgIWNhblBsYXko
KSkKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5tYWtlT3BhcXVlKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
b3V0RXZlbnQpCisgICAgICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKwogICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
ICNlbmRpZgogfQpAQCAtMjQ3OSw2ICsyNTEyLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCBjbG9zZWRDYXB0aW9uVmlzaWJsZSkKIAogICAg
IG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlID0gY2xvc2VkQ2FwdGlvblZpc2libGU7CiAgICAgbV9w
bGF5ZXItPnNldENsb3NlZENhcHRpb25zVmlzaWJsZShjbG9zZWRDYXB0aW9uVmlzaWJsZSk7Cisg
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgbWVkaWFDb250cm9scygpLT5jaGFu
Z2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAg
ICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CkBAIC0yNTcyLDYgKzI2MDcs
MjIgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5n
ZSgpCiAgICAgbV9wbGF5ZXItPnNldFByaXZhdGVCcm93c2luZ01vZGUocHJpdmF0ZU1vZGUpOwog
fQogCitib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlhQ29udHJvbHMoKQoreworICAgIHJl
dHVybiBzaGFkb3dSb290KCk7Cit9CisKK01lZGlhQ29udHJvbHMqIEhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhQ29udHJvbHMoKQoreworICAgIHJldHVybiB0b01lZGlhQ29udHJvbHMoc2hhZG93Um9v
dCgpKTsKK30KKwordm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzKCkK
K3sKKyAgICBpZiAoIWhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgc2V0U2hhZG93Um9vdChN
ZWRpYUNvbnRyb2xzOjpjcmVhdGUodGhpcykpOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCA1YTdhM2Q2YjA3ZWIyMmNhOGFlMmE1MWQx
YTVkNTIwZTRmMmFlOGY4Li4xODI0Zjc5OWM1MTk1MjBlOTE2MjllZWIwMzI0ZWEzM2E2ZDFhNWEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtNDEsNiArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OwogY2xhc3MgSFRNTFNvdXJjZUVs
ZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xzOwogY2xhc3MgTWVkaWFFcnJvcjsKIGNsYXNzIEtV
Ukw7CiBjbGFzcyBUaW1lUmFuZ2VzOwpAQCAtMTk3LDYgKzE5OCw4IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0QmVoYXZpb3JSZXN0cmljdGlvbnMoQmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJp
Y3Rpb25zKSB7IG1fcmVzdHJpY3Rpb25zID0gcmVzdHJpY3Rpb25zOyB9CiAKKyAgICBNZWRpYUNv
bnRyb2xzKiBtZWRpYUNvbnRyb2xzKCk7CisKIHByb3RlY3RlZDoKICAgICBIVE1MTWVkaWFFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxN
ZWRpYUVsZW1lbnQoKTsKQEAgLTMxOSw2ICszMjIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgaW52
YWxpZGF0ZUNhY2hlZFRpbWUoKTsKICAgICB2b2lkIHJlZnJlc2hDYWNoZWRUaW1lKCkgY29uc3Q7
CiAKKyAgICBib29sIGhhc01lZGlhQ29udHJvbHMoKTsKKyAgICB2b2lkIGVuc3VyZU1lZGlhQ29u
dHJvbHMoKTsKKwogICAgIFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbG9hZFRpbWVyOwogICAg
IFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fYXN5bmNFdmVudFRpbWVyOwogICAgIFRpbWVyPEhU
TUxNZWRpYUVsZW1lbnQ+IG1fcHJvZ3Jlc3NFdmVudFRpbWVyOwpAQCAtMzk4LDYgKzQwNCw3IEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1faXNGdWxsc2NyZWVuIDogMTsKICAgICBib29sIG1fY2xv
c2VkQ2FwdGlvbnNWaXNpYmxlIDogMTsKKyAgICBib29sIG1fbW91c2VPdmVyIDogMTsKIAogI2lm
IEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgIGJvb2wgbV9uZWVkV2lkZ2V0VXBk
YXRlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAK
aW5kZXggZDhjOTkzNjBkMjAwYjNlMGZiMWQ1YzkwOWRlYzg5ZGVlOWMwYzY1YS4uNDJlMGYwYTUx
MTI0YTY0YjEyZjk5ODYwOTRhYTZiZjZiZTQxYTQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKQEAgLTQ3LDUyNCArNDcsMzI4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGNvbnN0
IGRvdWJsZSBjVGltZVVwZGF0ZVJlcGVhdERlbGF5ID0gMC4yOwotc3RhdGljIGNvbnN0IGRvdWJs
ZSBjT3BhY2l0eUFuaW1hdGlvblJlcGVhdERlbGF5ID0gMC4wNTsKLQogTWVkaWFDb250cm9sczo6
TWVkaWFDb250cm9scyhIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBtX21l
ZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCi0gICAgLCBtX3RpbWVVcGRhdGVUaW1lcih0aGlzLCAm
TWVkaWFDb250cm9sczo6dGltZVVwZGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX29wYWNpdHlBbmlt
YXRpb25UaW1lcih0aGlzLCAmTWVkaWFDb250cm9sczo6b3BhY2l0eUFuaW1hdGlvblRpbWVyRmly
ZWQpCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWUoMCkKLSAgICAsIG1fb3BhY2l0
eUFuaW1hdGlvbkR1cmF0aW9uKDApCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25Gcm9tKDApCi0g
ICAgLCBtX29wYWNpdHlBbmltYXRpb25UbygxLjBmKQotICAgICwgbV9tb3VzZU92ZXIoZmFsc2Up
CisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIG1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSkK
KyAgICAsIG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKKyAgICAsIG1fcmV3aW5kQnV0dG9u
KDApCisgICAgLCBtX3BsYXlCdXR0b24oMCkKKyAgICAsIG1fcmV0dXJuVG9SZWFsVGltZUJ1dHRv
bigwKQorICAgICwgbV9zdGF0dXNEaXNwbGF5KDApCisgICAgLCBtX2N1cnJlbnRUaW1lRGlzcGxh
eSgwKQorICAgICwgbV90aW1lbGluZSgwKQorICAgICwgbV90aW1lUmVtYWluaW5nRGlzcGxheSgw
KQorICAgICwgbV90aW1lbGluZUNvbnRhaW5lcigwKQorICAgICwgbV90b2dnbGVDbG9zZWRDYXB0
aW9uc0J1dHRvbigwKQorICAgICwgbV9wYW5lbE11dGVCdXR0b24oMCkKKyAgICAsIG1fdm9sdW1l
U2xpZGVyKDApCisgICAgLCBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24oMCkKKyAgICAsIG1fdm9s
dW1lU2xpZGVyQ29udGFpbmVyKDApCisgICAgLCBtX2Z1bGxTY3JlZW5CdXR0b24oMCkKKyAgICAs
IG1fcGFuZWwoMCkKKyAgICAsIG1fb3BhcXVlKHRydWUpCiB7CiB9CiAKLXZvaWQgTWVkaWFDb250
cm9sczo6dXBkYXRlU3R5bGUoKQorUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xzPiBNZWRpYUNvbnRy
b2xzOjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogewotICAgIGlmICgh
bV9jb250cm9sc1NoYWRvd1Jvb3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3BhbmVs
KQotICAgICAgICBtX3BhbmVsLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX211dGVCdXR0b24p
Ci0gICAgICAgIG1fbXV0ZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9wbGF5QnV0
dG9uKQotICAgICAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fc2Vl
a0JhY2tCdXR0b24pCi0gICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0g
ICAgaWYgKG1fc2Vla0ZvcndhcmRCdXR0b24pCi0gICAgICAgIG1fc2Vla0ZvcndhcmRCdXR0b24t
PnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fcmV3aW5kQnV0dG9uKQotICAgICAgICBtX3Jld2lu
ZEJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9u
KQotICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAg
aWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fc3RhdHVzRGlzcGxheSkK
LSAgICAgICAgbV9zdGF0dXNEaXNwbGF5LT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3RpbWVs
aW5lQ29udGFpbmVyKQotICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT51cGRhdGVTdHlsZSgp
OwotICAgIGlmIChtX3RpbWVsaW5lKQotICAgICAgICBtX3RpbWVsaW5lLT51cGRhdGVTdHlsZSgp
OwotICAgIGlmIChtX2Z1bGxzY3JlZW5CdXR0b24pCi0gICAgICAgIG1fZnVsbHNjcmVlbkJ1dHRv
bi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkpCi0gICAgICAg
IG1fY3VycmVudFRpbWVEaXNwbGF5LT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3RpbWVSZW1h
aW5pbmdEaXNwbGF5KQotICAgICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT51cGRhdGVTdHls
ZSgpOwotICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKLSAgICAgICAgbV92b2x1bWVT
bGlkZXJDb250YWluZXItPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT51cGRhdGVTdHlsZSgp
OwotICAgIGlmIChtX3ZvbHVtZVNsaWRlcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXItPnVwZGF0
ZVN0eWxlKCk7Ci19CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbHM+IGNvbnRyb2xzID0gYWRvcHRS
ZWYobmV3IE1lZGlhQ29udHJvbHMobWVkaWFFbGVtZW50KSk7CiAKLXZvaWQgTWVkaWFDb250cm9s
czo6ZGVzdHJveSgpCi17Ci0gICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsK
IAotICAgIGlmIChtX2NvbnRyb2xzU2hhZG93Um9vdCAmJiBtX2NvbnRyb2xzU2hhZG93Um9vdC0+
cmVuZGVyZXIoKSkgeworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IHBhbmVs
ID0gTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKIAotICAg
ICAgICAvLyBkZXRhY2ggdGhlIHBhbmVsIGJlZm9yZSByZW1vdmluZyB0aGUgc2hhZG93IHJlbmRl
cmVyIHRvIHByZXZlbnQgYSBjcmFzaCBpbiBtX2NvbnRyb2xzU2hhZG93Um9vdC0+ZGV0YWNoKCkg
Ci0gICAgICAgIC8vICB3aGVuIGRpc3BsYXk6IHN0eWxlIGNoYW5nZXMKLSAgICAgICAgbV9wYW5l
bC0+ZGV0YWNoKCk7CisgICAgLy8gRklYTUU6IFdIQVQgVE8gRE8gV0lUSCBlYz8/IT8hPyE/IQor
ICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVy
KCktPnJlbW92ZUNoaWxkKG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpKTsKLSAgICAg
ICAgbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpOwotICAgICAgICBtX2NvbnRyb2xzU2hh
ZG93Um9vdCA9IDA7CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+
IHJld2luZEJ1dHRvbiA9IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSht
ZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX3Jld2luZEJ1dHRvbiA9IHJld2luZEJ1dHRv
bi5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQocmV3aW5kQnV0dG9uLnJlbGVhc2UoKSwg
ZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8
TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IHBsYXlCdXR0b24gPSBNZWRpYUNvbnRyb2xQ
bGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1f
cGxheUJ1dHRvbiA9IHBsYXlCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHBs
YXlCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxl
bWVudD4gcmV0dXJuVG9SZWFsdGltZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRp
bWVCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250cm9scy0+bV9y
ZXR1cm5Ub1JlYWxUaW1lQnV0dG9uID0gcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi5nZXQoKTsKKyAg
ICBwYW5lbC0+YXBwZW5kQ2hpbGQocmV0dXJuVG9SZWFsdGltZUJ1dHRvbi5yZWxlYXNlKCksIGVj
LCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1lZGlh
RWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT51c2VzTWVkaWFDb250cm9sU3Rh
dHVzRGlzcGxheSgpKSB7CisgICAgICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5
RWxlbWVudD4gc3RhdHVzRGlzcGxheSA9IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50
OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICAgICAgY29udHJvbHMtPm1fc3RhdHVzRGlzcGxh
eSA9IHN0YXR1c0Rpc3BsYXkuZ2V0KCk7CisgICAgICAgIHBhbmVsLT5hcHBlbmRDaGlsZChzdGF0
dXNEaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgICAgICBpZiAoZWMpCisgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci19CiAKLXZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlKCkK
KyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50PiB0aW1lbGlu
ZUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
KG1lZGlhRWxlbWVudCk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNw
bGF5RWxlbWVudD4gY3VycmVudFRpbWVEaXNwbGF5ID0gTWVkaWFDb250cm9sQ3VycmVudFRpbWVE
aXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fY3Vy
cmVudFRpbWVEaXNwbGF5ID0gY3VycmVudFRpbWVEaXNwbGF5LmdldCgpOworICAgIHRpbWVsaW5l
Q29udGFpbmVyLT5hcHBlbmRDaGlsZChjdXJyZW50VGltZURpc3BsYXkucmVsZWFzZSgpLCBlYywg
dHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5lID0gTWVkaWFDb250cm9sVGltZWxpbmVF
bGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50LCBjb250cm9scy5nZXQoKSk7CisgICAgY29udHJv
bHMtPm1fdGltZWxpbmUgPSB0aW1lbGluZS5nZXQoKTsKKyAgICB0aW1lbGluZUNvbnRhaW5lci0+
YXBwZW5kQ2hpbGQodGltZWxpbmUucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5n
RGlzcGxheUVsZW1lbnQ+IHRpbWVSZW1haW5pbmdEaXNwbGF5ID0gTWVkaWFDb250cm9sVGltZVJl
bWFpbmluZ0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250cm9s
cy0+bV90aW1lUmVtYWluaW5nRGlzcGxheSA9IHRpbWVSZW1haW5pbmdEaXNwbGF5LmdldCgpOwor
ICAgIHRpbWVsaW5lQ29udGFpbmVyLT5hcHBlbmRDaGlsZCh0aW1lUmVtYWluaW5nRGlzcGxheS5y
ZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgY29udHJvbHMtPm1fdGltZWxpbmVDb250YWluZXIgPSB0aW1lbGluZUNvbnRhaW5lci5nZXQo
KTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQodGltZWxpbmVDb250YWluZXIucmVsZWFzZSgpLCBl
YywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1F
OiBPTkxZIEFQUEVORCBXSEVOIFNVUFBPUlRTIFNFRUtCQUNLCisgICAgcGFuZWwtPmFwcGVuZENo
aWxkKE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVu
dCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8g
RklYTUU6IE9OTFkgQVBQRU5EIFdIRU4gU1VQUE9SVFMgU0VFS0ZPUldBUkQKKyAgICBwYW5lbC0+
YXBwZW5kQ2hpbGQoTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50OjpjcmVhdGUo
bWVkaWFFbGVtZW50KSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBGSVhNRTogVXBkYXRlIGNjIGJ1dHRvbiB3aGVuIHR1cm5pbmcgb24vb2ZmIGZy
b20gRE9NISEhIQorICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbkVsZW1lbnQ+IHRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uID0gTWVkaWFDb250cm9sVG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAg
ICBjb250cm9scy0+bV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA9IHRvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZCh0b2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybiAwOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50PiBmdWxsU2NyZWVuQnV0dG9uID0gTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX2Z1bGxTY3JlZW5CdXR0
b24gPSBmdWxsU2NyZWVuQnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChmdWxs
U2NyZWVuQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOworCisgICAgLy8gRklYTUU6IFVwZGF0
ZSBtdXRlQnV0dG9uIHdoZW4gbXV0aW5nIGZyb20gRE9NISEhCisgICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IHBhbmVsTXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJv
bFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQsIGNvbnRyb2xzLmdl
dCgpKTsKKyAgICBjb250cm9scy0+bV9wYW5lbE11dGVCdXR0b24gPSBwYW5lbE11dGVCdXR0b24u
Z2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHBhbmVsTXV0ZUJ1dHRvbi5yZWxlYXNlKCks
IGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRy
PE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IHZvbHVtZVNsaWRlckNv
bnRhaW5lciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0
ZShtZWRpYUVsZW1lbnQpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVs
ZW1lbnQ+IHNsaWRlciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZSht
ZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX3ZvbHVtZVNsaWRlciA9IHNsaWRlci5nZXQo
KTsKKyAgICB2b2x1bWVTbGlkZXJDb250YWluZXItPmFwcGVuZENoaWxkKHNsaWRlci5yZWxlYXNl
KCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVm
UHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50PiB2b2x1bWVTbGlk
ZXJNdXRlQnV0dG9uID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ6
OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX3ZvbHVtZVNsaWRlck11dGVC
dXR0b24gPSB2b2x1bWVTbGlkZXJNdXRlQnV0dG9uLmdldCgpOworICAgIHZvbHVtZVNsaWRlckNv
bnRhaW5lci0+YXBwZW5kQ2hpbGQodm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi5yZWxlYXNlKCksIGVj
LCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29udHJvbHMt
Pm1fdm9sdW1lU2xpZGVyQ29udGFpbmVyID0gdm9sdW1lU2xpZGVyQ29udGFpbmVyLmdldCgpOwor
ICAgIHBhbmVsLT5hcHBlbmRDaGlsZCh2b2x1bWVTbGlkZXJDb250YWluZXIucmVsZWFzZSgpLCBl
YywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1F
OiBETyBXRSBORUVEIG1fcGFuZWw/IT8hPyE/CisgICAgY29udHJvbHMtPm1fcGFuZWwgPSBwYW5l
bC5nZXQoKTsKKyAgICBjb250cm9scy0+YXBwZW5kQ2hpbGQocGFuZWwucmVsZWFzZSgpLCBlYywg
dHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjb250
cm9scy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sczo6c2hvdygpCiB7Ci0gICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWEgPSBtX21lZGlhRWxlbWVudDsKLSAgICBpZiAoIW1lZGlh
LT5jb250cm9scygpIHx8ICFtZWRpYS0+aW5BY3RpdmVEb2N1bWVudCgpKSB7Ci0gICAgICAgIGlm
IChtX2NvbnRyb2xzU2hhZG93Um9vdCkgewotICAgICAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jv
b3QtPmRldGFjaCgpOwotICAgICAgICAgICAgbV9wYW5lbCA9IDA7Ci0gICAgICAgICAgICBtX211
dGVCdXR0b24gPSAwOwotICAgICAgICAgICAgbV9wbGF5QnV0dG9uID0gMDsKLSAgICAgICAgICAg
IG1fc3RhdHVzRGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyID0g
MDsKLSAgICAgICAgICAgIG1fdGltZWxpbmUgPSAwOwotICAgICAgICAgICAgbV9zZWVrQmFja0J1
dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uID0gMDsKLSAgICAgICAg
ICAgIG1fcmV3aW5kQnV0dG9uID0gMDsKLSAgICAgICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1
dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheSA9IDA7Ci0gICAgICAg
ICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5ID0gMDsKLSAgICAgICAgICAgIG1fZnVsbHNjcmVl
bkJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lciA9IDA7Ci0g
ICAgICAgICAgICBtX3ZvbHVtZVNsaWRlciA9IDA7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRl
ck11dGVCdXR0b24gPSAwOwotICAgICAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSAwOwot
ICAgICAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA9IDA7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVG8gPSAxLjBmOwotICAgICAgICBtX29wYWNpdHlB
bmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIG1fdGltZVVwZGF0ZVRpbWVyLnN0b3AoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9jb250cm9sc1NoYWRvd1Jvb3Qp
IHsKLSAgICAgICAgY3JlYXRlQ29udHJvbHNTaGFkb3dSb290KCk7Ci0gICAgICAgIGNyZWF0ZVBh
bmVsKCk7Ci0gICAgICAgIGlmIChtX3BhbmVsKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXdpbmRC
dXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVBsYXlCdXR0b24oKTsKLSAgICAgICAgICAgIGNy
ZWF0ZVJldHVyblRvUmVhbHRpbWVCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVN0YXR1c0Rp
c3BsYXkoKTsKLSAgICAgICAgICAgIGNyZWF0ZVRpbWVsaW5lQ29udGFpbmVyKCk7Ci0gICAgICAg
ICAgICBpZiAobV90aW1lbGluZUNvbnRhaW5lcikgewotICAgICAgICAgICAgICAgIGNyZWF0ZUN1
cnJlbnRUaW1lRGlzcGxheSgpOwotICAgICAgICAgICAgICAgIGNyZWF0ZVRpbWVsaW5lKCk7Ci0g
ICAgICAgICAgICAgICAgY3JlYXRlVGltZVJlbWFpbmluZ0Rpc3BsYXkoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNyZWF0ZVNlZWtCYWNrQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVh
dGVTZWVrRm9yd2FyZEJ1dHRvbigpOwotICAgICAgICAgICAgY3JlYXRlVG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZUZ1bGxzY3JlZW5CdXR0b24oKTsKLSAg
ICAgICAgICAgIGNyZWF0ZU11dGVCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVZvbHVtZVNs
aWRlckNvbnRhaW5lcigpOwotICAgICAgICAgICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
KSB7Ci0gICAgICAgICAgICAgICAgY3JlYXRlVm9sdW1lU2xpZGVyKCk7Ci0gICAgICAgICAgICAg
ICAgY3JlYXRlVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbigpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9wYW5lbC0+YXR0YWNoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWVk
aWEtPmNhblBsYXkoKSkgewotICAgICAgICBpZiAobV90aW1lVXBkYXRlVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgICAgIG1fdGltZVVwZGF0ZVRpbWVyLnN0b3AoKTsKLSAgICB9IGVsc2UgaWYg
KG1lZGlhLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiBt
X3RpbWVsaW5lICYmIG1fdGltZWxpbmUtPnJlbmRlcmVyKCkgJiYgbV90aW1lbGluZS0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+ZGlzcGxheSgpICE9IE5PTkUpIHsKLSAgICAgICAgbV90aW1lVXBkYXRl
VGltZXIuc3RhcnRSZXBlYXRpbmcoY1RpbWVVcGRhdGVSZXBlYXREZWxheSk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fcGFuZWwpIHsKLSAgICAgICAgLy8gdXBkYXRlKCkgbWlnaHQgYWx0ZXIgdGhlIG9w
YWNpdHkgb2YgdGhlIGVsZW1lbnQsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUK
LSAgICAgICAgLy8gb2YgYW4gYW5pbWF0aW9uLiBUaGlzIGlzIHRoZSBvbmx5IGVsZW1lbnQgY29u
Y2VybmVkIGFzIHdlIGFuaW1hdGUgb25seSB0aGlzIGVsZW1lbnQuCi0gICAgICAgIGZsb2F0IG9w
YWNpdHlCZWZvcmVDaGFuZ2luZ1N0eWxlID0gbV9wYW5lbC0+cmVuZGVyZXIoKSA/IG1fcGFuZWwt
PnJlbmRlcmVyKCktPnN0eWxlKCktPm9wYWNpdHkoKSA6IDA7Ci0gICAgICAgIG1fcGFuZWwtPnVw
ZGF0ZSgpOwotICAgICAgICBjaGFuZ2VPcGFjaXR5KG1fcGFuZWwuZ2V0KCksIG9wYWNpdHlCZWZv
cmVDaGFuZ2luZ1N0eWxlKTsKLSAgICB9Ci0gICAgaWYgKG1fbXV0ZUJ1dHRvbikKLSAgICAgICAg
bV9tdXRlQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9wbGF5QnV0dG9uKQotICAgICAgICBt
X3BsYXlCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3RpbWVsaW5lQ29udGFpbmVyKQotICAg
ICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT51cGRhdGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlk
ZXJDb250YWluZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGUoKTsK
LSAgICBpZiAobV90aW1lbGluZSkKLSAgICAgICAgbV90aW1lbGluZS0+dXBkYXRlKCk7Ci0gICAg
aWYgKG1fY3VycmVudFRpbWVEaXNwbGF5KQotICAgICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+
dXBkYXRlKCk7Ci0gICAgaWYgKG1fdGltZVJlbWFpbmluZ0Rpc3BsYXkpCi0gICAgICAgIG1fdGlt
ZVJlbWFpbmluZ0Rpc3BsYXktPnVwZGF0ZSgpOwotICAgIGlmIChtX3NlZWtCYWNrQnV0dG9uKQot
ICAgICAgICBtX3NlZWtCYWNrQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9zZWVrRm9yd2Fy
ZEJ1dHRvbikKLSAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYg
KG1fcmV3aW5kQnV0dG9uKQotICAgICAgICBtX3Jld2luZEJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAg
aWYgKG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbikKLSAgICAgICAgbV9yZXR1cm5Ub1JlYWx0aW1l
QnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbikK
LSAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYg
KG1fc3RhdHVzRGlzcGxheSkKLSAgICAgICAgbV9zdGF0dXNEaXNwbGF5LT51cGRhdGUoKTsKLSAg
ICBpZiAobV9mdWxsc2NyZWVuQnV0dG9uKQotICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24tPnVw
ZGF0ZSgpOwotICAgIGlmIChtX3ZvbHVtZVNsaWRlcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXIt
PnVwZGF0ZSgpOwotICAgIGlmIChtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24pCi0gICAgICAgIG1f
dm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+dXBkYXRlKCk7Ci0KLSAgICB1cGRhdGVUaW1lRGlzcGxh
eSgpOwotICAgIHVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5KCk7CisgICAgbV9wYW5lbC0+c2hvdygp
OwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpCit2
b2lkIE1lZGlhQ29udHJvbHM6OmhpZGUoKQogewotICAgIEFTU0VSVCghbV9jb250cm9sc1NoYWRv
d1Jvb3QpOwotICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gTWVkaWFDb250cm9sU2hhZG93Um9v
dEVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9tZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCktPmFkZENoaWxkKG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpKTsKKyAg
ICBtX3BhbmVsLT5oaWRlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlUGFuZWwo
KQorc3RhdGljIGNvbnN0IFN0cmluZyYgd2Via2l0VHJhbnNpdGlvblN0cmluZygpCiB7Ci0gICAg
QVNTRVJUKCFtX3BhbmVsKTsKLSAgICBtX3BhbmVsID0gTWVkaWFDb250cm9sUGFuZWxFbGVtZW50
OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcGFuZWwtPmF0dGFjaFRvUGFyZW50KG1f
Y29udHJvbHNTaGFkb3dSb290LmdldCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgcywgKCItd2Via2l0LXRyYW5zaXRpb24iKSk7CisgICAgcmV0dXJuIHM7CiB9CiAKLXZvaWQg
TWVkaWFDb250cm9sczo6Y3JlYXRlTXV0ZUJ1dHRvbigpCitzdGF0aWMgY29uc3QgU3RyaW5nJiBv
cGFjaXR5U3RyaW5nKCkKIHsKLSAgICBBU1NFUlQoIW1fbXV0ZUJ1dHRvbik7Ci0gICAgbV9tdXRl
QnV0dG9uID0gTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVk
aWFFbGVtZW50KTsKLSAgICBtX211dGVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0
KCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzLCAoIm9wYWNpdHkiKSk7Cisg
ICAgcmV0dXJuIHM7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlUGxheUJ1dHRvbigp
Cit2b2lkIE1lZGlhQ29udHJvbHM6Om1ha2VPcGFxdWUoKQogewotICAgIEFTU0VSVCghbV9wbGF5
QnV0dG9uKTsKLSAgICBtX3BsYXlCdXR0b24gPSBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3BsYXlCdXR0b24tPmF0dGFjaFRvUGFy
ZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVNlZWtC
YWNrQnV0dG9uKCkKLXsKLSAgICBBU1NFUlQoIW1fc2Vla0JhY2tCdXR0b24pOwotICAgIG1fc2Vl
a0JhY2tCdXR0b24gPSBNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZSht
X21lZGlhRWxlbWVudCk7Ci0gICAgbV9zZWVrQmFja0J1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9w
YW5lbC5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlU2Vla0ZvcndhcmRC
dXR0b24oKQotewotICAgIEFTU0VSVCghbV9zZWVrRm9yd2FyZEJ1dHRvbik7Ci0gICAgbV9zZWVr
Rm9yd2FyZEJ1dHRvbiA9IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT5hdHRhY2hUb1Bh
cmVudChtX3BhbmVsLmdldCgpKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVSZXdp
bmRCdXR0b24oKQotewotICAgIEFTU0VSVCghbV9yZXdpbmRCdXR0b24pOwotICAgIG1fcmV3aW5k
QnV0dG9uID0gTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFF
bGVtZW50KTsKLSAgICBtX3Jld2luZEJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQo
KSk7Ci19CisgICAgaWYgKG1fb3BhcXVlKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgTWVkaWFD
b250cm9sczo6Y3JlYXRlUmV0dXJuVG9SZWFsdGltZUJ1dHRvbigpCi17Ci0gICAgQVNTRVJUKCFt
X3JldHVyblRvUmVhbHRpbWVCdXR0b24pOwotICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbiA9
IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OjpjcmVhdGUobV9tZWRp
YUVsZW1lbnQpOwotICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQo
bV9wYW5lbC5nZXQoKSk7Ci19CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRyYW5z
aXRpb25WYWx1ZSwgKCkpOworICAgIGlmICh0cmFuc2l0aW9uVmFsdWUuaXNOdWxsKCkpCisgICAg
ICAgIHRyYW5zaXRpb25WYWx1ZSA9IFN0cmluZzo6Zm9ybWF0KCJvcGFjaXR5ICUuMWdzIiwgZG9j
dW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZUluRHVyYXRpb24oKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG9wYWNpdHlWYWx1ZSwgKCIxIikpOwog
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKCkK
LXsKLSAgICBBU1NFUlQoIW1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pOwotICAgIG1fdG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9u
c0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV90b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICBtX3BhbmVsLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eSh3ZWJraXRU
cmFuc2l0aW9uU3RyaW5nKCksIHRyYW5zaXRpb25WYWx1ZSwgZWMpOworICAgIG1fcGFuZWwtPnN0
eWxlKCktPnNldFByb3BlcnR5KG9wYWNpdHlTdHJpbmcoKSwgb3BhY2l0eVZhbHVlLCBlYyk7Cisg
ICAgbV9vcGFxdWUgPSB0cnVlOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVN0YXR1
c0Rpc3BsYXkoKQordm9pZCBNZWRpYUNvbnRyb2xzOjptYWtlVHJhbnNwYXJlbnQoKQogewotICAg
IEFTU0VSVCghbV9zdGF0dXNEaXNwbGF5KTsKLSAgICBtX3N0YXR1c0Rpc3BsYXkgPSBNZWRpYUNv
bnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBt
X3N0YXR1c0Rpc3BsYXktPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQorICAgIGlm
ICghbV9vcGFxdWUpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVh
dGVUaW1lbGluZUNvbnRhaW5lcigpCi17Ci0gICAgQVNTRVJUKCFtX3RpbWVsaW5lQ29udGFpbmVy
KTsKLSAgICBtX3RpbWVsaW5lQ29udGFpbmVyID0gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdGltZWxpbmVDb250YWlu
ZXItPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQorICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCB0cmFuc2l0aW9uVmFsdWUsICgpKTsKKyAgICBpZiAodHJhbnNpdGlvblZh
bHVlLmlzTnVsbCgpKQorICAgICAgICB0cmFuc2l0aW9uVmFsdWUgPSBTdHJpbmc6OmZvcm1hdCgi
b3BhY2l0eSAlLjFncyIsIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9s
c0ZhZGVPdXREdXJhdGlvbigpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgb3Bh
Y2l0eVZhbHVlLCAoIjAiKSk7CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVGltZWxpbmUo
KQotewotICAgIEFTU0VSVCghbV90aW1lbGluZSk7Ci0gICAgbV90aW1lbGluZSA9IE1lZGlhQ29u
dHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3RpbWVs
aW5lLT5zZXRBdHRyaWJ1dGUocHJlY2lzaW9uQXR0ciwgImZsb2F0Iik7Ci0gICAgbV90aW1lbGlu
ZS0+YXR0YWNoVG9QYXJlbnQobV90aW1lbGluZUNvbnRhaW5lci5nZXQoKSk7CisgICAgRXhjZXB0
aW9uQ29kZSBlYzsKKyAgICAvLyBGSVhNRTogTWFrZSBtb3JlIGVmZmljaWVudC4KKyAgICBtX3Bh
bmVsLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eSh3ZWJraXRUcmFuc2l0aW9uU3RyaW5nKCksIHRyYW5z
aXRpb25WYWx1ZSwgZWMpOworICAgIG1fcGFuZWwtPnN0eWxlKCktPnNldFByb3BlcnR5KG9wYWNp
dHlTdHJpbmcoKSwgb3BhY2l0eVZhbHVlLCBlYyk7CisgICAgbV9vcGFxdWUgPSBmYWxzZTsKIH0K
IAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoKQordm9p
ZCBNZWRpYUNvbnRyb2xzOjpyZXNldCgpCiB7Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlckNv
bnRhaW5lcik7Ci0gICAgbV92b2x1bWVTbGlkZXJDb250YWluZXIgPSBNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0K
KyAgICBjaGFuZ2VkTmV0d29ya1N0YXRlKCk7CisgICAgZmxvYXQgZHVyYXRpb24gPSBtX21lZGlh
RWxlbWVudC0+ZHVyYXRpb24oKTsKKyAgICBpZiAoIWlzbmFuKGR1cmF0aW9uKSkgeworICAgICAg
ICBtX3RpbWVsaW5lLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIG1fdGltZWxpbmVD
b250YWluZXItPnNob3coKTsKKyAgICAgICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRp
YUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkpOworICAgICAgICB1cGRhdGVUaW1lRGlzcGxheSgpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5oaWRlKCk7CisKKyAgICBp
ZiAobV9tZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkpCisgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9u
LT5zaG93KCk7CisgICAgZWxzZQorICAgICAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+aGlkZSgpOwog
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVZvbHVtZVNsaWRlcigpCi17Ci0gICAgQVNTRVJU
KCFtX3ZvbHVtZVNsaWRlcik7Ci0gICAgbV92b2x1bWVTbGlkZXIgPSBNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdm9sdW1lU2xp
ZGVyLT5zZXRBdHRyaWJ1dGUocHJlY2lzaW9uQXR0ciwgImZsb2F0Iik7Ci0gICAgbV92b2x1bWVT
bGlkZXItPnNldEF0dHJpYnV0ZShtYXhBdHRyLCAiMSIpOwotICAgIG1fdm9sdW1lU2xpZGVyLT5z
ZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBTdHJpbmc6Om51bWJlcihtX21lZGlhRWxlbWVudC0+dm9s
dW1lKCkpKTsKLSAgICBtX3ZvbHVtZVNsaWRlci0+YXR0YWNoVG9QYXJlbnQobV92b2x1bWVTbGlk
ZXJDb250YWluZXIuZ2V0KCkpOwotfQorICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRWb2x1bWUobV9t
ZWRpYUVsZW1lbnQtPnZvbHVtZSgpKTsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVWb2x1
bWVTbGlkZXJNdXRlQnV0dG9uKCkKLXsKLSAgICBBU1NFUlQoIW1fdm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbik7Ci0gICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0gTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV92
b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lci5nZXQoKSk7Ci19CisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5oYXNDbG9zZWRDYXB0aW9u
cygpKQorICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5zaG93KCk7CisgICAg
ZWxzZQorICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5oaWRlKCk7CisKKyAg
ICBpZiAobV9tZWRpYUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSAhPSBNZWRpYVBsYXllcjo6TGl2
ZVN0cmVhbSkgeworICAgICAgICBtX3JldHVyblRvUmVhbFRpbWVCdXR0b24tPmhpZGUoKTsKKyAg
ICAgICAgbV9yZXdpbmRCdXR0b24tPnNob3coKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3Jl
dHVyblRvUmVhbFRpbWVCdXR0b24tPnNob3coKTsKKyAgICAgICAgbV9yZXdpbmRCdXR0b24tPmhp
ZGUoKTsKKyAgICB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlQ3VycmVudFRpbWVEaXNw
bGF5KCkKLXsKLSAgICBBU1NFUlQoIW1fY3VycmVudFRpbWVEaXNwbGF5KTsKLSAgICBtX2N1cnJl
bnRUaW1lRGlzcGxheSA9IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNy
ZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPmF0dGFjaFRv
UGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOworICAgIG1ha2VPcGFxdWUoKTsKIH0K
IAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVUaW1lUmVtYWluaW5nRGlzcGxheSgpCit2b2lk
IE1lZGlhQ29udHJvbHM6OnBsYXkoKQogewotICAgIEFTU0VSVCghbV90aW1lUmVtYWluaW5nRGlz
cGxheSk7Ci0gICAgbV90aW1lUmVtYWluaW5nRGlzcGxheSA9IE1lZGlhQ29udHJvbFRpbWVSZW1h
aW5pbmdEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3RpbWVS
ZW1haW5pbmdEaXNwbGF5LT5hdHRhY2hUb1BhcmVudChtX3RpbWVsaW5lQ29udGFpbmVyLmdldCgp
KTsKKyAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7CisgICAgbV90aW1lbGlu
ZS0+c2V0UG9zaXRpb24obV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkpOworICAgIHVwZGF0
ZVRpbWVEaXNwbGF5KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlRnVsbHNjcmVl
bkJ1dHRvbigpCit2b2lkIE1lZGlhQ29udHJvbHM6OnBsYXlpbmcoKQogewotICAgIEFTU0VSVCgh
bV9mdWxsc2NyZWVuQnV0dG9uKTsKLSAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSBNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBt
X2Z1bGxzY3JlZW5CdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworICAgIG1f
dGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpKTsKKyAg
ICB1cGRhdGVUaW1lRGlzcGxheSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OnRpbWVVcGRh
dGVUaW1lckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbHM+KikKK3ZvaWQgTWVkaWFDb250cm9sczo6
cGF1c2UoKQogewotICAgIGlmIChtX3RpbWVsaW5lKQotICAgICAgICBtX3RpbWVsaW5lLT51cGRh
dGUoZmFsc2UpOworICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKKyAgICBt
X3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSk7CiAg
ICAgdXBkYXRlVGltZURpc3BsYXkoKTsKKyAgICBtYWtlT3BhcXVlKCk7CiB9CiAKIHZvaWQgTWVk
aWFDb250cm9sczo6dXBkYXRlVGltZURpc3BsYXkoKQogewotICAgIEFTU0VSVChtX21lZGlhRWxl
bWVudC0+cmVuZGVyZXIoKSk7Ci0KLSAgICBpZiAoIW1fY3VycmVudFRpbWVEaXNwbGF5IHx8ICFt
X2N1cnJlbnRUaW1lRGlzcGxheS0+cmVuZGVyZXIoKSB8fCBtX2N1cnJlbnRUaW1lRGlzcGxheS0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlzcGxheSgpID09IE5PTkUgfHwgbV9tZWRpYUVsZW1lbnQt
PnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBmbG9hdCBub3cgPSBtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKTsK
ICAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwogCi0gICAg
Ly8gQWxsb3cgdGhlIHRoZW1lIHRvIGZvcm1hdCB0aGUgdGltZQorICAgIFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBBbGxvdyB0aGUgdGhlbWUgdG8gZm9ybWF0IHRoZSB0aW1lLgogICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldElubmVyVGV4dChtX21lZGlhRWxl
bWVudC0+cmVuZGVyZXIoKS0+dGhlbWUoKS0+Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1l
KG5vdywgZHVyYXRpb24pLCBlYyk7CisgICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldElubmVy
VGV4dChkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29udHJvbHNDdXJy
ZW50VGltZShub3csIGR1cmF0aW9uKSwgZWMpOwogICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5z
ZXRDdXJyZW50VmFsdWUobm93KTsKLSAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRJbm5l
clRleHQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29u
dHJvbHNSZW1haW5pbmdUaW1lKG5vdywgZHVyYXRpb24pLCBlYyk7CisgICAgbV90aW1lUmVtYWlu
aW5nRGlzcGxheS0+c2V0SW5uZXJUZXh0KGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+Zm9y
bWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUobm93LCBkdXJhdGlvbiksIGVjKTsKICAgICBt
X3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93IC0gZHVyYXRpb24pOwog
fQogCi1SZW5kZXJCb3gqIE1lZGlhQ29udHJvbHM6OnJlbmRlckJveCgpCit2b2lkIE1lZGlhQ29u
dHJvbHM6OnJlcG9ydGVkRXJyb3IoKQogewotICAgIHJldHVybiBtX2NvbnRyb2xzU2hhZG93Um9v
dCA/IG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKSA6IDA7CisgICAgbV90aW1lbGlu
ZUNvbnRhaW5lci0+aGlkZSgpOworICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CisgICAg
bV92b2x1bWVTbGlkZXJDb250YWluZXItPmhpZGUoKTsKKyAgICBtX3RvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uLT5oaWRlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlQ29udHJv
bFZpc2liaWxpdHkoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkTmV0d29ya1N0YXRlKCkK
IHsKLSAgICBpZiAoIW1fcGFuZWwgfHwgIW1fcGFuZWwtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIERvbid0IGZhZGUgZm9yIGF1ZGlvIGNvbnRyb2xzLgotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+aGFz
VmlkZW8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1lZGlhLT5yZW5kZXJlcigp
KTsKLQotICAgIC8vIERvbid0IGZhZGUgaWYgdGhlIG1lZGlhIGVsZW1lbnQgaXMgbm90IHZpc2li
bGUKLSAgICBpZiAobWVkaWEtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBzaG91bGRIaWRlQ29udHJv
bGxlciA9ICFtX21vdXNlT3ZlciAmJiAhbWVkaWEtPmNhblBsYXkoKTsKLQotICAgIC8vIERvIGZh
ZGluZyBtYW51YWxseSwgY3NzIGFuaW1hdGlvbnMgZG9uJ3Qgd29yayB3aXRoIHNoYWRvdyB0cmVl
cwotCi0gICAgZmxvYXQgYW5pbWF0ZUZyb20gPSBtX3BhbmVsLT5yZW5kZXJlcigpLT5zdHlsZSgp
LT5vcGFjaXR5KCk7Ci0gICAgZmxvYXQgYW5pbWF0ZVRvID0gc2hvdWxkSGlkZUNvbnRyb2xsZXIg
PyAwLjBmIDogMS4wZjsKLQotICAgIGlmIChhbmltYXRlRnJvbSA9PSBhbmltYXRlVG8pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX29wYWNpdHlBbmltYXRpb25UaW1lci5pc0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGlmIChtX29wYWNpdHlBbmltYXRpb25UbyA9PSBhbmltYXRlVG8pCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyLnN0b3AoKTsK
LSAgICB9Ci0KLSAgICBpZiAoYW5pbWF0ZUZyb20gPCBhbmltYXRlVG8pCi0gICAgICAgIG1fb3Bh
Y2l0eUFuaW1hdGlvbkR1cmF0aW9uID0gbV9wYW5lbC0+cmVuZGVyZXIoKS0+dGhlbWUoKS0+bWVk
aWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCk7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5zdXBw
b3J0c0Z1bGxzY3JlZW4oKSkKKyAgICAgICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5zaG93KCk7CiAg
ICAgZWxzZQotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbiA9IG1fcGFuZWwtPnJl
bmRlcmVyKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRpb24oKTsKKyAgICAg
ICAgbV9mdWxsU2NyZWVuQnV0dG9uLT5oaWRlKCk7CiAKLSAgICBtX29wYWNpdHlBbmltYXRpb25G
cm9tID0gYW5pbWF0ZUZyb207Ci0gICAgbV9vcGFjaXR5QW5pbWF0aW9uVG8gPSBhbmltYXRlVG87
Ci0KLSAgICBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOwotICAg
IG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyLnN0YXJ0UmVwZWF0aW5nKGNPcGFjaXR5QW5pbWF0aW9u
UmVwZWF0RGVsYXkpOworICAgIGlmIChtX3N0YXR1c0Rpc3BsYXkpCisgICAgICAgIG1fc3RhdHVz
RGlzcGxheS0+dXBkYXRlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlT3BhY2l0
eShIVE1MRWxlbWVudCogZSwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQgTWVkaWFDb250cm9sczo6bG9h
ZGVkTWV0YWRhdGEoKQogewotICAgIGlmICghZSB8fCAhZS0+cmVuZGVyZXIoKSB8fCAhZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gcyA9IFJlbmRlclN0eWxlOjpjbG9uZShlLT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKLSAgICBz
LT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIC8vIHotaW5kZXggY2FuJ3QgYmUgYXV0byBpZiBv
cGFjaXR5IGlzIHVzZWQKLSAgICBzLT5zZXRaSW5kZXgoMCk7Ci0gICAgZS0+cmVuZGVyZXIoKS0+
c2V0U3R5bGUocy5yZWxlYXNlKCkpOworICAgIGlmIChtX3N0YXR1c0Rpc3BsYXkpCisgICAgICAg
IG1fc3RhdHVzRGlzcGxheS0+aGlkZSgpOworCisgICAgcmVzZXQoKTsKIH0KIAotdm9pZCBNZWRp
YUNvbnRyb2xzOjpvcGFjaXR5QW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxNZWRpYUNvbnRyb2xz
PiopCit2b2lkIE1lZGlhQ29udHJvbHM6OmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHko
KQogewotICAgIGRvdWJsZSB0aW1lID0gY3VycmVudFRpbWUoKSAtIG1fb3BhY2l0eUFuaW1hdGlv
blN0YXJ0VGltZTsKLSAgICBpZiAodGltZSA+PSBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbikg
ewotICAgICAgICB0aW1lID0gbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb247Ci0gICAgICAgIG1f
b3BhY2l0eUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLSAgICB9Ci0gICAgZmxvYXQgb3BhY2l0eSA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV9vcGFjaXR5QW5pbWF0aW9uRnJvbSArIChtX29wYWNp
dHlBbmltYXRpb25UbyAtIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20pICogdGltZSAvIG1fb3BhY2l0
eUFuaW1hdGlvbkR1cmF0aW9uKTsKLSAgICBjaGFuZ2VPcGFjaXR5KG1fcGFuZWwuZ2V0KCksIG9w
YWNpdHkpOworICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnVwZGF0ZURpc3BsYXlU
eXBlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlVm9sdW1lU2xpZGVyQ29udGFp
bmVyKGJvb2wgdmlzaWJsZSkKK3ZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZE11dGUoKQogewot
ICAgIGlmICghbV9tZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkgfHwgIW1fdm9sdW1lU2xpZGVyQ29u
dGFpbmVyIHx8ICFtX3ZvbHVtZVNsaWRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHZp
c2libGUgJiYgIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5pc1Zpc2libGUoKSkgewotICAgICAg
ICBpZiAoIW1fbXV0ZUJ1dHRvbiB8fCAhbV9tdXRlQnV0dG9uLT5yZW5kZXJlcigpIHx8ICFtX211
dGVCdXR0b24tPnJlbmRlckJveCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gcyA9IG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zdHlsZUZvckVs
ZW1lbnQoKTsKLSAgICAgICAgaW50IGhlaWdodCA9IHMtPmhlaWdodCgpLmlzUGVyY2VudCgpID8g
MCA6IHMtPmhlaWdodCgpLnZhbHVlKCk7Ci0gICAgICAgIGludCB3aWR0aCA9IHMtPndpZHRoKCku
aXNQZXJjZW50KCkgPyAwIDogcy0+d2lkdGgoKS52YWx1ZSgpOwotICAgICAgICBJbnRQb2ludCBv
ZmZzZXQgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT52b2x1
bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihtX211dGVCdXR0b24tPnJlbmRlckJveCgpLCBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgaW50IHggPSBvZmZzZXQueCgpICsgbV9t
dXRlQnV0dG9uLT5yZW5kZXJCb3goKS0+b2Zmc2V0TGVmdCgpOwotICAgICAgICBpbnQgeSA9IG9m
ZnNldC55KCkgKyBtX211dGVCdXR0b24tPnJlbmRlckJveCgpLT5vZmZzZXRUb3AoKTsKLQotICAg
ICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2V0UG9zaXRpb24oeCwgeSk7Ci0gICAgICAg
IG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zZXRWaXNpYmxlKHRydWUpOwotICAgICAgICBtX3Zv
bHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlKCk7Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyLT51
cGRhdGUoKTsKLSAgICB9IGVsc2UgaWYgKCF2aXNpYmxlICYmIG1fdm9sdW1lU2xpZGVyQ29udGFp
bmVyLT5pc1Zpc2libGUoKSkgewotICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2V0
VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGVT
dHlsZSgpOwotICAgIH0KKyAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+Y2hhbmdlZE11dGUoKTsKKyAg
ICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPmNoYW5nZWRNdXRlKCk7CiB9CiAKLXZvaWQgTWVk
aWFDb250cm9sczo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkKK3ZvaWQgTWVkaWFDb250cm9s
czo6Y2hhbmdlZFZvbHVtZShmbG9hdCB2b2x1bWUpCiB7Ci0gICAgQVNTRVJUKG1fbWVkaWFFbGVt
ZW50LT5yZW5kZXJlcigpKTsKLQotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgbV9j
b250cm9sc1NoYWRvd1Jvb3QpIHsKLSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIEludFBvaW50IHBvaW50KG1v
dXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSk7Ci0KLSAgICAgICAgYm9vbCBkZWZhdWx0SGFu
ZGxlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uICYmIG1f
dm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpIHsKLSAgICAgICAgICAgIG1f
dm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAg
ICAgICAgICBkZWZhdWx0SGFuZGxlZCA9IGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgYm9vbCBzaG93Vm9sdW1lU2xpZGVyID0gZmFsc2U7Ci0gICAgICAgIGlm
ICghZGVmYXVsdEhhbmRsZWQgJiYgbV9tdXRlQnV0dG9uICYmIG1fbXV0ZUJ1dHRvbi0+aGl0VGVz
dChwb2ludCkpIHsKLSAgICAgICAgICAgIG1fbXV0ZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCku
bW91c2VvdXRFdmVudCkKLSAgICAgICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lciAmJiBtX3Zv
bHVtZVNsaWRlckNvbnRhaW5lci0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBzaG93Vm9s
dW1lU2xpZGVyID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV92b2x1bWVTbGlkZXIgJiYgbV92b2x1
bWVTbGlkZXItPmhpdFRlc3QocG9pbnQpKSB7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlci0+
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVy
ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5l
cihzaG93Vm9sdW1lU2xpZGVyKTsKLQotICAgICAgICBpZiAobV9wbGF5QnV0dG9uICYmIG1fcGxh
eUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBtX3BsYXlCdXR0b24tPmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3NlZWtCYWNrQnV0dG9uICYm
IG1fc2Vla0JhY2tCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9zZWVrQmFj
a0J1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fc2Vl
a0ZvcndhcmRCdXR0b24gJiYgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0g
ICAgICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKLQotICAgICAgICBpZiAobV9yZXdpbmRCdXR0b24gJiYgbV9yZXdpbmRCdXR0b24tPmhpdFRl
c3QocG9pbnQpKQotICAgICAgICAgICAgbV9yZXdpbmRCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gJiYgbV9y
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fcmV0
dXJuVG9SZWFsdGltZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAg
ICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiAmJiBtX3RvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlmICht
X3RpbWVsaW5lICYmIG1fdGltZWxpbmUtPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV90
aW1lbGluZS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fZnVs
bHNjcmVlbkJ1dHRvbiAmJiBtX2Z1bGxzY3JlZW5CdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAg
ICAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
LQotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZl
bnQpIHsKLSAgICAgICAgICAgIG1fbW91c2VPdmVyID0gdHJ1ZTsKLSAgICAgICAgICAgIHVwZGF0
ZUNvbnRyb2xWaXNpYmlsaXR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsKLSAgICAgICAgICAgIC8vIFdoZW4g
dGhlIHNjcm9sbGJhciB0aHVtYiBjYXB0dXJlcyBtb3VzZSBldmVudHMsIHdlIHNob3VsZCB0cmVh
dCB0aGUgbW91c2UgYXMgc3RpbGwgYmVpbmcgb3ZlciBvdXIgcmVuZGVyZXIgaWYgdGhlIG5ldyB0
YXJnZXQgaXMgYSBkZXNjZW5kYW50Ci0gICAgICAgICAgICBOb2RlKiBtb3VzZU92ZXJOb2RlID0g
bW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpID8gbW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgp
LT50b05vZGUoKSA6IDA7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIG1vdXNlT3ZlclJlbmRl
cmVyID0gbW91c2VPdmVyTm9kZSA/IG1vdXNlT3Zlck5vZGUtPnJlbmRlcmVyKCkgOiAwOwotICAg
ICAgICAgICAgbV9tb3VzZU92ZXIgPSBtb3VzZU92ZXJSZW5kZXJlciAmJiBtb3VzZU92ZXJSZW5k
ZXJlci0+aXNEZXNjZW5kYW50T2YobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAgICAg
ICAgICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBt
X3ZvbHVtZVNsaWRlci0+c2V0Vm9sdW1lKHZvbHVtZSk7CiB9CiAKLS8vIFdlIHdhbnQgdGhlIHRp
bWVsaW5lIHNsaWRlciB0byBiZSBhdCBsZWFzdCAxMDAgcGl4ZWxzIHdpZGUuCi1zdGF0aWMgY29u
c3QgaW50IG1pbldpZHRoVG9EaXNwbGF5VGltZURpc3BsYXlzID0gMTYgKyAxNiArIDQ1ICsgMTAw
ICsgNDUgKyAxNiArIDE7Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlVGltZURpc3BsYXlW
aXNpYmlsaXR5KCkKK3ZvaWQgTWVkaWFDb250cm9sczo6c2hvd1ZvbHVtZVNsaWRlcigpCiB7Ci0g
ICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAgIGlmICghbV9jdXJy
ZW50VGltZURpc3BsYXkgJiYgIW1fdGltZVJlbWFpbmluZ0Rpc3BsYXkpCisgICAgaWYgKCFtX21l
ZGlhRWxlbWVudC0+aGFzQXVkaW8oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHdpZHRo
ID0gbV9tZWRpYUVsZW1lbnQtPnJlbmRlckJveCgpLT53aWR0aCgpOwotICAgIGJvb2wgc2hvdWxk
U2hvd1RpbWVEaXNwbGF5cyA9IHdpZHRoID49IG1pbldpZHRoVG9EaXNwbGF5VGltZURpc3BsYXlz
ICogbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsK
KyAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2hvdygpOworfQogCi0gICAgbV9jdXJyZW50
VGltZURpc3BsYXktPnNldFZpc2libGUoc2hvdWxkU2hvd1RpbWVEaXNwbGF5cyk7Ci0gICAgbV90
aW1lUmVtYWluaW5nRGlzcGxheS0+c2V0VmlzaWJsZShzaG91bGRTaG93VGltZURpc3BsYXlzKTsK
K2NvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sczo6c2hhZG93UHNldWRvSWQoKSBjb25z
dAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0
LW1lZGlhLWNvbnRyb2xzIikpOworICAgIHJldHVybiBpZDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCmluZGV4IDk4ZTAxN2Y5ZGJkMmQzOTY3MmNk
Y2FkZWZkYTkzMWJmMjRlY2FiOTkuLjkxZDFlMjQ5Y2Y0ZDZjNmVlYjJmN2FiNzE0Mjg4MGI4YmEy
NDNmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShWSURFTykKIAorI2luY2x1ZGUgIkhUTUxEaXZF
bGVtZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
QEAgLTM4LDEwMiArMzksODggQEAgY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW5wdXRF
bGVtZW50OwogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgTWVk
aWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xQYW5lbE11dGVC
dXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ7CiBjbGFz
cyBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDsKLWNsYXNzIE1lZGlhQ29udHJvbFNoYWRv
d1Jvb3RFbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDsKIGNs
YXNzIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OwogY2xhc3MgTWVk
aWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OworY2xhc3MgTWVkaWFD
b250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVs
aW5lRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVu
dDsKIGNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNv
bnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVEaXNw
bGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OwogY2xh
c3MgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OworY2xhc3MgTWVkaWFDb250
cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVt
ZW50OworY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ7CiBj
bGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OwotY2xhc3MgTWVk
aWFDb250cm9sRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDsKIGNsYXNz
IE1lZGlhUGxheWVyOwogCiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJNZWRpYTsKIAot
Y2xhc3MgTWVkaWFDb250cm9scyB7CisvLyBGSVhNRTogUmVuYW1lIHRvIE1lZGlhQ29udHJvbFJv
b3RFbGVtZW50LgorY2xhc3MgTWVkaWFDb250cm9scyA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7
CiBwdWJsaWM6Ci0gICAgTWVkaWFDb250cm9scyhIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9scz4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsK
IAotICAgIHZvaWQgZGVzdHJveSgpOwotICAgIHZvaWQgdXBkYXRlKCk7Ci0gICAgdm9pZCB1cGRh
dGVTdHlsZSgpOwotICAgIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7Ci0gICAgdm9pZCB1cGRh
dGVUaW1lRGlzcGxheSgpOwotICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXlWaXNpYmlsaXR5KCk7
CisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBtYWtlT3BhcXVl
KCk7CisgICAgdm9pZCBtYWtlVHJhbnNwYXJlbnQoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHRlbXBvcmFyeSB0byBhbGxvdyBSZW5kZXJNZWRpYTo6bGF5b3V0IHR3ZWFrIHRoZSBwb3NpdGlv
biBvZiBjb250cm9scy4KLSAgICAvLyBPbmNlIHNoYWRvdyBET00gcmVmYWN0b3JpbmcgaXMgY29t
cGxldGUsIHRoZSB0d2Vha2luZyB3aWxsIGJlIGluIE1lZGlhQ29udHJvbHNTaGFkb3dSb290IGFu
ZCB0aGlzIGFjY2Vzc29yIHdpbGwgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4KLSAgICBSZW5kZXJC
b3gqIHJlbmRlckJveCgpOworICAgIHZvaWQgcmVzZXQoKTsKIAotcHJpdmF0ZToKLSAgICB2b2lk
IGNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpOwotICAgIHZvaWQgZGVzdHJveUNvbnRyb2xzU2hh
ZG93Um9vdCgpOwotICAgIHZvaWQgY3JlYXRlUGFuZWwoKTsKLSAgICB2b2lkIGNyZWF0ZU11dGVC
dXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVBsYXlCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVNl
ZWtCYWNrQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVTZWVrRm9yd2FyZEJ1dHRvbigpOwotICAg
IHZvaWQgY3JlYXRlUmV3aW5kQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVSZXR1cm5Ub1JlYWx0
aW1lQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbigp
OwotICAgIHZvaWQgY3JlYXRlU3RhdHVzRGlzcGxheSgpOwotICAgIHZvaWQgY3JlYXRlVGltZWxp
bmVDb250YWluZXIoKTsKLSAgICB2b2lkIGNyZWF0ZVRpbWVsaW5lKCk7Ci0gICAgdm9pZCBjcmVh
dGVWb2x1bWVTbGlkZXJDb250YWluZXIoKTsKLSAgICB2b2lkIGNyZWF0ZVZvbHVtZVNsaWRlcigp
OwotICAgIHZvaWQgY3JlYXRlVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbigpOwotICAgIHZvaWQgY3Jl
YXRlQ3VycmVudFRpbWVEaXNwbGF5KCk7Ci0gICAgdm9pZCBjcmVhdGVUaW1lUmVtYWluaW5nRGlz
cGxheSgpOwotICAgIHZvaWQgY3JlYXRlRnVsbHNjcmVlbkJ1dHRvbigpOwotCi0gICAgdm9pZCB0
aW1lVXBkYXRlVGltZXJGaXJlZChUaW1lcjxNZWRpYUNvbnRyb2xzPiopOwotCi0gICAgdm9pZCB1
cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOwotICAgIHZvaWQgY2hhbmdlT3BhY2l0eShIVE1MRWxl
bWVudCosIGZsb2F0IG9wYWNpdHkpOwotICAgIHZvaWQgb3BhY2l0eUFuaW1hdGlvblRpbWVyRmly
ZWQoVGltZXI8TWVkaWFDb250cm9scz4qKTsKLQotICAgIHZvaWQgdXBkYXRlVm9sdW1lU2xpZGVy
Q29udGFpbmVyKGJvb2wgdmlzaWJsZSk7CisgICAgdm9pZCBwbGF5aW5nKCk7CisgICAgdm9pZCBw
bGF5KCk7CisgICAgdm9pZCBwYXVzZSgpOworCisgICAgdm9pZCBjaGFuZ2VkTXV0ZSgpOworICAg
IHZvaWQgY2hhbmdlZFZvbHVtZShmbG9hdCB2b2x1bWUpOworCisgICAgdm9pZCByZXBvcnRlZEVy
cm9yKCk7CisgICAgdm9pZCBjaGFuZ2VkTmV0d29ya1N0YXRlKCk7CisgICAgdm9pZCBsb2FkZWRN
ZXRhZGF0YSgpOworICAgIHZvaWQgY2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwor
CisgICAgdm9pZCBzaG93Vm9sdW1lU2xpZGVyKCk7CisgICAgdm9pZCB1cGRhdGVUaW1lRGlzcGxh
eSgpOwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVu
dD4gbV9jb250cm9sc1NoYWRvd1Jvb3Q7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEVsZW1lbnQ+
IG1fcGFuZWw7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50PiBtX211
dGVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBtX3Bs
YXlCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50PiBtX3Nl
ZWtCYWNrQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudD4g
bV9zZWVrRm9yd2FyZEJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sUmV3aW5kQnV0dG9u
RWxlbWVudD4gbV9yZXdpbmRCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRv
UmVhbHRpbWVCdXR0b25FbGVtZW50PiBtX3JldHVyblRvUmVhbHRpbWVCdXR0b247Ci0gICAgUmVm
UHRyPE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4gbV90b2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVF
bGVtZW50PiBtX3RpbWVsaW5lOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJF
bGVtZW50PiBtX3ZvbHVtZVNsaWRlcjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sTXV0ZUJ1dHRv
bkVsZW1lbnQ+IG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IG1fZnVsbHNjcmVlbkJ1dHRvbjsKLSAgICBSZWZQ
dHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50PiBtX3RpbWVsaW5lQ29udGFp
bmVyOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50
PiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZURp
c3BsYXlFbGVtZW50PiBtX2N1cnJlbnRUaW1lRGlzcGxheTsKLSAgICBSZWZQdHI8TWVkaWFDb250
cm9sVGltZURpc3BsYXlFbGVtZW50PiBtX3RpbWVSZW1haW5pbmdEaXNwbGF5OwotICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudD4gbV9zdGF0dXNEaXNwbGF5OworICAg
IE1lZGlhQ29udHJvbHMoSFRNTE1lZGlhRWxlbWVudCopOwogCi0gICAgSFRNTE1lZGlhRWxlbWVu
dCogbV9tZWRpYUVsZW1lbnQ7Ci0gICAgVGltZXI8TWVkaWFDb250cm9scz4gbV90aW1lVXBkYXRl
VGltZXI7Ci0gICAgVGltZXI8TWVkaWFDb250cm9scz4gbV9vcGFjaXR5QW5pbWF0aW9uVGltZXI7
CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7
CiAKLSAgICBkb3VibGUgbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lOwotICAgIGRvdWJsZSBt
X29wYWNpdHlBbmltYXRpb25EdXJhdGlvbjsKLSAgICBmbG9hdCBtX29wYWNpdHlBbmltYXRpb25G
cm9tOwotICAgIGZsb2F0IG1fb3BhY2l0eUFuaW1hdGlvblRvOworICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1fbWVkaWFFbGVtZW50OwogCi0gICAgYm9vbCBtX21vdXNlT3ZlcjsKKyAgICBNZWRpYUNv
bnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KiBtX3Jld2luZEJ1dHRvbjsKKyAgICBNZWRpYUNvbnRy
b2xQbGF5QnV0dG9uRWxlbWVudCogbV9wbGF5QnV0dG9uOworICAgIE1lZGlhQ29udHJvbFJldHVy
blRvUmVhbHRpbWVCdXR0b25FbGVtZW50KiBtX3JldHVyblRvUmVhbFRpbWVCdXR0b247CisgICAg
TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQqIG1fc3RhdHVzRGlzcGxheTsKKyAgICBN
ZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1lRGlzcGxh
eTsKKyAgICBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQqIG1fdGltZWxpbmU7CisgICAgTWVk
aWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50KiBtX3RpbWVSZW1haW5pbmdEaXNw
bGF5OworICAgIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCogbV90aW1lbGlu
ZUNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVs
ZW1lbnQqIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b247CisgICAgTWVkaWFDb250cm9sUGFu
ZWxNdXRlQnV0dG9uRWxlbWVudCogbV9wYW5lbE11dGVCdXR0b247CisgICAgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyRWxlbWVudCogbV92b2x1bWVTbGlkZXI7CisgICAgTWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQqIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbjsKKyAg
ICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KiBtX3ZvbHVtZVNsaWRl
ckNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCogbV9m
dWxsU2NyZWVuQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCogbV9wYW5lbDsK
KworICAgIGJvb2wgbV9vcGFxdWU7CiB9OwogCitpbmxpbmUgTWVkaWFDb250cm9scyogdG9NZWRp
YUNvbnRyb2xzKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbHMqPihub2RlKTsKK30KIAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAppbmRleCBkZWMyZGJmNjRlNzI0M2M5YWE5MTgwZTg2YjZkNjI4MGQ5OGRlNWZlLi5iMGNh
ZGJjZGZiMTI5NDZlOGFhZjNiMGE1NjQwMmU4YTJkMjJhZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTQ0LDYgKzQ0LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY1LDEyOCArNjYsMzMg
QEAgc3RhdGljIGNvbnN0IGZsb2F0IGNTZWVrUmVwZWF0RGVsYXkgPSAwLjFmOwogc3RhdGljIGNv
bnN0IGZsb2F0IGNTdGVwVGltZSA9IDAuMDdmOwogc3RhdGljIGNvbnN0IGZsb2F0IGNTZWVrVGlt
ZSA9IDAuMmY7CiAKLWlubGluZSBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6TWVkaWFD
b250cm9sU2hhZG93Um9vdEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQot
ICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCi17
Ci0gICAgc2V0U2hhZG93SG9zdChtZWRpYUVsZW1lbnQpOwotfQotCi1QYXNzUmVmUHRyPE1lZGlh
Q29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6
Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAgICBSZWZQdHI8TWVk
aWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcgTWVkaWFD
b250cm9sU2hhZG93Um9vdEVsZW1lbnQobWVkaWFFbGVtZW50KSk7Ci0KLSAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IHJvb3RTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICByb290U3R5
bGUtPmluaGVyaXRGcm9tKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAg
cm9vdFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICByb290U3R5bGUtPnNldFBvc2l0aW9u
KFJlbGF0aXZlUG9zaXRpb24pOwotCi0gICAgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdCog
cmVuZGVyZXIgPSBuZXcgKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSkg
UmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdChlbGVtZW50LmdldCgpKTsKLSAgICByZW5kZXJl
ci0+c2V0U3R5bGUocm9vdFN0eWxlLnJlbGVhc2UoKSk7Ci0KLSAgICBlbGVtZW50LT5zZXRSZW5k
ZXJlcihyZW5kZXJlcik7Ci0gICAgZWxlbWVudC0+c2V0QXR0YWNoZWQoKTsKLSAgICBlbGVtZW50
LT5zZXRJbkRvY3VtZW50KCk7Ci0KLSAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0gICAgSFRN
TERpdkVsZW1lbnQ6OmRldGFjaCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBzaGFkb3cg
RE9NIHVzZXMgRWxlbWVudDo6c2V0U2hhZG93Um9vdCgpLgotICAgIHNldFNoYWRvd0hvc3QoMCk7
Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTWVkaWFDb250cm9sRWxl
bWVudDo6TWVkaWFDb250cm9sRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQp
CiAgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIG1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSkK
ICAgICAsIG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKIHsKLSAgICBzZXRJbkRvY3VtZW50
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6YXR0YWNoVG9QYXJlbnQoRWxlbWVu
dCogcGFyZW50KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2VlbXMgdmVyeSB3cm9uZy4g
IFdoeSBhcmUgd2UgbWFnaWNhbGx5IGFkZGluZyB8dGhpc3wgdG8gdGhlIERPTSBoZXJlPwotICAg
IC8vICAgICAgICBXZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBwYXJzZXIgQVBJIG1ldGhvZHMgb3V0
c2lkZSBvZiB0aGUgcGFyc2VyIQotICAgIHBhcmVudC0+cGFyc2VyQWRkQ2hpbGQodGhpcyk7CiB9
CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlKCkKK3N0YXRpYyBjb25zdCBTdHJp
bmcmIGRpc3BsYXlTdHJpbmcoKQogewotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHVwZGF0ZVN0eWxlKCk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHMsICgiZGlzcGxheSIpKTsKKyAgICByZXR1cm4gczsK
IH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gTWVkaWFDb250cm9sRWxlbWVudDo6c3R5bGVG
b3JFbGVtZW50KCkKK3ZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6c2hvdygpCiB7Ci0gICAgQVNT
RVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhp
cywgbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCksIHRydWUpOwotICAgIGlmICgh
c3R5bGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIHRleHQtZGVjb3JhdGlvbiBj
YW4ndCBiZSBvdmVycmlkZWQgZnJvbSBDU1MuIFNvIHdlIGRvIGl0IGhlcmUuCi0gICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzAxNQotICAgIHN0eWxl
LT5zZXRUZXh0RGVjb3JhdGlvbihURE5PTkUpOwotICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdChURE5PTkUpOwotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi1ib29sIE1lZGlh
Q29udHJvbEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQotewot
ICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkpOwotCi0gICAgcmV0dXJuIEhUTUxEaXZFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9k
ZSgpLT5yZW5kZXJlcigpCi0gICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBk
b2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQo
c3R5bGUtPmFwcGVhcmFuY2UoKSwgbV9tZWRpYUVsZW1lbnQpKTsKLX0KLSAgICAKLXZvaWQgTWVk
aWFDb250cm9sRWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkp
OwotICAgIGlmICghbmVlZHNSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIo
KS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotICAgIHNl
dFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUo
KS0+cmVuZGVyZXIoKSkgewotICAgICAgICAvLyBGaW5kIG5leHQgc2libGluZyB3aXRoIGEgcmVu
ZGVyZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydC4KLSAgICAgICAgTm9kZSogc2libGlu
ZyA9IG5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYmICFzaWJsaW5nLT5y
ZW5kZXJlcigpKQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQocmVuZGVyZXIsIHNp
YmxpbmcgPyBzaWJsaW5nLT5yZW5kZXJlcigpIDogMCk7Ci0gICAgfQotICAgIENvbnRhaW5lck5v
ZGU6OmF0dGFjaCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2Ug
bW9yZSBlZmZpY2llbnQuCisgICAgc3R5bGUoKS0+cmVtb3ZlUHJvcGVydHkoZGlzcGxheVN0cmlu
ZygpLCBlYyk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlU3R5bGUoKQor
dm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKCkKIHsKLSAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwotICAgIGlm
ICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJl
bmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpICYmIHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2Rl
KCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgIW5lZWRzUmVuZGVyZXIpCi0g
ICAgICAgIGRldGFjaCgpOwotICAgIGVsc2UgaWYgKCFyZW5kZXJlcigpICYmIG5lZWRzUmVuZGVy
ZXIpCi0gICAgICAgIGF0dGFjaCgpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotCi0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IGlmIHRoZXJlIGlzIGFueSBpbm5lclRleHQgcmVuZGVyZXIsIGl0IGlzIHVwZGF0
ZWQgYXMgd2VsbC4KLSAgICAgICAgaWYgKGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCktPnJl
bmRlcmVyKCkpCi0gICAgICAgICAgICBmaXJzdENoaWxkKCktPnJlbmRlcmVyKCktPnNldFN0eWxl
KHN0eWxlLmdldCgpKTsKLSAgICB9CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAvLyBGSVhN
RTogTWFrZSBtb3JlIGVmZmljaWVudC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
bm9uZSwgKCJub25lIikpOworICAgIHN0eWxlKCktPnNldFByb3BlcnR5KGRpc3BsYXlTdHJpbmco
KSwgbm9uZSwgZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0y
MTcsNiArMTIzLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xQYW5lbEVsZW1l
bnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIGlubGluZSBNZWRpYUNvbnRyb2xUaW1lbGluZUNv
bnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiAgICAgOiBNZWRpYUNvbnRyb2xFbGVtZW50KG1l
ZGlhRWxlbWVudCkKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVs
ZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCkBAIC0yMjQsMTkg
KzEzMSw2IEBAIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50
PiBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQobWVkaWFFbGVtZW50KSk7CiB9
CiAKLWJvb2wgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBpZiAoIU1lZGlhQ29udHJvbEVsZW1l
bnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBBbHdheXMgc2hvdyB0aGUgdGltZWxpbmUgaWYgdGhlIHRoZW1lIGRvZXNuJ3QgdXNlIHN0
YXR1cyBkaXNwbGF5IChNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIGZvciBpbnN0YW5jZSku
Ci0gICAgaWYgKCFkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnVzZXNNZWRpYUNvbnRyb2xT
dGF0dXNEaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZmxvYXQgZHVyYXRp
b24gPSBtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKTsKLSAgICByZXR1cm4gIWlzbmFuKGR1cmF0
aW9uKSAmJiAhaXNpbmYoZHVyYXRpb24pOwotfQotCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBN
ZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gTWVkaWFUaW1lbGluZUNvbnRhaW5lcjsKQEAgLTI1MCwxMiArMTQ0LDQw
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVt
ZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAorY2xhc3MgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIgOiBwdWJsaWMg
UmVuZGVyQmxvY2sgeworcHVibGljOgorICAgIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFp
bmVyKE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Cit9OworCitSZW5kZXJNZWRp
YVZvbHVtZVNsaWRlckNvbnRhaW5lcjo6UmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIo
Tm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCit7Cit9CisKK3ZvaWQgUmVuZGVy
TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI6OmxheW91dCgpCit7CisgICAgUmVuZGVyQmxvY2s6
OmxheW91dCgpOworICAgIGlmIChzdHlsZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCAhcHJldmlv
dXNTaWJsaW5nKCkgfHwgIXByZXZpb3VzU2libGluZygpLT5pc0JveCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZW5kZXJCb3gqIGJ1dHRvbkJveCA9IHRvUmVuZGVyQm94KHByZXZpb3VzU2li
bGluZygpKTsKKworICAgIGlmICh2aWV3KCkpCisgICAgICAgIHZpZXcoKS0+ZGlzYWJsZUxheW91
dFN0YXRlKCk7CisKKyAgICBJbnRQb2ludCBvZmZzZXQgPSB0aGVtZSgpLT52b2x1bWVTbGlkZXJP
ZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0b25Cb3gsIEludFNpemUod2lkdGgoKSwgaGVpZ2h0KCkp
KTsKKyAgICBzZXRYKG9mZnNldC54KCkgKyBidXR0b25Cb3gtPm9mZnNldExlZnQoKSk7CisgICAg
c2V0WShvZmZzZXQueSgpICsgYnV0dG9uQm94LT5vZmZzZXRUb3AoKSk7CisKKyAgICBpZiAodmll
dygpKQorICAgICAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0YXRlKCk7Cit9CisKIGlubGluZSBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkK
ICAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50KQotICAgICwgbV9pc1Zpc2li
bGUoZmFsc2UpCi0gICAgLCBtX3goMCkKLSAgICAsIG1feSgwKQogeworICAgIGhpZGUoKTsKIH0K
IAogUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAtMjYzLDM5ICsxODUsMjggQEAgUGFzc1JlZlB0cjxN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJDb24KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlckNvbnRhaW5lckVsZW1lbnQobWVkaWFFbGVtZW50KSk7CiB9CiAKLVBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudCgpCitSZW5kZXJPYmplY3QqIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRh
aW5lckVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5
bGUqKQogewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBNZWRpYUNvbnRyb2xFbGVt
ZW50OjpzdHlsZUZvckVsZW1lbnQoKTsKLSAgICBzdHlsZS0+c2V0UG9zaXRpb24oQWJzb2x1dGVQ
b3NpdGlvbik7Ci0gICAgc3R5bGUtPnNldExlZnQoTGVuZ3RoKG1feCwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0VG9wKExlbmd0aChtX3ksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldERpc3BsYXko
bV9pc1Zpc2libGUgPyBCTE9DSyA6IE5PTkUpOwotICAgIHJldHVybiBzdHlsZTsKKyAgICByZXR1
cm4gbmV3IChhcmVuYSkgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIodGhpcyk7CiB9
CiAKLXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6c2V0Vmlz
aWJsZShib29sIHZpc2libGUpCit2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5l
ckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICh2
aXNpYmxlID09IG1faXNWaXNpYmxlKQorICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8
IGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7Ci19CiAKLXZvaWQgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6c2V0UG9zaXRpb24oaW50IHgsIGludCB5KQot
ewotICAgIGlmICh4ID09IG1feCAmJiB5ID09IG1feSkKKyAgICAvLyBQb29yIG1hbidzIG1vdXNl
bGVhdmUgZXZlbnQgZGV0ZWN0aW9uLgorICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0
aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworICAgIGlmICghbW91c2VFdmVudC0+cmVsYXRl
ZFRhcmdldCgpIHx8ICFtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCktPnRvTm9kZSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV94ID0geDsKLSAgICBtX3kgPSB5OwotfQogCi1ib29sIE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmhpdFRlc3QoY29uc3QgSW50UG9p
bnQmIGFic1BvaW50KQotewotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxl
KCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnRoZW1lKCkt
PmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KHJlbmRlcmVyKCksIGFic1BvaW50KTsKKyAgICBpZiAo
dGhpcy0+Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00obW91c2VFdmVudC0+cmVsYXRlZFRhcmdl
dCgpLT50b05vZGUoKSkpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBoaWRlKCk7CiB9CiAKKwogTWVkaWFDb250cm9sRWxlbWVudFR5cGUgTWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGlzcGxheVR5cGUoKSBjb25zdAogewogICAgIHJl
dHVybiBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjsKQEAgLTMxMyw2ICsyMjQsNyBAQCBpbmxp
bmUgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFN0YXR1c0Rp
c3BsYXlFbGVtZW50KEhUTUxNZQogICAgIDogTWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1l
bnQpCiAgICAgLCBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQoTm90aGluZykKIHsKKyAgICBoaWRlKCk7
CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+IE1lZGlh
Q29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVk
aWFFbGVtZW50KQpAQCAtMzIyLDggKzIzNCw2IEBAIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sU3Rh
dHVzRGlzcGxheUVsZW1lbnQ+IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjCiAK
IHZvaWQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnVwZGF0ZSgpCiB7Ci0gICAg
TWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlKCk7Ci0KICAgICAvLyBHZXQgdGhlIG5ldyBzdGF0
ZSB0aGF0IHdlJ2xsIGhhdmUgdG8gZGlzcGxheS4KICAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG5l
d1N0YXRlVG9EaXNwbGF5ID0gTm90aGluZzsKIApAQCAtMzMyLDEyICsyNDIsMTggQEAgdm9pZCBN
ZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkKICAgICBlbHNlIGlmICht
ZWRpYUVsZW1lbnQoKS0+bW92aWVMb2FkVHlwZSgpID09IE1lZGlhUGxheWVyOjpMaXZlU3RyZWFt
KQogICAgICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7CiAKLSAgICAvLyBQ
cm9wYWdhdGUgb25seSBpZiBuZWVkZWQuCiAgICAgaWYgKG5ld1N0YXRlVG9EaXNwbGF5ID09IG1f
c3RhdGVCZWluZ0Rpc3BsYXllZCkKICAgICAgICAgcmV0dXJuOwotICAgIG1fc3RhdGVCZWluZ0Rp
c3BsYXllZCA9IG5ld1N0YXRlVG9EaXNwbGF5OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlOworCisg
ICAgaWYgKG1fc3RhdGVCZWluZ0Rpc3BsYXllZCA9PSBOb3RoaW5nKQorICAgICAgICBzaG93KCk7
CisgICAgZWxzZSBpZiAobmV3U3RhdGVUb0Rpc3BsYXkgPT0gTm90aGluZykKKyAgICAgICAgaGlk
ZSgpOworCisgICAgbV9zdGF0ZUJlaW5nRGlzcGxheWVkID0gbmV3U3RhdGVUb0Rpc3BsYXk7CisK
ICAgICBzd2l0Y2ggKG1fc3RhdGVCZWluZ0Rpc3BsYXllZCkgewogICAgIGNhc2UgTm90aGluZzoK
ICAgICAgICAgc2V0SW5uZXJUZXh0KCIiLCBlKTsKQEAgLTM1MSwxNCArMjY3LDYgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkKICAgICB9CiB9CiAKLWJv
b2wgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUqIHN0eWxlKQotewotICAgIGlmICghTWVkaWFDb250cm9sRWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZChzdHlsZSkgfHwgIWRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+dXNlc01l
ZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZs
b2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7Ci0gICAgcmV0dXJuIChp
c25hbihkdXJhdGlvbikgfHwgaXNpbmYoZHVyYXRpb24pKTsKLX0KLQogTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gTWVkaWFTdGF0dXNEaXNwbGF5OwpAQCAtMzc5LDk2ICsyODcs
MTggQEAgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW4KIHsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xJ
bnB1dEVsZW1lbnQ6OmF0dGFjaFRvUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBjb2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJlIHdlIG1hZ2ljYWxseSBh
ZGRpbmcgfHRoaXN8IHRvIHRoZSBET00gaGVyZT8KLSAgICAvLyAgICAgICAgV2Ugc2hvdWxkbid0
IGJlIGNhbGxpbmcgcGFyc2VyIEFQSSBtZXRob2RzIG91dHNpZGUgb2YgdGhlIHBhcnNlciEKLSAg
ICBwYXJlbnQtPnBhcnNlckFkZENoaWxkKHRoaXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbElu
cHV0RWxlbWVudDo6dXBkYXRlKCkKK3ZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpzaG93
KCkKIHsKLSAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotICAgIGlmIChyZW5kZXJlcigpKQotICAg
ICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHVwZGF0ZVN0eWxlKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6
c3R5bGVGb3JFbGVtZW50KCkKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
cigpLT5zdHlsZUZvckVsZW1lbnQodGhpcywgMCwgdHJ1ZSk7Ci19Ci0KLWJvb2wgTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsK
LSAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKLQotICAgIHJldHVybiBIVE1MSW5wdXRF
bGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFyZW50
Tm9kZSgpLT5yZW5kZXJlcigpCi0gICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8
fCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBh
cnQoc3R5bGUtPmFwcGVhcmFuY2UoKSwgbWVkaWFFbGVtZW50KCkpKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjOworICAgIHN0eWxlKCktPnJlbW92ZVByb3BlcnR5KGRpc3BsYXlTdHJpbmcoKSwgZWMp
OwogfQogCi12b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0YWNoKCkKK3ZvaWQgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50OjpoaWRlKCkKIHsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5
bGUuZ2V0KCkpOwotICAgIGlmICghbmVlZHNSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtZWRpYUVsZW1lbnQoKS0+
cmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmICghcmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkp
OwotICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBh
cmVudE5vZGUoKS0+cmVuZGVyZXIoKSkgewotICAgICAgICAvLyBGaW5kIG5leHQgc2libGluZyB3
aXRoIGEgcmVuZGVyZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydC4KLSAgICAgICAgTm9k
ZSogc2libGluZyA9IG5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYmICFz
aWJsaW5nLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPm5leHRT
aWJsaW5nKCk7Ci0gICAgICAgIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQocmVu
ZGVyZXIsIHNpYmxpbmcgPyBzaWJsaW5nLT5yZW5kZXJlcigpIDogMCk7Ci0gICAgfSAgCi0gICAg
Q29udGFpbmVyTm9kZTo6YXR0YWNoKCk7Ci0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgTWVpZGFD
b250cm9sSW5wdXQgY2lyY3VtdmVudHMgdGhlIG5vcm1hbCBhdHRhY2htZW50Ci0gICAgLy8gYW5k
IHN0eWxlIHJlY2FsYyBjeWNsZSBhbmQgdGh1cyB3ZSBuZWVkIHRvIGFkZCBleHRyYSBsb2dpYyB0
byBiZSBhd2FyZSBvZgotICAgIC8vIHRoZSBzaGFkb3cgRE9NLiBSZW1vdmUgdGhpcyBvbmNlIGFs
bCBtZWRpYSBjb250cm9scyBhcmUgdHJhbnNpdGlvbmVkIHRvIHVzZSB0aGUgcmVndWxhcgotICAg
IC8vIHN0eWxlIGNhbGN1bGF0aW9uLgotICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0gc2hhZG93
Um9vdCgpKQotICAgICAgICBzaGFkb3dOb2RlLT5hdHRhY2goKTsKLX0KLQotdm9pZCBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZVN0eWxlKCkKLXsKLSAgICBpZiAoIW1lZGlhRWxlbWVu
dCgpIHx8ICFtZWRpYUVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKLSAg
ICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBuZWVkc1JlbmRl
cmVyID0gcmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQoKSkgJiYgcGFyZW50Tm9kZSgpICYmIHBh
cmVudE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiAhbmVlZHNSZW5k
ZXJlcikKLSAgICAgICAgZGV0YWNoKCk7Ci0gICAgZWxzZSBpZiAoIXJlbmRlcmVyKCkgJiYgbmVl
ZHNSZW5kZXJlcikKLSAgICAgICAgYXR0YWNoKCk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXIoKSkK
LSAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotCi0gICAgLy8gRklY
TUU6IEN1cnJlbnRseSwgTWVpZGFDb250cm9sSW5wdXQgY2lyY3VtdmVudHMgdGhlIG5vcm1hbCBh
dHRhY2htZW50Ci0gICAgLy8gYW5kIHN0eWxlIHJlY2FsYyBjeWNsZSBhbmQgdGh1cyB3ZSBuZWVk
IHRvIGFkZCBleHRyYSBsb2dpYyB0byBiZSBhd2FyZSBvZgotICAgIC8vIHRoZSBzaGFkb3cgRE9N
LiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBtZWRpYSBjb250cm9scyBhcmUgdHJhbnNpdGlvbmVkIHRv
IHVzZQotICAgIC8vIHRoZSBuZXcgc2hhZG93IERPTS4KLSAgICBpZiAoTm9kZSogc2hhZG93Tm9k
ZSA9IHNoYWRvd1Jvb3QoKSkKLSAgICAgICAgc2hhZG93Tm9kZS0+cmVjYWxjU3R5bGUoTm9kZTo6
Rm9yY2UpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgc3R5bGUoKS0+c2V0UHJvcGVydHko
ZGlzcGxheVN0cmluZygpLCAibm9uZSIsIGVjKTsKIH0KIAotYm9vbCBNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQ6OmhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KQotewotICAgIGlmIChy
ZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyKCktPnRoZW1lKCktPmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KHJl
bmRlcmVyKCksIGFic1BvaW50KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KIAogdm9pZCBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNldERpc3BsYXlUeXBlKE1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlIGRpc3BsYXlUeXBlKQogewpAQCAtNDkzLDkgKzMyMywxNSBAQCB2b2lkIE1lZGlhQ29udHJv
bE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAg
ICAgICAgbWVkaWFFbGVtZW50KCktPnNldE11dGVkKCFtZWRpYUVsZW1lbnQoKS0+bXV0ZWQoKSk7
CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KKwogICAgIEhUTUxJ
bnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCit2b2lkIE1lZGlh
Q29udHJvbE11dGVCdXR0b25FbGVtZW50OjpjaGFuZ2VkTXV0ZSgpCit7CisgICAgdXBkYXRlRGlz
cGxheVR5cGUoKTsKK30KKwogdm9pZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6dXBk
YXRlRGlzcGxheVR5cGUoKQogewogICAgIHNldERpc3BsYXlUeXBlKG1lZGlhRWxlbWVudCgpLT5t
dXRlZCgpID8gTWVkaWFVbk11dGVCdXR0b24gOiBNZWRpYU11dGVCdXR0b24pOwpAQCAtNTAzLDE4
ICszMzksMjkgQEAgdm9pZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6dXBkYXRlRGlz
cGxheVR5cGUoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBN
ZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11dGVC
dXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK2lubGluZSBNZWRp
YUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250cm9scyog
Y29udHJvbHMpCiAgICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChtZWRpYUVsZW1l
bnQsIE1lZGlhTXV0ZUJ1dHRvbikKKyAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCiB7CiB9CiAK
LVBhc3NSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gTWVkaWFDb250
cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCkKK1Bhc3NSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4g
TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCiB7Ci0gICAgUmVmUHRy
PE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKG5l
dyBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCkpOworICAg
IEFTU0VSVChjb250cm9scyk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50LCBjb250cm9scykpOwogICAgIGJ1dHRvbi0+c2V0VHlw
ZSgiYnV0dG9uIik7CiAgICAgcmV0dXJuIGJ1dHRvbi5yZWxlYXNlKCk7CiB9CiAKK3ZvaWQgTWVk
aWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
b3ZlckV2ZW50KQorICAgICAgICBtX2NvbnRyb2xzLT5zaG93Vm9sdW1lU2xpZGVyKCk7CisKKyAg
ICBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVu
dCk7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9u
IikpOwpAQCAtNTI0LDcgKzM3MSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9s
UGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBpbmxpbmUgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
TXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVt
ZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IE1lZGlhQ29udHJvbE11
dGVCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFWb2x1bWVTbGlkZXJNdXRlQnV0dG9u
KQorICAgIDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50LCBNZWRp
YU11dGVCdXR0b24pCiB7CiB9CiAKQEAgLTU1OSw2ICs0MDYsNyBAQCB2b2lkIE1lZGlhQ29udHJv
bFBsYXlCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsK
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAg
ICAgICBtZWRpYUVsZW1lbnQoKS0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgICAgIHVwZGF0ZURp
c3BsYXlUeXBlKCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0K
ICAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKQEAgLTU4
Myw2ICs0MzEsNyBAQCBpbmxpbmUgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6Ok1lZGlh
Q29udHJvbFNlZWtCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZQogICAgICwgbV9jYXB0dXJpbmco
ZmFsc2UpCiAgICAgLCBtX3NlZWtUaW1lcih0aGlzLCAmTWVkaWFDb250cm9sU2Vla0J1dHRvbkVs
ZW1lbnQ6OnNlZWtUaW1lckZpcmVkKQogeworICAgIGhpZGUoKTsKIH0KIAogdm9pZCBNZWRpYUNv
bnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CkBAIC03MDYsNiArNTU1LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xSZXdp
bmRCdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiBpbmxpbmUgTWVkaWFDb250
cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJldHVyblRvUmVh
bHRpbWVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKICAgICA6
IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQsIE1lZGlhUmV0dXJuVG9SZWFs
dGltZUJ1dHRvbikKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
UmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRp
bWVCdXR0b25FbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpA
QCAtNzM1LDYgKzU4NSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUmV0dXJu
VG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkKIGlubGluZSBNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQpCiAgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFFbGVtZW50LCBNZWRpYVNo
b3dDbG9zZWRDYXB0aW9uc0J1dHRvbikKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8
TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBNZWRpYUNvbnRy
b2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQpCkBAIC03NDksOCArNjAwLDEwIEBAIHZvaWQgTWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBlCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
IHsKICAgICAgICAgbWVkaWFFbGVtZW50KCktPnNldENsb3NlZENhcHRpb25zVmlzaWJsZSghbWVk
aWFFbGVtZW50KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsKICAgICAgICAgc2V0Q2hlY2tl
ZChtZWRpYUVsZW1lbnQoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkpOworICAgICAgICB1cGRh
dGVEaXNwbGF5VHlwZSgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICB9CisKICAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
IH0KIApAQCAtNzY3LDE0ICs2MjAsMTggQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRy
b2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0kKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCitNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJvbHMqIGNv
bnRyb2xzKQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxlbWVudCwgTWVk
aWFTbGlkZXIpCisgICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQogeworICAgIHNldEF0dHJpYnV0
ZShwcmVjaXNpb25BdHRyLCAiZmxvYXQiKTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK1Bhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxp
bmVFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQogewotICAgIFJl
ZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5lID0gYWRvcHRSZWYobmV3
IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChtZWRpYUVsZW1lbnQpKTsKKyAgICBBU1NFUlQo
Y29udHJvbHMpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gdGlt
ZWxpbmUgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KG1lZGlhRWxl
bWVudCwgY29udHJvbHMpKTsKICAgICB0aW1lbGluZS0+c2V0VHlwZSgicmFuZ2UiKTsKICAgICBy
ZXR1cm4gdGltZWxpbmUucmVsZWFzZSgpOwogfQpAQCAtNzk4LDI4ICs2NTUsMzAgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogCiAgICAgZmxvYXQgdGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodmFsdWUoKS50
b0RvdWJsZSgpKTsKICAgICBpZiAodGltZSAhPSBtZWRpYUVsZW1lbnQoKS0+Y3VycmVudFRpbWUo
KSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBmaXJlZCAzIHRpbWVzIG9uIGV2ZXJ5IGNs
aWNrLiBXZSBzaG91bGQgbm90IGJlIGRvaW5nIHRoYXQuCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT5zZXRDdXJyZW50VGltZSh0aW1lLCBlYyk7CiAg
ICAgfQogCiAgICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihyZW5kZXJl
cigpKTsKICAgICBpZiAoc2xpZGVyICYmIHNsaWRlci0+aW5EcmFnTW9kZSgpKQotICAgICAgICB0
b1JlbmRlck1lZGlhKG1lZGlhRWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Y29udHJvbHMoKS0+dXBk
YXRlVGltZURpc3BsYXkoKTsKKyAgICAgICAgbV9jb250cm9scy0+dXBkYXRlVGltZURpc3BsYXko
KTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQp
CiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT5lbmRTY3J1YmJpbmcoKTsKIH0KIAotdm9pZCBNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OnVwZGF0ZShib29sIHVwZGF0ZUR1cmF0aW9uKSAKK3Zv
aWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpzZXRQb3NpdGlvbihmbG9hdCBjdXJyZW50
VGltZSkgCiB7Ci0gICAgaWYgKHVwZGF0ZUR1cmF0aW9uKSB7Ci0gICAgICAgIGZsb2F0IGR1cmF0
aW9uID0gbWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7Ci0gICAgICAgIHNldEF0dHJpYnV0ZSht
YXhBdHRyLCBTdHJpbmc6Om51bWJlcihpc2Zpbml0ZShkdXJhdGlvbikgPyBkdXJhdGlvbiA6IDAp
KTsKLSAgICB9Ci0gICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIobWVkaWFFbGVtZW50KCktPmN1
cnJlbnRUaW1lKCkpKTsKLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZSgpOwor
ICAgIHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKGN1cnJlbnRUaW1lKSk7CiB9CiAKK3ZvaWQgTWVk
aWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpzZXREdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3sK
KyAgICBzZXRBdHRyaWJ1dGUobWF4QXR0ciwgU3RyaW5nOjpudW1iZXIoaXNmaW5pdGUoZHVyYXRp
b24pID8gZHVyYXRpb24gOiAwKSk7Cit9CisKKwogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9s
cy10aW1lbGluZSIpKTsKQEAgLTgzMSw2ICs2OTAsOCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1l
ZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogaW5saW5l
IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFWb2x1bWVTbGlkZXIpCiB7CisgICAg
c2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOworICAgIHNldEF0dHJpYnV0ZSht
YXhBdHRyLCAiMSIpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVs
ZW1lbnQ+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQpCkBAIC04NjIsMTIgKzcyMywxMCBAQCB2b2lkIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQogICAgIH0KIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50Ojp1cGRh
dGUoKQordm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzZXRWb2x1bWUoZmxv
YXQgdm9sdW1lKQogewotICAgIGZsb2F0IHZvbHVtZSA9IG1lZGlhRWxlbWVudCgpLT52b2x1bWUo
KTsKICAgICBpZiAodmFsdWUoKS50b0Zsb2F0KCkgIT0gdm9sdW1lKQogICAgICAgICBzZXRWYWx1
ZShTdHJpbmc6Om51bWJlcih2b2x1bWUpKTsKLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6
OnVwZGF0ZSgpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKQEAgLTg4MSw2ICs3NDAsNyBAQCBj
b25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OnNoYWRv
d1BzZXVkb0lkKCkgY29uc3QKIGlubGluZSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxl
bWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxl
bWVudCwgTWVkaWFGdWxsc2NyZWVuQnV0dG9uKQogeworICAgIGhpZGUoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sRnVs
bHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQpCkBAIC05MjAsMzYgKzc4MCw0MSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJv
bEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIE1lZGlhQ29udHJvbFRpbWVEaXNw
bGF5RWxlbWVudDo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50
KQotICAgICwgbV9jdXJyZW50VmFsdWUoMCkKLSAgICAsIG1faXNWaXNpYmxlKHRydWUpCi17Ci19
CitjbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xUaW1lRGlzcGxheSA6IHB1YmxpYyBSZW5kZXJCbG9j
ayB7CitwdWJsaWM6CisgICAgUmVuZGVyTWVkaWFDb250cm9sVGltZURpc3BsYXkoTm9kZSopOwor
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKK307CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6c3R5bGVGb3JFbGVtZW50KCkKK1JlbmRl
ck1lZGlhQ29udHJvbFRpbWVEaXNwbGF5OjpSZW5kZXJNZWRpYUNvbnRyb2xUaW1lRGlzcGxheShO
b2RlKiBub2RlKQorICAgIDogUmVuZGVyQmxvY2sobm9kZSkKIHsKLSAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlID0gTWVkaWFDb250cm9sRWxlbWVudDo6c3R5bGVGb3JFbGVtZW50KCk7Ci0g
ICAgaWYgKCFtX2lzVmlzaWJsZSkgewotICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZShzdHlsZS5nZXQoKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoMCwgRml4ZWQp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxlOwogfQogCi12b2lkIE1lZGlhQ29udHJvbFRpbWVE
aXNwbGF5RWxlbWVudDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCisvLyBXZSB3YW50IHRoZSB0
aW1lbGluZSBzbGlkZXIgdG8gYmUgYXQgbGVhc3QgMTAwIHBpeGVscyB3aWRlLgorc3RhdGljIGNv
bnN0IGludCBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyA9IDQ1ICsgMTAwICsgNDU7CisK
K3ZvaWQgUmVuZGVyTWVkaWFDb250cm9sVGltZURpc3BsYXk6OmxheW91dCgpCiB7Ci0gICAgaWYg
KHZpc2libGUgPT0gbV9pc1Zpc2libGUpCisgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOworICAg
IC8vIEZJWE1FOiBGSUdVUkUgT1VUIEhPVyBUTyBDT0xMQVBTRSBMRU5HVEgsIExJS0UgT1JJR0lO
QUwgREVTSUdOLgorICAgIFJlbmRlckJveCogdGltZWxpbmVCb3ggPSB0b1JlbmRlckJveChwYXJl
bnQoKSk7CisgICAgaWYgKCF0aW1lbGluZUJveCkKICAgICAgICAgcmV0dXJuOwotICAgIG1faXNW
aXNpYmxlID0gdmlzaWJsZTsKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcg
dGhlIFJlbmRlck1lZGlhOjpsYXlvdXQoKQotICAgIC8vIGNhbGwsIHdoZXJlIHdlIGNhbm5vdCBj
aGFuZ2UgdGhlIHJlbmRlcmVyIGF0IHRoaXMgdGltZS4KLSAgICBpZiAoIXJlbmRlcmVyKCkgfHwg
IXJlbmRlcmVyKCktPnN0eWxlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpbnQgd2lkdGggPSB0
aW1lbGluZUJveC0+d2lkdGgoKTsKKyAgICBzdHlsZSgpLT5zZXRWaXNpYmlsaXR5KHdpZHRoIDwg
bWluV2lkdGhUb0Rpc3BsYXlUaW1lRGlzcGxheXMgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkg
PyBISURERU4gOiBWSVNJQkxFKTsKK30KKworaW5saW5lIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5
RWxlbWVudDo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQq
IG1lZGlhRWxlbWVudCkKKyAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50KQor
ICAgICwgbV9jdXJyZW50VmFsdWUoMCkKK3sKK30KIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKLSAgICByZW5kZXJlcigpLT5zZXRTdHlsZShzdHls
ZS5nZXQoKSk7CitSZW5kZXJPYmplY3QqIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlck1lZGlhQ29udHJvbFRpbWVEaXNwbGF5KHRoaXMpOwog
fQogCiB2b2lkIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudDo6c2V0Q3VycmVudFZhbHVl
KGZsb2F0IHRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFD
b250cm9sRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5oCmluZGV4IDQ0ZTg4MTEyMmYyMDY5N2NmMjlmN2M3M2ZhZTdiNmUyYzYxZWJlMTYu
LjE0YzJjZDliMmFjZTE1YWU4ZTc3NjcyMWNhNzg2Njk2NTgwNmFmYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCkBAIC00Miw2ICs0Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGcmFtZTsKK2Ns
YXNzIE1lZGlhQ29udHJvbHM7CiAKIC8vIE11c3QgbWF0Y2ggV2ViS2l0U3lzdGVtSW50ZXJmYWNl
LmgKIGVudW0gTWVkaWFDb250cm9sRWxlbWVudFR5cGUgewpAQCAtNzEsMjQgKzcyLDEzIEBAIGVu
dW0gTWVkaWFDb250cm9sRWxlbWVudFR5cGUgewogCiBIVE1MTWVkaWFFbGVtZW50KiB0b1BhcmVu
dE1lZGlhRWxlbWVudChSZW5kZXJPYmplY3QqKTsKIAotY2xhc3MgTWVkaWFDb250cm9sU2hhZG93
Um9vdEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBjcmVhdGUoSFRNTE1l
ZGlhRWxlbWVudCopOwotCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIAotcHJpdmF0
ZToKLSAgICBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7
Ci19OwotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNsYXNzIE1lZGlhQ29u
dHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewogcHVibGljOgotICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2b2lkIGF0dGFjaFRvUGFyZW50KEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQgdXBkYXRlU3R5bGUoKTsKKyAgICAvLyBGSVhNRTog
VGhlc2Ugc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBJbmxpbmVTdHlsYWJsZUVsZW1lbnQuCisgICAg
dm9pZCBoaWRlKCk7CisgICAgdm9pZCBzaG93KCk7CiAKICAgICB2aXJ0dWFsIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3QgPSAwOwogCkBAIC05Nyw5ICs4Nyw3IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBNZWRpYUNvbnRyb2xFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxl
Kik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVu
dCgpOworLy8gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1l
bnQoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTE5LDcgKzEwNyw2IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiB9
OwogCi0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgTWVkaWFDb250
cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbEVsZW1lbnQg
ewpAQCAtMTI4LDkgKzExNSw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwotICAgIHZpcnR1
YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OworCisgICAgdmlydHVhbCBN
ZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogfTsKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM5LDE5ICsxMjYsMTIgQEAgY2xhc3MgTWVk
aWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRy
b2xFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwog
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsK
LSAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSB7IHJldHVy
biBtX2lzVmlzaWJsZTsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oaW50IHgsIGludCB5KTsKLSAg
ICBib29sIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsKLQogcHJpdmF0ZToKICAg
ICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqLCBSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50Kik7CiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlw
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9J
ZCgpIGNvbnN0OwotCi0gICAgYm9vbCBtX2lzVmlzaWJsZTsKLSAgICBpbnQgbV94LCBtX3k7CiB9
OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjYsNyArMTQ2LDYgQEAg
cHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChIVE1MTWVkaWFF
bGVtZW50Kik7CiAKICAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlU
eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBj
b25zdDsKIAogICAgIGVudW0gU3RhdGVCZWluZ0Rpc3BsYXllZCB7IE5vdGhpbmcsIExvYWRpbmcs
IExpdmVCcm9hZGNhc3QgfTsKQEAgLTE3NywxMSArMTU2LDkgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVsZW1lbnQgewogcHVi
bGljOgotICAgIHZvaWQgYXR0YWNoVG9QYXJlbnQoRWxlbWVudCopOwotICAgIHZvaWQgdXBkYXRl
KCk7Ci0gICAgdm9pZCB1cGRhdGVTdHlsZSgpOwotCi0gICAgYm9vbCBoaXRUZXN0KGNvbnN0IElu
dFBvaW50JiBhYnNQb2ludCk7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwYXJ0IG9m
IHNvbWUgSW5saW5lU3R5bGFibGVFbGVtZW50LgorICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQg
c2hvdygpOwogCiAgICAgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2Rpc3BsYXlUeXBlOyB9CiAKQEAgLTE5MywxMSArMTcwLDYgQEAgcHJvdGVj
dGVkOgogICAgIHZvaWQgc2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwog
CiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKLQogICAgIHZpcnR1YWwgYm9vbCBpc01l
ZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKSB7IH0KQEAgLTIxMCwxMCArMTgyLDEyIEBAIHByaXZh
dGU6CiAKIGNsYXNzIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50IDogcHVibGljIE1lZGlh
Q29udHJvbElucHV0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIGNoYW5nZWRNdXRlKCk7CiAKIHByb3RlY3Rl
ZDoKICAgICBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kiwg
TWVkaWFDb250cm9sRWxlbWVudFR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Kik7CisKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlz
cGxheVR5cGUoKTsKQEAgLTIyMywxMiArMTk3LDE1IEBAIHByaXZhdGU6CiAKIGNsYXNzIE1lZGlh
Q29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sTXV0ZUJ1
dHRvbkVsZW1lbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJv
bFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gY3Jl
YXRlKEhUTUxNZWRpYUVsZW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7CiAKIHByaXZhdGU6Ci0gICAg
TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7Cisg
ICAgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kiwg
TWVkaWFDb250cm9scyopOwogCisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQo
KSBjb25zdDsKKworICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7CiB9OwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNTEsMTEgKzIyOCwxMiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IGNyZWF0
ZShIVE1MTWVkaWFFbGVtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCopOworICAgIC8vIEZJWE1FOiBQRVJIQVBTIE1BS0UgRVhQTElDSVQgUExBWS9Q
QVVTRSBDQUxMUy4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKIAogcHJp
dmF0ZToKICAgICBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50
Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07CiAKQEAgLTM0
MCwxMSArMzE4LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRy
b2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVt
ZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpOwogCiBwcml2YXRlOgogICAgIE1l
ZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07ICAgIAog
CkBAIC0zNTIsMTUgKzMzMCwxOCBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IGNyZWF0
ZShIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9s
VGltZWxpbmVFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJvbHMq
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0gICAg
dm9pZCB1cGRhdGUoYm9vbCB1cGRhdGVEdXJhdGlvbiA9IHRydWUpOworICAgIHZvaWQgc2V0UG9z
aXRpb24oZmxvYXQpOworICAgIHZvaWQgc2V0RHVyYXRpb24oZmxvYXQpOwogCiBwcml2YXRlOgot
ICAgIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CisgICAg
TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqLCBNZWRpYUNvbnRy
b2xzKik7CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQo
KSBjb25zdDsKKworICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7CiB9OwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNzAsNyArMzUxLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ+IGNyZWF0
ZShIVE1MTWVkaWFFbGVtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCopOwotICAgIHZvaWQgdXBkYXRlKCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxv
YXQpOwogCiBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCopOwpAQCAtMzk2LDggKzM3Nyw2IEBAIHByaXZhdGU6CiAKIGNsYXNzIE1l
ZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50
IHsKIHB1YmxpYzoKLSAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0KICAgICB2b2lkIHNldEN1
cnJlbnRWYWx1ZShmbG9hdCk7CiAgICAgZmxvYXQgY3VycmVudFZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV9jdXJyZW50VmFsdWU7IH0KIApAQCAtNDA1LDkgKzM4NCw5IEBAIHByb3RlY3RlZDoKICAg
ICBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogCiBw
cml2YXRlOgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVt
ZW50KCk7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogICAgIGZsb2F0IG1fY3VycmVudFZhbHVlOwotICAgIGJv
b2wgbV9pc1Zpc2libGU7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA
IC00MzUsMTUgKzQxNCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVt
ZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xTaGFkb3dSb290IDogcHVibGlj
IFJlbmRlckJsb2NrIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJNZWRpYUNvbnRyb2xTaGFkb3dSb290
KEVsZW1lbnQqIGUpIDogUmVuZGVyQmxvY2soZSkgeyB9Ci0gICAgdm9pZCBzZXRQYXJlbnQoUmVu
ZGVyT2JqZWN0KiBwKSB7IFJlbmRlck9iamVjdDo6c2V0UGFyZW50KHApOyB9Ci19OwotICAgIAor
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB9IC8vbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCmluZGV4IGJiYjU4ODA2
YmQwNTJlNTY1OWVlMzgyYzFlMjg5MDkxYzZmMzM4MzQuLjNjYzk2MDk2OWYwZTY3MWZkYWVhZTQ4
OGUzM2VhNGUwN2I4NjM3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZWRpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
LmNwcApAQCAtMjksMjIgKzI5LDE4IEBACiAjaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKIAogI2lu
Y2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50
cy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbHMuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKEhUTUxN
ZWRpYUVsZW1lbnQqIHZpZGVvKQogICAgIDogUmVuZGVySW1hZ2UodmlkZW8pCi0gICAgLCBtX2Nv
bnRyb2xzKG5ldyBNZWRpYUNvbnRyb2xzKHZpZGVvKSkKIHsKICAgICBzZXRJbWFnZVJlc291cmNl
KFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsKIH0KIAogUmVuZGVyTWVkaWE6OlJlbmRl
ck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvLCBjb25zdCBJbnRTaXplJiBpbnRyaW5zaWNT
aXplKQogICAgIDogUmVuZGVySW1hZ2UodmlkZW8pCi0gICAgLCBtX2NvbnRyb2xzKG5ldyBNZWRp
YUNvbnRyb2xzKHZpZGVvKSkKIHsKICAgICBzZXRJbWFnZVJlc291cmNlKFJlbmRlckltYWdlUmVz
b3VyY2U6OmNyZWF0ZSgpKTsKICAgICBzZXRJbnRyaW5zaWNTaXplKGludHJpbnNpY1NpemUpOwpA
QCAtNTQsMzIgKzUwLDI0IEBAIFJlbmRlck1lZGlhOjp+UmVuZGVyTWVkaWEoKQogewogfQogCi12
b2lkIFJlbmRlck1lZGlhOjpkZXN0cm95KCkKLXsKLSAgICBtX2NvbnRyb2xzLT5kZXN0cm95KCk7
Ci0gICAgUmVuZGVySW1hZ2U6OmRlc3Ryb3koKTsKLX0KLQorLy8gRklYTUU6IE1vdmUgdG8gUmVu
ZGVyVmlkZW8KIEhUTUxNZWRpYUVsZW1lbnQqIFJlbmRlck1lZGlhOjptZWRpYUVsZW1lbnQoKSBj
b25zdAogeyAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG5vZGUo
KSk7IAogfQogCi12b2lkIFJlbmRlck1lZGlhOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlckltYWdl
OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Ci0gICAgbV9jb250cm9scy0+dXBkYXRl
U3R5bGUoKTsKLX0KLQogdm9pZCBSZW5kZXJNZWRpYTo6bGF5b3V0KCkKIHsKICAgICBJbnRTaXpl
IG9sZFNpemUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKIAogICAgIFJlbmRlckltYWdlOjps
YXlvdXQoKTsKIAotICAgIFJlbmRlckJveCogY29udHJvbHNSZW5kZXJlciA9IG1fY29udHJvbHMt
PnJlbmRlckJveCgpOworICAgIC8vIEZJWE1FOiBBU1NVTUVTIEZJUlNUIENISUxEIElTIFNIQURP
VyBST09UIEJPWC4KKyAgICAvLyBGSVhNRTogTUFLRSBQQVJUIE9GIE1lZGlhQ29udHJvbHMuCisg
ICAgUmVuZGVyQm94KiBjb250cm9sc1JlbmRlcmVyID0gdG9SZW5kZXJCb3gobV9jaGlsZHJlbi5m
aXJzdENoaWxkKCkpOwogICAgIGlmICghY29udHJvbHNSZW5kZXJlcikKICAgICAgICAgcmV0dXJu
OworCiAgICAgSW50U2l6ZSBuZXdTaXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAgICAg
aWYgKG5ld1NpemUgPT0gb2xkU2l6ZSAmJiAhY29udHJvbHNSZW5kZXJlci0+bmVlZHNMYXlvdXQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtODksOSArNzcsNiBAQCB2b2lkIFJlbmRlck1lZGlhOjps
YXlvdXQoKQogICAgIC8vIGFuZCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBtYW55IHRpbWVz
IHBlciBzZWNvbmQgZHVyaW5nIHBsYXliYWNrLCB1c2UgYSBMYXlvdXRTdGF0ZU1haW50YWluZXI6
CiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50
U2l6ZSh4KCksIHkoKSksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHls
ZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKIAotICAgIG1fY29udHJvbHMtPnVw
ZGF0ZVRpbWVEaXNwbGF5VmlzaWJpbGl0eSgpOwotCi0gICAgY29udHJvbHNSZW5kZXJlci0+c2V0
TG9jYXRpb24oYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRk
aW5nVG9wKCkpOwogICAgIGNvbnRyb2xzUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5n
dGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKICAgICBjb250cm9sc1JlbmRlcmVyLT5zdHls
ZSgpLT5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIGNvbnRy
b2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKQEAgLTEwMSw5ICs4Niw5
IEBAIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91dCgpCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiB9
CiAKLXZvaWQgUmVuZGVyTWVkaWE6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3ZvaWQgUmVuZGVyTWVk
aWE6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBt
X2NvbnRyb2xzLT51cGRhdGUoKTsKKyAgICBSZW5kZXJJbWFnZTo6cGFpbnQocGFpbnRJbmZvLCB0
eCwgdHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYS5oCmluZGV4IDc2NThlZjZjMTg0YzM5ODMyZTRjNWQ4MmY4Zjg3YTViNjUw
YjUwMzEuLjU5NjRlYTRlNGM1ZGMxZDU2NDAzNWNhMThiOTc2YzYwMTBlYjkyMDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCkBAIC0zMyw3ICszMyw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRy
b2xzOwogCiBjbGFzcyBSZW5kZXJNZWRpYSA6IHB1YmxpYyBSZW5kZXJJbWFnZSB7CiBwdWJsaWM6
CkBAIC00NSwyOSArNDQsMjEgQEAgcHVibGljOgogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCog
Y2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogCiAgICAgSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KCkgY29uc3Q7Ci0gICAgTWVkaWFDb250cm9scyogY29udHJvbHMoKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7
IH0KICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKTsKLSAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCB7IHJldHVybiAiUmVuZGVyTWVkaWEiOyB9CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWEoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCi0KLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotCiAgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAotICAgIE93blB0cjxNZWRpYUNvbnRyb2xzPiBtX2NvbnRyb2xzOwogICAg
IFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogfTsKIApAQCAtNzcsMTEgKzY4LDYg
QEAgaW5saW5lIFJlbmRlck1lZGlhKiB0b1JlbmRlck1lZGlhKFJlbmRlck9iamVjdCogb2JqZWN0
KQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZWRpYSo+KG9iamVjdCk7CiB9CiAKLWlu
bGluZSBNZWRpYUNvbnRyb2xzKiBSZW5kZXJNZWRpYTo6Y29udHJvbHMoKSBjb25zdAotewotICAg
IHJldHVybiBtX2NvbnRyb2xzLmdldCgpOwotfQotCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25l
IGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvUmVuZGVyTWVkaWEoY29uc3QgUmVu
ZGVyTWVkaWEqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5k
ZXggNzNhNGVmN2RmMDRmNTY5NzMxYjg4YTViOTUzZDc5MWU2MWFlNjU2ZS4uMGI3NTVjNTRkMDQ2
ZmMwYjNkMGY3NjFiY2ZmZTA1ZTk4YjIxNjZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCkBAIC00ODEsMzIgKzQ4MSwxMCBAQCBib29sIFJlbmRlclRoZW1lOjpw
YWludERlY29yYXRpb25zKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1ib29sIFJlbmRlclRoZW1lOjpoaXRUZXN0TWVk
aWFDb250cm9sUGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFBvaW50JiBhYnNQb2ludCkK
LXsKLSAgICBpZiAoIW8tPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2NhbChhYnNQb2ludCwgZmFsc2Us
IHRydWUpOyAgLy8gcmVzcGVjdCB0cmFuc2Zvcm1zCi0gICAgcmV0dXJuIHRvUmVuZGVyQm94KG8p
LT5ib3JkZXJCb3hSZWN0KCkuY29udGFpbnMocm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsK
LX0KIAotYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250
cm9sUGFydCBwYXJ0LCBFbGVtZW50KiBlKQorYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkUmVuZGVy
TWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCopCiB7Ci0gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KGUp
OwotICAgIHN3aXRjaCAocGFydCkgewotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKLSAg
ICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+aGFzQXVkaW8oKTsKLSAgICBjYXNlIE1lZGlhUmV3
aW5kQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+bW92aWVMb2FkVHlw
ZSgpICE9IE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOwotICAgIGNhc2UgTWVkaWFSZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+bW92aWVMb2Fk
VHlwZSgpID09IE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOwotICAgIGNhc2UgTWVkaWFGdWxsc2Ny
ZWVuQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxs
c2NyZWVuKCk7Ci0gICAgY2FzZSBNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydDoK
LSAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+aGFzQ2xvc2VkQ2FwdGlvbnMoKTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIFN0cmluZyBSZW5kZXJUaGVtZTo6Zm9ybWF0TWVkaWFDb250cm9sc1RpbWUoZmxvYXQgdGlt
ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggMzVmMjU2
Yzk2YTM1NmRmYTc2ZTBkYTc3Njg5NWYxMjdhYWVhODA2NC4uNjAyYWNkNmRiZjBiN2VhMDdkZDNi
OWMwMDRkOTBiY2Q3MTBmMzM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKQEAgLTE3OCw3ICsxNzgsNiBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAg
Ly8gTWVkaWEgY29udHJvbHMKLSAgICB2aXJ0dWFsIGJvb2wgaGl0VGVzdE1lZGlhQ29udHJvbFBh
cnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCop
OwogICAgIHZpcnR1YWwgYm9vbCB1c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBkb3VibGUgbWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0
aW9uKCkgeyByZXR1cm4gMC4xOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85053</attachid>
            <date>2011-03-08 09:13:49 -0800</date>
            <delta_ts>2011-03-14 10:16:02 -0700</delta_ts>
            <desc>WIP: Another checkpoint.</desc>
            <filename>bug-53020-20110308091348.patch</filename>
            <type>text/plain</type>
            <size>85256</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA1NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9tZWRpYUNvbnRyb2xzLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNz
cwppbmRleCA4ODE0NGI0NmRmZDMzZGYwMzU1OTk5OGEzMmE1M2IzZGU5N2I0N2U5Li5kYTZjZDVm
MGViZTBjZDQwZjViNWJiNWUzMDgxMTdiYjE4NmUyZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlh
Q29udHJvbHMuY3NzCkBAIC0yOSw2ICsyOSwxMyBAQCBhdWRpbyB7CiAgICAgaGVpZ2h0OiAxNnB4
OwogfQogCis6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMgeworICAgIHdpZHRoOiBpbmhlcml0Owor
ICAgIGhlaWdodDogaW5oZXJpdDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZGlzcGxh
eTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CiAgICAgZGlzcGxheTogLXdlYmtpdC1i
b3g7CiAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOwpAQCAtOTgsMTIgKzEwNSw3
IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7CiAgICAgbWFyZ2luOiBpbml0aWFsOwogfQogCi1h
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlk
ZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAg
IGRpc3BsYXk6IG5vbmU7Ci19Ci0KIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVt
ZS1zbGlkZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgewot
ICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKICAgICBi
b3JkZXI6IGluaXRpYWw7CiAgICAgY29sb3I6IGluaGVyaXQ7CkBAIC0xNjYsNyArMTY4LDYgQEAg
YXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0
b24sIHZpZGVvOjotd2Via2l0LW1lZGkKIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiB7CiAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRp
YS12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uOwotICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgYmFj
a2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKICAgICBib3JkZXI6IGluaXRpYWw7CiAgICAgY29sb3I6
IGluaGVyaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBh
YWExYmVlZmM5YmIxMzhlMGFlNjJlMzM1ZjRhOWI1ZjEzM2YzYmVjLi5jMjkxM2QzYWE3YmYzNWQw
YTc2MTNkNmM2OWFkMjk5MWE1ZmYyNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIK
KyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgpAQCAtMTYxLDYgKzE2
Miw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX3NlbmRQcm9ncmVzc0V2ZW50
cyh0cnVlKQogICAgICwgbV9pc0Z1bGxzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2Nsb3NlZENhcHRp
b25zVmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQogI2lmIEVOQUJMRShQ
TFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKQog
I2VuZGlmCkBAIC0yMTgsMTIgKzIyMCwxNCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiAgICAgfQog
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGNvbnRyb2xzQXR0cikgewogI2lmICFFTkFCTEUoUExV
R0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICAgICAgaWYgKCFpc1ZpZGVvKCkgJiYgYXR0YWNoZWQo
KSAmJiAoY29udHJvbHMoKSAhPSAocmVuZGVyZXIoKSAhPSAwKSkpIHsKLSAgICAgICAgICAgIGRl
dGFjaCgpOwotICAgICAgICAgICAgYXR0YWNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJl
bmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwor
ICAgICAgICBpZiAoY29udHJvbHMoKSkgeworICAgICAgICAgICAgaWYgKCFoYXNNZWRpYUNvbnRy
b2xzKCkpIHsKKyAgICAgICAgICAgICAgICBlbnN1cmVNZWRpYUNvbnRyb2xzKCk7CisgICAgICAg
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXNldCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbWVkaWFDb250cm9scygpLT5zaG93KCk7CisgICAgICAgIH0gZWxzZSBpZiAoaGFzTWVk
aWFDb250cm9scygpKQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5oaWRlKCk7CiAjZWxz
ZQogICAgICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgICAgICBtX3BsYXllci0+c2V0Q29udHJv
bHMoY29udHJvbHMoKSk7CkBAIC0zMTYsNiArMzIwLDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKIAogICAgIHJldHVybiB0cnVl
OwogI2Vsc2UKKyAgICAvLyBGSVhNRTogV1RGIElTIFRISVM/IQogICAgIHJldHVybiBjb250cm9s
cygpID8gSFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpIDogZmFsc2U7CiAjZW5k
aWYKIH0KQEAgLTM2OSw4ICszNzQsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dGFjaCgp
CiAKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVs
ZW1lbnQoKTsKKwogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgIGVsc2Ug
aWYgKG1fcHJveHlXaWRnZXQpIHsKKyAgICBpZiAobV9wcm94eVdpZGdldCkgewogICAgICAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgICAgICBGcmFtZUxvYWRlciog
bG9hZGVyID0gZnJhbWUgPyBmcmFtZS0+bG9hZGVyKCkgOiAwOwogICAgICAgICBpZiAobG9hZGVy
KQpAQCAtODg5LDYgKzg5NSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0
YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3RhdGUpCiAgICAgICAgICAgICBub25lU3Vw
cG9ydGVkKCk7CiAKICAgICAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7CisgICAgICAgIGlmICho
YXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnJlcG9ydGVk
RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTE3LDYgKzkyNSw5IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGUgc3RhdGUpCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTkVUV09SS19JRExFOwogICAg
ICAgICBtX2NvbXBsZXRlbHlMb2FkZWQgPSB0cnVlOwogICAgIH0KKworICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCisgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Y2hhbmdlZE5ldHdvcmtTdGF0
ZSgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVhZHlTdGF0ZUNo
YW5nZWQoTWVkaWFQbGF5ZXIqKQpAQCAtOTY2LDYgKzk3Nyw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBzdGF0ZSkKICAgICBp
ZiAobV9yZWFkeVN0YXRlID49IEhBVkVfTUVUQURBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX01FVEFE
QVRBKSB7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdl
RXZlbnQpOwogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZWRtZXRhZGF0
YUV2ZW50KTsKKyAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1l
ZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkp
CiAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgICAgICBt
X3BsYXllci0+c2VlaygwKTsKQEAgLTE1MjUsOCArMTUzOCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICAgICAgICAgaWYgKCFwcm9jZXNzaW5nTWVkaWFQ
bGF5ZXJDYWxsYmFjaygpKSB7CiAgICAgICAgICAgICBpZiAobV9wbGF5ZXIpIHsKICAgICAgICAg
ICAgICAgICBtX3BsYXllci0+c2V0TXV0ZWQobV9tdXRlZCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21F
bGVtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkTXV0ZSgpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnZvbHVt
ZWNoYW5nZUV2ZW50KTsKQEAgLTE1OTMsNiArMTYwNiwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnBsYXliYWNrUHJvZ3Jlc3NUaW1lckZpcmVkKFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+KikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgc2NoZWR1bGVUaW1ldXBkYXRlRXZlbnQodHJ1ZSk7Cisg
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkgeworICAgICAgICBpZiAoIW1fbW91c2VPdmVyICYm
IGNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPm1ha2VUcmFuc3BhcmVu
dCgpOworICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXlpbmcoKTsKKyAgICB9CiAgICAgCiAg
ICAgLy8gRklYTUU6IGRlYWwgd2l0aCBjdWUgcmFuZ2VzIGhlcmUKIH0KQEAgLTIxMDEsOCArMjEx
OSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlVm9sdW1lKCkKICAgICAgICAgbV9w
bGF5ZXItPnNldFZvbHVtZShtX3ZvbHVtZSAqIHZvbHVtZU11bHRpcGxpZXIpOwogICAgIH0KICAg
ICAKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVs
ZW1lbnQoKTsKKyAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICBtZWRpYUNvbnRy
b2xzKCktPmNoYW5nZWRWb2x1bWUobV92b2x1bWUpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCkBAIC0yMTE1LDYgKzIxMzMsOCBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgICAgICBtX3BsYXllci0+cGF1c2Uo
KTsKICAgICAgICAgcmVmcmVzaENhY2hlZFRpbWUoKTsKICAgICAgICAgbV9wbGF5YmFja1Byb2dy
ZXNzVGltZXIuc3RvcCgpOworICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQorICAgICAg
ICAgICAgbWVkaWFDb250cm9scygpLT5wYXVzZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtMjEzOCw2ICsyMTU4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQ
bGF5U3RhdGUoKQogICAgICAgICAgICAgbV9wbGF5ZXItPnBsYXkoKTsKICAgICAgICAgfQogCisg
ICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNvbnRyb2xz
KCktPnBsYXkoKTsKICAgICAgICAgc3RhcnRQbGF5YmFja1Byb2dyZXNzVGltZXIoKTsKICAgICAg
ICAgbV9wbGF5aW5nID0gdHJ1ZTsKIApAQCAtMjE1NCw2ICsyMTc2LDkgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogCiAgICAgICAgIGlmIChjb3VsZFBsYXlJZkVu
b3VnaERhdGEoKSkKICAgICAgICAgICAgIG1fcGxheWVyLT5wcmVwYXJlVG9QbGF5KCk7CisKKyAg
ICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMo
KS0+cGF1c2UoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHJlbmRlcmVyKCkpCkBAIC0yMzAyLDEw
ICsyMzI3LDE4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiAgICAgaWYgKHdpZGdldCkKICAgICAgICAgd2lkZ2V0LT5oYW5kbGVFdmVu
dChldmVudCk7CiAjZWxzZQotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzTWVk
aWEoKSkKLSAgICAgICAgdG9SZW5kZXJNZWRpYShyZW5kZXJlcigpKS0+Y29udHJvbHMoKS0+Zm9y
d2FyZEV2ZW50KGV2ZW50KTsKLSAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgIE1v
dXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwor
ICAgICAgICBpZiAobW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpICE9IHRoaXMpIHsKKyAgICAg
ICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkg
eworICAgICAgICAgICAgICAgIG1fbW91c2VPdmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBp
ZiAoaGFzTWVkaWFDb250cm9scygpICYmIGNvbnRyb2xzKCkgJiYgIWNhblBsYXkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5tYWtlT3BhcXVlKCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQp
CisgICAgICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICNlbmRpZgog
fQpAQCAtMjQ3OSw2ICsyNTEyLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUoYm9vbCBjbG9zZWRDYXB0aW9uVmlzaWJsZSkKIAogICAgIG1fY2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlID0gY2xvc2VkQ2FwdGlvblZpc2libGU7CiAgICAgbV9wbGF5ZXItPnNl
dENsb3NlZENhcHRpb25zVmlzaWJsZShjbG9zZWRDYXB0aW9uVmlzaWJsZSk7CisgICAgaWYgKGhh
c01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgbWVkaWFDb250cm9scygpLT5jaGFuZ2VkQ2xvc2Vk
Q2FwdGlvbnNWaXNpYmlsaXR5KCk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRl
cmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CkBAIC0yNTcwLDYgKzI2MDUsMjIgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpCiAgICAg
bV9wbGF5ZXItPnNldFByaXZhdGVCcm93c2luZ01vZGUocHJpdmF0ZU1vZGUpOwogfQogCitib29s
IEhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlhQ29udHJvbHMoKQoreworICAgIHJldHVybiBzaGFk
b3dSb290KCk7Cit9CisKK01lZGlhQ29udHJvbHMqIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29u
dHJvbHMoKQoreworICAgIHJldHVybiB0b01lZGlhQ29udHJvbHMoc2hhZG93Um9vdCgpKTsKK30K
Kwordm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzKCkKK3sKKyAgICBp
ZiAoIWhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgc2V0U2hhZG93Um9vdChNZWRpYUNvbnRy
b2xzOjpjcmVhdGUodGhpcykpOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAppbmRleCBmODcwNTg2YmIyOGY1MGQ0NjI1OWM5ZDc1ODliZjgwY2Fl
MTE2Y2YyLi43OTc1NTRjNzM4NWY1MGU0ZTEyNTIzMWZlMGY1ZjkwNzhkOTJhYjk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OwogY2xhc3MgSFRNTFNvdXJjZUVsZW1lbnQ7Citj
bGFzcyBNZWRpYUNvbnRyb2xzOwogY2xhc3MgTWVkaWFFcnJvcjsKIGNsYXNzIEtVUkw7CiBjbGFz
cyBUaW1lUmFuZ2VzOwpAQCAtMTk3LDYgKzE5OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBjbGVhck1lZGlhQ2FjaGUoKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhck1lZGlhQ2FjaGVGb3JT
aXRlKGNvbnN0IFN0cmluZyYpOwogCisgICAgTWVkaWFDb250cm9scyogbWVkaWFDb250cm9scygp
OworCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MTWVkaWFFbGVtZW50KCk7CkBAIC0zMTks
NiArMzIyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRUaW1lKCk7CiAg
ICAgdm9pZCByZWZyZXNoQ2FjaGVkVGltZSgpIGNvbnN0OwogCisgICAgYm9vbCBoYXNNZWRpYUNv
bnRyb2xzKCk7CisgICAgdm9pZCBlbnN1cmVNZWRpYUNvbnRyb2xzKCk7CisKICAgICBUaW1lcjxI
VE1MTWVkaWFFbGVtZW50PiBtX2xvYWRUaW1lcjsKICAgICBUaW1lcjxIVE1MTWVkaWFFbGVtZW50
PiBtX2FzeW5jRXZlbnRUaW1lcjsKICAgICBUaW1lcjxIVE1MTWVkaWFFbGVtZW50PiBtX3Byb2dy
ZXNzRXZlbnRUaW1lcjsKQEAgLTM5OCw2ICs0MDQsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBt
X2lzRnVsbHNjcmVlbiA6IDE7CiAgICAgYm9vbCBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA6IDE7
CisgICAgYm9vbCBtX21vdXNlT3ZlciA6IDE7CiAKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZP
Ul9WSURFTykKICAgICBib29sIG1fbmVlZFdpZGdldFVwZGF0ZSA6IDE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCmluZGV4IGQ4Yzk5MzYwZDIwMGIzZTBm
YjFkNWM5MDlkZWM4OWRlZTljMGM2NWEuLjQyZTBmMGE1MTEyNGE2NGIxMmY5OTg2MDk0YWE2YmY2
YmU0MWE0MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
Y3BwCkBAIC00Nyw1MjQgKzQ3LDMyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBjb25zdCBkb3VibGUgY1RpbWVVcGRhdGVSZXBl
YXREZWxheSA9IDAuMjsKLXN0YXRpYyBjb25zdCBkb3VibGUgY09wYWNpdHlBbmltYXRpb25SZXBl
YXREZWxheSA9IDAuMDU7Ci0KIE1lZGlhQ29udHJvbHM6Ok1lZGlhQ29udHJvbHMoSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50KQotICAgIDogbV9tZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50
KQotICAgICwgbV90aW1lVXBkYXRlVGltZXIodGhpcywgJk1lZGlhQ29udHJvbHM6OnRpbWVVcGRh
dGVUaW1lckZpcmVkKQotICAgICwgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIodGhpcywgJk1lZGlh
Q29udHJvbHM6Om9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVkKQotICAgICwgbV9vcGFjaXR5QW5p
bWF0aW9uU3RhcnRUaW1lKDApCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbigwKQot
ICAgICwgbV9vcGFjaXR5QW5pbWF0aW9uRnJvbSgwKQotICAgICwgbV9vcGFjaXR5QW5pbWF0aW9u
VG8oMS4wZikKLSAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQorICAgIDogSFRNTERpdkVsZW1lbnQo
ZGl2VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCisgICAgLCBtX21lZGlhRWxlbWVudCht
ZWRpYUVsZW1lbnQpCisgICAgLCBtX3Jld2luZEJ1dHRvbigwKQorICAgICwgbV9wbGF5QnV0dG9u
KDApCisgICAgLCBtX3JldHVyblRvUmVhbFRpbWVCdXR0b24oMCkKKyAgICAsIG1fc3RhdHVzRGlz
cGxheSgwKQorICAgICwgbV9jdXJyZW50VGltZURpc3BsYXkoMCkKKyAgICAsIG1fdGltZWxpbmUo
MCkKKyAgICAsIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXkoMCkKKyAgICAsIG1fdGltZWxpbmVDb250
YWluZXIoMCkKKyAgICAsIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oMCkKKyAgICAsIG1f
cGFuZWxNdXRlQnV0dG9uKDApCisgICAgLCBtX3ZvbHVtZVNsaWRlcigwKQorICAgICwgbV92b2x1
bWVTbGlkZXJNdXRlQnV0dG9uKDApCisgICAgLCBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcigwKQor
ICAgICwgbV9mdWxsU2NyZWVuQnV0dG9uKDApCisgICAgLCBtX3BhbmVsKDApCisgICAgLCBtX29w
YXF1ZSh0cnVlKQogewogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVN0eWxlKCkKK1Bh
c3NSZWZQdHI8TWVkaWFDb250cm9scz4gTWVkaWFDb250cm9sczo6Y3JlYXRlKEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWxlbWVudCkKIHsKLSAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYW5lbCkKLSAgICAgICAgbV9wYW5lbC0+dXBk
YXRlU3R5bGUoKTsKLSAgICBpZiAobV9tdXRlQnV0dG9uKQotICAgICAgICBtX211dGVCdXR0b24t
PnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fcGxheUJ1dHRvbikKLSAgICAgICAgbV9wbGF5QnV0
dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3NlZWtCYWNrQnV0dG9uKQotICAgICAgICBt
X3NlZWtCYWNrQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3NlZWtGb3J3YXJkQnV0
dG9uKQotICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlm
IChtX3Jld2luZEJ1dHRvbikKLSAgICAgICAgbV9yZXdpbmRCdXR0b24tPnVwZGF0ZVN0eWxlKCk7
Ci0gICAgaWYgKG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbikKLSAgICAgICAgbV9yZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT51cGRhdGVT
dHlsZSgpOwotICAgIGlmIChtX3N0YXR1c0Rpc3BsYXkpCi0gICAgICAgIG1fc3RhdHVzRGlzcGxh
eS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV90aW1lbGluZUNvbnRhaW5lcikKLSAgICAgICAg
bV90aW1lbGluZUNvbnRhaW5lci0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV90aW1lbGluZSkK
LSAgICAgICAgbV90aW1lbGluZS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9mdWxsc2NyZWVu
QnV0dG9uKQotICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAg
aWYgKG1fY3VycmVudFRpbWVEaXNwbGF5KQotICAgICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+
dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV90aW1lUmVtYWluaW5nRGlzcGxheSkKLSAgICAgICAg
bV90aW1lUmVtYWluaW5nRGlzcGxheS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV92b2x1bWVT
bGlkZXJDb250YWluZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGVT
dHlsZSgpOwotICAgIGlmIChtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24pCi0gICAgICAgIG1fdm9s
dW1lU2xpZGVyTXV0ZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlk
ZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyLT51cGRhdGVTdHlsZSgpOwotfQorICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xzPiBjb250cm9scyA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xzKG1l
ZGlhRWxlbWVudCkpOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OmRlc3Ryb3koKQotewotICAgIEFT
U0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7CiAKLSAgICBpZiAobV9jb250cm9sc1No
YWRvd1Jvb3QgJiYgbV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkpIHsKKyAgICBSZWZQ
dHI8TWVkaWFDb250cm9sUGFuZWxFbGVtZW50PiBwYW5lbCA9IE1lZGlhQ29udHJvbFBhbmVsRWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CiAKLSAgICAgICAgLy8gZGV0YWNoIHRoZSBwYW5l
bCBiZWZvcmUgcmVtb3ZpbmcgdGhlIHNoYWRvdyByZW5kZXJlciB0byBwcmV2ZW50IGEgY3Jhc2gg
aW4gbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpIAotICAgICAgICAvLyAgd2hlbiBkaXNw
bGF5OiBzdHlsZSBjaGFuZ2VzCi0gICAgICAgIG1fcGFuZWwtPmRldGFjaCgpOworICAgIC8vIEZJ
WE1FOiBXSEFUIFRPIERPIFdJVEggZWM/PyE/IT8hPyEKKyAgICBFeGNlcHRpb25Db2RlIGVjOwog
Ci0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW1vdmVDaGlsZChtX2NvbnRy
b2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290
LT5kZXRhY2goKTsKLSAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSAwOworICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50PiByZXdpbmRCdXR0b24gPSBNZWRpYUNv
bnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250
cm9scy0+bV9yZXdpbmRCdXR0b24gPSByZXdpbmRCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFw
cGVuZENoaWxkKHJld2luZEJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlCdXR0b25F
bGVtZW50PiBwbGF5QnV0dG9uID0gTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX3BsYXlCdXR0b24gPSBwbGF5QnV0dG9u
LmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChwbGF5QnV0dG9uLnJlbGVhc2UoKSwgZWMs
IHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVk
aWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+IHJldHVyblRvUmVhbHRpbWVC
dXR0b24gPSBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fcmV0dXJuVG9SZWFsVGltZUJ1dHRvbiA9
IHJldHVyblRvUmVhbHRpbWVCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHJl
dHVyblRvUmVhbHRpbWVCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCktPnBh
Z2UoKS0+dGhlbWUoKS0+dXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKSkgeworICAgICAg
ICBSZWZQdHI8TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+IHN0YXR1c0Rpc3BsYXkg
PSBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7
CisgICAgICAgIGNvbnRyb2xzLT5tX3N0YXR1c0Rpc3BsYXkgPSBzdGF0dXNEaXNwbGF5LmdldCgp
OworICAgICAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoc3RhdHVzRGlzcGxheS5yZWxlYXNlKCksIGVj
LCB0cnVlKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQot
fQogCi12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZSgpCisgICAgUmVmUHRyPE1lZGlhQ29udHJv
bFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gdGltZWxpbmVDb250YWluZXIgPSBNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworCisgICAg
UmVmUHRyPE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ+IGN1cnJlbnRUaW1l
RGlzcGxheSA9IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZSht
ZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX2N1cnJlbnRUaW1lRGlzcGxheSA9IGN1cnJl
bnRUaW1lRGlzcGxheS5nZXQoKTsKKyAgICB0aW1lbGluZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQo
Y3VycmVudFRpbWVEaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50
PiB0aW1lbGluZSA9IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxl
bWVudCwgY29udHJvbHMuZ2V0KCkpOworICAgIGNvbnRyb2xzLT5tX3RpbWVsaW5lID0gdGltZWxp
bmUuZ2V0KCk7CisgICAgdGltZWxpbmVDb250YWluZXItPmFwcGVuZENoaWxkKHRpbWVsaW5lLnJl
bGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSZWZQdHI8TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50PiB0aW1lUmVt
YWluaW5nRGlzcGxheSA9IE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6
Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fdGltZVJlbWFpbmluZ0Rpc3Bs
YXkgPSB0aW1lUmVtYWluaW5nRGlzcGxheS5nZXQoKTsKKyAgICB0aW1lbGluZUNvbnRhaW5lci0+
YXBwZW5kQ2hpbGQodGltZVJlbWFpbmluZ0Rpc3BsYXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7Cisg
ICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnRyb2xzLT5tX3RpbWVsaW5l
Q29udGFpbmVyID0gdGltZWxpbmVDb250YWluZXIuZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENo
aWxkKHRpbWVsaW5lQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogT05MWSBBUFBFTkQgV0hFTiBTVVBQ
T1JUUyBTRUVLQkFDSworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChNZWRpYUNvbnRyb2xTZWVrQmFj
a0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpLCBlYywgdHJ1ZSk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiBPTkxZIEFQUEVORCBXSEVO
IFNVUFBPUlRTIFNFRUtGT1JXQVJECisgICAgcGFuZWwtPmFwcGVuZENoaWxkKE1lZGlhQ29udHJv
bFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCksIGVjLCB0cnVl
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IFVwZGF0
ZSBjYyBidXR0b24gd2hlbiB0dXJuaW5nIG9uL29mZiBmcm9tIERPTSEhISEKKyAgICBSZWZQdHI8
TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiB0b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbiA9IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fdG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b24gPSB0b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi5nZXQoKTsKKyAg
ICBwYW5lbC0+YXBwZW5kQ2hpbGQodG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24ucmVsZWFzZSgp
LCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gZnVsbFNjcmVlbkJ1dHRvbiA9
IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50
KTsKKyAgICBjb250cm9scy0+bV9mdWxsU2NyZWVuQnV0dG9uID0gZnVsbFNjcmVlbkJ1dHRvbi5n
ZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoZnVsbFNjcmVlbkJ1dHRvbi5yZWxlYXNlKCks
IGVjLCB0cnVlKTsKKworICAgIC8vIEZJWE1FOiBVcGRhdGUgbXV0ZUJ1dHRvbiB3aGVuIG11dGlu
ZyBmcm9tIERPTSEhIQorICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVt
ZW50PiBwYW5lbE11dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50
OjpjcmVhdGUobWVkaWFFbGVtZW50LCBjb250cm9scy5nZXQoKSk7CisgICAgY29udHJvbHMtPm1f
cGFuZWxNdXRlQnV0dG9uID0gcGFuZWxNdXRlQnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBl
bmRDaGlsZChwYW5lbE11dGVCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVj
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50PiB2b2x1bWVTbGlkZXJDb250YWluZXIgPSBNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKworICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50PiBzbGlkZXIgPSBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250
cm9scy0+bV92b2x1bWVTbGlkZXIgPSBzbGlkZXIuZ2V0KCk7CisgICAgdm9sdW1lU2xpZGVyQ29u
dGFpbmVyLT5hcHBlbmRDaGlsZChzbGlkZXIucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJNdXRlQnV0dG9uRWxlbWVudD4gdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiA9IE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsK
KyAgICBjb250cm9scy0+bV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0gdm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbi5nZXQoKTsKKyAgICB2b2x1bWVTbGlkZXJDb250YWluZXItPmFwcGVuZENoaWxkKHZv
bHVtZVNsaWRlck11dGVCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnRyb2xzLT5tX3ZvbHVtZVNsaWRlckNvbnRhaW5l
ciA9IHZvbHVtZVNsaWRlckNvbnRhaW5lci5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQo
dm9sdW1lU2xpZGVyQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogRE8gV0UgTkVFRCBtX3BhbmVsPyE/
IT8hPworICAgIGNvbnRyb2xzLT5tX3BhbmVsID0gcGFuZWwuZ2V0KCk7CisgICAgY29udHJvbHMt
PmFwcGVuZENoaWxkKHBhbmVsLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29udHJvbHMucmVsZWFzZSgpOworfQorCit2
b2lkIE1lZGlhQ29udHJvbHM6OnNob3coKQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
ID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+Y29udHJvbHMoKSB8fCAhbWVkaWEt
PmluQWN0aXZlRG9jdW1lbnQoKSkgewotICAgICAgICBpZiAobV9jb250cm9sc1NoYWRvd1Jvb3Qp
IHsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKTsKLSAgICAgICAg
ICAgIG1fcGFuZWwgPSAwOwotICAgICAgICAgICAgbV9tdXRlQnV0dG9uID0gMDsKLSAgICAgICAg
ICAgIG1fcGxheUJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3N0YXR1c0Rpc3BsYXkgPSAwOwot
ICAgICAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lciA9IDA7Ci0gICAgICAgICAgICBtX3RpbWVs
aW5lID0gMDsKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24gPSAwOwotICAgICAgICAgICAg
bV9zZWVrRm9yd2FyZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3Jld2luZEJ1dHRvbiA9IDA7
Ci0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSAwOwotICAgICAgICAgICAg
bV9jdXJyZW50VGltZURpc3BsYXkgPSAwOwotICAgICAgICAgICAgbV90aW1lUmVtYWluaW5nRGlz
cGxheSA9IDA7Ci0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSAwOwotICAgICAgICAg
ICAgbV92b2x1bWVTbGlkZXJDb250YWluZXIgPSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlk
ZXIgPSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0gMDsKLSAgICAg
ICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gMDsKLSAgICAgICAgICAgIG1fdG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b24gPSAwOwotICAgICAgICB9Ci0gICAgICAgIG1fb3BhY2l0eUFuaW1h
dGlvblRvID0gMS4wZjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOwot
ICAgICAgICBtX3RpbWVVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIW1fY29udHJvbHNTaGFkb3dSb290KSB7Ci0gICAgICAgIGNyZWF0ZUNvbnRy
b2xzU2hhZG93Um9vdCgpOwotICAgICAgICBjcmVhdGVQYW5lbCgpOwotICAgICAgICBpZiAobV9w
YW5lbCkgewotICAgICAgICAgICAgY3JlYXRlUmV3aW5kQnV0dG9uKCk7Ci0gICAgICAgICAgICBj
cmVhdGVQbGF5QnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVSZXR1cm5Ub1JlYWx0aW1lQnV0
dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVTdGF0dXNEaXNwbGF5KCk7Ci0gICAgICAgICAgICBj
cmVhdGVUaW1lbGluZUNvbnRhaW5lcigpOwotICAgICAgICAgICAgaWYgKG1fdGltZWxpbmVDb250
YWluZXIpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVDdXJyZW50VGltZURpc3BsYXkoKTsKLSAg
ICAgICAgICAgICAgICBjcmVhdGVUaW1lbGluZSgpOwotICAgICAgICAgICAgICAgIGNyZWF0ZVRp
bWVSZW1haW5pbmdEaXNwbGF5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjcmVhdGVT
ZWVrQmFja0J1dHRvbigpOwotICAgICAgICAgICAgY3JlYXRlU2Vla0ZvcndhcmRCdXR0b24oKTsK
LSAgICAgICAgICAgIGNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKCk7Ci0gICAgICAg
ICAgICBjcmVhdGVGdWxsc2NyZWVuQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVNdXRlQnV0
dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoKTsKLSAgICAg
ICAgICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikgewotICAgICAgICAgICAgICAgIGNy
ZWF0ZVZvbHVtZVNsaWRlcigpOwotICAgICAgICAgICAgICAgIGNyZWF0ZVZvbHVtZVNsaWRlck11
dGVCdXR0b24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fcGFuZWwtPmF0dGFjaCgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1lZGlhLT5jYW5QbGF5KCkpIHsKLSAgICAg
ICAgaWYgKG1fdGltZVVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBtX3RpbWVV
cGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIGlmIChtZWRpYS0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgbV90aW1lbGluZSAmJiBtX3RpbWVsaW5l
LT5yZW5kZXJlcigpICYmIG1fdGltZWxpbmUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmRpc3BsYXko
KSAhPSBOT05FKSB7Ci0gICAgICAgIG1fdGltZVVwZGF0ZVRpbWVyLnN0YXJ0UmVwZWF0aW5nKGNU
aW1lVXBkYXRlUmVwZWF0RGVsYXkpOwotICAgIH0KLQotICAgIGlmIChtX3BhbmVsKSB7Ci0gICAg
ICAgIC8vIHVwZGF0ZSgpIG1pZ2h0IGFsdGVyIHRoZSBvcGFjaXR5IG9mIHRoZSBlbGVtZW50LCBl
c3BlY2lhbGx5IGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlCi0gICAgICAgIC8vIG9mIGFuIGFuaW1h
dGlvbi4gVGhpcyBpcyB0aGUgb25seSBlbGVtZW50IGNvbmNlcm5lZCBhcyB3ZSBhbmltYXRlIG9u
bHkgdGhpcyBlbGVtZW50LgotICAgICAgICBmbG9hdCBvcGFjaXR5QmVmb3JlQ2hhbmdpbmdTdHls
ZSA9IG1fcGFuZWwtPnJlbmRlcmVyKCkgPyBtX3BhbmVsLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5v
cGFjaXR5KCkgOiAwOwotICAgICAgICBtX3BhbmVsLT51cGRhdGUoKTsKLSAgICAgICAgY2hhbmdl
T3BhY2l0eShtX3BhbmVsLmdldCgpLCBvcGFjaXR5QmVmb3JlQ2hhbmdpbmdTdHlsZSk7Ci0gICAg
fQotICAgIGlmIChtX211dGVCdXR0b24pCi0gICAgICAgIG1fbXV0ZUJ1dHRvbi0+dXBkYXRlKCk7
Ci0gICAgaWYgKG1fcGxheUJ1dHRvbikKLSAgICAgICAgbV9wbGF5QnV0dG9uLT51cGRhdGUoKTsK
LSAgICBpZiAobV90aW1lbGluZUNvbnRhaW5lcikKLSAgICAgICAgbV90aW1lbGluZUNvbnRhaW5l
ci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKQotICAgICAgICBt
X3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0g
ICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZSgpOwotICAgIGlmIChtX2N1cnJlbnRUaW1lRGlzcGxh
eSkKLSAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXktPnVwZGF0ZSgpOwotICAgIGlmIChtX3Rp
bWVSZW1haW5pbmdEaXNwbGF5KQotICAgICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT51cGRh
dGUoKTsKLSAgICBpZiAobV9zZWVrQmFja0J1dHRvbikKLSAgICAgICAgbV9zZWVrQmFja0J1dHRv
bi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fc2Vla0ZvcndhcmRCdXR0b24pCi0gICAgICAgIG1fc2Vl
a0ZvcndhcmRCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3Jld2luZEJ1dHRvbikKLSAgICAg
ICAgbV9yZXdpbmRCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3JldHVyblRvUmVhbHRpbWVC
dXR0b24pCi0gICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAg
aWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3N0YXR1c0Rpc3BsYXkpCi0gICAg
ICAgIG1fc3RhdHVzRGlzcGxheS0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRv
bikKLSAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV92b2x1
bWVTbGlkZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyLT51cGRhdGUoKTsKLSAgICBpZiAobV92
b2x1bWVTbGlkZXJNdXRlQnV0dG9uKQotICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24t
PnVwZGF0ZSgpOwotCi0gICAgdXBkYXRlVGltZURpc3BsYXkoKTsKLSAgICB1cGRhdGVDb250cm9s
VmlzaWJpbGl0eSgpOworICAgIG1fcGFuZWwtPnNob3coKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRy
b2xzOjpjcmVhdGVDb250cm9sc1NoYWRvd1Jvb3QoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpoaWRl
KCkKIHsKLSAgICBBU1NFUlQoIW1fY29udHJvbHNTaGFkb3dSb290KTsKLSAgICBtX2NvbnRyb2xz
U2hhZG93Um9vdCA9IE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50OjpjcmVhdGUobV9tZWRp
YUVsZW1lbnQpOwotICAgIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5hZGRDaGlsZChtX2Nv
bnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSk7CisgICAgbV9wYW5lbC0+aGlkZSgpOwogfQog
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBhbmVsKCkKK3N0YXRpYyBjb25zdCBTdHJpbmcm
IHdlYmtpdFRyYW5zaXRpb25TdHJpbmcoKQogewotICAgIEFTU0VSVCghbV9wYW5lbCk7Ci0gICAg
bV9wYW5lbCA9IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50
KTsKLSAgICBtX3BhbmVsLT5hdHRhY2hUb1BhcmVudChtX2NvbnRyb2xzU2hhZG93Um9vdC5nZXQo
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHMsICgiLXdlYmtpdC10cmFuc2l0
aW9uIikpOworICAgIHJldHVybiBzOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZU11
dGVCdXR0b24oKQorc3RhdGljIGNvbnN0IFN0cmluZyYgb3BhY2l0eVN0cmluZygpCiB7Ci0gICAg
QVNTRVJUKCFtX211dGVCdXR0b24pOwotICAgIG1fbXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFBh
bmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9tdXRl
QnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgcywgKCJvcGFjaXR5IikpOworICAgIHJldHVybiBzOwogfQogCi12b2lk
IE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBsYXlCdXR0b24oKQordm9pZCBNZWRpYUNvbnRyb2xzOjpt
YWtlT3BhcXVlKCkKIHsKLSAgICBBU1NFUlQoIW1fcGxheUJ1dHRvbik7Ci0gICAgbV9wbGF5QnV0
dG9uID0gTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVu
dCk7Ci0gICAgbV9wbGF5QnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0K
LQotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVTZWVrQmFja0J1dHRvbigpCi17Ci0gICAgQVNT
RVJUKCFtX3NlZWtCYWNrQnV0dG9uKTsKLSAgICBtX3NlZWtCYWNrQnV0dG9uID0gTWVkaWFDb250
cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1f
c2Vla0JhY2tCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQotCi12b2lk
IE1lZGlhQ29udHJvbHM6OmNyZWF0ZVNlZWtGb3J3YXJkQnV0dG9uKCkKLXsKLSAgICBBU1NFUlQo
IW1fc2Vla0ZvcndhcmRCdXR0b24pOwotICAgIG1fc2Vla0ZvcndhcmRCdXR0b24gPSBNZWRpYUNv
bnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0g
ICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci19
Ci0KLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlUmV3aW5kQnV0dG9uKCkKLXsKLSAgICBBU1NF
UlQoIW1fcmV3aW5kQnV0dG9uKTsKLSAgICBtX3Jld2luZEJ1dHRvbiA9IE1lZGlhQ29udHJvbFJl
d2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9yZXdpbmRC
dXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQorICAgIGlmIChtX29wYXF1
ZSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVJldHVyblRv
UmVhbHRpbWVCdXR0b24oKQotewotICAgIEFTU0VSVCghbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9u
KTsKLSAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSBNZWRpYUNvbnRyb2xSZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3JldHVy
blRvUmVhbHRpbWVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQorICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0cmFuc2l0aW9uVmFsdWUsICgpKTsKKyAgICBp
ZiAodHJhbnNpdGlvblZhbHVlLmlzTnVsbCgpKQorICAgICAgICB0cmFuc2l0aW9uVmFsdWUgPSBT
dHJpbmc6OmZvcm1hdCgib3BhY2l0eSAlLjFncyIsIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUo
KS0+bWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCkpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBvcGFjaXR5VmFsdWUsICgiMSIpKTsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
cmVhdGVUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbigpCi17Ci0gICAgQVNTRVJUKCFtX3RvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uKTsKLSAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
ID0gTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpjcmVhdGUo
bV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmF0dGFj
aFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgbV9w
YW5lbC0+c3R5bGUoKS0+c2V0UHJvcGVydHkod2Via2l0VHJhbnNpdGlvblN0cmluZygpLCB0cmFu
c2l0aW9uVmFsdWUsIGVjKTsKKyAgICBtX3BhbmVsLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShvcGFj
aXR5U3RyaW5nKCksIG9wYWNpdHlWYWx1ZSwgZWMpOworICAgIG1fb3BhcXVlID0gdHJ1ZTsKIH0K
IAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVTdGF0dXNEaXNwbGF5KCkKK3ZvaWQgTWVkaWFD
b250cm9sczo6bWFrZVRyYW5zcGFyZW50KCkKIHsKLSAgICBBU1NFUlQoIW1fc3RhdHVzRGlzcGxh
eSk7Ci0gICAgbV9zdGF0dXNEaXNwbGF5ID0gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1l
bnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9zdGF0dXNEaXNwbGF5LT5hdHRhY2hU
b1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KKyAgICBpZiAoIW1fb3BhcXVlKQorICAgICAgICBy
ZXR1cm47CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVGltZWxpbmVDb250YWluZXIoKQot
ewotICAgIEFTU0VSVCghbV90aW1lbGluZUNvbnRhaW5lcik7Ci0gICAgbV90aW1lbGluZUNvbnRh
aW5lciA9IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVk
aWFFbGVtZW50KTsKLSAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5hdHRhY2hUb1BhcmVudChtX3Bh
bmVsLmdldCgpKTsKLX0KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHJhbnNpdGlv
blZhbHVlLCAoKSk7CisgICAgaWYgKHRyYW5zaXRpb25WYWx1ZS5pc051bGwoKSkKKyAgICAgICAg
dHJhbnNpdGlvblZhbHVlID0gU3RyaW5nOjpmb3JtYXQoIm9wYWNpdHkgJS4xZ3MiLCBkb2N1bWVu
dCgpLT5wYWdlKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRpb24oKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG9wYWNpdHlWYWx1ZSwgKCIwIikpOwogCi12
b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRpbWVsaW5lKCkKLXsKLSAgICBBU1NFUlQoIW1fdGlt
ZWxpbmUpOwotICAgIG1fdGltZWxpbmUgPSBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNy
ZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV90aW1lbGluZS0+c2V0QXR0cmlidXRlKHByZWNp
c2lvbkF0dHIsICJmbG9hdCIpOwotICAgIG1fdGltZWxpbmUtPmF0dGFjaFRvUGFyZW50KG1fdGlt
ZWxpbmVDb250YWluZXIuZ2V0KCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklY
TUU6IE1ha2UgbW9yZSBlZmZpY2llbnQuCisgICAgbV9wYW5lbC0+c3R5bGUoKS0+c2V0UHJvcGVy
dHkod2Via2l0VHJhbnNpdGlvblN0cmluZygpLCB0cmFuc2l0aW9uVmFsdWUsIGVjKTsKKyAgICBt
X3BhbmVsLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShvcGFjaXR5U3RyaW5nKCksIG9wYWNpdHlWYWx1
ZSwgZWMpOworICAgIG1fb3BhcXVlID0gZmFsc2U7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6
Y3JlYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKCkKK3ZvaWQgTWVkaWFDb250cm9sczo6cmVzZXQo
KQogewotICAgIEFTU0VSVCghbV92b2x1bWVTbGlkZXJDb250YWluZXIpOwotICAgIG1fdm9sdW1l
U2xpZGVyQ29udGFpbmVyID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVu
dDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+
YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci19CisgICAgY2hhbmdlZE5ldHdvcmtTdGF0
ZSgpOworICAgIGZsb2F0IGR1cmF0aW9uID0gbV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7Cisg
ICAgaWYgKCFpc25hbihkdXJhdGlvbikpIHsKKyAgICAgICAgbV90aW1lbGluZS0+c2V0RHVyYXRp
b24oZHVyYXRpb24pOworICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5zaG93KCk7CisgICAg
ICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgp
KTsKKyAgICAgICAgdXBkYXRlVGltZURpc3BsYXkoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV90
aW1lbGluZUNvbnRhaW5lci0+aGlkZSgpOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5oYXNB
dWRpbygpKQorICAgICAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+c2hvdygpOworICAgIGVsc2UKKyAg
ICAgICAgbV9wYW5lbE11dGVCdXR0b24tPmhpZGUoKTsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
cmVhdGVWb2x1bWVTbGlkZXIoKQotewotICAgIEFTU0VSVCghbV92b2x1bWVTbGlkZXIpOwotICAg
IG1fdm9sdW1lU2xpZGVyID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6Y3JlYXRl
KG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3ZvbHVtZVNsaWRlci0+c2V0QXR0cmlidXRlKHByZWNp
c2lvbkF0dHIsICJmbG9hdCIpOwotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRBdHRyaWJ1dGUobWF4
QXR0ciwgIjEiKTsKLSAgICBtX3ZvbHVtZVNsaWRlci0+c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwg
U3RyaW5nOjpudW1iZXIobV9tZWRpYUVsZW1lbnQtPnZvbHVtZSgpKSk7Ci0gICAgbV92b2x1bWVT
bGlkZXItPmF0dGFjaFRvUGFyZW50KG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLmdldCgpKTsKLX0K
KyAgICBtX3ZvbHVtZVNsaWRlci0+c2V0Vm9sdW1lKG1fbWVkaWFFbGVtZW50LT52b2x1bWUoKSk7
CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbigpCi17
Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24pOwotICAgIG1fdm9sdW1lU2xp
ZGVyTXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50
OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+
YXR0YWNoVG9QYXJlbnQobV92b2x1bWVTbGlkZXJDb250YWluZXIuZ2V0KCkpOwotfQorICAgIGlm
IChtX21lZGlhRWxlbWVudC0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKKyAgICAgICAgbV90b2dnbGVD
bG9zZWRDYXB0aW9uc0J1dHRvbi0+c2hvdygpOworICAgIGVsc2UKKyAgICAgICAgbV90b2dnbGVD
bG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5t
b3ZpZUxvYWRUeXBlKCkgIT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW0pIHsKKyAgICAgICAgbV9y
ZXR1cm5Ub1JlYWxUaW1lQnV0dG9uLT5oaWRlKCk7CisgICAgICAgIG1fcmV3aW5kQnV0dG9uLT5z
aG93KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uLT5z
aG93KCk7CisgICAgICAgIG1fcmV3aW5kQnV0dG9uLT5oaWRlKCk7CisgICAgfQogCi12b2lkIE1l
ZGlhQ29udHJvbHM6OmNyZWF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpCi17Ci0gICAgQVNTRVJUKCFt
X2N1cnJlbnRUaW1lRGlzcGxheSk7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXkgPSBNZWRpYUNv
bnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwot
ICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5hdHRhY2hUb1BhcmVudChtX3RpbWVsaW5lQ29udGFp
bmVyLmdldCgpKTsKKyAgICBtYWtlT3BhcXVlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6
Y3JlYXRlVGltZVJlbWFpbmluZ0Rpc3BsYXkoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpwbGF5KCkK
IHsKLSAgICBBU1NFUlQoIW1fdGltZVJlbWFpbmluZ0Rpc3BsYXkpOwotICAgIG1fdGltZVJlbWFp
bmluZ0Rpc3BsYXkgPSBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ6OmNy
ZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+YXR0YWNo
VG9QYXJlbnQobV90aW1lbGluZUNvbnRhaW5lci5nZXQoKSk7CisgICAgbV9wbGF5QnV0dG9uLT51
cGRhdGVEaXNwbGF5VHlwZSgpOworICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFF
bGVtZW50LT5jdXJyZW50VGltZSgpKTsKKyAgICB1cGRhdGVUaW1lRGlzcGxheSgpOwogfQogCi12
b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZUZ1bGxzY3JlZW5CdXR0b24oKQordm9pZCBNZWRpYUNv
bnRyb2xzOjpwbGF5aW5nKCkKIHsKLSAgICBBU1NFUlQoIW1fZnVsbHNjcmVlbkJ1dHRvbik7Ci0g
ICAgbV9mdWxsc2NyZWVuQnV0dG9uID0gTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5hdHRh
Y2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKKyAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbiht
X21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSk7CisgICAgdXBkYXRlVGltZURpc3BsYXkoKTsK
IH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjp0aW1lVXBkYXRlVGltZXJGaXJlZChUaW1lcjxNZWRp
YUNvbnRyb2xzPiopCit2b2lkIE1lZGlhQ29udHJvbHM6OnBhdXNlKCkKIHsKLSAgICBpZiAobV90
aW1lbGluZSkKLSAgICAgICAgbV90aW1lbGluZS0+dXBkYXRlKGZhbHNlKTsKKyAgICBtX3BsYXlC
dXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7CisgICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24o
bV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkpOwogICAgIHVwZGF0ZVRpbWVEaXNwbGF5KCk7
CisgICAgbWFrZU9wYXF1ZSgpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRpbWVE
aXNwbGF5KCkKIHsKLSAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpOwotCi0g
ICAgaWYgKCFtX2N1cnJlbnRUaW1lRGlzcGxheSB8fCAhbV9jdXJyZW50VGltZURpc3BsYXktPnJl
bmRlcmVyKCkgfHwgbV9jdXJyZW50VGltZURpc3BsYXktPnJlbmRlcmVyKCktPnN0eWxlKCktPmRp
c3BsYXkoKSA9PSBOT05FIHx8IG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZmxvYXQgbm93
ID0gbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCk7CiAgICAgZmxvYXQgZHVyYXRpb24gPSBt
X21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKIAotICAgIC8vIEFsbG93IHRoZSB0aGVtZSB0byBm
b3JtYXQgdGhlIHRpbWUKKyAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOworICAg
IGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQWxsb3cgdGhlIHRoZW1lIHRv
IGZvcm1hdCB0aGUgdGltZS4KICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIG1fY3VycmVudFRp
bWVEaXNwbGF5LT5zZXRJbm5lclRleHQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnRoZW1l
KCktPmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShub3csIGR1cmF0aW9uKSwgZWMpOwor
ICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRJbm5lclRleHQoZG9jdW1lbnQoKS0+cGFnZSgp
LT50aGVtZSgpLT5mb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUobm93LCBkdXJhdGlvbiks
IGVjKTsKICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+c2V0Q3VycmVudFZhbHVlKG5vdyk7Ci0g
ICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+c2V0SW5uZXJUZXh0KG1fbWVkaWFFbGVtZW50LT5y
ZW5kZXJlcigpLT50aGVtZSgpLT5mb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShub3cs
IGR1cmF0aW9uKSwgZWMpOworICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnNldElubmVyVGV4
dChkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5p
bmdUaW1lKG5vdywgZHVyYXRpb24pLCBlYyk7CiAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+
c2V0Q3VycmVudFZhbHVlKG5vdyAtIGR1cmF0aW9uKTsKIH0KIAotUmVuZGVyQm94KiBNZWRpYUNv
bnRyb2xzOjpyZW5kZXJCb3goKQordm9pZCBNZWRpYUNvbnRyb2xzOjpyZXBvcnRlZEVycm9yKCkK
IHsKLSAgICByZXR1cm4gbV9jb250cm9sc1NoYWRvd1Jvb3QgPyBtX2NvbnRyb2xzU2hhZG93Um9v
dC0+cmVuZGVyQm94KCkgOiAwOworICAgIG1fdGltZWxpbmVDb250YWluZXItPmhpZGUoKTsKKyAg
ICBtX3BhbmVsTXV0ZUJ1dHRvbi0+aGlkZSgpOworICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
LT5oaWRlKCk7CisgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOwogfQog
Ci12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5KCkKK3ZvaWQgTWVk
aWFDb250cm9sczo6Y2hhbmdlZE5ldHdvcmtTdGF0ZSgpCiB7Ci0gICAgaWYgKCFtX3BhbmVsIHx8
ICFtX3BhbmVsLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEb24ndCBm
YWRlIGZvciBhdWRpbyBjb250cm9scy4KLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYSA9IG1f
bWVkaWFFbGVtZW50OwotICAgIGlmICghbWVkaWEtPmhhc1ZpZGVvKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChtZWRpYS0+cmVuZGVyZXIoKSk7Ci0KLSAgICAvLyBEb24ndCBmYWRl
IGlmIHRoZSBtZWRpYSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlCi0gICAgaWYgKG1lZGlhLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGJvb2wgc2hvdWxkSGlkZUNvbnRyb2xsZXIgPSAhbV9tb3VzZU92ZXIgJiYg
IW1lZGlhLT5jYW5QbGF5KCk7Ci0KLSAgICAvLyBEbyBmYWRpbmcgbWFudWFsbHksIGNzcyBhbmlt
YXRpb25zIGRvbid0IHdvcmsgd2l0aCBzaGFkb3cgdHJlZXMKLQotICAgIGZsb2F0IGFuaW1hdGVG
cm9tID0gbV9wYW5lbC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3BhY2l0eSgpOwotICAgIGZsb2F0
IGFuaW1hdGVUbyA9IHNob3VsZEhpZGVDb250cm9sbGVyID8gMC4wZiA6IDEuMGY7Ci0KLSAgICBp
ZiAoYW5pbWF0ZUZyb20gPT0gYW5pbWF0ZVRvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBpZiAobV9vcGFj
aXR5QW5pbWF0aW9uVG8gPT0gYW5pbWF0ZVRvKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgfQotCi0gICAgaWYgKGFuaW1h
dGVGcm9tIDwgYW5pbWF0ZVRvKQotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbiA9
IG1fcGFuZWwtPnJlbmRlcmVyKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlv
bigpOworICAgIGlmIChtX21lZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxsc2NyZWVuKCkpCisgICAg
ICAgIG1fZnVsbFNjcmVlbkJ1dHRvbi0+c2hvdygpOwogICAgIGVsc2UKLSAgICAgICAgbV9vcGFj
aXR5QW5pbWF0aW9uRHVyYXRpb24gPSBtX3BhbmVsLT5yZW5kZXJlcigpLT50aGVtZSgpLT5tZWRp
YUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7CisgICAgICAgIG1fZnVsbFNjcmVlbkJ1dHRvbi0+
aGlkZSgpOwogCi0gICAgbV9vcGFjaXR5QW5pbWF0aW9uRnJvbSA9IGFuaW1hdGVGcm9tOwotICAg
IG1fb3BhY2l0eUFuaW1hdGlvblRvID0gYW5pbWF0ZVRvOwotCi0gICAgbV9vcGFjaXR5QW5pbWF0
aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX29wYWNpdHlBbmltYXRpb25UaW1l
ci5zdGFydFJlcGVhdGluZyhjT3BhY2l0eUFuaW1hdGlvblJlcGVhdERlbGF5KTsKKyAgICBpZiAo
bV9zdGF0dXNEaXNwbGF5KQorICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPnVwZGF0ZSgpOwogfQog
Ci12b2lkIE1lZGlhQ29udHJvbHM6OmNoYW5nZU9wYWNpdHkoSFRNTEVsZW1lbnQqIGUsIGZsb2F0
IG9wYWNpdHkpCit2b2lkIE1lZGlhQ29udHJvbHM6OmxvYWRlZE1ldGFkYXRhKCkKIHsKLSAgICBp
ZiAoIWUgfHwgIWUtPnJlbmRlcmVyKCkgfHwgIWUtPnJlbmRlcmVyKCktPnN0eWxlKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHMgPSBSZW5kZXJTdHlsZTo6Y2xv
bmUoZS0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgcy0+c2V0T3BhY2l0eShvcGFjaXR5KTsK
LSAgICAvLyB6LWluZGV4IGNhbid0IGJlIGF1dG8gaWYgb3BhY2l0eSBpcyB1c2VkCi0gICAgcy0+
c2V0WkluZGV4KDApOwotICAgIGUtPnJlbmRlcmVyKCktPnNldFN0eWxlKHMucmVsZWFzZSgpKTsK
KyAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQorICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPmhpZGUo
KTsKKworICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6b3BhY2l0eUFuaW1h
dGlvblRpbWVyRmlyZWQoVGltZXI8TWVkaWFDb250cm9scz4qKQordm9pZCBNZWRpYUNvbnRyb2xz
OjpjaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCkKIHsKLSAgICBkb3VibGUgdGltZSA9
IGN1cnJlbnRUaW1lKCkgLSBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgaWYgKHRp
bWUgPj0gbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24pIHsKLSAgICAgICAgdGltZSA9IG1fb3Bh
Y2l0eUFuaW1hdGlvbkR1cmF0aW9uOwotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5z
dG9wKCk7Ci0gICAgfQotICAgIGZsb2F0IG9wYWNpdHkgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KG1fb3BhY2l0eUFuaW1hdGlvbkZyb20gKyAobV9vcGFjaXR5QW5pbWF0aW9uVG8gLSBtX29wYWNp
dHlBbmltYXRpb25Gcm9tKSAqIHRpbWUgLyBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbik7Ci0g
ICAgY2hhbmdlT3BhY2l0eShtX3BhbmVsLmdldCgpLCBvcGFjaXR5KTsKKyAgICBtX3RvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uLT51cGRhdGVEaXNwbGF5VHlwZSgpOwogfQogCi12b2lkIE1lZGlh
Q29udHJvbHM6OnVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihib29sIHZpc2libGUpCit2b2lk
IE1lZGlhQ29udHJvbHM6OmNoYW5nZWRNdXRlKCkKIHsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50
LT5oYXNBdWRpbygpIHx8ICFtX3ZvbHVtZVNsaWRlckNvbnRhaW5lciB8fCAhbV92b2x1bWVTbGlk
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh2aXNpYmxlICYmICFtX3ZvbHVtZVNsaWRl
ckNvbnRhaW5lci0+aXNWaXNpYmxlKCkpIHsKLSAgICAgICAgaWYgKCFtX211dGVCdXR0b24gfHwg
IW1fbXV0ZUJ1dHRvbi0+cmVuZGVyZXIoKSB8fCAhbV9tdXRlQnV0dG9uLT5yZW5kZXJCb3goKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHMgPSBt
X3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIGludCBo
ZWlnaHQgPSBzLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSA/IDAgOiBzLT5oZWlnaHQoKS52YWx1ZSgp
OwotICAgICAgICBpbnQgd2lkdGggPSBzLT53aWR0aCgpLmlzUGVyY2VudCgpID8gMCA6IHMtPndp
ZHRoKCkudmFsdWUoKTsKLSAgICAgICAgSW50UG9pbnQgb2Zmc2V0ID0gbV9tZWRpYUVsZW1lbnQt
PmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVC
dXR0b24obV9tdXRlQnV0dG9uLT5yZW5kZXJCb3goKSwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgICAgIGludCB4ID0gb2Zmc2V0LngoKSArIG1fbXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCkt
Pm9mZnNldExlZnQoKTsKLSAgICAgICAgaW50IHkgPSBvZmZzZXQueSgpICsgbV9tdXRlQnV0dG9u
LT5yZW5kZXJCb3goKS0+b2Zmc2V0VG9wKCk7Ci0KLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250
YWluZXItPnNldFBvc2l0aW9uKHgsIHkpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5l
ci0+c2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnVw
ZGF0ZSgpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBkYXRlKCk7Ci0gICAgfSBlbHNlIGlm
ICghdmlzaWJsZSAmJiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+aXNWaXNpYmxlKCkpIHsKLSAg
ICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNldFZpc2libGUoZmFsc2UpOwotICAgICAg
ICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlU3R5bGUoKTsKLSAgICB9CisgICAgbV9w
YW5lbE11dGVCdXR0b24tPmNoYW5nZWRNdXRlKCk7CisgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0
dG9uLT5jaGFuZ2VkTXV0ZSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmZvcndhcmRFdmVu
dChFdmVudCogZXZlbnQpCit2b2lkIE1lZGlhQ29udHJvbHM6OmNoYW5nZWRWb2x1bWUoZmxvYXQg
dm9sdW1lKQogewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0KLSAg
ICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIG1fY29udHJvbHNTaGFkb3dSb290KSB7Ci0g
ICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4o
ZXZlbnQpOwotICAgICAgICBJbnRQb2ludCBwb2ludChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0
aW9uKCkpOwotCi0gICAgICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAg
aWYgKG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiAmJiBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24t
PmhpdFRlc3QocG9pbnQpKSB7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24t
PmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICAgICAgZGVmYXVsdEhhbmRsZWQg
PSBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hv
d1ZvbHVtZVNsaWRlciA9IGZhbHNlOwotICAgICAgICBpZiAoIWRlZmF1bHRIYW5kbGVkICYmIG1f
bXV0ZUJ1dHRvbiAmJiBtX211dGVCdXR0b24tPmhpdFRlc3QocG9pbnQpKSB7Ci0gICAgICAgICAg
ICBtX211dGVCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICAgICAg
aWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAg
ICAgICAgICAgc2hvd1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobV92b2x1bWVTbGlkZXJDb250YWluZXIgJiYgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmhp
dFRlc3QocG9pbnQpKQotICAgICAgICAgICAgc2hvd1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0KLSAg
ICAgICAgaWYgKG1fdm9sdW1lU2xpZGVyICYmIG1fdm9sdW1lU2xpZGVyLT5oaXRUZXN0KHBvaW50
KSkgewotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXItPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOwotICAgICAgICAgICAgc2hvd1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICB1cGRhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoc2hvd1ZvbHVtZVNsaWRlcik7Ci0K
LSAgICAgICAgaWYgKG1fcGxheUJ1dHRvbiAmJiBtX3BsYXlCdXR0b24tPmhpdFRlc3QocG9pbnQp
KQotICAgICAgICAgICAgbV9wbGF5QnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
LQotICAgICAgICBpZiAobV9zZWVrQmFja0J1dHRvbiAmJiBtX3NlZWtCYWNrQnV0dG9uLT5oaXRU
ZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3NlZWtGb3J3YXJkQnV0dG9uICYmIG1fc2Vl
a0ZvcndhcmRCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9zZWVrRm9yd2Fy
ZEJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fcmV3
aW5kQnV0dG9uICYmIG1fcmV3aW5kQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAg
IG1fcmV3aW5kQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBp
ZiAobV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uICYmIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+
aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24gJiYgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGl0VGVzdChwb2lu
dCkpCi0gICAgICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5kZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV90aW1lbGluZSAmJiBtX3RpbWVsaW5l
LT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fdGltZWxpbmUtPmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5CdXR0b24gJiYgbV9mdWxs
c2NyZWVuQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkJ1
dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAgICAgICBtX21v
dXNlT3ZlciA9IHRydWU7Ci0gICAgICAgICAgICB1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW91dEV2ZW50KSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBzY3JvbGxiYXIgdGh1bWIgY2Fw
dHVyZXMgbW91c2UgZXZlbnRzLCB3ZSBzaG91bGQgdHJlYXQgdGhlIG1vdXNlIGFzIHN0aWxsIGJl
aW5nIG92ZXIgb3VyIHJlbmRlcmVyIGlmIHRoZSBuZXcgdGFyZ2V0IGlzIGEgZGVzY2VuZGFudAot
ICAgICAgICAgICAgTm9kZSogbW91c2VPdmVyTm9kZSA9IG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJn
ZXQoKSA/IG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKS0+dG9Ob2RlKCkgOiAwOwotICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBtb3VzZU92ZXJSZW5kZXJlciA9IG1vdXNlT3Zlck5vZGUgPyBt
b3VzZU92ZXJOb2RlLT5yZW5kZXJlcigpIDogMDsKLSAgICAgICAgICAgIG1fbW91c2VPdmVyID0g
bW91c2VPdmVyUmVuZGVyZXIgJiYgbW91c2VPdmVyUmVuZGVyZXItPmlzRGVzY2VuZGFudE9mKG1f
bWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xWaXNp
YmlsaXR5KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV92b2x1bWVTbGlkZXItPnNldFZvbHVt
ZSh2b2x1bWUpOwogfQogCi0vLyBXZSB3YW50IHRoZSB0aW1lbGluZSBzbGlkZXIgdG8gYmUgYXQg
bGVhc3QgMTAwIHBpeGVscyB3aWRlLgotc3RhdGljIGNvbnN0IGludCBtaW5XaWR0aFRvRGlzcGxh
eVRpbWVEaXNwbGF5cyA9IDE2ICsgMTYgKyA0NSArIDEwMCArIDQ1ICsgMTYgKyAxOwotCi12b2lk
IE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRpbWVEaXNwbGF5VmlzaWJpbGl0eSgpCit2b2lkIE1lZGlh
Q29udHJvbHM6OnNob3dWb2x1bWVTbGlkZXIoKQogewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVu
dC0+cmVuZGVyZXIoKSk7Ci0KLSAgICBpZiAoIW1fY3VycmVudFRpbWVEaXNwbGF5ICYmICFtX3Rp
bWVSZW1haW5pbmdEaXNwbGF5KQorICAgIGlmICghbV9tZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGludCB3aWR0aCA9IG1fbWVkaWFFbGVtZW50LT5yZW5k
ZXJCb3goKS0+d2lkdGgoKTsKLSAgICBib29sIHNob3VsZFNob3dUaW1lRGlzcGxheXMgPSB3aWR0
aCA+PSBtaW5XaWR0aFRvRGlzcGxheVRpbWVEaXNwbGF5cyAqIG1fbWVkaWFFbGVtZW50LT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgbV92b2x1bWVTbGlkZXJDb250
YWluZXItPnNob3coKTsKK30KIAotICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRWaXNpYmxl
KHNob3VsZFNob3dUaW1lRGlzcGxheXMpOwotICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnNl
dFZpc2libGUoc2hvdWxkU2hvd1RpbWVEaXNwbGF5cyk7Citjb25zdCBBdG9taWNTdHJpbmcmIE1l
ZGlhQ29udHJvbHM6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scyIpKTsKKyAg
ICByZXR1cm4gaWQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbHMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaAppbmRleCA5OGUwMTdmOWRiZDJkMzk2NzJjZGNhZGVmZGE5MzFiZjI0ZWNhYjk5Li45
MWQxZTI0OWNmNGQ2YzZlZWIyZjdhYjcxNDI4ODBiOGJhMjQzZjYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBF
TkFCTEUoVklERU8pCiAKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC0zOCwxMDIgKzM5LDg4IEBAIGNs
YXNzIEhUTUxFbGVtZW50OwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEhUTUxNZWRp
YUVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50OworY2xhc3MgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDsKIGNsYXNzIE1l
ZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sU2Vla0J1dHRv
bkVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDsKIGNsYXNzIE1l
ZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xSZXR1cm5U
b1JlYWx0aW1lQnV0dG9uRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxh
eUVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ7CitjbGFzcyBNZWRp
YUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJFbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVs
ZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ7CiBjbGFzcyBNZWRp
YUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVsaW5l
Q29udGFpbmVyRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50Owor
Y2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyQ29udGFpbmVyRWxlbWVudDsKLWNsYXNzIE1lZGlhQ29udHJvbEVsZW1lbnQ7CitjbGFz
cyBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ7CiBjbGFzcyBNZWRpYVBsYXllcjsKIAogY2xhc3Mg
UmVuZGVyQm94OwogY2xhc3MgUmVuZGVyTWVkaWE7CiAKLWNsYXNzIE1lZGlhQ29udHJvbHMgewor
Ly8gRklYTUU6IFJlbmFtZSB0byBNZWRpYUNvbnRyb2xSb290RWxlbWVudC4KK2NsYXNzIE1lZGlh
Q29udHJvbHMgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewogcHVibGljOgotICAgIE1lZGlhQ29u
dHJvbHMoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29u
dHJvbHM+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CiAKLSAgICB2b2lkIGRlc3Ryb3koKTsK
LSAgICB2b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQgdXBkYXRlU3R5bGUoKTsKLSAgICB2b2lkIGZv
cndhcmRFdmVudChFdmVudCopOwotICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXkoKTsKLSAgICB2
b2lkIHVwZGF0ZVRpbWVEaXNwbGF5VmlzaWJpbGl0eSgpOworICAgIHZvaWQgc2hvdygpOworICAg
IHZvaWQgaGlkZSgpOworICAgIHZvaWQgbWFrZU9wYXF1ZSgpOworICAgIHZvaWQgbWFrZVRyYW5z
cGFyZW50KCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxsb3cgUmVu
ZGVyTWVkaWE6OmxheW91dCB0d2VhayB0aGUgcG9zaXRpb24gb2YgY29udHJvbHMuCi0gICAgLy8g
T25jZSBzaGFkb3cgRE9NIHJlZmFjdG9yaW5nIGlzIGNvbXBsZXRlLCB0aGUgdHdlYWtpbmcgd2ls
bCBiZSBpbiBNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCBhbmQgdGhpcyBhY2Nlc3NvciB3aWxsIG5v
IGxvbmdlciBiZSBuZWNlc3NhcnkuCi0gICAgUmVuZGVyQm94KiByZW5kZXJCb3goKTsKKyAgICB2
b2lkIHJlc2V0KCk7CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBjcmVhdGVDb250cm9sc1NoYWRvd1Jv
b3QoKTsKLSAgICB2b2lkIGRlc3Ryb3lDb250cm9sc1NoYWRvd1Jvb3QoKTsKLSAgICB2b2lkIGNy
ZWF0ZVBhbmVsKCk7Ci0gICAgdm9pZCBjcmVhdGVNdXRlQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVh
dGVQbGF5QnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVTZWVrQmFja0J1dHRvbigpOwotICAgIHZv
aWQgY3JlYXRlU2Vla0ZvcndhcmRCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVJld2luZEJ1dHRv
bigpOwotICAgIHZvaWQgY3JlYXRlUmV0dXJuVG9SZWFsdGltZUJ1dHRvbigpOwotICAgIHZvaWQg
Y3JlYXRlVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVN0YXR1
c0Rpc3BsYXkoKTsKLSAgICB2b2lkIGNyZWF0ZVRpbWVsaW5lQ29udGFpbmVyKCk7Ci0gICAgdm9p
ZCBjcmVhdGVUaW1lbGluZSgpOwotICAgIHZvaWQgY3JlYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVy
KCk7Ci0gICAgdm9pZCBjcmVhdGVWb2x1bWVTbGlkZXIoKTsKLSAgICB2b2lkIGNyZWF0ZVZvbHVt
ZVNsaWRlck11dGVCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZUN1cnJlbnRUaW1lRGlzcGxheSgp
OwotICAgIHZvaWQgY3JlYXRlVGltZVJlbWFpbmluZ0Rpc3BsYXkoKTsKLSAgICB2b2lkIGNyZWF0
ZUZ1bGxzY3JlZW5CdXR0b24oKTsKLQotICAgIHZvaWQgdGltZVVwZGF0ZVRpbWVyRmlyZWQoVGlt
ZXI8TWVkaWFDb250cm9scz4qKTsKLQotICAgIHZvaWQgdXBkYXRlQ29udHJvbFZpc2liaWxpdHko
KTsKLSAgICB2b2lkIGNoYW5nZU9wYWNpdHkoSFRNTEVsZW1lbnQqLCBmbG9hdCBvcGFjaXR5KTsK
LSAgICB2b2lkIG9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbHM+
Kik7Ci0KLSAgICB2b2lkIHVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihib29sIHZpc2libGUp
OworICAgIHZvaWQgcGxheWluZygpOworICAgIHZvaWQgcGxheSgpOworICAgIHZvaWQgcGF1c2Uo
KTsKKworICAgIHZvaWQgY2hhbmdlZE11dGUoKTsKKyAgICB2b2lkIGNoYW5nZWRWb2x1bWUoZmxv
YXQgdm9sdW1lKTsKKworICAgIHZvaWQgcmVwb3J0ZWRFcnJvcigpOworICAgIHZvaWQgY2hhbmdl
ZE5ldHdvcmtTdGF0ZSgpOworICAgIHZvaWQgbG9hZGVkTWV0YWRhdGEoKTsKKyAgICB2b2lkIGNo
YW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHkoKTsKKworICAgIHZvaWQgc2hvd1ZvbHVtZVNs
aWRlcigpOworICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXkoKTsKIAogcHJpdmF0ZToKLSAgICBS
ZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IG1fY29udHJvbHNTaGFkb3dSb290
OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xFbGVtZW50PiBtX3BhbmVsOwotICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudD4gbV9tdXRlQnV0dG9uOwotICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gbV9wbGF5QnV0dG9uOwotICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudD4gbV9zZWVrQmFja0J1dHRvbjsKLSAgICBSZWZQ
dHI8TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ+IG1fc2Vla0ZvcndhcmRCdXR0b247Ci0g
ICAgUmVmUHRyPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IG1fcmV3aW5kQnV0dG9u
OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4g
bV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUb2dnbGVD
bG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b247
Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gbV90aW1lbGluZTsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudD4gbV92b2x1bWVTbGlkZXI7
Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50PiBtX3ZvbHVtZVNsaWRl
ck11dGVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50PiBtX2Z1bGxzY3JlZW5CdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5l
Q29udGFpbmVyRWxlbWVudD4gbV90aW1lbGluZUNvbnRhaW5lcjsKLSAgICBSZWZQdHI8TWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gbV92b2x1bWVTbGlkZXJDb250YWlu
ZXI7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudD4gbV9jdXJyZW50
VGltZURpc3BsYXk7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxlbWVudD4g
bV90aW1lUmVtYWluaW5nRGlzcGxheTsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sU3RhdHVzRGlz
cGxheUVsZW1lbnQ+IG1fc3RhdHVzRGlzcGxheTsKKyAgICBNZWRpYUNvbnRyb2xzKEhUTUxNZWRp
YUVsZW1lbnQqKTsKIAotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVtZW50OwotICAg
IFRpbWVyPE1lZGlhQ29udHJvbHM+IG1fdGltZVVwZGF0ZVRpbWVyOwotICAgIFRpbWVyPE1lZGlh
Q29udHJvbHM+IG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyOworICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogCi0gICAgZG91YmxlIG1fb3BhY2l0
eUFuaW1hdGlvblN0YXJ0VGltZTsKLSAgICBkb3VibGUgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRp
b247Ci0gICAgZmxvYXQgbV9vcGFjaXR5QW5pbWF0aW9uRnJvbTsKLSAgICBmbG9hdCBtX29wYWNp
dHlBbmltYXRpb25UbzsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21lZGlhRWxlbWVudDsKIAot
ICAgIGJvb2wgbV9tb3VzZU92ZXI7CisgICAgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVu
dCogbV9yZXdpbmRCdXR0b247CisgICAgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqIG1f
cGxheUJ1dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVu
dCogbV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3Bs
YXlFbGVtZW50KiBtX3N0YXR1c0Rpc3BsYXk7CisgICAgTWVkaWFDb250cm9sQ3VycmVudFRpbWVE
aXNwbGF5RWxlbWVudCogbV9jdXJyZW50VGltZURpc3BsYXk7CisgICAgTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50KiBtX3RpbWVsaW5lOworICAgIE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdE
aXNwbGF5RWxlbWVudCogbV90aW1lUmVtYWluaW5nRGlzcGxheTsKKyAgICBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQqIG1fdGltZWxpbmVDb250YWluZXI7CisgICAgTWVkaWFD
b250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KiBtX3RvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQqIG1f
cGFuZWxNdXRlQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQqIG1f
dm9sdW1lU2xpZGVyOworICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVt
ZW50KiBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b247CisgICAgTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyQ29udGFpbmVyRWxlbWVudCogbV92b2x1bWVTbGlkZXJDb250YWluZXI7CisgICAgTWVkaWFD
b250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqIG1fZnVsbFNjcmVlbkJ1dHRvbjsKKyAgICBN
ZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7CisKKyAgICBib29sIG1fb3BhcXVlOwog
fTsKIAoraW5saW5lIE1lZGlhQ29udHJvbHMqIHRvTWVkaWFDb250cm9scyhOb2RlKiBub2RlKQor
eworICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNZWRpYUNvbnRyb2xzKj4obm9kZSk7Cit9CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggZGVjMmRiZjY0ZTcy
NDNjOWFhOTE4MGU4NmI2ZDYyODBkOThkZTVmZS4uY2Y4YmI5NGM3MjQzNmM4YzE1ZDIwNjgxNDE4
ZWMwYmY4M2RlMDI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCkBAIC00MSw5ICs0MSwxMSBAQAogI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbHMuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKICNp
bmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC02NSwxMjggKzY3LDMzIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBjU2Vla1JlcGVh
dERlbGF5ID0gMC4xZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBjU3RlcFRpbWUgPSAwLjA3ZjsKIHN0
YXRpYyBjb25zdCBmbG9hdCBjU2Vla1RpbWUgPSAwLjJmOwogCi1pbmxpbmUgTWVkaWFDb250cm9s
U2hhZG93Um9vdEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50KEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgbWVk
aWFFbGVtZW50LT5kb2N1bWVudCgpKQotewotICAgIHNldFNoYWRvd0hvc3QobWVkaWFFbGVtZW50
KTsKLX0KLQotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudD4gTWVkaWFD
b250cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCi17Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBlbGVt
ZW50ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50KG1lZGlhRWxl
bWVudCkpOwotCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiByb290U3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlKCk7Ci0gICAgcm9vdFN0eWxlLT5pbmhlcml0RnJvbShtZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCktPnN0eWxlKCkpOwotICAgIHJvb3RTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0g
ICAgcm9vdFN0eWxlLT5zZXRQb3NpdGlvbihSZWxhdGl2ZVBvc2l0aW9uKTsKLQotICAgIFJlbmRl
ck1lZGlhQ29udHJvbFNoYWRvd1Jvb3QqIHJlbmRlcmVyID0gbmV3IChtZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCktPnJlbmRlckFyZW5hKCkpIFJlbmRlck1lZGlhQ29udHJvbFNoYWRvd1Jvb3QoZWxl
bWVudC5nZXQoKSk7Ci0gICAgcmVuZGVyZXItPnNldFN0eWxlKHJvb3RTdHlsZS5yZWxlYXNlKCkp
OwotCi0gICAgZWxlbWVudC0+c2V0UmVuZGVyZXIocmVuZGVyZXIpOwotICAgIGVsZW1lbnQtPnNl
dEF0dGFjaGVkKCk7Ci0gICAgZWxlbWVudC0+c2V0SW5Eb2N1bWVudCgpOwotCi0gICAgcmV0dXJu
IGVsZW1lbnQucmVsZWFzZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVt
ZW50OjpkZXRhY2goKQotewotICAgIEhUTUxEaXZFbGVtZW50OjpkZXRhY2goKTsKLSAgICAvLyBG
SVhNRTogUmVtb3ZlIG9uY2Ugc2hhZG93IERPTSB1c2VzIEVsZW1lbnQ6OnNldFNoYWRvd1Jvb3Qo
KS4KLSAgICBzZXRTaGFkb3dIb3N0KDApOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIE1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBt
ZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1l
bnQpCiB7Ci0gICAgc2V0SW5Eb2N1bWVudCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVsZW1l
bnQ6OmF0dGFjaFRvUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBjb2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJlIHdlIG1hZ2ljYWxseSBhZGRpbmcgfHRo
aXN8IHRvIHRoZSBET00gaGVyZT8KLSAgICAvLyAgICAgICAgV2Ugc2hvdWxkbid0IGJlIGNhbGxp
bmcgcGFyc2VyIEFQSSBtZXRob2RzIG91dHNpZGUgb2YgdGhlIHBhcnNlciEKLSAgICBwYXJlbnQt
PnBhcnNlckFkZENoaWxkKHRoaXMpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVw
ZGF0ZSgpCitzdGF0aWMgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nKCkKIHsKLSAgICBpZiAo
cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAg
ICB1cGRhdGVTdHlsZSgpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzLCAoImRp
c3BsYXkiKSk7CisgICAgcmV0dXJuIHM7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IE1l
ZGlhQ29udHJvbEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpCit2b2lkIE1lZGlhQ29udHJvbEVs
ZW1lbnQ6OnNob3coKQogewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7
Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0
b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5z
dHlsZSgpLCB0cnVlKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICAvLyB0ZXh0LWRlY29yYXRpb24gY2FuJ3QgYmUgb3ZlcnJpZGVkIGZyb20gQ1NTLiBTbyB3
ZSBkbyBpdCBoZXJlLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjcwMTUKLSAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb24oVEROT05FKTsKLSAg
ICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb25zSW5FZmZlY3QoVEROT05FKTsKLQotICAgIHJldHVy
biBzdHlsZTsKLX0KLQotYm9vbCBNZWRpYUNvbnRyb2xFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsK
LQotICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSkgJiYg
cGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKQotICAgICAgICAmJiAoIXN0
eWxlLT5oYXNBcHBlYXJhbmNlKCkgfHwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91
bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVt
ZW50KSk7Ci19Ci0gICAgCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCi17Ci0g
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwotICAgIGlm
ICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIG5lZWRzUmVuZGVyZXIgPSByZW5k
ZXJlcklzTmVlZGVkKHN0eWxlLmdldCgpKTsKLSAgICBpZiAoIW5lZWRzUmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIo
bV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnJlbmRlckFyZW5hKCksIHN0eWxlLmdldCgpKTsK
LSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyZXItPnNldFN0
eWxlKHN0eWxlLmdldCgpKTsKLSAgICBzZXRSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgaWYgKHBh
cmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgLy8gRmlu
ZCBuZXh0IHNpYmxpbmcgd2l0aCBhIHJlbmRlcmVyIHRvIGRldGVybWluZSB3aGVyZSB0byBpbnNl
cnQuCi0gICAgICAgIE5vZGUqIHNpYmxpbmcgPSBuZXh0U2libGluZygpOwotICAgICAgICB3aGls
ZSAoc2libGluZyAmJiAhc2libGluZy0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHNpYmxpbmcg
PSBzaWJsaW5nLT5uZXh0U2libGluZygpOwotICAgICAgICBwYXJlbnROb2RlKCktPnJlbmRlcmVy
KCktPmFkZENoaWxkKHJlbmRlcmVyLCBzaWJsaW5nID8gc2libGluZy0+cmVuZGVyZXIoKSA6IDAp
OwotICAgIH0KLSAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKKyAgICBFeGNlcHRpb25Db2Rl
IGVjOworICAgIC8vIEZJWE1FOiBNYWtlIG1vcmUgZWZmaWNpZW50LgorICAgIHN0eWxlKCktPnJl
bW92ZVByb3BlcnR5KGRpc3BsYXlTdHJpbmcoKSwgZWMpOwogfQogCi12b2lkIE1lZGlhQ29udHJv
bEVsZW1lbnQ6OnVwZGF0ZVN0eWxlKCkKK3ZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6aGlkZSgp
CiB7Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVy
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBz
dHlsZUZvckVsZW1lbnQoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBib29sIG5lZWRzUmVuZGVyZXIgPSByZW5kZXJlcklzTmVlZGVkKHN0eWxlLmdldCgpKSAmJiBw
YXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJl
cigpICYmICFuZWVkc1JlbmRlcmVyKQotICAgICAgICBkZXRhY2goKTsKLSAgICBlbHNlIGlmICgh
cmVuZGVyZXIoKSAmJiBuZWVkc1JlbmRlcmVyKQotICAgICAgICBhdHRhY2goKTsKLSAgICBlbHNl
IGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxlKHN0eWxlLmdl
dCgpKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiB0aGVyZSBpcyBhbnkgaW5uZXJU
ZXh0IHJlbmRlcmVyLCBpdCBpcyB1cGRhdGVkIGFzIHdlbGwuCi0gICAgICAgIGlmIChmaXJzdENo
aWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgZmlyc3RDaGls
ZCgpLT5yZW5kZXJlcigpLT5zZXRTdHlsZShzdHlsZS5nZXQoKSk7Ci0gICAgfQorICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2UgbW9yZSBlZmZpY2llbnQuCisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5vbmUsICgibm9uZSIpKTsKKyAgICBzdHlsZSgpLT5z
ZXRQcm9wZXJ0eShkaXNwbGF5U3RyaW5nKCksIG5vbmUsIGVjKTsKIH0KIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE3LDYgKzEyNCw3IEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiBpbmxp
bmUgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAg
IDogTWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1lbnQpCiB7CisgICAgaGlkZSgpOwogfQog
CiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gTWVkaWFD
b250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50KQpAQCAtMjI0LDE5ICsxMzIsNiBAQCBQYXNzUmVmUHRyPE1lZGlhQ29udHJv
bFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50KG1lZGlhRWxlbWVudCkpOwogfQogCi1ib29sIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0g
ICAgaWYgKCFNZWRpYUNvbnRyb2xFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWx3YXlzIHNob3cgdGhlIHRpbWVsaW5lIGlm
IHRoZSB0aGVtZSBkb2Vzbid0IHVzZSBzdGF0dXMgZGlzcGxheSAoTWVkaWFDb250cm9sbGVyVGhl
bWVDbGFzc2ljLCBmb3IgaW5zdGFuY2UpLgotICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpLT50
aGVtZSgpLT51c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7
Ci0gICAgcmV0dXJuICFpc25hbihkdXJhdGlvbikgJiYgIWlzaW5mKGR1cmF0aW9uKTsKLX0KLQog
TWVkaWFDb250cm9sRWxlbWVudFR5cGUgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVt
ZW50OjpkaXNwbGF5VHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1lZGlhVGltZWxpbmVDb250
YWluZXI7CkBAIC0yNTAsMTIgKzE0NSw0MCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29u
dHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2NsYXNzIFJlbmRlck1lZGlhVm9sdW1l
U2xpZGVyQ29udGFpbmVyIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5k
ZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOworfTsKKworUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI6OlJlbmRlck1l
ZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJCbG9jayhu
b2RlKQoreworfQorCit2b2lkIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOjpsYXlv
dXQoKQoreworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKyAgICBpZiAoc3R5bGUoKS0+ZGlz
cGxheSgpID09IE5PTkUgfHwgIXByZXZpb3VzU2libGluZygpIHx8ICFwcmV2aW91c1NpYmxpbmco
KS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBidXR0b25Cb3gg
PSB0b1JlbmRlckJveChwcmV2aW91c1NpYmxpbmcoKSk7CisKKyAgICBpZiAodmlldygpKQorICAg
ICAgICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOworCisgICAgSW50UG9pbnQgb2Zmc2V0
ID0gdGhlbWUoKS0+dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oYnV0dG9uQm94LCBJ
bnRTaXplKHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgc2V0WChvZmZzZXQueCgpICsgYnV0dG9u
Qm94LT5vZmZzZXRMZWZ0KCkpOworICAgIHNldFkob2Zmc2V0LnkoKSArIGJ1dHRvbkJveC0+b2Zm
c2V0VG9wKCkpOworCisgICAgaWYgKHZpZXcoKSkKKyAgICAgICAgdmlldygpLT5lbmFibGVMYXlv
dXRTdGF0ZSgpOworfQorCiBpbmxpbmUgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiAgICAgOiBNZWRpYUNvbnRyb2xFbGVtZW50KG1lZGlh
RWxlbWVudCkKLSAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQotICAgICwgbV94KDApCi0gICAgLCBt
X3koMCkKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTI2Mywz
OSArMTg2LDI4IEBAIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29uCiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KG1lZGlhRWxlbWVu
dCkpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50OjpzdHlsZUZvckVsZW1lbnQoKQorUmVuZGVyT2JqZWN0KiBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlID0gTWVkaWFDb250cm9sRWxlbWVudDo6c3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgc3R5
bGUtPnNldFBvc2l0aW9uKEFic29sdXRlUG9zaXRpb24pOwotICAgIHN0eWxlLT5zZXRMZWZ0KExl
bmd0aChtX3gsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFRvcChMZW5ndGgobV95LCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXREaXNwbGF5KG1faXNWaXNpYmxlID8gQkxPQ0sgOiBOT05FKTsKLSAg
ICByZXR1cm4gc3R5bGU7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlck1lZGlhVm9sdW1l
U2xpZGVyQ29udGFpbmVyKHRoaXMpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckNvbnRhaW5lckVsZW1lbnQ6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQordm9pZCBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldmVudCkKIHsKLSAgICBpZiAodmlzaWJsZSA9PSBtX2lzVmlzaWJsZSkKKyAgICBpZiAo
IWV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5t
b3VzZW91dEV2ZW50KQogICAgICAgICByZXR1cm47Ci0gICAgbV9pc1Zpc2libGUgPSB2aXNpYmxl
OwotfQogCi12b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnNl
dFBvc2l0aW9uKGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAoeCA9PSBtX3ggJiYgeSA9PSBtX3kp
CisgICAgLy8gUG9vciBtYW4ncyBtb3VzZWxlYXZlIGV2ZW50IGRldGVjdGlvbi4KKyAgICBNb3Vz
ZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKKyAg
ICBpZiAoIW1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSB8fCAhbW91c2VFdmVudC0+cmVsYXRl
ZFRhcmdldCgpLT50b05vZGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1feCA9IHg7Ci0gICAg
bV95ID0geTsKLX0KIAotYm9vbCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpoaXRUZXN0KGNvbnN0IEludFBvaW50JiBhYnNQb2ludCkKLXsKLSAgICBpZiAocmVuZGVy
ZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJl
dHVybiByZW5kZXJlcigpLT50aGVtZSgpLT5oaXRUZXN0TWVkaWFDb250cm9sUGFydChyZW5kZXJl
cigpLCBhYnNQb2ludCk7CisgICAgaWYgKHRoaXMtPmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93RE9N
KG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKS0+dG9Ob2RlKCkpKQorICAgICAgICByZXR1cm47
CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaGlkZSgpOwogfQogCisKIE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRpc3Bs
YXlUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI7
CkBAIC0zMTMsNiArMjI1LDcgQEAgaW5saW5lIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVt
ZW50OjpNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChIVE1MTWUKICAgICA6IE1lZGlh
Q29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50KQogICAgICwgbV9zdGF0ZUJlaW5nRGlzcGxheWVk
KE5vdGhpbmcpCiB7CisgICAgaGlkZSgpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFN0
YXR1c0Rpc3BsYXlFbGVtZW50PiBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3Jl
YXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTMyMiw4ICsyMzUsNiBAQCBQ
YXNzUmVmUHRyPE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBNZWRpYUNvbnRyb2xT
dGF0dXNEaXNwbGF5RWxlbWVudDo6YwogCiB2b2lkIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlF
bGVtZW50Ojp1cGRhdGUoKQogewotICAgIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZSgpOwot
CiAgICAgLy8gR2V0IHRoZSBuZXcgc3RhdGUgdGhhdCB3ZSdsbCBoYXZlIHRvIGRpc3BsYXkuCiAg
ICAgU3RhdGVCZWluZ0Rpc3BsYXllZCBuZXdTdGF0ZVRvRGlzcGxheSA9IE5vdGhpbmc7CiAKQEAg
LTMzMiwxMiArMjQzLDE4IEBAIHZvaWQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6
OnVwZGF0ZSgpCiAgICAgZWxzZSBpZiAobWVkaWFFbGVtZW50KCktPm1vdmllTG9hZFR5cGUoKSA9
PSBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbSkKICAgICAgICAgbmV3U3RhdGVUb0Rpc3BsYXkgPSBM
aXZlQnJvYWRjYXN0OwogCi0gICAgLy8gUHJvcGFnYXRlIG9ubHkgaWYgbmVlZGVkLgogICAgIGlm
IChuZXdTdGF0ZVRvRGlzcGxheSA9PSBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRvRGlzcGxheTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZTsKKworICAgIGlmIChtX3N0YXRlQmVpbmdEaXNwbGF5ZWQgPT0g
Tm90aGluZykKKyAgICAgICAgc2hvdygpOworICAgIGVsc2UgaWYgKG5ld1N0YXRlVG9EaXNwbGF5
ID09IE5vdGhpbmcpCisgICAgICAgIGhpZGUoKTsKKworICAgIG1fc3RhdGVCZWluZ0Rpc3BsYXll
ZCA9IG5ld1N0YXRlVG9EaXNwbGF5OworCiAgICAgc3dpdGNoIChtX3N0YXRlQmVpbmdEaXNwbGF5
ZWQpIHsKICAgICBjYXNlIE5vdGhpbmc6CiAgICAgICAgIHNldElubmVyVGV4dCgiIiwgZSk7CkBA
IC0zNTEsMTQgKzI2OCw2IEBAIHZvaWQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6
OnVwZGF0ZSgpCiAgICAgfQogfQogCi1ib29sIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBpZiAoIU1l
ZGlhQ29udHJvbEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpIHx8ICFkb2N1bWVudCgp
LT5wYWdlKCktPnRoZW1lKCktPnVzZXNNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBmbG9hdCBkdXJhdGlvbiA9IG1lZGlhRWxlbWVudCgpLT5k
dXJhdGlvbigpOwotICAgIHJldHVybiAoaXNuYW4oZHVyYXRpb24pIHx8IGlzaW5mKGR1cmF0aW9u
KSk7Ci19Ci0KIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3Bs
YXlFbGVtZW50OjpkaXNwbGF5VHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1lZGlhU3RhdHVz
RGlzcGxheTsKQEAgLTM3OSw5NiArMjg4LDE4IEBAIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVuCiB7
CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjphdHRhY2hUb1BhcmVudChFbGVt
ZW50KiBwYXJlbnQpCit2b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6c2hvdygpCiB7Ci0g
ICAgLy8gRklYTUU6IFRoaXMgY29kZSBzZWVtcyB2ZXJ5IHdyb25nLiAgV2h5IGFyZSB3ZSBtYWdp
Y2FsbHkgYWRkaW5nIHx0aGlzfCB0byB0aGUgRE9NIGhlcmU/Ci0gICAgLy8gICAgICAgIFdlIHNo
b3VsZG4ndCBiZSBjYWxsaW5nIHBhcnNlciBBUEkgbWV0aG9kcyBvdXRzaWRlIG9mIHRoZSBwYXJz
ZXIhCi0gICAgcGFyZW50LT5wYXJzZXJBZGRDaGlsZCh0aGlzKTsKLX0KLQotdm9pZCBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZSgpCi17Ci0gICAgdXBkYXRlRGlzcGxheVR5cGUoKTsK
LSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1l
bnQoKTsKLSAgICB1cGRhdGVTdHlsZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBN
ZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpCi17Ci0gICAgcmV0dXJu
IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIDAsIHRy
dWUpOwotfQotCi1ib29sIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7
Ci0KLSAgICByZXR1cm4gSFRNTElucHV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSkg
JiYgcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKQotICAgICAgICAmJiAo
IXN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgfHwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5z
aG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1lZGlhRWxl
bWVudCgpKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBzdHlsZSgpLT5yZW1vdmVQcm9w
ZXJ0eShkaXNwbGF5U3RyaW5nKCksIGVjKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQ6OmF0dGFjaCgpCit2b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6aGlkZSgpCiB7
Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwotICAg
IGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBib29sIG5lZWRzUmVuZGVy
ZXIgPSByZW5kZXJlcklzTmVlZGVkKHN0eWxlLmdldCgpKTsKLSAgICBpZiAoIW5lZWRzUmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3JlYXRl
UmVuZGVyZXIobWVkaWFFbGVtZW50KCktPnJlbmRlcmVyKCktPnJlbmRlckFyZW5hKCksIHN0eWxl
LmdldCgpKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVy
ZXItPnNldFN0eWxlKHN0eWxlLmdldCgpKTsKLSAgICBzZXRSZW5kZXJlcihyZW5kZXJlcik7Ci0g
ICAgaWYgKHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgLy8gRmluZCBuZXh0IHNpYmxpbmcgd2l0aCBhIHJlbmRlcmVyIHRvIGRldGVybWluZSB3aGVy
ZSB0byBpbnNlcnQuCi0gICAgICAgIE5vZGUqIHNpYmxpbmcgPSBuZXh0U2libGluZygpOwotICAg
ICAgICB3aGlsZSAoc2libGluZyAmJiAhc2libGluZy0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAg
IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0U2libGluZygpOwotICAgICAgICBwYXJlbnROb2RlKCkt
PnJlbmRlcmVyKCktPmFkZENoaWxkKHJlbmRlcmVyLCBzaWJsaW5nID8gc2libGluZy0+cmVuZGVy
ZXIoKSA6IDApOwotICAgIH0gIAotICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwotICAgIC8v
IEZJWE1FOiBDdXJyZW50bHksIE1laWRhQ29udHJvbElucHV0IGNpcmN1bXZlbnRzIHRoZSBub3Jt
YWwgYXR0YWNobWVudAotICAgIC8vIGFuZCBzdHlsZSByZWNhbGMgY3ljbGUgYW5kIHRodXMgd2Ug
bmVlZCB0byBhZGQgZXh0cmEgbG9naWMgdG8gYmUgYXdhcmUgb2YKLSAgICAvLyB0aGUgc2hhZG93
IERPTS4gUmVtb3ZlIHRoaXMgb25jZSBhbGwgbWVkaWEgY29udHJvbHMgYXJlIHRyYW5zaXRpb25l
ZCB0byB1c2UgdGhlIHJlZ3VsYXIKLSAgICAvLyBzdHlsZSBjYWxjdWxhdGlvbi4KLSAgICBpZiAo
Tm9kZSogc2hhZG93Tm9kZSA9IHNoYWRvd1Jvb3QoKSkKLSAgICAgICAgc2hhZG93Tm9kZS0+YXR0
YWNoKCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGVTdHlsZSgp
Ci17Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQoKSB8fCAhbWVkaWFFbGVtZW50KCktPnJlbmRlcmVy
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
ID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0
KCkpICYmIHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgaWYg
KHJlbmRlcmVyKCkgJiYgIW5lZWRzUmVuZGVyZXIpCi0gICAgICAgIGRldGFjaCgpOwotICAgIGVs
c2UgaWYgKCFyZW5kZXJlcigpICYmIG5lZWRzUmVuZGVyZXIpCi0gICAgICAgIGF0dGFjaCgpOwot
ICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxlKHN0
eWxlLmdldCgpKTsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIE1laWRhQ29udHJvbElucHV0
IGNpcmN1bXZlbnRzIHRoZSBub3JtYWwgYXR0YWNobWVudAotICAgIC8vIGFuZCBzdHlsZSByZWNh
bGMgY3ljbGUgYW5kIHRodXMgd2UgbmVlZCB0byBhZGQgZXh0cmEgbG9naWMgdG8gYmUgYXdhcmUg
b2YKLSAgICAvLyB0aGUgc2hhZG93IERPTS4gUmVtb3ZlIHRoaXMgb25jZSBhbGwgbWVkaWEgY29u
dHJvbHMgYXJlIHRyYW5zaXRpb25lZCB0byB1c2UKLSAgICAvLyB0aGUgbmV3IHNoYWRvdyBET00u
Ci0gICAgaWYgKE5vZGUqIHNoYWRvd05vZGUgPSBzaGFkb3dSb290KCkpCi0gICAgICAgIHNoYWRv
d05vZGUtPnJlY2FsY1N0eWxlKE5vZGU6OkZvcmNlKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjOwor
ICAgIHN0eWxlKCktPnNldFByb3BlcnR5KGRpc3BsYXlTdHJpbmcoKSwgIm5vbmUiLCBlYyk7CiB9
CiAKLWJvb2wgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpoaXRUZXN0KGNvbnN0IEludFBvaW50
JiBhYnNQb2ludCkKLXsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgp
LT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlcigpLT50aGVtZSgpLT5o
aXRUZXN0TWVkaWFDb250cm9sUGFydChyZW5kZXJlcigpLCBhYnNQb2ludCk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19CiAKIHZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpzZXREaXNwbGF5
VHlwZShNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSkKIHsKQEAgLTQ5Myw5ICsz
MjQsMTUgQEAgdm9pZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT5zZXRNdXRlZCgh
bWVkaWFFbGVtZW50KCktPm11dGVkKCkpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKICAgICB9CisKICAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKIH0KIAordm9pZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6Y2hhbmdl
ZE11dGUoKQoreworICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7Cit9CisKIHZvaWQgTWVkaWFDb250
cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKIHsKICAgICBzZXREaXNw
bGF5VHlwZShtZWRpYUVsZW1lbnQoKS0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVk
aWFNdXRlQnV0dG9uKTsKQEAgLTUwMywxOCArMzQwLDI5IEBAIHZvaWQgTWVkaWFDb250cm9sTXV0
ZUJ1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlUeXBlKCkKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVu
dDo6TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQpCitpbmxpbmUgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6
TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQogICAgIDogTWVkaWFDb250cm9sTXV0
ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50LCBNZWRpYU11dGVCdXR0b24pCisgICAgLCBtX2Nv
bnRyb2xzKGNvbnRyb2xzKQogewogfQogCi1QYXNzUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0
ZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitQYXNzUmVmUHRyPE1lZGlhQ29udHJv
bFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJvbHMq
IGNvbnRyb2xzKQogewotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVt
ZW50PiBidXR0b24gPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxl
bWVudChtZWRpYUVsZW1lbnQpKTsKKyAgICBBU1NFUlQoY29udHJvbHMpOworCisgICAgUmVmUHRy
PE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKG5l
dyBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCwgY29udHJv
bHMpKTsKICAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOwogICAgIHJldHVybiBidXR0b24u
cmVsZWFzZSgpOwogfQogCit2b2lkIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKKyAgICAgICAgbV9jb250cm9scy0+
c2hvd1ZvbHVtZVNsaWRlcigpOworCisgICAgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCiBjb25zdCBBdG9taWNTdHJpbmcmIE1l
ZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QK
IHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1t
ZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiIpKTsKQEAgLTUyNCw3ICszNzIsNyBAQCBjb25zdCBB
dG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1Bz
ZXVkb0lkKCkgY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogaW5saW5l
IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQpCi0gICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChtZWRpYUVsZW1lbnQsIE1l
ZGlhVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbikKKyAgICA6IE1lZGlhQ29udHJvbE11dGVCdXR0b25F
bGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFNdXRlQnV0dG9uKQogewogfQogCkBAIC01NTksNiAr
NDA3LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgbWVkaWFFbGVtZW50KCktPnRvZ2dsZVBsYXlT
dGF0ZSgpOworICAgICAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwogICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudCk7CkBAIC01ODMsNiArNDMyLDcgQEAgaW5saW5lIE1lZGlhQ29udHJv
bFNlZWtCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudChIVE1MTWVk
aWFFbGUKICAgICAsIG1fY2FwdHVyaW5nKGZhbHNlKQogICAgICwgbV9zZWVrVGltZXIodGhpcywg
Jk1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpzZWVrVGltZXJGaXJlZCkKIHsKKyAgICBo
aWRlKCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQpAQCAtNzA2LDYgKzU1Niw3IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSWQo
KSBjb25zdAogaW5saW5lIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50
OjpNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQpCiAgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFF
bGVtZW50LCBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24pCiB7CisgICAgaGlkZSgpOwogfQog
CiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50PiBN
ZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTczNSw2ICs1ODYsNyBAQCBjb25zdCBBdG9taWNT
dHJpbmcmIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OjpzaGFkb3dQ
c2V1ZG9JZCgpCiBpbmxpbmUgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25F
bGVtZW50OjpNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50KG1lZGlhRWxlbWVudCwgTWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24pCiB7CisgICAg
aGlkZSgpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25z
QnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVt
ZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAtNzQ5LDggKzYw
MSwxMCBAQCB2b2lkIE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZQogICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT5zZXRD
bG9zZWRDYXB0aW9uc1Zpc2libGUoIW1lZGlhRWxlbWVudCgpLT5jbG9zZWRDYXB0aW9uc1Zpc2li
bGUoKSk7CiAgICAgICAgIHNldENoZWNrZWQobWVkaWFFbGVtZW50KCktPmNsb3NlZENhcHRpb25z
VmlzaWJsZSgpKTsKKyAgICAgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQorCiAgICAgSFRNTElucHV0RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKQEAgLTc2NywxNCArNjIxLDE4IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVt
ZW50OjpzaGFkb3dQc2V1ZG9JCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQorTWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKICAgICA6IE1lZGlhQ29udHJvbElucHV0
RWxlbWVudChtZWRpYUVsZW1lbnQsIE1lZGlhU2xpZGVyKQorICAgICwgbV9jb250cm9scyhjb250
cm9scykKIHsKKyAgICBzZXRBdHRyaWJ1dGUocHJlY2lzaW9uQXR0ciwgImZsb2F0Iik7CiB9CiAK
LVBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitQYXNz
UmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVF
bGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50LCBNZWRpYUNvbnRy
b2xzKiBjb250cm9scykKIHsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50
PiB0aW1lbGluZSA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQobWVk
aWFFbGVtZW50KSk7CisgICAgQVNTRVJUKGNvbnRyb2xzKTsKKworICAgIFJlZlB0cjxNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5lID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJv
bFRpbWVsaW5lRWxlbWVudChtZWRpYUVsZW1lbnQsIGNvbnRyb2xzKSk7CiAgICAgdGltZWxpbmUt
PnNldFR5cGUoInJhbmdlIik7CiAgICAgcmV0dXJuIHRpbWVsaW5lLnJlbGVhc2UoKTsKIH0KQEAg
LTc5OCwyOCArNjU2LDMwIEBAIHZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIAogICAgIGZsb2F0IHRpbWUgPSBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHZhbHVlKCkudG9Eb3VibGUoKSk7CiAgICAgaWYgKHRpbWUgIT0gbWVk
aWFFbGVtZW50KCktPmN1cnJlbnRUaW1lKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
ZmlyZWQgMyB0aW1lcyBvbiBldmVyeSBjbGljay4gV2Ugc2hvdWxkIG5vdCBiZSBkb2luZyB0aGF0
LgogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICBtZWRpYUVsZW1lbnQoKS0+c2V0
Q3VycmVudFRpbWUodGltZSwgZWMpOwogICAgIH0KIAogICAgIFJlbmRlclNsaWRlciogc2xpZGVy
ID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKSk7CiAgICAgaWYgKHNsaWRlciAmJiBzbGlkZXIt
PmluRHJhZ01vZGUoKSkKLSAgICAgICAgdG9SZW5kZXJNZWRpYShtZWRpYUVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSktPmNvbnRyb2xzKCktPnVwZGF0ZVRpbWVEaXNwbGF5KCk7CisgICAgICAgIG1fY29u
dHJvbHMtPnVwZGF0ZVRpbWVEaXNwbGF5KCk7CiAKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50KQogICAgICAgICBtZWRpYUVsZW1lbnQoKS0+ZW5kU2Ny
dWJiaW5nKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50Ojp1cGRhdGUo
Ym9vbCB1cGRhdGVEdXJhdGlvbikgCit2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6
c2V0UG9zaXRpb24oZmxvYXQgY3VycmVudFRpbWUpIAogewotICAgIGlmICh1cGRhdGVEdXJhdGlv
bikgewotICAgICAgICBmbG9hdCBkdXJhdGlvbiA9IG1lZGlhRWxlbWVudCgpLT5kdXJhdGlvbigp
OwotICAgICAgICBzZXRBdHRyaWJ1dGUobWF4QXR0ciwgU3RyaW5nOjpudW1iZXIoaXNmaW5pdGUo
ZHVyYXRpb24pID8gZHVyYXRpb24gOiAwKSk7Ci0gICAgfQotICAgIHNldFZhbHVlKFN0cmluZzo6
bnVtYmVyKG1lZGlhRWxlbWVudCgpLT5jdXJyZW50VGltZSgpKSk7Ci0gICAgTWVkaWFDb250cm9s
SW5wdXRFbGVtZW50Ojp1cGRhdGUoKTsKKyAgICBzZXRWYWx1ZShTdHJpbmc6Om51bWJlcihjdXJy
ZW50VGltZSkpOworfQorCit2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6c2V0RHVy
YXRpb24oZmxvYXQgZHVyYXRpb24pCit7CisgICAgc2V0QXR0cmlidXRlKG1heEF0dHIsIFN0cmlu
Zzo6bnVtYmVyKGlzZmluaXRlKGR1cmF0aW9uKSA/IGR1cmF0aW9uIDogMCkpOwogfQogCisKIGNv
bnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpzaGFkb3dQc2V1
ZG9JZCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlk
LCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUiKSk7CkBAIC04MzEsNiArNjkxLDgg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OnNoYWRv
d1BzZXVkb0lkKCkgY29uc3QKIGlubGluZSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCkKICAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQsIE1l
ZGlhVm9sdW1lU2xpZGVyKQogeworICAgIHNldEF0dHJpYnV0ZShwcmVjaXNpb25BdHRyLCAiZmxv
YXQiKTsKKyAgICBzZXRBdHRyaWJ1dGUobWF4QXR0ciwgIjEiKTsKIH0KIAogUGFzc1JlZlB0cjxN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJF
bGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAtODYyLDEy
ICs3MjQsMTAgQEAgdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyRWxlbWVudDo6dXBkYXRlKCkKK3ZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyRWxlbWVudDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKLSAgICBmbG9hdCB2b2x1bWUg
PSBtZWRpYUVsZW1lbnQoKS0+dm9sdW1lKCk7CiAgICAgaWYgKHZhbHVlKCkudG9GbG9hdCgpICE9
IHZvbHVtZSkKICAgICAgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodm9sdW1lKSk7Ci0gICAg
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGUoKTsKIH0KIAogY29uc3QgQXRvbWljU3Ry
aW5nJiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNv
bnN0CkBAIC04ODEsNiArNzQxLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiBpbmxpbmUgTWVkaWFD
b250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0
b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKICAgICA6IE1lZGlhQ29u
dHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQsIE1lZGlhRnVsbHNjcmVlbkJ1dHRvbikKIHsK
KyAgICBoaWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRv
bkVsZW1lbnQ+IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpjcmVhdGUoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAtOTIwLDM2ICs3ODEsNDEgQEAgY29uc3Qg
QXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6c2hhZG93
UHNldWRvSWQoKSBjb25zdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlu
bGluZSBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVEaXNw
bGF5RWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBNZWRpYUNv
bnRyb2xFbGVtZW50KG1lZGlhRWxlbWVudCkKLSAgICAsIG1fY3VycmVudFZhbHVlKDApCi0gICAg
LCBtX2lzVmlzaWJsZSh0cnVlKQotewotfQorY2xhc3MgUmVuZGVyTWVkaWFDb250cm9sVGltZURp
c3BsYXkgOiBwdWJsaWMgUmVuZGVyRmxleGlibGVCb3ggeworcHVibGljOgorICAgIFJlbmRlck1l
ZGlhQ29udHJvbFRpbWVEaXNwbGF5KE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
Cit9OwogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVs
ZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpCitSZW5kZXJNZWRpYUNvbnRyb2xUaW1lRGlzcGxheTo6
UmVuZGVyTWVkaWFDb250cm9sVGltZURpc3BsYXkoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckZs
ZXhpYmxlQm94KG5vZGUpCiB7Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IE1lZGlh
Q29udHJvbEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpOwotICAgIGlmICghbV9pc1Zpc2libGUp
IHsKLSAgICAgICAgc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUuZ2V0KCkpOwotICAg
ICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKDAsIEZpeGVkKSk7Ci0gICAgfQotICAgIHJldHVy
biBzdHlsZTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ6OnNldFZp
c2libGUoYm9vbCB2aXNpYmxlKQorLy8gV2Ugd2FudCB0aGUgdGltZWxpbmUgc2xpZGVyIHRvIGJl
IGF0IGxlYXN0IDEwMCBwaXhlbHMgd2lkZS4KK3N0YXRpYyBjb25zdCBpbnQgbWluV2lkdGhUb0Rp
c3BsYXlUaW1lRGlzcGxheXMgPSA0NSArIDEwMCArIDQ1OworCit2b2lkIFJlbmRlck1lZGlhQ29u
dHJvbFRpbWVEaXNwbGF5OjpsYXlvdXQoKQogewotICAgIGlmICh2aXNpYmxlID09IG1faXNWaXNp
YmxlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOworICAgIFJl
bmRlckZsZXhpYmxlQm94OjpsYXlvdXQoKTsKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCBkdXJpbmcgdGhlIFJlbmRlck1lZGlhOjpsYXlvdXQoKQotICAgIC8vIGNhbGwsIHdoZXJlIHdl
IGNhbm5vdCBjaGFuZ2UgdGhlIHJlbmRlcmVyIGF0IHRoaXMgdGltZS4KLSAgICBpZiAoIXJlbmRl
cmVyKCkgfHwgIXJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAgUmVuZGVyQm94KiB0aW1lbGluZUJv
eCA9IHRvUmVuZGVyQm94KHBhcmVudCgpKTsKKyAgICBpZiAoIXRpbWVsaW5lQm94KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gc3R5bGVGb3JFbGVt
ZW50KCk7Ci0gICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOworICAgIGlmICh0
aW1lbGluZUJveC0+d2lkdGgoKSA8IG1pbldpZHRoVG9EaXNwbGF5VGltZURpc3BsYXlzKQorICAg
ICAgICBzZXRXaWR0aCgwKTsKK30KKworaW5saW5lIE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5RWxl
bWVudDo6TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKKyAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50KQorICAg
ICwgbV9jdXJyZW50VmFsdWUoMCkKK3sKK30KKworUmVuZGVyT2JqZWN0KiBNZWRpYUNvbnRyb2xU
aW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVu
ZGVyU3R5bGUqKQoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJNZWRpYUNvbnRyb2xU
aW1lRGlzcGxheSh0aGlzKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1l
bnQ6OnNldEN1cnJlbnRWYWx1ZShmbG9hdCB0aW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaAppbmRleCA0NGU4ODExMjJmMjA2OTdjZjI5Zjdj
NzNmYWU3YjZlMmM2MWViZTE2Li4xNGMyY2Q5YjJhY2UxNWFlOGU3NzY3MjFjYTc4NjY5NjU4MDZh
ZmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxl
bWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVu
dHMuaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50
OwogY2xhc3MgRnJhbWU7CitjbGFzcyBNZWRpYUNvbnRyb2xzOwogCiAvLyBNdXN0IG1hdGNoIFdl
YktpdFN5c3RlbUludGVyZmFjZS5oCiBlbnVtIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIHsKQEAg
LTcxLDI0ICs3MiwxMyBAQCBlbnVtIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIHsKIAogSFRNTE1l
ZGlhRWxlbWVudCogdG9QYXJlbnRNZWRpYUVsZW1lbnQoUmVuZGVyT2JqZWN0Kik7CiAKLWNsYXNz
IE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50IDogcHVibGljIEhUTUxEaXZFbGVtZW50IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxl
bWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2goKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCopOwotfTsKLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBjbGFzcyBNZWRpYUNvbnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxEaXZFbGVtZW50IHsK
IHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdm9pZCBhdHRhY2hUb1Bh
cmVudChFbGVtZW50Kik7Ci0gICAgdm9pZCB1cGRhdGUoKTsKLSAgICB2b2lkIHVwZGF0ZVN0eWxl
KCk7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwYXJ0IG9mIHNvbWUgSW5saW5lU3R5
bGFibGVFbGVtZW50LgorICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2hvdygpOwogCiAgICAg
dmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0ID0gMDsK
IApAQCAtOTcsOSArODcsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFDb250cm9s
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSopOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKKy8vICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGVGb3JFbGVtZW50KCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
TWVkaWFDb250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTExOSw3ICsx
MDcsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0OwogfTsKIAotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBN
ZWRpYUNvbnRyb2xFbGVtZW50IHsKQEAgLTEyOCw5ICsxMTUsOSBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqKTsKLSAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUq
KTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBj
b25zdDsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzOSwxOSAr
MTI2LDEyIEBAIGNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQg
OiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKEhU
TUxNZWRpYUVsZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotICAgIGJvb2wg
aXNWaXNpYmxlKCkgeyByZXR1cm4gbV9pc1Zpc2libGU7IH0KLSAgICB2b2lkIHNldFBvc2l0aW9u
KGludCB4LCBpbnQgeSk7Ci0gICAgYm9vbCBoaXRUZXN0KGNvbnN0IEludFBvaW50JiBhYnNQb2lu
dCk7Ci0KIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudChIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwogICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKLQotICAgIGJvb2wgbV9pc1Zpc2libGU7Ci0g
ICAgaW50IG1feCwgbV95OwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMTY2LDcgKzE0Niw2IEBAIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxh
eUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogCiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xF
bGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiAKICAgICBlbnVtIFN0YXRlQmVpbmdEaXNwbGF5ZWQg
eyBOb3RoaW5nLCBMb2FkaW5nLCBMaXZlQnJvYWRjYXN0IH07CkBAIC0xNzcsMTEgKzE1Niw5IEBA
IHByaXZhdGU6CiAKIGNsYXNzIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1M
SW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICB2b2lkIGF0dGFjaFRvUGFyZW50KEVsZW1lbnQq
KTsKLSAgICB2b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQgdXBkYXRlU3R5bGUoKTsKLQotICAgIGJv
b2wgaGl0VGVzdChjb25zdCBJbnRQb2ludCYgYWJzUG9pbnQpOworICAgIC8vIEZJWE1FOiBUaGVz
ZSBzaG91bGQgYmUgcGFydCBvZiBzb21lIElubGluZVN0eWxhYmxlRWxlbWVudC4KKyAgICB2b2lk
IGhpZGUoKTsKKyAgICB2b2lkIHNob3coKTsKIAogICAgIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBl
IGRpc3BsYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5VHlwZTsgfQogCkBAIC0xOTMs
MTEgKzE3MCw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldERpc3BsYXlUeXBlKE1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7
Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKLQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KCk7Ci0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCkgeyB9CkBAIC0yMTAs
MTAgKzE4MiwxMiBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxl
bWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewogcHVibGljOgotICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdm9pZCBjaGFuZ2Vk
TXV0ZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CkBAIC0yMjMsMTIgKzE5NywxNSBAQCBwcml2
YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50IDogcHVibGlj
IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1l
ZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0
ZUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiwgTWVkaWFDb250cm9scyop
OwogCiBwcml2YXRlOgotICAgIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCopOworICAgIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJvbHMqKTsKIAorICAgIHZpcnR1YWwgdm9pZCBk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CisKKyAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRy
b2xzOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjUxLDExICsy
MjgsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlC
dXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwogCiAgICAgdmlydHVhbCB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICAvLyBGSVhNRTogUEVSSEFQUyBN
QUtFIEVYUExJQ0lUIFBMQVkvUEFVU0UgQ0FMTFMuCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURp
c3BsYXlUeXBlKCk7CiAKIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1l
bnQoSFRNTE1lZGlhRWxlbWVudCopOwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlU
eXBlKCk7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkg
Y29uc3Q7CiB9OwogCkBAIC0zNDAsMTEgKzMxOCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBj
cmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsK
IAogcHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVs
ZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3Bs
YXlUeXBlKCk7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lk
KCkgY29uc3Q7CiB9OyAgICAKIApAQCAtMzUyLDE1ICszMzAsMTggQEAgcHJpdmF0ZToKIAogY2xh
c3MgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbElucHV0
RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1l
bnQqLCBNZWRpYUNvbnRyb2xzKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCopOwotICAgIHZvaWQgdXBkYXRlKGJvb2wgdXBkYXRlRHVyYXRpb24gPSB0cnVl
KTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0KTsKKyAgICB2b2lkIHNldER1cmF0aW9uKGZs
b2F0KTsKIAogcHJpdmF0ZToKLSAgICBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoSFRNTE1l
ZGlhRWxlbWVudCopOworICAgIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChIVE1MTWVkaWFF
bGVtZW50KiwgTWVkaWFDb250cm9scyopOwogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CisKKyAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRy
b2xzOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzcwLDcgKzM1
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwogCiAgICAgdmlydHVhbCB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKLSAgICB2b2lkIHVwZGF0ZSgpOworICAg
IHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKIAogcHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKQEAgLTM5Niw4ICszNzcsNiBAQCBw
cml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQgOiBwdWJsaWMg
TWVkaWFDb250cm9sRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wp
OwotCiAgICAgdm9pZCBzZXRDdXJyZW50VmFsdWUoZmxvYXQpOwogICAgIGZsb2F0IGN1cnJlbnRW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9CiAKQEAgLTQwNSw5ICszODQs
OSBAQCBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50KEhUTUxN
ZWRpYUVsZW1lbnQqKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlRm9yRWxlbWVudCgpOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKICAgICBmbG9hdCBtX2N1
cnJlbnRWYWx1ZTsKLSAgICBib29sIG1faXNWaXNpYmxlOwogfTsKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQpAQCAtNDM1LDE1ICs0MTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgUmVuZGVyTWVkaWFDb250cm9s
U2hhZG93Um9vdCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVk
aWFDb250cm9sU2hhZG93Um9vdChFbGVtZW50KiBlKSA6IFJlbmRlckJsb2NrKGUpIHsgfQotICAg
IHZvaWQgc2V0UGFyZW50KFJlbmRlck9iamVjdCogcCkgeyBSZW5kZXJPYmplY3Q6OnNldFBhcmVu
dChwKTsgfQotfTsKLSAgICAKKyAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
fSAvL25hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVkaWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
LmNwcAppbmRleCBiYmI1ODgwNmJkMDUyZTU2NTllZTM4MmMxZTI4OTA5MWM2ZjMzODM0Li4zY2M5
NjA5NjlmMGU2NzFmZGFlYWU0ODhlMzNlYTRlMDdiODYzNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKQEAgLTI5LDIyICsyOSwxOCBAQAogI2luY2x1ZGUgIlJl
bmRlck1lZGlhLmgiCiAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAi
TWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlck1lZGlh
OjpSZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbykKICAgICA6IFJlbmRlckltYWdl
KHZpZGVvKQotICAgICwgbV9jb250cm9scyhuZXcgTWVkaWFDb250cm9scyh2aWRlbykpCiB7CiAg
ICAgc2V0SW1hZ2VSZXNvdXJjZShSZW5kZXJJbWFnZVJlc291cmNlOjpjcmVhdGUoKSk7CiB9CiAK
IFJlbmRlck1lZGlhOjpSZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbywgY29uc3Qg
SW50U2l6ZSYgaW50cmluc2ljU2l6ZSkKICAgICA6IFJlbmRlckltYWdlKHZpZGVvKQotICAgICwg
bV9jb250cm9scyhuZXcgTWVkaWFDb250cm9scyh2aWRlbykpCiB7CiAgICAgc2V0SW1hZ2VSZXNv
dXJjZShSZW5kZXJJbWFnZVJlc291cmNlOjpjcmVhdGUoKSk7CiAgICAgc2V0SW50cmluc2ljU2l6
ZShpbnRyaW5zaWNTaXplKTsKQEAgLTU0LDMyICs1MCwyNCBAQCBSZW5kZXJNZWRpYTo6flJlbmRl
ck1lZGlhKCkKIHsKIH0KIAotdm9pZCBSZW5kZXJNZWRpYTo6ZGVzdHJveSgpCi17Ci0gICAgbV9j
b250cm9scy0+ZGVzdHJveSgpOwotICAgIFJlbmRlckltYWdlOjpkZXN0cm95KCk7Ci19Ci0KKy8v
IEZJWE1FOiBNb3ZlIHRvIFJlbmRlclZpZGVvCiBIVE1MTWVkaWFFbGVtZW50KiBSZW5kZXJNZWRp
YTo6bWVkaWFFbGVtZW50KCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxN
ZWRpYUVsZW1lbnQqPihub2RlKCkpOyAKIH0KIAotdm9pZCBSZW5kZXJNZWRpYTo6c3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkK
LXsKLSAgICBSZW5kZXJJbWFnZTo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotICAg
IG1fY29udHJvbHMtPnVwZGF0ZVN0eWxlKCk7Ci19Ci0KIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91
dCgpCiB7CiAgICAgSW50U2l6ZSBvbGRTaXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAK
ICAgICBSZW5kZXJJbWFnZTo6bGF5b3V0KCk7CiAKLSAgICBSZW5kZXJCb3gqIGNvbnRyb2xzUmVu
ZGVyZXIgPSBtX2NvbnRyb2xzLT5yZW5kZXJCb3goKTsKKyAgICAvLyBGSVhNRTogQVNTVU1FUyBG
SVJTVCBDSElMRCBJUyBTSEFET1cgUk9PVCBCT1guCisgICAgLy8gRklYTUU6IE1BS0UgUEFSVCBP
RiBNZWRpYUNvbnRyb2xzLgorICAgIFJlbmRlckJveCogY29udHJvbHNSZW5kZXJlciA9IHRvUmVu
ZGVyQm94KG1fY2hpbGRyZW4uZmlyc3RDaGlsZCgpKTsKICAgICBpZiAoIWNvbnRyb2xzUmVuZGVy
ZXIpCiAgICAgICAgIHJldHVybjsKKwogICAgIEludFNpemUgbmV3U2l6ZSA9IGNvbnRlbnRCb3hS
ZWN0KCkuc2l6ZSgpOwogICAgIGlmIChuZXdTaXplID09IG9sZFNpemUgJiYgIWNvbnRyb2xzUmVu
ZGVyZXItPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg5LDkgKzc3LDYgQEAg
dm9pZCBSZW5kZXJNZWRpYTo6bGF5b3V0KCkKICAgICAvLyBhbmQgdGhpcyBtZXRob2Qgd2lsbCBi
ZSBjYWxsZWQgbWFueSB0aW1lcyBwZXIgc2Vjb25kIGR1cmluZyBwbGF5YmFjaywgdXNlIGEgTGF5
b3V0U3RhdGVNYWludGFpbmVyOgogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNS
ZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAK
LSAgICBtX2NvbnRyb2xzLT51cGRhdGVUaW1lRGlzcGxheVZpc2liaWxpdHkoKTsKLQotICAgIGNv
bnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCks
IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKICAgICBjb250cm9sc1JlbmRlcmVyLT5zdHls
ZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiAgICAgY29u
dHJvbHNSZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwg
Rml4ZWQpKTsKICAgICBjb250cm9sc1JlbmRlcmVyLT5zZXROZWVkc0xheW91dCh0cnVlLCBmYWxz
ZSk7CkBAIC0xMDEsOSArODYsOSBAQCB2b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQogICAgIHN0
YXRlUHVzaGVyLnBvcCgpOwogfQogCi12b2lkIFJlbmRlck1lZGlhOjp1cGRhdGVGcm9tRWxlbWVu
dCgpCit2b2lkIFJlbmRlck1lZGlhOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4
LCBpbnQgdHkpCiB7Ci0gICAgbV9jb250cm9scy0+dXBkYXRlKCk7CisgICAgUmVuZGVySW1hZ2U6
OnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAppbmRleCA3NjU4ZWY2YzE4NGMzOTgz
MmU0YzVkODJmOGY4N2E1YjY1MGI1MDMxLi41OTY0ZWE0ZTRjNWRjMWQ1NjQwMzVjYTE4Yjk3NmM2
MDEwZWI5MjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVk
aWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaApAQCAtMzMs
NyArMzMsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50
OwotY2xhc3MgTWVkaWFDb250cm9sczsKIAogY2xhc3MgUmVuZGVyTWVkaWEgOiBwdWJsaWMgUmVu
ZGVySW1hZ2UgewogcHVibGljOgpAQCAtNDUsMjkgKzQ0LDIxIEBAIHB1YmxpYzoKICAgICBSZW5k
ZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIAog
ICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0OwotICAgIE1lZGlhQ29u
dHJvbHMqIGNvbnRyb2xzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVs
ZW1lbnQoKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkp
OwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7
IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGls
ZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlck1lZGlhIjsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc01lZGlhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotCi0gICAgdmlydHVhbCB2b2lk
IHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKLQogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJvcGFn
YXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBPd25QdHI8TWVkaWFDb250cm9s
cz4gbV9jb250cm9sczsKICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKIH07
CiAKQEAgLTc3LDExICs2OCw2IEBAIGlubGluZSBSZW5kZXJNZWRpYSogdG9SZW5kZXJNZWRpYShS
ZW5kZXJPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTWVkaWEq
PihvYmplY3QpOwogfQogCi1pbmxpbmUgTWVkaWFDb250cm9scyogUmVuZGVyTWVkaWE6OmNvbnRy
b2xzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250cm9scy5nZXQoKTsKLX0KLQogLy8gVGhp
cyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgogdm9pZCB0b1Jl
bmRlck1lZGlhKGNvbnN0IFJlbmRlck1lZGlhKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCmluZGV4IDczYTRlZjdkZjA0ZjU2OTczMWI4OGE1Yjk1M2Q3OTFlNjFh
ZTY1NmUuLjBiNzU1YzU0ZDA0NmZjMGIzZDBmNzYxYmNmZmUwNWU5OGIyMTY2YmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtNDgxLDMyICs0ODEsMTAgQEAg
Ym9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLAogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotYm9vbCBSZW5k
ZXJUaGVtZTo6aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJ
bnRQb2ludCYgYWJzUG9pbnQpCi17Ci0gICAgaWYgKCFvLT5pc0JveCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBvLT5hYnNvbHV0ZVRvTG9j
YWwoYWJzUG9pbnQsIGZhbHNlLCB0cnVlKTsgIC8vIHJlc3BlY3QgdHJhbnNmb3JtcwotICAgIHJl
dHVybiB0b1JlbmRlckJveChvKS0+Ym9yZGVyQm94UmVjdCgpLmNvbnRhaW5zKHJvdW5kZWRJbnRQ
b2ludChsb2NhbFBvaW50KSk7Ci19CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnNob3VsZFJlbmRlck1l
ZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQgcGFydCwgRWxlbWVudCogZSkKK2Jvb2wgUmVuZGVy
VGhlbWU6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQsIEVsZW1lbnQq
KQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxNZWRpYUVsZW1lbnQqPihlKTsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIE1lZGlh
TXV0ZUJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCk7
Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRpYUVs
ZW1lbnQtPm1vdmllTG9hZFR5cGUoKSAhPSBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKLSAgICBj
YXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRp
YUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSA9PSBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKLSAg
ICBjYXNlIE1lZGlhRnVsbHNjcmVlbkJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRpYUVs
ZW1lbnQtPnN1cHBvcnRzRnVsbHNjcmVlbigpOwotICAgIGNhc2UgTWVkaWFUb2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRpYUVsZW1lbnQtPmhhc0Nsb3Nl
ZENhcHRpb25zKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQor
ICAgIHJldHVybiB0cnVlOwogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWU6OmZvcm1hdE1lZGlhQ29u
dHJvbHNUaW1lKGZsb2F0IHRpbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5oCmluZGV4IDM1ZjI1NmM5NmEzNTZkZmE3NmUwZGE3NzY4OTVmMTI3YWFlYTgwNjQuLjYw
MmFjZDZkYmYwYjdlYTA3ZGQzYjljMDA0ZDkwYmNkNzEwZjMzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCkBAIC0xNzgsNyArMTc4LDYgQEAgcHVibGljOgogCiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIC8vIE1lZGlhIGNvbnRyb2xzCi0gICAgdmlydHVhbCBib29sIGhp
dFRlc3RNZWRpYUNvbnRyb2xQYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IEludFBvaW50JiBhYnNQ
b2ludCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29u
dHJvbFBhcnQsIEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFN0
YXR1c0Rpc3BsYXkoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgZG91YmxlIG1lZGlh
Q29udHJvbHNGYWRlSW5EdXJhdGlvbigpIHsgcmV0dXJuIDAuMTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85689</attachid>
            <date>2011-03-14 10:16:05 -0700</date>
            <delta_ts>2011-03-22 10:13:43 -0700</delta_ts>
            <desc>Another checkpoint.</desc>
            <filename>bug-53020-20110314101604.patch</filename>
            <type>text/plain</type>
            <size>80471</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEwMjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9tZWRpYUNvbnRyb2xzLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNz
cwppbmRleCA4ODE0NGI0NmRmZDMzZGYwMzU1OTk5OGEzMmE1M2IzZGU5N2I0N2U5Li5kYTZjZDVm
MGViZTBjZDQwZjViNWJiNWUzMDgxMTdiYjE4NmUyZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlh
Q29udHJvbHMuY3NzCkBAIC0yOSw2ICsyOSwxMyBAQCBhdWRpbyB7CiAgICAgaGVpZ2h0OiAxNnB4
OwogfQogCis6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMgeworICAgIHdpZHRoOiBpbmhlcml0Owor
ICAgIGhlaWdodDogaW5oZXJpdDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZGlzcGxh
eTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CiAgICAgZGlzcGxheTogLXdlYmtpdC1i
b3g7CiAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOwpAQCAtOTgsMTIgKzEwNSw3
IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7CiAgICAgbWFyZ2luOiBpbml0aWFsOwogfQogCi1h
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlk
ZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAg
IGRpc3BsYXk6IG5vbmU7Ci19Ci0KIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVt
ZS1zbGlkZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgewot
ICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKICAgICBi
b3JkZXI6IGluaXRpYWw7CiAgICAgY29sb3I6IGluaGVyaXQ7CkBAIC0xNjYsNyArMTY4LDYgQEAg
YXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0
b24sIHZpZGVvOjotd2Via2l0LW1lZGkKIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiB7CiAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRp
YS12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uOwotICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgYmFj
a2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKICAgICBib3JkZXI6IGluaXRpYWw7CiAgICAgY29sb3I6
IGluaGVyaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCA3
YmM0OGNhZTdlNWQyZTI2ZWVlMzBhMDBhY2U1MjYyYWNiNDBiZWJkLi4wOTMxNGRiMjYzMTk0NTVh
YWJkNzI3MzRhODljOTU3NzkzY2RlNzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIK
KyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgpAQCAtMTYxLDYgKzE2
Miw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX3NlbmRQcm9ncmVzc0V2ZW50
cyh0cnVlKQogICAgICwgbV9pc0Z1bGxzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2Nsb3NlZENhcHRp
b25zVmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQogI2lmIEVOQUJMRShQ
TFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKQog
I2VuZGlmCkBAIC0yMTgsMTIgKzIyMCwxNCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiAgICAgfQog
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGNvbnRyb2xzQXR0cikgewogI2lmICFFTkFCTEUoUExV
R0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICAgICAgaWYgKCFpc1ZpZGVvKCkgJiYgYXR0YWNoZWQo
KSAmJiAoY29udHJvbHMoKSAhPSAocmVuZGVyZXIoKSAhPSAwKSkpIHsKLSAgICAgICAgICAgIGRl
dGFjaCgpOwotICAgICAgICAgICAgYXR0YWNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhh
c01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsK
KyAgICAgICAgaWYgKGNvbnRyb2xzKCkpIHsKKyAgICAgICAgICAgIGlmICghaGFzTWVkaWFDb250
cm9scygpKSB7CisgICAgICAgICAgICAgICAgZW5zdXJlTWVkaWFDb250cm9scygpOworICAgICAg
ICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvdygpOworICAgICAgICB9IGVsc2UgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+aGlkZSgpOwogI2Vs
c2UKICAgICAgICAgaWYgKG1fcGxheWVyKQogICAgICAgICAgICAgbV9wbGF5ZXItPnNldENvbnRy
b2xzKGNvbnRyb2xzKCkpOwpAQCAtMzE2LDYgKzMyMCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCiAKICAgICByZXR1cm4gdHJ1
ZTsKICNlbHNlCisgICAgLy8gRklYTUU6IFdURiBJUyBUSElTPyEKICAgICByZXR1cm4gY29udHJv
bHMoKSA/IEhUTUxFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSA6IGZhbHNlOwogI2Vu
ZGlmCiB9CkBAIC0zNjksOCArMzc0LDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphdHRhY2go
KQogCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21F
bGVtZW50KCk7CisKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICBlbHNl
IGlmIChtX3Byb3h5V2lkZ2V0KSB7CisgICAgaWYgKG1fcHJveHlXaWRnZXQpIHsKICAgICAgICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICAgICAgRnJhbWVMb2FkZXIq
IGxvYWRlciA9IGZyYW1lID8gZnJhbWUtPmxvYWRlcigpIDogMDsKICAgICAgICAgaWYgKGxvYWRl
cikKQEAgLTg4OSw2ICs4OTUsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtT
dGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQogICAgICAgICAgICAgbm9uZVN1
cHBvcnRlZCgpOwogCiAgICAgICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOworICAgICAgICBpZiAo
aGFzTWVkaWFDb250cm9scygpKQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXBvcnRl
ZEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkxNyw2ICs5MjUsOSBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIHN0YXRlKQogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTsKICAg
ICAgICAgbV9jb21wbGV0ZWx5TG9hZGVkID0gdHJ1ZTsKICAgICB9CisKKyAgICBpZiAoaGFzTWVk
aWFDb250cm9scygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWROZXR3b3JrU3Rh
dGUoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclJlYWR5U3RhdGVD
aGFuZ2VkKE1lZGlhUGxheWVyKikKQEAgLTk2Niw2ICs5NzcsOCBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZFX01FVEFEQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9NRVRB
REFUQSkgewogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5n
ZUV2ZW50KTsKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVkbWV0YWRh
dGFFdmVudCk7CisgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBt
ZWRpYUNvbnRyb2xzKCktPmxvYWRlZE1ldGFkYXRhKCk7CiAgICAgICAgIGlmIChyZW5kZXJlcigp
KQogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICAgICAg
bV9wbGF5ZXItPnNlZWsoMCk7CkBAIC0xNTkzLDYgKzE2MDYsMTEgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZChUaW1lcjxIVE1MTWVkaWFFbGVtZW50
PiopCiAgICAgICAgIHJldHVybjsKIAogICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KHRydWUp
OworICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpIHsKKyAgICAgICAgaWYgKCFtX21vdXNlT3Zl
ciAmJiBjb250cm9scygpKQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5tYWtlVHJhbnNw
YXJlbnQoKTsKKyAgICAgICAgbWVkaWFDb250cm9scygpLT5wbGF5aW5nKCk7CisgICAgfQogICAg
IAogICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggY3VlIHJhbmdlcyBoZXJlCiB9CkBAIC0yMTE1LDYg
KzIxMzMsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAg
ICAgICAgICBtX3BsYXllci0+cGF1c2UoKTsKICAgICAgICAgcmVmcmVzaENhY2hlZFRpbWUoKTsK
ICAgICAgICAgbV9wbGF5YmFja1Byb2dyZXNzVGltZXIuc3RvcCgpOworICAgICAgICBpZiAoaGFz
TWVkaWFDb250cm9scygpKQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5wYXVzZSgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjEzOCw2ICsyMTU4LDggQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAgICAgICAgICAgbV9wbGF5ZXIt
PnBsYXkoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisg
ICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPnBsYXkoKTsKICAgICAgICAgc3RhcnRQbGF5YmFj
a1Byb2dyZXNzVGltZXIoKTsKICAgICAgICAgbV9wbGF5aW5nID0gdHJ1ZTsKIApAQCAtMjE1NCw2
ICsyMTc2LDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogCiAg
ICAgICAgIGlmIChjb3VsZFBsYXlJZkVub3VnaERhdGEoKSkKICAgICAgICAgICAgIG1fcGxheWVy
LT5wcmVwYXJlVG9QbGF5KCk7CisKKyAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAg
ICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cGF1c2UoKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KHJlbmRlcmVyKCkpCkBAIC0yMzAyLDEwICsyMzI3LDE4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgaWYgKHdpZGdldCkKICAg
ICAgICAgd2lkZ2V0LT5oYW5kbGVFdmVudChldmVudCk7CiAjZWxzZQotICAgIGlmIChoYXNNZWRp
YUNvbnRyb2xzKCkpCi0gICAgICAgIG1lZGlhQ29udHJvbHMoKS0+Zm9yd2FyZEV2ZW50KGV2ZW50
KTsKLSAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgIE1vdXNlRXZlbnQqIG1vdXNl
RXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworICAgICAgICBpZiAobW91
c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpICE9IHRoaXMpIHsKKyAgICAgICAgICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAgICAgICAg
ICAgIG1fbW91c2VPdmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzTWVkaWFDb250
cm9scygpICYmIGNvbnRyb2xzKCkgJiYgIWNhblBsYXkoKSkKKyAgICAgICAgICAgICAgICAgICAg
bWVkaWFDb250cm9scygpLT5tYWtlT3BhcXVlKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCisgICAgICAgICAgICAg
ICAgbV9tb3VzZU92ZXIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEhUTUxFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICNlbmRpZgogfQpAQCAtMjU3MCwxNSAr
MjYwMywyMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlk
Q2hhbmdlKCkKICAgICBtX3BsYXllci0+c2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShwcml2YXRlTW9k
ZSk7CiB9CiAKK2Jvb2wgSFRNTE1lZGlhRWxlbWVudDo6aGFzTWVkaWFDb250cm9scygpCit7Cisg
ICAgcmV0dXJuIHNoYWRvd1Jvb3QoKTsKK30KKwogTWVkaWFDb250cm9scyogSFRNTE1lZGlhRWxl
bWVudDo6bWVkaWFDb250cm9scygpCiB7Ci0gICAgQVNTRVJUKHJlbmRlcmVyKCkpOwotICAgIHJl
dHVybiB0b1JlbmRlck1lZGlhKHJlbmRlcmVyKCkpLT5jb250cm9scygpOworICAgIHJldHVybiB0
b01lZGlhQ29udHJvbHMoc2hhZG93Um9vdCgpKTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50
OjpoYXNNZWRpYUNvbnRyb2xzKCkgY29uc3QKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJl
TWVkaWFDb250cm9scygpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+
aXNNZWRpYSgpOworICAgIGlmICghaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICBzZXRTaGFk
b3dSb290KE1lZGlhQ29udHJvbHM6OmNyZWF0ZSh0aGlzKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggZjVkN2M2YTA3NDYwZjgyM2FlNTZkMjJlZWEz
NGMwOGFjZGUxMjJhOC4uMDZkYzgyNzA4NWUzZmFjY2IxODhjNGRhODA1NWQ0MjQ4NWM3Yzc1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTMyMyw3ICszMjMsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlZFRpbWUoKTsKICAgICB2b2lkIHJl
ZnJlc2hDYWNoZWRUaW1lKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc01lZGlhQ29udHJvbHMoKSBj
b25zdDsKKyAgICBib29sIGhhc01lZGlhQ29udHJvbHMoKTsKKyAgICB2b2lkIGVuc3VyZU1lZGlh
Q29udHJvbHMoKTsKIAogICAgIFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbG9hZFRpbWVyOwog
ICAgIFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fYXN5bmNFdmVudFRpbWVyOwpAQCAtNDA0LDYg
KzQwNSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faXNGdWxsc2NyZWVuIDogMTsKICAgICBi
b29sIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlIDogMTsKKyAgICBib29sIG1fbW91c2VPdmVyIDog
MTsKIAogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgIGJvb2wgbV9uZWVk
V2lkZ2V0VXBkYXRlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5jcHAKaW5kZXggMmVlZDUzMWEyODYyZGMxOTVmOThkMzZjM2M0ZjY5YTljOGNmYTg5Ny4u
MWI3NjU0NTk5YTQ4NTQ0OGE0YjdhY2RhMGY2MTNhOTk3ODI2MmZmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKQEAgLTQ3LDUyNyArNDcsMzI4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3Rh
dGljIGNvbnN0IGRvdWJsZSBjVGltZVVwZGF0ZVJlcGVhdERlbGF5ID0gMC4yOwotc3RhdGljIGNv
bnN0IGRvdWJsZSBjT3BhY2l0eUFuaW1hdGlvblJlcGVhdERlbGF5ID0gMC4wNTsKLQogTWVkaWFD
b250cm9sczo6TWVkaWFDb250cm9scyhIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0g
ICAgOiBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCi0gICAgLCBtX3RpbWVVcGRhdGVUaW1l
cih0aGlzLCAmTWVkaWFDb250cm9sczo6dGltZVVwZGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX29w
YWNpdHlBbmltYXRpb25UaW1lcih0aGlzLCAmTWVkaWFDb250cm9sczo6b3BhY2l0eUFuaW1hdGlv
blRpbWVyRmlyZWQpCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWUoMCkKLSAgICAs
IG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uKDApCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25G
cm9tKDApCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25UbygxLjBmKQotICAgICwgbV9tb3VzZU92
ZXIoZmFsc2UpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIG1lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKSkKKyAgICAsIG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKKyAgICAsIG1fcmV3
aW5kQnV0dG9uKDApCisgICAgLCBtX3BsYXlCdXR0b24oMCkKKyAgICAsIG1fcmV0dXJuVG9SZWFs
VGltZUJ1dHRvbigwKQorICAgICwgbV9zdGF0dXNEaXNwbGF5KDApCisgICAgLCBtX2N1cnJlbnRU
aW1lRGlzcGxheSgwKQorICAgICwgbV90aW1lbGluZSgwKQorICAgICwgbV90aW1lUmVtYWluaW5n
RGlzcGxheSgwKQorICAgICwgbV90aW1lbGluZUNvbnRhaW5lcigwKQorICAgICwgbV90b2dnbGVD
bG9zZWRDYXB0aW9uc0J1dHRvbigwKQorICAgICwgbV9wYW5lbE11dGVCdXR0b24oMCkKKyAgICAs
IG1fdm9sdW1lU2xpZGVyKDApCisgICAgLCBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24oMCkKKyAg
ICAsIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKDApCisgICAgLCBtX2Z1bGxTY3JlZW5CdXR0b24o
MCkKKyAgICAsIG1fcGFuZWwoMCkKKyAgICAsIG1fb3BhcXVlKHRydWUpCiB7CiB9CiAKLXZvaWQg
TWVkaWFDb250cm9sczo6cmVzZXQoKQorUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xzPiBNZWRpYUNv
bnRyb2xzOjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogewotICAgIHVw
ZGF0ZSgpOwotfQorICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xzPiBjb250cm9scyA9IGFkb3B0UmVm
KG5ldyBNZWRpYUNvbnRyb2xzKG1lZGlhRWxlbWVudCkpOwogCi12b2lkIE1lZGlhQ29udHJvbHM6
OmNoYW5nZWRNdXRlKCkKLXsKLSAgICB1cGRhdGUoKTsKLX0KIAotdm9pZCBNZWRpYUNvbnRyb2xz
OjpjaGFuZ2VkVm9sdW1lKCkKLXsKLSAgICB1cGRhdGUoKTsKLX0KKyAgICBSZWZQdHI8TWVkaWFD
b250cm9sUGFuZWxFbGVtZW50PiBwYW5lbCA9IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6Y3Jl
YXRlKG1lZGlhRWxlbWVudCk7CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENh
cHRpb25zVmlzaWJpbGl0eSgpCi17Ci0gICAgdXBkYXRlKCk7Ci19CisgICAgLy8gRklYTUU6IFdI
QVQgVE8gRE8gV0lUSCBlYz8/IT8hPyE/IQorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAKLXZvaWQg
TWVkaWFDb250cm9sczo6dXBkYXRlU3R5bGUoKQotewotICAgIGlmICghbV9jb250cm9sc1NoYWRv
d1Jvb3QpCi0gICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sUmV3aW5kQnV0
dG9uRWxlbWVudD4gcmV3aW5kQnV0dG9uID0gTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fcmV3aW5kQnV0dG9uID0g
cmV3aW5kQnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChyZXdpbmRCdXR0b24u
cmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gcGxheUJ1dHRvbiA9IE1l
ZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBj
b250cm9scy0+bV9wbGF5QnV0dG9uID0gcGxheUJ1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+YXBw
ZW5kQ2hpbGQocGxheUJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRp
bWVCdXR0b25FbGVtZW50PiByZXR1cm5Ub1JlYWx0aW1lQnV0dG9uID0gTWVkaWFDb250cm9sUmV0
dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNv
bnRyb2xzLT5tX3JldHVyblRvUmVhbFRpbWVCdXR0b24gPSByZXR1cm5Ub1JlYWx0aW1lQnV0dG9u
LmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChyZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLnJl
bGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAobWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnVzZXNNZWRp
YUNvbnRyb2xTdGF0dXNEaXNwbGF5KCkpIHsKKyAgICAgICAgUmVmUHRyPE1lZGlhQ29udHJvbFN0
YXR1c0Rpc3BsYXlFbGVtZW50PiBzdGF0dXNEaXNwbGF5ID0gTWVkaWFDb250cm9sU3RhdHVzRGlz
cGxheUVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgICAgICBjb250cm9scy0+bV9z
dGF0dXNEaXNwbGF5ID0gc3RhdHVzRGlzcGxheS5nZXQoKTsKKyAgICAgICAgcGFuZWwtPmFwcGVu
ZENoaWxkKHN0YXR1c0Rpc3BsYXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgICAgIGlmIChl
YykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIGlmIChtX3BhbmVsKQotICAg
ICAgICBtX3BhbmVsLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX211dGVCdXR0b24pCi0gICAg
ICAgIG1fbXV0ZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9wbGF5QnV0dG9uKQot
ICAgICAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fc2Vla0JhY2tC
dXR0b24pCi0gICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYg
KG1fc2Vla0ZvcndhcmRCdXR0b24pCi0gICAgICAgIG1fc2Vla0ZvcndhcmRCdXR0b24tPnVwZGF0
ZVN0eWxlKCk7Ci0gICAgaWYgKG1fcmV3aW5kQnV0dG9uKQotICAgICAgICBtX3Jld2luZEJ1dHRv
bi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKQotICAg
ICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1f
dG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pCi0gICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fc3RhdHVzRGlzcGxheSkKLSAgICAg
ICAgbV9zdGF0dXNEaXNwbGF5LT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3RpbWVsaW5lQ29u
dGFpbmVyKQotICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT51cGRhdGVTdHlsZSgpOwotICAg
IGlmIChtX3RpbWVsaW5lKQotICAgICAgICBtX3RpbWVsaW5lLT51cGRhdGVTdHlsZSgpOwotICAg
IGlmIChtX2Z1bGxzY3JlZW5CdXR0b24pCi0gICAgICAgIG1fZnVsbHNjcmVlbkJ1dHRvbi0+dXBk
YXRlU3R5bGUoKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkpCi0gICAgICAgIG1fY3Vy
cmVudFRpbWVEaXNwbGF5LT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3RpbWVSZW1haW5pbmdE
aXNwbGF5KQotICAgICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT51cGRhdGVTdHlsZSgpOwot
ICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJD
b250YWluZXItPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRv
bikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAg
IGlmIChtX3ZvbHVtZVNsaWRlcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXItPnVwZGF0ZVN0eWxl
KCk7Ci19CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4g
dGltZWxpbmVDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6
OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OmRlc3Ryb3koKQot
ewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgUmVmUHRyPE1l
ZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ+IGN1cnJlbnRUaW1lRGlzcGxheSA9
IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1l
bnQpOworICAgIGNvbnRyb2xzLT5tX2N1cnJlbnRUaW1lRGlzcGxheSA9IGN1cnJlbnRUaW1lRGlz
cGxheS5nZXQoKTsKKyAgICB0aW1lbGluZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoY3VycmVudFRp
bWVEaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBpZiAobV9jb250cm9sc1NoYWRvd1Jvb3QgJiYgbV9jb250cm9sc1NoYWRv
d1Jvb3QtPnJlbmRlcmVyKCkpIHsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50PiB0aW1lbGluZSA9IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1lZGlh
RWxlbWVudCwgY29udHJvbHMuZ2V0KCkpOworICAgIGNvbnRyb2xzLT5tX3RpbWVsaW5lID0gdGlt
ZWxpbmUuZ2V0KCk7CisgICAgdGltZWxpbmVDb250YWluZXItPmFwcGVuZENoaWxkKHRpbWVsaW5l
LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICAgICAgLy8gZGV0YWNoIHRoZSBwYW5lbCBiZWZvcmUgcmVtb3ZpbmcgdGhlIHNoYWRvdyBy
ZW5kZXJlciB0byBwcmV2ZW50IGEgY3Jhc2ggaW4gbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFj
aCgpIAotICAgICAgICAvLyAgd2hlbiBkaXNwbGF5OiBzdHlsZSBjaGFuZ2VzCi0gICAgICAgIG1f
cGFuZWwtPmRldGFjaCgpOworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlz
cGxheUVsZW1lbnQ+IHRpbWVSZW1haW5pbmdEaXNwbGF5ID0gTWVkaWFDb250cm9sVGltZVJlbWFp
bmluZ0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250cm9scy0+
bV90aW1lUmVtYWluaW5nRGlzcGxheSA9IHRpbWVSZW1haW5pbmdEaXNwbGF5LmdldCgpOworICAg
IHRpbWVsaW5lQ29udGFpbmVyLT5hcHBlbmRDaGlsZCh0aW1lUmVtYWluaW5nRGlzcGxheS5yZWxl
YXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOwogCi0gICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW1vdmVDaGlsZChtX2NvbnRyb2xzU2hh
ZG93Um9vdC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRh
Y2goKTsKLSAgICAgICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSAwOwotICAgIH0KLX0KKyAgICBj
b250cm9scy0+bV90aW1lbGluZUNvbnRhaW5lciA9IHRpbWVsaW5lQ29udGFpbmVyLmdldCgpOwor
ICAgIHBhbmVsLT5hcHBlbmRDaGlsZCh0aW1lbGluZUNvbnRhaW5lci5yZWxlYXNlKCksIGVjLCB0
cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOwogCi12b2lkIE1lZGlhQ29udHJv
bHM6OnVwZGF0ZSgpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWEgPSBtX21lZGlhRWxl
bWVudDsKLSAgICBpZiAoIW1lZGlhLT5jb250cm9scygpIHx8ICFtZWRpYS0+aW5BY3RpdmVEb2N1
bWVudCgpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRyb2xzU2hhZG93Um9vdCkgewotICAgICAgICAg
ICAgbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpOwotICAgICAgICAgICAgbV9wYW5lbCA9
IDA7Ci0gICAgICAgICAgICBtX211dGVCdXR0b24gPSAwOwotICAgICAgICAgICAgbV9wbGF5QnV0
dG9uID0gMDsKLSAgICAgICAgICAgIG1fc3RhdHVzRGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBt
X3RpbWVsaW5lQ29udGFpbmVyID0gMDsKLSAgICAgICAgICAgIG1fdGltZWxpbmUgPSAwOwotICAg
ICAgICAgICAgbV9zZWVrQmFja0J1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3NlZWtGb3J3YXJk
QnV0dG9uID0gMDsKLSAgICAgICAgICAgIG1fcmV3aW5kQnV0dG9uID0gMDsKLSAgICAgICAgICAg
IG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX2N1cnJlbnRUaW1l
RGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5ID0gMDsKLSAg
ICAgICAgICAgIG1fZnVsbHNjcmVlbkJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNs
aWRlckNvbnRhaW5lciA9IDA7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlciA9IDA7Ci0gICAg
ICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24gPSAwOwotICAgICAgICAgICAgbV9jb250
cm9sc1NoYWRvd1Jvb3QgPSAwOwotICAgICAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbiA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVG8gPSAxLjBm
OwotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIG1fdGlt
ZVVwZGF0ZVRpbWVyLnN0b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhN
RTogT05MWSBBUFBFTkQgV0hFTiBTVVBQT1JUUyBTRUVLQkFDSworICAgIHBhbmVsLT5hcHBlbmRD
aGlsZChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1l
bnQpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIGlm
ICghbV9jb250cm9sc1NoYWRvd1Jvb3QpIHsKLSAgICAgICAgY3JlYXRlQ29udHJvbHNTaGFkb3dS
b290KCk7Ci0gICAgICAgIGNyZWF0ZVBhbmVsKCk7Ci0gICAgICAgIGlmIChtX3BhbmVsKSB7Ci0g
ICAgICAgICAgICBjcmVhdGVSZXdpbmRCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVBsYXlC
dXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVJldHVyblRvUmVhbHRpbWVCdXR0b24oKTsKLSAg
ICAgICAgICAgIGNyZWF0ZVN0YXR1c0Rpc3BsYXkoKTsKLSAgICAgICAgICAgIGNyZWF0ZVRpbWVs
aW5lQ29udGFpbmVyKCk7Ci0gICAgICAgICAgICBpZiAobV90aW1lbGluZUNvbnRhaW5lcikgewot
ICAgICAgICAgICAgICAgIGNyZWF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotICAgICAgICAgICAg
ICAgIGNyZWF0ZVRpbWVsaW5lKCk7Ci0gICAgICAgICAgICAgICAgY3JlYXRlVGltZVJlbWFpbmlu
Z0Rpc3BsYXkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNyZWF0ZVNlZWtCYWNrQnV0
dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVTZWVrRm9yd2FyZEJ1dHRvbigpOwotICAgICAgICAg
ICAgY3JlYXRlVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0
ZUZ1bGxzY3JlZW5CdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZU11dGVCdXR0b24oKTsKLSAg
ICAgICAgICAgIGNyZWF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcigpOwotICAgICAgICAgICAgaWYg
KG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKSB7Ci0gICAgICAgICAgICAgICAgY3JlYXRlVm9sdW1l
U2xpZGVyKCk7Ci0gICAgICAgICAgICAgICAgY3JlYXRlVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbigp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9wYW5lbC0+YXR0YWNoKCk7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgLy8gRklYTUU6IE9OTFkgQVBQRU5EIFdIRU4gU1VQUE9SVFMgU0VFS0ZP
UldBUkQKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0
b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KSwgZWMsIHRydWUpOworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobWVkaWEtPmNhblBsYXkoKSkgewotICAgICAg
ICBpZiAobV90aW1lVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fdGltZVVw
ZGF0ZVRpbWVyLnN0b3AoKTsKLSAgICB9IGVsc2UgaWYgKG1lZGlhLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiBtX3RpbWVsaW5lICYmIG1fdGltZWxpbmUt
PnJlbmRlcmVyKCkgJiYgbV90aW1lbGluZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlzcGxheSgp
ICE9IE5PTkUpIHsKLSAgICAgICAgbV90aW1lVXBkYXRlVGltZXIuc3RhcnRSZXBlYXRpbmcoY1Rp
bWVVcGRhdGVSZXBlYXREZWxheSk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBVcGRhdGUgY2MgYnV0
dG9uIHdoZW4gdHVybmluZyBvbi9vZmYgZnJvbSBET00hISEhCisgICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4gdG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24gPSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6
OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX3RvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uID0gdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwt
PmFwcGVuZENoaWxkKHRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRy
dWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV9wYW5lbCkg
ewotICAgICAgICAvLyB1cGRhdGUoKSBtaWdodCBhbHRlciB0aGUgb3BhY2l0eSBvZiB0aGUgZWxl
bWVudCwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZQotICAgICAgICAvLyBvZiBh
biBhbmltYXRpb24uIFRoaXMgaXMgdGhlIG9ubHkgZWxlbWVudCBjb25jZXJuZWQgYXMgd2UgYW5p
bWF0ZSBvbmx5IHRoaXMgZWxlbWVudC4KLSAgICAgICAgZmxvYXQgb3BhY2l0eUJlZm9yZUNoYW5n
aW5nU3R5bGUgPSBtX3BhbmVsLT5yZW5kZXJlcigpID8gbV9wYW5lbC0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+b3BhY2l0eSgpIDogMDsKLSAgICAgICAgbV9wYW5lbC0+dXBkYXRlKCk7Ci0gICAgICAg
IGNoYW5nZU9wYWNpdHkobV9wYW5lbC5nZXQoKSwgb3BhY2l0eUJlZm9yZUNoYW5naW5nU3R5bGUp
OwotICAgIH0KLSAgICBpZiAobV9tdXRlQnV0dG9uKQotICAgICAgICBtX211dGVCdXR0b24tPnVw
ZGF0ZSgpOwotICAgIGlmIChtX3BsYXlCdXR0b24pCi0gICAgICAgIG1fcGxheUJ1dHRvbi0+dXBk
YXRlKCk7Ci0gICAgaWYgKG1fdGltZWxpbmVDb250YWluZXIpCi0gICAgICAgIG1fdGltZWxpbmVD
b250YWluZXItPnVwZGF0ZSgpOwotICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKLSAg
ICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnVwZGF0ZSgpOwotICAgIGlmIChtX3RpbWVs
aW5lKQotICAgICAgICBtX3RpbWVsaW5lLT51cGRhdGUoKTsKLSAgICBpZiAobV9jdXJyZW50VGlt
ZURpc3BsYXkpCi0gICAgICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT51cGRhdGUoKTsKLSAgICBp
ZiAobV90aW1lUmVtYWluaW5nRGlzcGxheSkKLSAgICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxh
eS0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fc2Vla0JhY2tCdXR0b24pCi0gICAgICAgIG1fc2Vla0Jh
Y2tCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3NlZWtGb3J3YXJkQnV0dG9uKQotICAgICAg
ICBtX3NlZWtGb3J3YXJkQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9yZXdpbmRCdXR0b24p
Ci0gICAgICAgIG1fcmV3aW5kQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9yZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uKQotICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPnVwZGF0ZSgp
OwotICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICBtX3RvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9zdGF0dXNEaXNwbGF5
KQotICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPnVwZGF0ZSgpOwotICAgIGlmIChtX2Z1bGxzY3Jl
ZW5CdXR0b24pCi0gICAgICAgIG1fZnVsbHNjcmVlbkJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYg
KG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBkYXRlKCk7Ci0gICAg
aWYgKG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRl
QnV0dG9uLT51cGRhdGUoKTsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRv
bkVsZW1lbnQ+IGZ1bGxTY3JlZW5CdXR0b24gPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9u
RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fZnVsbFNjcmVl
bkJ1dHRvbiA9IGZ1bGxTY3JlZW5CdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxk
KGZ1bGxTY3JlZW5CdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CiAKLSAgICB1cGRhdGVUaW1l
RGlzcGxheSgpOwotICAgIHVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5KCk7Ci19CisgICAgLy8gRklY
TUU6IFVwZGF0ZSBtdXRlQnV0dG9uIHdoZW4gbXV0aW5nIGZyb20gRE9NISEhCisgICAgUmVmUHRy
PE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IHBhbmVsTXV0ZUJ1dHRvbiA9IE1l
ZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQsIGNv
bnRyb2xzLmdldCgpKTsKKyAgICBjb250cm9scy0+bV9wYW5lbE11dGVCdXR0b24gPSBwYW5lbE11
dGVCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHBhbmVsTXV0ZUJ1dHRvbi5y
ZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOwogCi12
b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZUNvbnRyb2xzU2hhZG93Um9vdCgpCi17Ci0gICAgQVNT
RVJUKCFtX2NvbnRyb2xzU2hhZG93Um9vdCk7Ci0gICAgbV9jb250cm9sc1NoYWRvd1Jvb3QgPSBN
ZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAg
ICBtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQobV9jb250cm9sc1NoYWRvd1Jv
b3QtPnJlbmRlcmVyKCkpOwotfQorICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJD
b250YWluZXJFbGVtZW50PiB2b2x1bWVTbGlkZXJDb250YWluZXIgPSBNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKIAotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpjcmVhdGVQYW5lbCgpCi17Ci0gICAgQVNTRVJUKCFtX3BhbmVsKTsKLSAg
ICBtX3BhbmVsID0gTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1l
bnQpOwotICAgIG1fcGFuZWwtPmF0dGFjaFRvUGFyZW50KG1fY29udHJvbHNTaGFkb3dSb290Lmdl
dCgpKTsKLX0KKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudD4gc2xp
ZGVyID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVu
dCk7CisgICAgY29udHJvbHMtPm1fdm9sdW1lU2xpZGVyID0gc2xpZGVyLmdldCgpOworICAgIHZv
bHVtZVNsaWRlckNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoc2xpZGVyLnJlbGVhc2UoKSwgZWMsIHRy
dWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CiAKLXZvaWQgTWVkaWFDb250cm9s
czo6Y3JlYXRlTXV0ZUJ1dHRvbigpCi17Ci0gICAgQVNTRVJUKCFtX211dGVCdXR0b24pOwotICAg
IG1fbXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9tdXRlQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3Bh
bmVsLmdldCgpKTsKLX0KKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbkVsZW1lbnQ+IHZvbHVtZVNsaWRlck11dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJv
bHMtPm1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiA9IHZvbHVtZVNsaWRlck11dGVCdXR0b24uZ2V0
KCk7CisgICAgdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5hcHBlbmRDaGlsZCh2b2x1bWVTbGlkZXJN
dXRlQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuIDA7CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlUGxheUJ1dHRvbigpCi17Ci0gICAg
QVNTRVJUKCFtX3BsYXlCdXR0b24pOwotICAgIG1fcGxheUJ1dHRvbiA9IE1lZGlhQ29udHJvbFBs
YXlCdXR0b25FbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcGxheUJ1dHRv
bi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci19CisgICAgY29udHJvbHMtPm1fdm9s
dW1lU2xpZGVyQ29udGFpbmVyID0gdm9sdW1lU2xpZGVyQ29udGFpbmVyLmdldCgpOworICAgIHBh
bmVsLT5hcHBlbmRDaGlsZCh2b2x1bWVTbGlkZXJDb250YWluZXIucmVsZWFzZSgpLCBlYywgdHJ1
ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKIAotdm9pZCBNZWRpYUNvbnRyb2xz
OjpjcmVhdGVTZWVrQmFja0J1dHRvbigpCi17Ci0gICAgQVNTRVJUKCFtX3NlZWtCYWNrQnV0dG9u
KTsKLSAgICBtX3NlZWtCYWNrQnV0dG9uID0gTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVt
ZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fc2Vla0JhY2tCdXR0b24tPmF0dGFj
aFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQorICAgIC8vIEZJWE1FOiBETyBXRSBORUVEIG1f
cGFuZWw/IT8hPyE/CisgICAgY29udHJvbHMtPm1fcGFuZWwgPSBwYW5lbC5nZXQoKTsKKyAgICBj
b250cm9scy0+YXBwZW5kQ2hpbGQocGFuZWwucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gMDsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVTZWVr
Rm9yd2FyZEJ1dHRvbigpCi17Ci0gICAgQVNTRVJUKCFtX3NlZWtGb3J3YXJkQnV0dG9uKTsKLSAg
ICBtX3NlZWtGb3J3YXJkQnV0dG9uID0gTWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVt
ZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fc2Vla0ZvcndhcmRCdXR0b24tPmF0
dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworICAgIHJldHVybiBjb250cm9scy5yZWxlYXNl
KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlUmV3aW5kQnV0dG9uKCkKK3ZvaWQg
TWVkaWFDb250cm9sczo6c2hvdygpCiB7Ci0gICAgQVNTRVJUKCFtX3Jld2luZEJ1dHRvbik7Ci0g
ICAgbV9yZXdpbmRCdXR0b24gPSBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpjcmVh
dGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcmV3aW5kQnV0dG9uLT5hdHRhY2hUb1BhcmVudCht
X3BhbmVsLmdldCgpKTsKKyAgICBtX3BhbmVsLT5zaG93KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250
cm9sczo6Y3JlYXRlUmV0dXJuVG9SZWFsdGltZUJ1dHRvbigpCit2b2lkIE1lZGlhQ29udHJvbHM6
OmhpZGUoKQogewotICAgIEFTU0VSVCghbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKTsKLSAgICBt
X3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0
dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3JldHVyblRvUmVhbHRp
bWVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworICAgIG1fcGFuZWwtPmhp
ZGUoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVUb2dnbGVDbG9zZWRDYXB0aW9u
c0J1dHRvbigpCitzdGF0aWMgY29uc3QgU3RyaW5nJiB3ZWJraXRUcmFuc2l0aW9uU3RyaW5nKCkK
IHsKLSAgICBBU1NFUlQoIW1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pOwotICAgIG1fdG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9u
c0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV90b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHMsICgiLXdlYmtpdC10cmFuc2l0aW9uIikpOworICAg
IHJldHVybiBzOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVN0YXR1c0Rpc3BsYXko
KQorc3RhdGljIGNvbnN0IFN0cmluZyYgb3BhY2l0eVN0cmluZygpCiB7Ci0gICAgQVNTRVJUKCFt
X3N0YXR1c0Rpc3BsYXkpOwotICAgIG1fc3RhdHVzRGlzcGxheSA9IE1lZGlhQ29udHJvbFN0YXR1
c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fc3RhdHVzRGlz
cGxheS0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHMsICgib3BhY2l0eSIpKTsKKyAgICByZXR1cm4gczsKIH0KIAotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpjcmVhdGVUaW1lbGluZUNvbnRhaW5lcigpCit2b2lkIE1lZGlhQ29udHJv
bHM6Om1ha2VPcGFxdWUoKQogewotICAgIEFTU0VSVCghbV90aW1lbGluZUNvbnRhaW5lcik7Ci0g
ICAgbV90aW1lbGluZUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxl
bWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5h
dHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLX0KKyAgICBpZiAobV9vcGFxdWUpCisgICAg
ICAgIHJldHVybjsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVUaW1lbGluZSgpCi17Ci0g
ICAgQVNTRVJUKCFtX3RpbWVsaW5lKTsKLSAgICBtX3RpbWVsaW5lID0gTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdGltZWxpbmUtPnNl
dEF0dHJpYnV0ZShwcmVjaXNpb25BdHRyLCAiZmxvYXQiKTsKLSAgICBtX3RpbWVsaW5lLT5hdHRh
Y2hUb1BhcmVudChtX3RpbWVsaW5lQ29udGFpbmVyLmdldCgpKTsKLX0KKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgdHJhbnNpdGlvblZhbHVlLCAoKSk7CisgICAgaWYgKHRyYW5zaXRp
b25WYWx1ZS5pc051bGwoKSkKKyAgICAgICAgdHJhbnNpdGlvblZhbHVlID0gU3RyaW5nOjpmb3Jt
YXQoIm9wYWNpdHkgJS4xZ3MiLCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPm1lZGlhQ29u
dHJvbHNGYWRlSW5EdXJhdGlvbigpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
b3BhY2l0eVZhbHVlLCAoIjEiKSk7CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVm9sdW1l
U2xpZGVyQ29udGFpbmVyKCkKLXsKLSAgICBBU1NFUlQoIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
KTsKLSAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV92b2x1bWVT
bGlkZXJDb250YWluZXItPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7CisgICAgbV9wYW5lbC0+c3R5bGUoKS0+c2V0UHJvcGVydHkod2Via2l0VHJh
bnNpdGlvblN0cmluZygpLCB0cmFuc2l0aW9uVmFsdWUsIGVjKTsKKyAgICBtX3BhbmVsLT5zdHls
ZSgpLT5zZXRQcm9wZXJ0eShvcGFjaXR5U3RyaW5nKCksIG9wYWNpdHlWYWx1ZSwgZWMpOworICAg
IG1fb3BhcXVlID0gdHJ1ZTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVWb2x1bWVT
bGlkZXIoKQordm9pZCBNZWRpYUNvbnRyb2xzOjptYWtlVHJhbnNwYXJlbnQoKQogewotICAgIEFT
U0VSVCghbV92b2x1bWVTbGlkZXIpOwotICAgIG1fdm9sdW1lU2xpZGVyID0gTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3ZvbHVt
ZVNsaWRlci0+c2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOwotICAgIG1fdm9s
dW1lU2xpZGVyLT5zZXRBdHRyaWJ1dGUobWF4QXR0ciwgIjEiKTsKLSAgICBtX3ZvbHVtZVNsaWRl
ci0+c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgU3RyaW5nOjpudW1iZXIobV9tZWRpYUVsZW1lbnQt
PnZvbHVtZSgpKSk7Ci0gICAgbV92b2x1bWVTbGlkZXItPmF0dGFjaFRvUGFyZW50KG1fdm9sdW1l
U2xpZGVyQ29udGFpbmVyLmdldCgpKTsKLX0KKyAgICBpZiAoIW1fb3BhcXVlKQorICAgICAgICBy
ZXR1cm47CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlVm9sdW1lU2xpZGVyTXV0ZUJ1dHRv
bigpCi17Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24pOwotICAgIG1fdm9s
dW1lU2xpZGVyTXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25F
bGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbi0+YXR0YWNoVG9QYXJlbnQobV92b2x1bWVTbGlkZXJDb250YWluZXIuZ2V0KCkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0cmFuc2l0aW9uVmFsdWUsICgpKTsKKyAgICBp
ZiAodHJhbnNpdGlvblZhbHVlLmlzTnVsbCgpKQorICAgICAgICB0cmFuc2l0aW9uVmFsdWUgPSBT
dHJpbmc6OmZvcm1hdCgib3BhY2l0eSAlLjFncyIsIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUo
KS0+bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgb3BhY2l0eVZhbHVlLCAoIjAiKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVj
OworICAgIC8vIEZJWE1FOiBNYWtlIG1vcmUgZWZmaWNpZW50LgorICAgIG1fcGFuZWwtPnN0eWxl
KCktPnNldFByb3BlcnR5KHdlYmtpdFRyYW5zaXRpb25TdHJpbmcoKSwgdHJhbnNpdGlvblZhbHVl
LCBlYyk7CisgICAgbV9wYW5lbC0+c3R5bGUoKS0+c2V0UHJvcGVydHkob3BhY2l0eVN0cmluZygp
LCBvcGFjaXR5VmFsdWUsIGVjKTsKKyAgICBtX29wYXF1ZSA9IGZhbHNlOwogfQogCi12b2lkIE1l
ZGlhQ29udHJvbHM6OmNyZWF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpCit2b2lkIE1lZGlhQ29udHJv
bHM6OnJlc2V0KCkKIHsKLSAgICBBU1NFUlQoIW1fY3VycmVudFRpbWVEaXNwbGF5KTsKLSAgICBt
X2N1cnJlbnRUaW1lRGlzcGxheSA9IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1l
bnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPmF0
dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOworICAgIGNoYW5nZWROZXR3
b3JrU3RhdGUoKTsKKyAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlv
bigpOworICAgIGlmICghaXNuYW4oZHVyYXRpb24pKSB7CisgICAgICAgIG1fdGltZWxpbmUtPnNl
dER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lci0+c2hvdygp
OworICAgICAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhRWxlbWVudC0+Y3VycmVu
dFRpbWUoKSk7CisgICAgICAgIHVwZGF0ZVRpbWVEaXNwbGF5KCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fdGltZWxpbmVDb250YWluZXItPmhpZGUoKTsKKworICAgIGlmIChtX21lZGlhRWxlbWVu
dC0+aGFzQXVkaW8oKSkKKyAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNob3coKTsKKyAgICBl
bHNlCisgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CisKKyAgICBtX3ZvbHVtZVNs
aWRlci0+c2V0Vm9sdW1lKG1fbWVkaWFFbGVtZW50LT52b2x1bWUoKSk7CisKKyAgICBpZiAobV9t
ZWRpYUVsZW1lbnQtPmhhc0Nsb3NlZENhcHRpb25zKCkpCisgICAgICAgIG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24tPnNob3coKTsKKyAgICBlbHNlCisgICAgICAgIG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24tPmhpZGUoKTsKKworICAgIGlmIChtX21lZGlhRWxlbWVudC0+bW92aWVM
b2FkVHlwZSgpICE9IE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtKSB7CisgICAgICAgIG1fcmV0dXJu
VG9SZWFsVGltZUJ1dHRvbi0+aGlkZSgpOworICAgICAgICBtX3Jld2luZEJ1dHRvbi0+c2hvdygp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcmV0dXJuVG9SZWFsVGltZUJ1dHRvbi0+c2hvdygp
OworICAgICAgICBtX3Jld2luZEJ1dHRvbi0+aGlkZSgpOworICAgIH0KKworICAgIG1ha2VPcGFx
dWUoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVUaW1lUmVtYWluaW5nRGlzcGxh
eSgpCit2b2lkIE1lZGlhQ29udHJvbHM6OnBsYXkoKQogewotICAgIEFTU0VSVCghbV90aW1lUmVt
YWluaW5nRGlzcGxheSk7Ci0gICAgbV90aW1lUmVtYWluaW5nRGlzcGxheSA9IE1lZGlhQ29udHJv
bFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAg
ICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5hdHRhY2hUb1BhcmVudChtX3RpbWVsaW5lQ29udGFp
bmVyLmdldCgpKTsKKyAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7CisgICAg
bV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkpOwor
ICAgIHVwZGF0ZVRpbWVEaXNwbGF5KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRl
RnVsbHNjcmVlbkJ1dHRvbigpCit2b2lkIE1lZGlhQ29udHJvbHM6OnBsYXlpbmcoKQogewotICAg
IEFTU0VSVCghbV9mdWxsc2NyZWVuQnV0dG9uKTsKLSAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSBN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50
KTsKLSAgICBtX2Z1bGxzY3JlZW5CdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkp
OworICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGlt
ZSgpKTsKKyAgICB1cGRhdGVUaW1lRGlzcGxheSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6
OnRpbWVVcGRhdGVUaW1lckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbHM+KikKK3ZvaWQgTWVkaWFD
b250cm9sczo6cGF1c2UoKQogewotICAgIGlmIChtX3RpbWVsaW5lKQotICAgICAgICBtX3RpbWVs
aW5lLT51cGRhdGUoZmFsc2UpOworICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUo
KTsKKyAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhRWxlbWVudC0+Y3VycmVudFRp
bWUoKSk7CiAgICAgdXBkYXRlVGltZURpc3BsYXkoKTsKKyAgICBtYWtlT3BhcXVlKCk7CiB9CiAK
IHZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlVGltZURpc3BsYXkoKQogewotICAgIEFTU0VSVCht
X21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0KLSAgICBpZiAoIW1fY3VycmVudFRpbWVEaXNw
bGF5IHx8ICFtX2N1cnJlbnRUaW1lRGlzcGxheS0+cmVuZGVyZXIoKSB8fCBtX2N1cnJlbnRUaW1l
RGlzcGxheS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlzcGxheSgpID09IE5PTkUgfHwgbV9tZWRp
YUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBmbG9hdCBub3cgPSBtX21lZGlhRWxlbWVudC0+Y3VycmVu
dFRpbWUoKTsKICAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigp
OwogCi0gICAgLy8gQWxsb3cgdGhlIHRoZW1lIHRvIGZvcm1hdCB0aGUgdGltZQorICAgIFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBBbGxvdyB0aGUgdGhlbWUgdG8gZm9ybWF0IHRoZSB0aW1lLgogICAgIEV4
Y2VwdGlvbkNvZGUgZWM7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldElubmVyVGV4dCht
X21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+dGhlbWUoKS0+Zm9ybWF0TWVkaWFDb250cm9sc0N1
cnJlbnRUaW1lKG5vdywgZHVyYXRpb24pLCBlYyk7CisgICAgbV9jdXJyZW50VGltZURpc3BsYXkt
PnNldElubmVyVGV4dChkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29u
dHJvbHNDdXJyZW50VGltZShub3csIGR1cmF0aW9uKSwgZWMpOwogICAgIG1fY3VycmVudFRpbWVE
aXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93KTsKLSAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5
LT5zZXRJbm5lclRleHQobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnRoZW1lKCktPmZvcm1h
dE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKG5vdywgZHVyYXRpb24pLCBlYyk7CisgICAgbV90
aW1lUmVtYWluaW5nRGlzcGxheS0+c2V0SW5uZXJUZXh0KGRvY3VtZW50KCktPnBhZ2UoKS0+dGhl
bWUoKS0+Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUobm93LCBkdXJhdGlvbiksIGVj
KTsKICAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93IC0gZHVy
YXRpb24pOwogfQogCi1SZW5kZXJCb3gqIE1lZGlhQ29udHJvbHM6OnJlbmRlckJveCgpCit2b2lk
IE1lZGlhQ29udHJvbHM6OnJlcG9ydGVkRXJyb3IoKQogewotICAgIHJldHVybiBtX2NvbnRyb2xz
U2hhZG93Um9vdCA/IG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKSA6IDA7CisgICAg
bV90aW1lbGluZUNvbnRhaW5lci0+aGlkZSgpOworICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRl
KCk7CisgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmhpZGUoKTsKKyAgICBtX3RvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uLT5oaWRlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6dXBk
YXRlQ29udHJvbFZpc2liaWxpdHkoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkTmV0d29y
a1N0YXRlKCkKIHsKLSAgICBpZiAoIW1fcGFuZWwgfHwgIW1fcGFuZWwtPnJlbmRlcmVyKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIERvbid0IGZhZGUgZm9yIGF1ZGlvIGNvbnRyb2xzLgot
ICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFt
ZWRpYS0+aGFzVmlkZW8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1lZGlhLT5y
ZW5kZXJlcigpKTsKLQotICAgIC8vIERvbid0IGZhZGUgaWYgdGhlIG1lZGlhIGVsZW1lbnQgaXMg
bm90IHZpc2libGUKLSAgICBpZiAobWVkaWEtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBzaG91bGRI
aWRlQ29udHJvbGxlciA9ICFtX21vdXNlT3ZlciAmJiAhbWVkaWEtPmNhblBsYXkoKTsKLQotICAg
IC8vIERvIGZhZGluZyBtYW51YWxseSwgY3NzIGFuaW1hdGlvbnMgZG9uJ3Qgd29yayB3aXRoIHNo
YWRvdyB0cmVlcwotCi0gICAgZmxvYXQgYW5pbWF0ZUZyb20gPSBtX3BhbmVsLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5vcGFjaXR5KCk7Ci0gICAgZmxvYXQgYW5pbWF0ZVRvID0gc2hvdWxkSGlkZUNv
bnRyb2xsZXIgPyAwLjBmIDogMS4wZjsKLQotICAgIGlmIChhbmltYXRlRnJvbSA9PSBhbmltYXRl
VG8pCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQtPnN1cHBvcnRzRnVs
bHNjcmVlbigpKQorICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNob3coKTsKKyAgICBlbHNl
CisgICAgICAgIG1fZnVsbFNjcmVlbkJ1dHRvbi0+aGlkZSgpOwogCi0gICAgaWYgKG1fb3BhY2l0
eUFuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgaWYgKG1fb3BhY2l0eUFuaW1h
dGlvblRvID09IGFuaW1hdGVUbykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9vcGFj
aXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgIH0KKyAgICBpZiAobV9zdGF0dXNEaXNwbGF5
KQorICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPnVwZGF0ZSgpOworfQogCi0gICAgaWYgKGFuaW1h
dGVGcm9tIDwgYW5pbWF0ZVRvKQotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbiA9
IG1fcGFuZWwtPnJlbmRlcmVyKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlv
bigpOwotICAgIGVsc2UKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24gPSBtX3Bh
bmVsLT5yZW5kZXJlcigpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7
Cit2b2lkIE1lZGlhQ29udHJvbHM6OmxvYWRlZE1ldGFkYXRhKCkKK3sKKyAgICBpZiAobV9zdGF0
dXNEaXNwbGF5KQorICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPmhpZGUoKTsKIAotICAgIG1fb3Bh
Y2l0eUFuaW1hdGlvbkZyb20gPSBhbmltYXRlRnJvbTsKLSAgICBtX29wYWNpdHlBbmltYXRpb25U
byA9IGFuaW1hdGVUbzsKKyAgICByZXNldCgpOworfQogCi0gICAgbV9vcGFjaXR5QW5pbWF0aW9u
U3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5z
dGFydFJlcGVhdGluZyhjT3BhY2l0eUFuaW1hdGlvblJlcGVhdERlbGF5KTsKK3ZvaWQgTWVkaWFD
b250cm9sczo6Y2hhbmdlZENsb3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCit7CisgICAgbV90b2dn
bGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKIH0KIAotdm9pZCBN
ZWRpYUNvbnRyb2xzOjpjaGFuZ2VPcGFjaXR5KEhUTUxFbGVtZW50KiBlLCBmbG9hdCBvcGFjaXR5
KQordm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkTXV0ZSgpCiB7Ci0gICAgaWYgKCFlIHx8ICFl
LT5yZW5kZXJlcigpIHx8ICFlLT5yZW5kZXJlcigpLT5zdHlsZSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzID0gUmVuZGVyU3R5bGU6OmNsb25lKGUtPnJlbmRl
cmVyKCktPnN0eWxlKCkpOwotICAgIHMtPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgLy8gei1p
bmRleCBjYW4ndCBiZSBhdXRvIGlmIG9wYWNpdHkgaXMgdXNlZAotICAgIHMtPnNldFpJbmRleCgw
KTsKLSAgICBlLT5yZW5kZXJlcigpLT5zZXRTdHlsZShzLnJlbGVhc2UoKSk7CisgICAgbV9wYW5l
bE11dGVCdXR0b24tPmNoYW5nZWRNdXRlKCk7CisgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9u
LT5jaGFuZ2VkTXV0ZSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6Om9wYWNpdHlBbmltYXRp
b25UaW1lckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbHM+KikKK3ZvaWQgTWVkaWFDb250cm9sczo6
Y2hhbmdlZFZvbHVtZSgpCiB7Ci0gICAgZG91YmxlIHRpbWUgPSBjdXJyZW50VGltZSgpIC0gbV9v
cGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lOwotICAgIGlmICh0aW1lID49IG1fb3BhY2l0eUFuaW1h
dGlvbkR1cmF0aW9uKSB7Ci0gICAgICAgIHRpbWUgPSBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlv
bjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgIH0KLSAgICBm
bG9hdCBvcGFjaXR5ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX29wYWNpdHlBbmltYXRpb25G
cm9tICsgKG1fb3BhY2l0eUFuaW1hdGlvblRvIC0gbV9vcGFjaXR5QW5pbWF0aW9uRnJvbSkgKiB0
aW1lIC8gbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24pOwotICAgIGNoYW5nZU9wYWNpdHkobV9w
YW5lbC5nZXQoKSwgb3BhY2l0eSk7CisgICAgbV92b2x1bWVTbGlkZXItPnNldFZvbHVtZShtX21l
ZGlhRWxlbWVudC0+dm9sdW1lKCkpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVZv
bHVtZVNsaWRlckNvbnRhaW5lcihib29sIHZpc2libGUpCit2b2lkIE1lZGlhQ29udHJvbHM6OnNo
b3dWb2x1bWVTbGlkZXIoKQogewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkg
fHwgIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVyIHx8ICFtX3ZvbHVtZVNsaWRlcikKKyAgICBpZiAo
IW1fbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
dmlzaWJsZSAmJiAhbV92b2x1bWVTbGlkZXJDb250YWluZXItPmlzVmlzaWJsZSgpKSB7Ci0gICAg
ICAgIGlmICghbV9tdXRlQnV0dG9uIHx8ICFtX211dGVCdXR0b24tPnJlbmRlcmVyKCkgfHwgIW1f
bXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBzID0gbV92b2x1bWVTbGlkZXJDb250YWluZXItPnN0eWxlRm9y
RWxlbWVudCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gcy0+aGVpZ2h0KCkuaXNQZXJjZW50KCkg
PyAwIDogcy0+aGVpZ2h0KCkudmFsdWUoKTsKLSAgICAgICAgaW50IHdpZHRoID0gcy0+d2lkdGgo
KS5pc1BlcmNlbnQoKSA/IDAgOiBzLT53aWR0aCgpLnZhbHVlKCk7Ci0gICAgICAgIEludFBvaW50
IG9mZnNldCA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnZv
bHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKG1fbXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCks
IEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgICAgICBpbnQgeCA9IG9mZnNldC54KCkgKyBt
X211dGVCdXR0b24tPnJlbmRlckJveCgpLT5vZmZzZXRMZWZ0KCk7Ci0gICAgICAgIGludCB5ID0g
b2Zmc2V0LnkoKSArIG1fbXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCktPm9mZnNldFRvcCgpOwotCi0g
ICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zZXRQb3NpdGlvbih4LCB5KTsKLSAgICAg
ICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNldFZpc2libGUodHJ1ZSk7Ci0gICAgICAgIG1f
dm9sdW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGUoKTsKLSAgICAgICAgbV92b2x1bWVTbGlkZXIt
PnVwZGF0ZSgpOwotICAgIH0gZWxzZSBpZiAoIXZpc2libGUgJiYgbV92b2x1bWVTbGlkZXJDb250
YWluZXItPmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5z
ZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnVwZGF0
ZVN0eWxlKCk7Ci0gICAgfQorICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zaG93KCk7CiB9
CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkKK2NvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sczo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewot
ICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0KLSAgICBpZiAoZXZlbnQt
PmlzTW91c2VFdmVudCgpICYmIG1fY29udHJvbHNTaGFkb3dSb290KSB7Ci0gICAgICAgIE1vdXNl
RXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwotICAg
ICAgICBJbnRQb2ludCBwb2ludChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOwotCi0g
ICAgICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fdm9sdW1l
U2xpZGVyTXV0ZUJ1dHRvbiAmJiBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPmhpdFRlc3QocG9p
bnQpKSB7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOwotICAgICAgICAgICAgZGVmYXVsdEhhbmRsZWQgPSBldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvd1ZvbHVtZVNsaWRl
ciA9IGZhbHNlOwotICAgICAgICBpZiAoIWRlZmF1bHRIYW5kbGVkICYmIG1fbXV0ZUJ1dHRvbiAm
JiBtX211dGVCdXR0b24tPmhpdFRlc3QocG9pbnQpKSB7Ci0gICAgICAgICAgICBtX211dGVCdXR0
b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICAgICAgaWYgKGV2ZW50LT50
eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAgICAgICAgICAgc2hv
d1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV92b2x1bWVT
bGlkZXJDb250YWluZXIgJiYgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmhpdFRlc3QocG9pbnQp
KQotICAgICAgICAgICAgc2hvd1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0KLSAgICAgICAgaWYgKG1f
dm9sdW1lU2xpZGVyICYmIG1fdm9sdW1lU2xpZGVyLT5oaXRUZXN0KHBvaW50KSkgewotICAgICAg
ICAgICAgbV92b2x1bWVTbGlkZXItPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAg
ICAgICAgc2hvd1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB1cGRh
dGVWb2x1bWVTbGlkZXJDb250YWluZXIoc2hvd1ZvbHVtZVNsaWRlcik7Ci0KLSAgICAgICAgaWYg
KG1fcGxheUJ1dHRvbiAmJiBtX3BsYXlCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAg
ICAgbV9wbGF5QnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBp
ZiAobV9zZWVrQmFja0J1dHRvbiAmJiBtX3NlZWtCYWNrQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkK
LSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwotCi0gICAgICAgIGlmIChtX3NlZWtGb3J3YXJkQnV0dG9uICYmIG1fc2Vla0ZvcndhcmRCdXR0
b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fcmV3aW5kQnV0dG9uICYm
IG1fcmV3aW5kQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fcmV3aW5kQnV0
dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV9yZXR1cm5U
b1JlYWx0aW1lQnV0dG9uICYmIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+aGl0VGVzdChwb2lu
dCkpCi0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOwotCi0gICAgICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24g
JiYgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAg
ICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2
ZW50KTsKLQotICAgICAgICBpZiAobV90aW1lbGluZSAmJiBtX3RpbWVsaW5lLT5oaXRUZXN0KHBv
aW50KSkKLSAgICAgICAgICAgIG1fdGltZWxpbmUtPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwotCi0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5CdXR0b24gJiYgbV9mdWxsc2NyZWVuQnV0dG9u
LT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkJ1dHRvbi0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAgICAgICBtX21vdXNlT3ZlciA9IHRy
dWU7Ci0gICAgICAgICAgICB1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KSB7
Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBzY3JvbGxiYXIgdGh1bWIgY2FwdHVyZXMgbW91c2Ug
ZXZlbnRzLCB3ZSBzaG91bGQgdHJlYXQgdGhlIG1vdXNlIGFzIHN0aWxsIGJlaW5nIG92ZXIgb3Vy
IHJlbmRlcmVyIGlmIHRoZSBuZXcgdGFyZ2V0IGlzIGEgZGVzY2VuZGFudAotICAgICAgICAgICAg
Tm9kZSogbW91c2VPdmVyTm9kZSA9IG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSA/IG1vdXNl
RXZlbnQtPnJlbGF0ZWRUYXJnZXQoKS0+dG9Ob2RlKCkgOiAwOwotICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiBtb3VzZU92ZXJSZW5kZXJlciA9IG1vdXNlT3Zlck5vZGUgPyBtb3VzZU92ZXJOb2Rl
LT5yZW5kZXJlcigpIDogMDsKLSAgICAgICAgICAgIG1fbW91c2VPdmVyID0gbW91c2VPdmVyUmVu
ZGVyZXIgJiYgbW91c2VPdmVyUmVuZGVyZXItPmlzRGVzY2VuZGFudE9mKG1fbWVkaWFFbGVtZW50
LT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5KCk7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlk
LCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMiKSk7CisgICAgcmV0dXJuIGlkOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKaW5kZXggNmVhMTQ0OGI5
NzE5NWViYzVlOTNkYmMzOTQ5NjJiOTYxZGI4NDcyZS4uZjVkMWZiMTAyZGNlZjVjZTdkNDZlOTlm
NDhiMzY2YzRmMzBlYmNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9scy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuaApAQCAtMjksNiArMjksNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKQogCisjaW5jbHVk
ZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIApAQCAtMzgsMTA2ICszOSw4OCBAQCBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNz
IEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwogY2xhc3MgRXZlbnQ7
Ci1jbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJv
bFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxl
bWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OwotY2xhc3MgTWVkaWFD
b250cm9sU2hhZG93Um9vdEVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25F
bGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ7
CiBjbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ7Citj
bGFzcyBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50OwogY2xhc3MgTWVkaWFD
b250cm9sVGltZWxpbmVFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rp
c3BsYXlFbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDsKIGNs
YXNzIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250
cm9sVGltZURpc3BsYXlFbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVs
ZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ7CitjbGFz
cyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9u
RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ7
Ci1jbGFzcyBNZWRpYUNvbnRyb2xFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sUGFuZWxFbGVt
ZW50OwogY2xhc3MgTWVkaWFQbGF5ZXI7CiAKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRl
ck1lZGlhOwogCi1jbGFzcyBNZWRpYUNvbnRyb2xzIHsKKy8vIEZJWE1FOiBSZW5hbWUgdG8gTWVk
aWFDb250cm9sUm9vdEVsZW1lbnQuCitjbGFzcyBNZWRpYUNvbnRyb2xzIDogcHVibGljIEhUTUxE
aXZFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xzPiBjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCopOworCisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9p
ZCBtYWtlT3BhcXVlKCk7CisgICAgdm9pZCBtYWtlVHJhbnNwYXJlbnQoKTsKIAogICAgIHZvaWQg
cmVzZXQoKTsKKworICAgIHZvaWQgcGxheWluZygpOworICAgIHZvaWQgcGxheSgpOworICAgIHZv
aWQgcGF1c2UoKTsKKwogICAgIHZvaWQgY2hhbmdlZE11dGUoKTsKICAgICB2b2lkIGNoYW5nZWRW
b2x1bWUoKTsKKworICAgIHZvaWQgcmVwb3J0ZWRFcnJvcigpOworICAgIHZvaWQgY2hhbmdlZE5l
dHdvcmtTdGF0ZSgpOworICAgIHZvaWQgbG9hZGVkTWV0YWRhdGEoKTsKICAgICB2b2lkIGNoYW5n
ZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHkoKTsKIAotICAgIHZvaWQgZGVzdHJveSgpOwotICAg
IHZvaWQgdXBkYXRlKCk7Ci0gICAgdm9pZCB1cGRhdGVTdHlsZSgpOwotICAgIHZvaWQgZm9yd2Fy
ZEV2ZW50KEV2ZW50Kik7CisgICAgdm9pZCBzaG93Vm9sdW1lU2xpZGVyKCk7CiAgICAgdm9pZCB1
cGRhdGVUaW1lRGlzcGxheSgpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHRv
IGFsbG93IFJlbmRlck1lZGlhOjpsYXlvdXQgdHdlYWsgdGhlIHBvc2l0aW9uIG9mIGNvbnRyb2xz
LgotICAgIC8vIE9uY2Ugc2hhZG93IERPTSByZWZhY3RvcmluZyBpcyBjb21wbGV0ZSwgdGhlIHR3
ZWFraW5nIHdpbGwgYmUgaW4gTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QgYW5kIHRoaXMgYWNjZXNz
b3Igd2lsbCBubyBsb25nZXIgYmUgbmVjZXNzYXJ5LgotICAgIFJlbmRlckJveCogcmVuZGVyQm94
KCk7Ci0KIHByaXZhdGU6Ci0gICAgdm9pZCBjcmVhdGVDb250cm9sc1NoYWRvd1Jvb3QoKTsKLSAg
ICB2b2lkIGRlc3Ryb3lDb250cm9sc1NoYWRvd1Jvb3QoKTsKLSAgICB2b2lkIGNyZWF0ZVBhbmVs
KCk7Ci0gICAgdm9pZCBjcmVhdGVNdXRlQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVQbGF5QnV0
dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVTZWVrQmFja0J1dHRvbigpOwotICAgIHZvaWQgY3JlYXRl
U2Vla0ZvcndhcmRCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVJld2luZEJ1dHRvbigpOwotICAg
IHZvaWQgY3JlYXRlUmV0dXJuVG9SZWFsdGltZUJ1dHRvbigpOwotICAgIHZvaWQgY3JlYXRlVG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVN0YXR1c0Rpc3BsYXko
KTsKLSAgICB2b2lkIGNyZWF0ZVRpbWVsaW5lQ29udGFpbmVyKCk7Ci0gICAgdm9pZCBjcmVhdGVU
aW1lbGluZSgpOwotICAgIHZvaWQgY3JlYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKCk7Ci0gICAg
dm9pZCBjcmVhdGVWb2x1bWVTbGlkZXIoKTsKLSAgICB2b2lkIGNyZWF0ZVZvbHVtZVNsaWRlck11
dGVCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZUN1cnJlbnRUaW1lRGlzcGxheSgpOwotICAgIHZv
aWQgY3JlYXRlVGltZVJlbWFpbmluZ0Rpc3BsYXkoKTsKLSAgICB2b2lkIGNyZWF0ZUZ1bGxzY3Jl
ZW5CdXR0b24oKTsKLQotICAgIHZvaWQgdGltZVVwZGF0ZVRpbWVyRmlyZWQoVGltZXI8TWVkaWFD
b250cm9scz4qKTsKLQotICAgIHZvaWQgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKLSAgICB2
b2lkIGNoYW5nZU9wYWNpdHkoSFRNTEVsZW1lbnQqLCBmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lk
IG9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbHM+Kik7Ci0KLSAg
ICB2b2lkIHVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihib29sIHZpc2libGUpOworICAgIE1l
ZGlhQ29udHJvbHMoSFRNTE1lZGlhRWxlbWVudCopOwogCi1wcml2YXRlOgotICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudD4gbV9jb250cm9sc1NoYWRvd1Jvb3Q7Ci0gICAg
UmVmUHRyPE1lZGlhQ29udHJvbEVsZW1lbnQ+IG1fcGFuZWw7Ci0gICAgUmVmUHRyPE1lZGlhQ29u
dHJvbE11dGVCdXR0b25FbGVtZW50PiBtX211dGVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFBsYXlCdXR0b25FbGVtZW50PiBtX3BsYXlCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFNlZWtCdXR0b25FbGVtZW50PiBtX3NlZWtCYWNrQnV0dG9uOwotICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudD4gbV9zZWVrRm9yd2FyZEJ1dHRvbjsKLSAgICBSZWZQ
dHI8TWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudD4gbV9yZXdpbmRCdXR0b247Ci0gICAg
UmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50PiBtX3JldHVy
blRvUmVhbHRpbWVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uRWxlbWVudD4gbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbjsKLSAgICBS
ZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBtX3RpbWVsaW5lOwotICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50PiBtX3ZvbHVtZVNsaWRlcjsKLSAgICBS
ZWZQdHI8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ+IG1fdm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ+IG1f
ZnVsbHNjcmVlbkJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXJFbGVtZW50PiBtX3RpbWVsaW5lQ29udGFpbmVyOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcjsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50PiBtX2N1cnJlbnRUaW1lRGlz
cGxheTsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50PiBtX3RpbWVS
ZW1haW5pbmdEaXNwbGF5OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudD4gbV9zdGF0dXNEaXNwbGF5OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBz
aGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbV9tZWRpYUVs
ZW1lbnQ7Ci0gICAgVGltZXI8TWVkaWFDb250cm9scz4gbV90aW1lVXBkYXRlVGltZXI7Ci0gICAg
VGltZXI8TWVkaWFDb250cm9scz4gbV9vcGFjaXR5QW5pbWF0aW9uVGltZXI7Ci0KLSAgICBkb3Vi
bGUgbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lOwotICAgIGRvdWJsZSBtX29wYWNpdHlBbmlt
YXRpb25EdXJhdGlvbjsKLSAgICBmbG9hdCBtX29wYWNpdHlBbmltYXRpb25Gcm9tOwotICAgIGZs
b2F0IG1fb3BhY2l0eUFuaW1hdGlvblRvOwogCi0gICAgYm9vbCBtX21vdXNlT3ZlcjsKKyAgICBN
ZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50KiBtX3Jld2luZEJ1dHRvbjsKKyAgICBNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogbV9wbGF5QnV0dG9uOworICAgIE1lZGlhQ29udHJv
bFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50KiBtX3JldHVyblRvUmVhbFRpbWVCdXR0b247
CisgICAgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQqIG1fc3RhdHVzRGlzcGxheTsK
KyAgICBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1l
RGlzcGxheTsKKyAgICBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQqIG1fdGltZWxpbmU7Cisg
ICAgTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50KiBtX3RpbWVSZW1haW5p
bmdEaXNwbGF5OworICAgIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCogbV90
aW1lbGluZUNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbkVsZW1lbnQqIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b247CisgICAgTWVkaWFDb250
cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudCogbV9wYW5lbE11dGVCdXR0b247CisgICAgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudCogbV92b2x1bWVTbGlkZXI7CisgICAgTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQqIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRv
bjsKKyAgICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KiBtX3ZvbHVt
ZVNsaWRlckNvbnRhaW5lcjsKKyAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVu
dCogbV9mdWxsU2NyZWVuQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCogbV9w
YW5lbDsKKworICAgIGJvb2wgbV9vcGFxdWU7CiB9OwogCitpbmxpbmUgTWVkaWFDb250cm9scyog
dG9NZWRpYUNvbnRyb2xzKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPmlzSFRNTEVs
ZW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbHMqPihub2RlKTsK
K30KIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcAppbmRleCBlZTYxMTc5ZmNkY2I5NDkyYTAxMWRhMjI2NmUwMDRhNzczMjA0YTRm
Li4zZWZhN2QzNjA2MjI5NjJhMWQ1ZDVhYzIzZjUwMjg5YzcxN2VjNmY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTQ1LDYg
KzQ1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRl
ci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDEyOCAr
NjcsMzMgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGNTZWVrUmVwZWF0RGVsYXkgPSAwLjFmOwogc3Rh
dGljIGNvbnN0IGZsb2F0IGNTdGVwVGltZSA9IDAuMDdmOwogc3RhdGljIGNvbnN0IGZsb2F0IGNT
ZWVrVGltZSA9IDAuMmY7CiAKLWlubGluZSBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6
TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50KQotICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50
KCkpCi17Ci0gICAgc2V0U2hhZG93SG9zdChtZWRpYUVsZW1lbnQpOwotfQotCi1QYXNzUmVmUHRy
PE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxl
bWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAgICBSZWZQ
dHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcg
TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQobWVkaWFFbGVtZW50KSk7Ci0KLSAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IHJvb3RTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBy
b290U3R5bGUtPmluaGVyaXRGcm9tKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7
Ci0gICAgcm9vdFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICByb290U3R5bGUtPnNldFBv
c2l0aW9uKFJlbGF0aXZlUG9zaXRpb24pOwotCi0gICAgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93
Um9vdCogcmVuZGVyZXIgPSBuZXcgKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+cmVuZGVyQXJl
bmEoKSkgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdChlbGVtZW50LmdldCgpKTsKLSAgICBy
ZW5kZXJlci0+c2V0U3R5bGUocm9vdFN0eWxlLnJlbGVhc2UoKSk7Ci0KLSAgICBlbGVtZW50LT5z
ZXRSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgZWxlbWVudC0+c2V0QXR0YWNoZWQoKTsKLSAgICBl
bGVtZW50LT5zZXRJbkRvY3VtZW50KCk7Ci0KLSAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7
Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0g
ICAgSFRNTERpdkVsZW1lbnQ6OmRldGFjaCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBz
aGFkb3cgRE9NIHVzZXMgRWxlbWVudDo6c2V0U2hhZG93Um9vdCgpLgotICAgIHNldFNoYWRvd0hv
c3QoMCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTWVkaWFDb250
cm9sRWxlbWVudDo6TWVkaWFDb250cm9sRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCiAgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIG1lZGlhRWxlbWVudC0+ZG9jdW1l
bnQoKSkKICAgICAsIG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKIHsKLSAgICBzZXRJbkRv
Y3VtZW50KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6YXR0YWNoVG9QYXJlbnQo
RWxlbWVudCogcGFyZW50KQorc3RhdGljIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmluZygpCiB7
Ci0gICAgLy8gRklYTUU6IFRoaXMgY29kZSBzZWVtcyB2ZXJ5IHdyb25nLiAgV2h5IGFyZSB3ZSBt
YWdpY2FsbHkgYWRkaW5nIHx0aGlzfCB0byB0aGUgRE9NIGhlcmU/Ci0gICAgLy8gICAgICAgIFdl
IHNob3VsZG4ndCBiZSBjYWxsaW5nIHBhcnNlciBBUEkgbWV0aG9kcyBvdXRzaWRlIG9mIHRoZSBw
YXJzZXIhCi0gICAgcGFyZW50LT5wYXJzZXJBZGRDaGlsZCh0aGlzKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgcywgKCJkaXNwbGF5IikpOworICAgIHJldHVybiBzOwogfQogCi12
b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZSgpCit2b2lkIE1lZGlhQ29udHJvbEVsZW1l
bnQ6OnNob3coKQogewotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlcigpLT51
cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHVwZGF0ZVN0eWxlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpCi17Ci0g
ICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1l
bnQodGhpcywgbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCksIHRydWUpOwotICAg
IGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIHRleHQtZGVjb3Jh
dGlvbiBjYW4ndCBiZSBvdmVycmlkZWQgZnJvbSBDU1MuIFNvIHdlIGRvIGl0IGhlcmUuCi0gICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzAxNQotICAg
IHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlvbihURE5PTkUpOwotICAgIHN0eWxlLT5zZXRUZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdChURE5PTkUpOwotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi1ib29s
IE1lZGlhQ29udHJvbEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxl
KQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkpOwotCi0gICAgcmV0dXJuIEhUTUxE
aXZFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFy
ZW50Tm9kZSgpLT5yZW5kZXJlcigpCi0gICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2Uo
KSB8fCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJv
bFBhcnQoc3R5bGUtPmFwcGVhcmFuY2UoKSwgbV9tZWRpYUVsZW1lbnQpKTsKLX0KLSAgICAKLXZv
aWQgTWVkaWFDb250cm9sRWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5bGUu
Z2V0KCkpOwotICAgIGlmICghbmVlZHNSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtX21lZGlhRWxlbWVudC0+cmVu
ZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmICghcmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwot
ICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVu
dE5vZGUoKS0+cmVuZGVyZXIoKSkgewotICAgICAgICAvLyBGaW5kIG5leHQgc2libGluZyB3aXRo
IGEgcmVuZGVyZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydC4KLSAgICAgICAgTm9kZSog
c2libGluZyA9IG5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYmICFzaWJs
aW5nLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQocmVuZGVy
ZXIsIHNpYmxpbmcgPyBzaWJsaW5nLT5yZW5kZXJlcigpIDogMCk7Ci0gICAgfQotICAgIENvbnRh
aW5lck5vZGU6OmF0dGFjaCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6
IE1ha2UgbW9yZSBlZmZpY2llbnQuCisgICAgc3R5bGUoKS0+cmVtb3ZlUHJvcGVydHkoZGlzcGxh
eVN0cmluZygpLCBlYyk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlU3R5
bGUoKQordm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKCkKIHsKLSAgICBpZiAoIW1fbWVk
aWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwot
ICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgbmVlZHNSZW5kZXJl
ciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpICYmIHBhcmVudE5vZGUoKSAmJiBwYXJl
bnROb2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgIW5lZWRzUmVuZGVy
ZXIpCi0gICAgICAgIGRldGFjaCgpOwotICAgIGVsc2UgaWYgKCFyZW5kZXJlcigpICYmIG5lZWRz
UmVuZGVyZXIpCi0gICAgICAgIGF0dGFjaCgpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkpIHsK
LSAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotCi0gICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGlmIHRoZXJlIGlzIGFueSBpbm5lclRleHQgcmVuZGVyZXIsIGl0IGlz
IHVwZGF0ZWQgYXMgd2VsbC4KLSAgICAgICAgaWYgKGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxk
KCktPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICBmaXJzdENoaWxkKCktPnJlbmRlcmVyKCktPnNl
dFN0eWxlKHN0eWxlLmdldCgpKTsKLSAgICB9CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAv
LyBGSVhNRTogTWFrZSBtb3JlIGVmZmljaWVudC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgbm9uZSwgKCJub25lIikpOworICAgIHN0eWxlKCktPnNldFByb3BlcnR5KGRpc3BsYXlT
dHJpbmcoKSwgbm9uZSwgZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0yMTgsNiArMTI0LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xQYW5l
bEVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIGlubGluZSBNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVu
dChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiAgICAgOiBNZWRpYUNvbnRyb2xFbGVt
ZW50KG1lZGlhRWxlbWVudCkKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFD
b250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRh
aW5lckVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCkBAIC0y
MjUsMTkgKzEzMiw2IEBAIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJF
bGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsCiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQobWVkaWFFbGVtZW50
KSk7CiB9CiAKLWJvb2wgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpyZW5k
ZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBpZiAoIU1lZGlhQ29udHJv
bEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBBbHdheXMgc2hvdyB0aGUgdGltZWxpbmUgaWYgdGhlIHRoZW1lIGRvZXNuJ3Qg
dXNlIHN0YXR1cyBkaXNwbGF5IChNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIGZvciBpbnN0
YW5jZSkuCi0gICAgaWYgKCFkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnVzZXNNZWRpYUNv
bnRyb2xTdGF0dXNEaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZmxvYXQg
ZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKTsKLSAgICByZXR1cm4gIWlzbmFu
KGR1cmF0aW9uKSAmJiAhaXNpbmYoZHVyYXRpb24pOwotfQotCiBNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gTWVkaWFUaW1lbGluZUNvbnRhaW5lcjsKQEAgLTI1MSwxMiAr
MTQ1LDQwIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAorY2xhc3MgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIgOiBw
dWJsaWMgUmVuZGVyQmxvY2sgeworcHVibGljOgorICAgIFJlbmRlck1lZGlhVm9sdW1lU2xpZGVy
Q29udGFpbmVyKE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Cit9OworCitSZW5k
ZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjo6UmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250
YWluZXIoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCit7Cit9CisKK3ZvaWQg
UmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI6OmxheW91dCgpCit7CisgICAgUmVuZGVy
QmxvY2s6OmxheW91dCgpOworICAgIGlmIChzdHlsZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCAh
cHJldmlvdXNTaWJsaW5nKCkgfHwgIXByZXZpb3VzU2libGluZygpLT5pc0JveCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJ1dHRvbkJveCA9IHRvUmVuZGVyQm94KHByZXZp
b3VzU2libGluZygpKTsKKworICAgIGlmICh2aWV3KCkpCisgICAgICAgIHZpZXcoKS0+ZGlzYWJs
ZUxheW91dFN0YXRlKCk7CisKKyAgICBJbnRQb2ludCBvZmZzZXQgPSB0aGVtZSgpLT52b2x1bWVT
bGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihidXR0b25Cb3gsIEludFNpemUod2lkdGgoKSwgaGVp
Z2h0KCkpKTsKKyAgICBzZXRYKG9mZnNldC54KCkgKyBidXR0b25Cb3gtPm9mZnNldExlZnQoKSk7
CisgICAgc2V0WShvZmZzZXQueSgpICsgYnV0dG9uQm94LT5vZmZzZXRUb3AoKSk7CisKKyAgICBp
ZiAodmlldygpKQorICAgICAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0YXRlKCk7Cit9CisKIGlu
bGluZSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCkKICAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50KQotICAgICwgbV9p
c1Zpc2libGUoZmFsc2UpCi0gICAgLCBtX3goMCkKLSAgICAsIG1feSgwKQogeworICAgIGhpZGUo
KTsKIH0KIAogUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAtMjY0LDM5ICsxODYsMjggQEAgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJDb24KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFZv
bHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQobWVkaWFFbGVtZW50KSk7CiB9CiAKLVBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6
OnN0eWxlRm9yRWxlbWVudCgpCitSZW5kZXJPYmplY3QqIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVu
ZGVyU3R5bGUqKQogewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBNZWRpYUNvbnRy
b2xFbGVtZW50OjpzdHlsZUZvckVsZW1lbnQoKTsKLSAgICBzdHlsZS0+c2V0UG9zaXRpb24oQWJz
b2x1dGVQb3NpdGlvbik7Ci0gICAgc3R5bGUtPnNldExlZnQoTGVuZ3RoKG1feCwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0VG9wKExlbmd0aChtX3ksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldERp
c3BsYXkobV9pc1Zpc2libGUgPyBCTE9DSyA6IE5PTkUpOwotICAgIHJldHVybiBzdHlsZTsKKyAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIodGhp
cyk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6
c2V0VmlzaWJsZShib29sIHZpc2libGUpCit2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNv
bnRhaW5lckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAg
IGlmICh2aXNpYmxlID09IG1faXNWaXNpYmxlKQorICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVu
dCgpIHx8IGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7Ci19CiAKLXZvaWQgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6c2V0UG9zaXRpb24oaW50IHgsIGlu
dCB5KQotewotICAgIGlmICh4ID09IG1feCAmJiB5ID09IG1feSkKKyAgICAvLyBQb29yIG1hbidz
IG1vdXNlbGVhdmUgZXZlbnQgZGV0ZWN0aW9uLgorICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQg
PSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworICAgIGlmICghbW91c2VFdmVudC0+
cmVsYXRlZFRhcmdldCgpIHx8ICFtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCktPnRvTm9kZSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgbV94ID0geDsKLSAgICBtX3kgPSB5OwotfQogCi1ib29s
IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIGFic1BvaW50KQotewotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCkt
PnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnRo
ZW1lKCktPmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KHJlbmRlcmVyKCksIGFic1BvaW50KTsKKyAg
ICBpZiAodGhpcy0+Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00obW91c2VFdmVudC0+cmVsYXRl
ZFRhcmdldCgpLT50b05vZGUoKSkpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBoaWRlKCk7CiB9CiAKKwogTWVkaWFDb250cm9sRWxlbWVudFR5cGUgTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGlzcGxheVR5cGUoKSBjb25zdAogewog
ICAgIHJldHVybiBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjsKQEAgLTMxNCw2ICsyMjUsNyBA
QCBpbmxpbmUgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFN0
YXR1c0Rpc3BsYXlFbGVtZW50KEhUTUxNZQogICAgIDogTWVkaWFDb250cm9sRWxlbWVudChtZWRp
YUVsZW1lbnQpCiAgICAgLCBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQoTm90aGluZykKIHsKKyAgICBo
aWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+
IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQpAQCAtMzIzLDggKzIzNSw2IEBAIFBhc3NSZWZQdHI8TWVkaWFDb250
cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50
OjpjCiAKIHZvaWQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnVwZGF0ZSgpCiB7
Ci0gICAgTWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlKCk7Ci0KICAgICAvLyBHZXQgdGhlIG5l
dyBzdGF0ZSB0aGF0IHdlJ2xsIGhhdmUgdG8gZGlzcGxheS4KICAgICBTdGF0ZUJlaW5nRGlzcGxh
eWVkIG5ld1N0YXRlVG9EaXNwbGF5ID0gTm90aGluZzsKIApAQCAtMzMzLDEyICsyNDMsMTggQEAg
dm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkKICAgICBlbHNl
IGlmIChtZWRpYUVsZW1lbnQoKS0+bW92aWVMb2FkVHlwZSgpID09IE1lZGlhUGxheWVyOjpMaXZl
U3RyZWFtKQogICAgICAgICBuZXdTdGF0ZVRvRGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7CiAKLSAg
ICAvLyBQcm9wYWdhdGUgb25seSBpZiBuZWVkZWQuCiAgICAgaWYgKG5ld1N0YXRlVG9EaXNwbGF5
ID09IG1fc3RhdGVCZWluZ0Rpc3BsYXllZCkKICAgICAgICAgcmV0dXJuOwotICAgIG1fc3RhdGVC
ZWluZ0Rpc3BsYXllZCA9IG5ld1N0YXRlVG9EaXNwbGF5OwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
OworCisgICAgaWYgKG1fc3RhdGVCZWluZ0Rpc3BsYXllZCA9PSBOb3RoaW5nKQorICAgICAgICBz
aG93KCk7CisgICAgZWxzZSBpZiAobmV3U3RhdGVUb0Rpc3BsYXkgPT0gTm90aGluZykKKyAgICAg
ICAgaGlkZSgpOworCisgICAgbV9zdGF0ZUJlaW5nRGlzcGxheWVkID0gbmV3U3RhdGVUb0Rpc3Bs
YXk7CisKICAgICBzd2l0Y2ggKG1fc3RhdGVCZWluZ0Rpc3BsYXllZCkgewogICAgIGNhc2UgTm90
aGluZzoKICAgICAgICAgc2V0SW5uZXJUZXh0KCIiLCBlKTsKQEAgLTM1MiwxNCArMjY4LDYgQEAg
dm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkKICAgICB9CiB9
CiAKLWJvb2wgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIGlmICghTWVkaWFDb250cm9sRWxlbWVudDo6
cmVuZGVyZXJJc05lZWRlZChzdHlsZSkgfHwgIWRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+
dXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7Ci0gICAgcmV0
dXJuIChpc25hbihkdXJhdGlvbikgfHwgaXNpbmYoZHVyYXRpb24pKTsKLX0KLQogTWVkaWFDb250
cm9sRWxlbWVudFR5cGUgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmRpc3BsYXlU
eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gTWVkaWFTdGF0dXNEaXNwbGF5OwpAQCAtMzgwLDk2
ICsyODgsMTggQEAgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW4KIHsKIH0KIAotdm9pZCBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQ6OmF0dGFjaFRvUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKK3ZvaWQg
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpzaG93KCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJlIHdlIG1hZ2ljYWxseSBhZGRpbmcgfHRoaXN8
IHRvIHRoZSBET00gaGVyZT8KLSAgICAvLyAgICAgICAgV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcg
cGFyc2VyIEFQSSBtZXRob2RzIG91dHNpZGUgb2YgdGhlIHBhcnNlciEKLSAgICBwYXJlbnQtPnBh
cnNlckFkZENoaWxkKHRoaXMpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6
dXBkYXRlKCkKLXsKLSAgICB1cGRhdGVEaXNwbGF5VHlwZSgpOwotICAgIGlmIChyZW5kZXJlcigp
KQotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHVwZGF0ZVN0
eWxlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbElucHV0RWxl
bWVudDo6c3R5bGVGb3JFbGVtZW50KCkKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVT
ZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhpcywgMCwgdHJ1ZSk7Ci19Ci0KLWJvb2wgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHls
ZSkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKLQotICAgIHJldHVybiBIVE1M
SW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnROb2RlKCkgJiYg
cGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpCi0gICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFu
Y2UoKSB8fCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29u
dHJvbFBhcnQoc3R5bGUtPmFwcGVhcmFuY2UoKSwgbWVkaWFFbGVtZW50KCkpKTsKKyAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgIHN0eWxlKCktPnJlbW92ZVByb3BlcnR5KGRpc3BsYXlTdHJpbmco
KSwgZWMpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0YWNoKCkKK3Zv
aWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpoaWRlKCkKIHsKLSAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVySXNOZWVk
ZWQoc3R5bGUuZ2V0KCkpOwotICAgIGlmICghbmVlZHNSZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
OwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtZWRpYUVsZW1l
bnQoKS0+cmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmICgh
cmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUu
Z2V0KCkpOwotICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocGFyZW50Tm9kZSgp
ICYmIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKSkgewotICAgICAgICAvLyBGaW5kIG5leHQgc2li
bGluZyB3aXRoIGEgcmVuZGVyZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydC4KLSAgICAg
ICAgTm9kZSogc2libGluZyA9IG5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5n
ICYmICFzaWJsaW5nLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmct
Pm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+YWRkQ2hp
bGQocmVuZGVyZXIsIHNpYmxpbmcgPyBzaWJsaW5nLT5yZW5kZXJlcigpIDogMCk7Ci0gICAgfSAg
Ci0gICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7Ci0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwg
TWVpZGFDb250cm9sSW5wdXQgY2lyY3VtdmVudHMgdGhlIG5vcm1hbCBhdHRhY2htZW50Ci0gICAg
Ly8gYW5kIHN0eWxlIHJlY2FsYyBjeWNsZSBhbmQgdGh1cyB3ZSBuZWVkIHRvIGFkZCBleHRyYSBs
b2dpYyB0byBiZSBhd2FyZSBvZgotICAgIC8vIHRoZSBzaGFkb3cgRE9NLiBSZW1vdmUgdGhpcyBv
bmNlIGFsbCBtZWRpYSBjb250cm9scyBhcmUgdHJhbnNpdGlvbmVkIHRvIHVzZSB0aGUgcmVndWxh
cgotICAgIC8vIHN0eWxlIGNhbGN1bGF0aW9uLgotICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0g
c2hhZG93Um9vdCgpKQotICAgICAgICBzaGFkb3dOb2RlLT5hdHRhY2goKTsKLX0KLQotdm9pZCBN
ZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZVN0eWxlKCkKLXsKLSAgICBpZiAoIW1lZGlh
RWxlbWVudCgpIHx8ICFtZWRpYUVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQo
KTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBuZWVk
c1JlbmRlcmVyID0gcmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQoKSkgJiYgcGFyZW50Tm9kZSgp
ICYmIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiAhbmVl
ZHNSZW5kZXJlcikKLSAgICAgICAgZGV0YWNoKCk7Ci0gICAgZWxzZSBpZiAoIXJlbmRlcmVyKCkg
JiYgbmVlZHNSZW5kZXJlcikKLSAgICAgICAgYXR0YWNoKCk7Ci0gICAgZWxzZSBpZiAocmVuZGVy
ZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotCi0gICAg
Ly8gRklYTUU6IEN1cnJlbnRseSwgTWVpZGFDb250cm9sSW5wdXQgY2lyY3VtdmVudHMgdGhlIG5v
cm1hbCBhdHRhY2htZW50Ci0gICAgLy8gYW5kIHN0eWxlIHJlY2FsYyBjeWNsZSBhbmQgdGh1cyB3
ZSBuZWVkIHRvIGFkZCBleHRyYSBsb2dpYyB0byBiZSBhd2FyZSBvZgotICAgIC8vIHRoZSBzaGFk
b3cgRE9NLiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBtZWRpYSBjb250cm9scyBhcmUgdHJhbnNpdGlv
bmVkIHRvIHVzZQotICAgIC8vIHRoZSBuZXcgc2hhZG93IERPTS4KLSAgICBpZiAoTm9kZSogc2hh
ZG93Tm9kZSA9IHNoYWRvd1Jvb3QoKSkKLSAgICAgICAgc2hhZG93Tm9kZS0+cmVjYWxjU3R5bGUo
Tm9kZTo6Rm9yY2UpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgc3R5bGUoKS0+c2V0UHJv
cGVydHkoZGlzcGxheVN0cmluZygpLCAibm9uZSIsIGVjKTsKIH0KIAotYm9vbCBNZWRpYUNvbnRy
b2xJbnB1dEVsZW1lbnQ6OmhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KQotewotICAg
IGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkK
LSAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnRoZW1lKCktPmhpdFRlc3RNZWRpYUNvbnRyb2xQ
YXJ0KHJlbmRlcmVyKCksIGFic1BvaW50KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KIAogdm9p
ZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNldERpc3BsYXlUeXBlKE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlIGRpc3BsYXlUeXBlKQogewpAQCAtNDk0LDkgKzMyNCwxNSBAQCB2b2lkIE1lZGlh
Q29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVu
dCkKICAgICAgICAgbWVkaWFFbGVtZW50KCktPnNldE11dGVkKCFtZWRpYUVsZW1lbnQoKS0+bXV0
ZWQoKSk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KKwogICAg
IEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCit2b2lk
IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpjaGFuZ2VkTXV0ZSgpCit7CisgICAgdXBk
YXRlRGlzcGxheVR5cGUoKTsKK30KKwogdm9pZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVu
dDo6dXBkYXRlRGlzcGxheVR5cGUoKQogewogICAgIHNldERpc3BsYXlUeXBlKG1lZGlhRWxlbWVu
dCgpLT5tdXRlZCgpID8gTWVkaWFVbk11dGVCdXR0b24gOiBNZWRpYU11dGVCdXR0b24pOwpAQCAt
NTA0LDE4ICszNDAsMjkgQEAgdm9pZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6dXBk
YXRlRGlzcGxheVR5cGUoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlu
bGluZSBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5l
bE11dGVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK2lubGlu
ZSBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11
dGVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250
cm9scyogY29udHJvbHMpCiAgICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChtZWRp
YUVsZW1lbnQsIE1lZGlhTXV0ZUJ1dHRvbikKKyAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCiB7
CiB9CiAKLVBhc3NSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gTWVk
aWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQq
IG1lZGlhRWxlbWVudCkKK1Bhc3NSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxl
bWVudD4gTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCiB7Ci0gICAg
UmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0
UmVmKG5ldyBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCkp
OworICAgIEFTU0VSVChjb250cm9scyk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxN
dXRlQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFBhbmVs
TXV0ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50LCBjb250cm9scykpOwogICAgIGJ1dHRvbi0+
c2V0VHlwZSgiYnV0dG9uIik7CiAgICAgcmV0dXJuIGJ1dHRvbi5yZWxlYXNlKCk7CiB9CiAKK3Zv
aWQgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlb3ZlckV2ZW50KQorICAgICAgICBtX2NvbnRyb2xzLT5zaG93Vm9sdW1lU2xpZGVyKCk7
CisKKyAgICBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUGFuZWxNdXRl
QnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUt
YnV0dG9uIikpOwpAQCAtNTI1LDcgKzM3Miw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFD
b250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBpbmxpbmUgTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0
b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IE1lZGlhQ29u
dHJvbE11dGVCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFWb2x1bWVTbGlkZXJNdXRl
QnV0dG9uKQorICAgIDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50
LCBNZWRpYU11dGVCdXR0b24pCiB7CiB9CiAKQEAgLTU2MCw2ICs0MDcsNyBAQCB2b2lkIE1lZGlh
Q29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVu
dCkKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkg
ewogICAgICAgICBtZWRpYUVsZW1lbnQoKS0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgICAgIHVw
ZGF0ZURpc3BsYXlUeXBlKCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwog
ICAgIH0KICAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
QEAgLTU4NCw2ICs0MzIsNyBAQCBpbmxpbmUgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ6
Ok1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZQogICAgICwgbV9jYXB0
dXJpbmcoZmFsc2UpCiAgICAgLCBtX3NlZWtUaW1lcih0aGlzLCAmTWVkaWFDb250cm9sU2Vla0J1
dHRvbkVsZW1lbnQ6OnNlZWtUaW1lckZpcmVkKQogeworICAgIGhpZGUoKTsKIH0KIAogdm9pZCBN
ZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCkBAIC03MDcsNiArNTU2LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRy
b2xSZXdpbmRCdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiBpbmxpbmUgTWVk
aWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFJldHVy
blRvUmVhbHRpbWVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkK
ICAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQsIE1lZGlhUmV0dXJu
VG9SZWFsdGltZUJ1dHRvbikKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFD
b250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFJldHVyblRv
UmVhbHRpbWVCdXR0b25FbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50KQpAQCAtNzM2LDYgKzU4Niw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9s
UmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkKIGlubGluZSBN
ZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJv
bFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQpCiAgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFFbGVtZW50LCBN
ZWRpYVNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbikKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NS
ZWZQdHI8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBNZWRp
YUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCkBAIC03NTAsOCArNjAxLDEwIEBAIHZvaWQgTWVkaWFD
b250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBlCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQpIHsKICAgICAgICAgbWVkaWFFbGVtZW50KCktPnNldENsb3NlZENhcHRpb25zVmlzaWJs
ZSghbWVkaWFFbGVtZW50KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsKICAgICAgICAgc2V0
Q2hlY2tlZChtZWRpYUVsZW1lbnQoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkpOworICAgICAg
ICB1cGRhdGVEaXNwbGF5VHlwZSgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKICAgICB9CisKICAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2
ZW50KTsKIH0KIApAQCAtNzY4LDE0ICs2MjEsMTggQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRp
YUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0kK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NZWRpYUNvbnRyb2xUaW1lbGlu
ZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQpCitNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6Ok1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJv
bHMqIGNvbnRyb2xzKQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxlbWVu
dCwgTWVkaWFTbGlkZXIpCisgICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQogeworICAgIHNldEF0
dHJpYnV0ZShwcmVjaXNpb25BdHRyLCAiZmxvYXQiKTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRl
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK1Bhc3NSZWZQdHI8TWVkaWFDb250cm9s
VGltZWxpbmVFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQogewot
ICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5lID0gYWRvcHRS
ZWYobmV3IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChtZWRpYUVsZW1lbnQpKTsKKyAgICBB
U1NFUlQoY29udHJvbHMpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVu
dD4gdGltZWxpbmUgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KG1l
ZGlhRWxlbWVudCwgY29udHJvbHMpKTsKICAgICB0aW1lbGluZS0+c2V0VHlwZSgicmFuZ2UiKTsK
ICAgICByZXR1cm4gdGltZWxpbmUucmVsZWFzZSgpOwogfQpAQCAtNzk5LDI4ICs2NTYsMzAgQEAg
dm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogCiAgICAgZmxvYXQgdGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodmFs
dWUoKS50b0RvdWJsZSgpKTsKICAgICBpZiAodGltZSAhPSBtZWRpYUVsZW1lbnQoKS0+Y3VycmVu
dFRpbWUoKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBmaXJlZCAzIHRpbWVzIG9uIGV2
ZXJ5IGNsaWNrLiBXZSBzaG91bGQgbm90IGJlIGRvaW5nIHRoYXQuCiAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT5zZXRDdXJyZW50VGltZSh0aW1lLCBl
Yyk7CiAgICAgfQogCiAgICAgUmVuZGVyU2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihy
ZW5kZXJlcigpKTsKICAgICBpZiAoc2xpZGVyICYmIHNsaWRlci0+aW5EcmFnTW9kZSgpKQotICAg
ICAgICB0b1JlbmRlck1lZGlhKG1lZGlhRWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Y29udHJvbHMo
KS0+dXBkYXRlVGltZURpc3BsYXkoKTsKKyAgICAgICAgbV9jb250cm9scy0+dXBkYXRlVGltZURp
c3BsYXkoKTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQpCiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT5lbmRTY3J1YmJpbmcoKTsKIH0KIAotdm9p
ZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OnVwZGF0ZShib29sIHVwZGF0ZUR1cmF0aW9u
KSAKK3ZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpzZXRQb3NpdGlvbihmbG9hdCBj
dXJyZW50VGltZSkgCiB7Ci0gICAgaWYgKHVwZGF0ZUR1cmF0aW9uKSB7Ci0gICAgICAgIGZsb2F0
IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7Ci0gICAgICAgIHNldEF0dHJp
YnV0ZShtYXhBdHRyLCBTdHJpbmc6Om51bWJlcihpc2Zpbml0ZShkdXJhdGlvbikgPyBkdXJhdGlv
biA6IDApKTsKLSAgICB9Ci0gICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIobWVkaWFFbGVtZW50
KCktPmN1cnJlbnRUaW1lKCkpKTsKLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0
ZSgpOworICAgIHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKGN1cnJlbnRUaW1lKSk7CiB9CiAKK3Zv
aWQgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpzZXREdXJhdGlvbihmbG9hdCBkdXJhdGlv
bikKK3sKKyAgICBzZXRBdHRyaWJ1dGUobWF4QXR0ciwgU3RyaW5nOjpudW1iZXIoaXNmaW5pdGUo
ZHVyYXRpb24pID8gZHVyYXRpb24gOiAwKSk7Cit9CisKKwogY29uc3QgQXRvbWljU3RyaW5nJiBN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1j
b250cm9scy10aW1lbGluZSIpKTsKQEAgLTgzMiw2ICs2OTEsOCBAQCBjb25zdCBBdG9taWNTdHJp
bmcmIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAog
aW5saW5lIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFWb2x1bWVTbGlkZXIpCiB7
CisgICAgc2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOworICAgIHNldEF0dHJp
YnV0ZShtYXhBdHRyLCAiMSIpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCkBAIC04NjMsMTIgKzcyNCwxMCBAQCB2b2lkIE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
IGV2ZW50KQogICAgIH0KIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
Ojp1cGRhdGUoKQordm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzZXRWb2x1
bWUoZmxvYXQgdm9sdW1lKQogewotICAgIGZsb2F0IHZvbHVtZSA9IG1lZGlhRWxlbWVudCgpLT52
b2x1bWUoKTsKICAgICBpZiAodmFsdWUoKS50b0Zsb2F0KCkgIT0gdm9sdW1lKQogICAgICAgICBz
ZXRWYWx1ZShTdHJpbmc6Om51bWJlcih2b2x1bWUpKTsKLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQ6OnVwZGF0ZSgpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFZv
bHVtZVNsaWRlckVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKQEAgLTg4Miw2ICs3NDEs
NyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6
OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIGlubGluZSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0
dG9uRWxlbWVudDo6TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KG1l
ZGlhRWxlbWVudCwgTWVkaWFGdWxsc2NyZWVuQnV0dG9uKQogeworICAgIGhpZGUoKTsKIH0KIAog
UGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gTWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250
cm9sRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5oCmluZGV4IDIwYWFjMGYxMzY3Nzg3Nzc3Mzg0N2RlNDlkOTM2OTc0NjVjNzY1NGMuLjE0
YzJjZDliMmFjZTE1YWU4ZTc3NjcyMWNhNzg2Njk2NTgwNmFmYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCkBAIC00Miw2ICs0Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGcmFtZTsKK2NsYXNz
IE1lZGlhQ29udHJvbHM7CiAKIC8vIE11c3QgbWF0Y2ggV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgK
IGVudW0gTWVkaWFDb250cm9sRWxlbWVudFR5cGUgewpAQCAtNzEsMjQgKzcyLDEzIEBAIGVudW0g
TWVkaWFDb250cm9sRWxlbWVudFR5cGUgewogCiBIVE1MTWVkaWFFbGVtZW50KiB0b1BhcmVudE1l
ZGlhRWxlbWVudChSZW5kZXJPYmplY3QqKTsKIAotY2xhc3MgTWVkaWFDb250cm9sU2hhZG93Um9v
dEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCopOwotCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIAotcHJpdmF0ZToK
LSAgICBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7Ci19
OwotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNsYXNzIE1lZGlhQ29udHJv
bEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewogcHVibGljOgotICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2goKTsKLSAgICB2b2lkIGF0dGFjaFRvUGFyZW50KEVsZW1lbnQqKTsKLSAgICB2
b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQgdXBkYXRlU3R5bGUoKTsKKyAgICAvLyBGSVhNRTogVGhl
c2Ugc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBJbmxpbmVTdHlsYWJsZUVsZW1lbnQuCisgICAgdm9p
ZCBoaWRlKCk7CisgICAgdm9pZCBzaG93KCk7CiAKICAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3QgPSAwOwogCkBAIC05Nyw5ICs4Nyw3IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICBNZWRpYUNvbnRyb2xFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqKTsKIAotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudCgp
OworLy8gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQo
KTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTE5LDcgKzEwNyw2IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiB9Owog
Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgTWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbEVsZW1lbnQgewpA
QCAtMTI4LDkgKzExNSw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwotICAgIHZpcnR1YWwg
TWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OworCisgICAgdmlydHVhbCBNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogfTsKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM5LDE5ICsxMjYsMTIgQEAgY2xhc3MgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xF
bGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xWb2x1
bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwogCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKLSAg
ICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSB7IHJldHVybiBt
X2lzVmlzaWJsZTsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oaW50IHgsIGludCB5KTsKLSAgICBi
b29sIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsKLQogcHJpdmF0ZToKICAgICBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQq
KTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
LCBSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50Kik7CiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgp
IGNvbnN0OwotCi0gICAgYm9vbCBtX2lzVmlzaWJsZTsKLSAgICBpbnQgbV94LCBtX3k7CiB9Owog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjYsNyArMTQ2LDYgQEAgcHJp
dmF0ZToKICAgICBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50Kik7CiAKICAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUq
KTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25z
dDsKIAogICAgIGVudW0gU3RhdGVCZWluZ0Rpc3BsYXllZCB7IE5vdGhpbmcsIExvYWRpbmcsIExp
dmVCcm9hZGNhc3QgfTsKQEAgLTE3NywxMSArMTU2LDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVsZW1lbnQgewogcHVibGlj
OgotICAgIHZvaWQgYXR0YWNoVG9QYXJlbnQoRWxlbWVudCopOwotICAgIHZvaWQgdXBkYXRlKCk7
Ci0gICAgdm9pZCB1cGRhdGVTdHlsZSgpOwotCi0gICAgYm9vbCBoaXRUZXN0KGNvbnN0IEludFBv
aW50JiBhYnNQb2ludCk7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwYXJ0IG9mIHNv
bWUgSW5saW5lU3R5bGFibGVFbGVtZW50LgorICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2hv
dygpOwogCiAgICAgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2Rpc3BsYXlUeXBlOyB9CiAKQEAgLTE5MywxMSArMTcwLDYgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgc2V0RGlzcGxheVR5cGUoTWVkaWFDb250cm9sRWxlbWVudFR5cGUpOwogCiBw
cml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKLQogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlh
Q29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRGlzcGxheVR5cGUoKSB7IH0KQEAgLTIxMCwxMCArMTgyLDEyIEBAIHByaXZhdGU6
CiAKIGNsYXNzIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50IDogcHVibGljIE1lZGlhQ29u
dHJvbElucHV0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIGNoYW5nZWRNdXRlKCk7CiAKIHByb3RlY3RlZDoK
ICAgICBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiwgTWVk
aWFDb250cm9sRWxlbWVudFR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7CisKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxh
eVR5cGUoKTsKQEAgLTIyMywxMiArMTk3LDE1IEBAIHByaXZhdGU6CiAKIGNsYXNzIE1lZGlhQ29u
dHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sTXV0ZUJ1dHRv
bkVsZW1lbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFBh
bmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gY3JlYXRl
KEhUTUxNZWRpYUVsZW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7CiAKIHByaXZhdGU6Ci0gICAgTWVk
aWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CisgICAg
TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiwgTWVk
aWFDb250cm9scyopOwogCisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBj
b25zdDsKKworICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7CiB9OwogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNTEsMTEgKzIyOCwxMiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShI
VE1MTWVkaWFFbGVtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOworICAgIC8vIEZJWE1FOiBQRVJIQVBTIE1BS0UgRVhQTElDSVQgUExBWS9QQVVT
RSBDQUxMUy4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKIAogcHJpdmF0
ZToKICAgICBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07CiAKQEAgLTM0MCwx
MSArMzE4LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xU
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50
Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpOwogCiBwcml2YXRlOgogICAgIE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50
Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07ICAgIAogCkBA
IC0zNTIsMTUgKzMzMCwxOCBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGlu
ZUVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IGNyZWF0ZShI
VE1MTWVkaWFFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJvbHMqKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0gICAgdm9p
ZCB1cGRhdGUoYm9vbCB1cGRhdGVEdXJhdGlvbiA9IHRydWUpOworICAgIHZvaWQgc2V0UG9zaXRp
b24oZmxvYXQpOworICAgIHZvaWQgc2V0RHVyYXRpb24oZmxvYXQpOwogCiBwcml2YXRlOgotICAg
IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgTWVk
aWFDb250cm9sVGltZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqLCBNZWRpYUNvbnRyb2xz
Kik7CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBj
b25zdDsKKworICAgIE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7CiB9OwogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNzAsNyArMzUxLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ+IGNyZWF0ZShI
VE1MTWVkaWFFbGVtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOwotICAgIHZvaWQgdXBkYXRlKCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQp
OwogCiBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoSFRNTE1l
ZGlhRWxlbWVudCopOwpAQCAtNDMzLDE1ICs0MTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
TWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgUmVuZGVyTWVkaWFDb250cm9sU2hh
ZG93Um9vdCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFD
b250cm9sU2hhZG93Um9vdChFbGVtZW50KiBlKSA6IFJlbmRlckJsb2NrKGUpIHsgfQotICAgIHZv
aWQgc2V0UGFyZW50KFJlbmRlck9iamVjdCogcCkgeyBSZW5kZXJPYmplY3Q6OnNldFBhcmVudChw
KTsgfQotfTsKLSAgICAKKyAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogfSAv
L25hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNw
cAppbmRleCA2OWQ3MWVjMjg2YmY5MmMxMDU1OGY3OTAxNDdmN2Y5NTVhM2FhMmVhLi4zY2M5NjA5
NjlmMGU2NzFmZGFlYWU0ODhlMzNlYTRlMDdiODYzNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYS5jcHAKQEAgLTI5LDIyICsyOSwxOCBAQAogI2luY2x1ZGUgIlJlbmRl
ck1lZGlhLmgiCiAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiTWVk
aWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlck1lZGlhOjpS
ZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbykKICAgICA6IFJlbmRlckltYWdlKHZp
ZGVvKQotICAgICwgbV9jb250cm9scyhuZXcgTWVkaWFDb250cm9scyh2aWRlbykpCiB7CiAgICAg
c2V0SW1hZ2VSZXNvdXJjZShSZW5kZXJJbWFnZVJlc291cmNlOjpjcmVhdGUoKSk7CiB9CiAKIFJl
bmRlck1lZGlhOjpSZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbywgY29uc3QgSW50
U2l6ZSYgaW50cmluc2ljU2l6ZSkKICAgICA6IFJlbmRlckltYWdlKHZpZGVvKQotICAgICwgbV9j
b250cm9scyhuZXcgTWVkaWFDb250cm9scyh2aWRlbykpCiB7CiAgICAgc2V0SW1hZ2VSZXNvdXJj
ZShSZW5kZXJJbWFnZVJlc291cmNlOjpjcmVhdGUoKSk7CiAgICAgc2V0SW50cmluc2ljU2l6ZShp
bnRyaW5zaWNTaXplKTsKQEAgLTU0LDMyICs1MCwyNCBAQCBSZW5kZXJNZWRpYTo6flJlbmRlck1l
ZGlhKCkKIHsKIH0KIAotdm9pZCBSZW5kZXJNZWRpYTo6ZGVzdHJveSgpCi17Ci0gICAgbV9jb250
cm9scy0+ZGVzdHJveSgpOwotICAgIFJlbmRlckltYWdlOjpkZXN0cm95KCk7Ci19Ci0KKy8vIEZJ
WE1FOiBNb3ZlIHRvIFJlbmRlclZpZGVvCiBIVE1MTWVkaWFFbGVtZW50KiBSZW5kZXJNZWRpYTo6
bWVkaWFFbGVtZW50KCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRp
YUVsZW1lbnQqPihub2RlKCkpOyAKIH0KIAotdm9pZCBSZW5kZXJNZWRpYTo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsK
LSAgICBSZW5kZXJJbWFnZTo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotICAgIG1f
Y29udHJvbHMtPnVwZGF0ZVN0eWxlKCk7Ci19Ci0KIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91dCgp
CiB7CiAgICAgSW50U2l6ZSBvbGRTaXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAKICAg
ICBSZW5kZXJJbWFnZTo6bGF5b3V0KCk7CiAKLSAgICBSZW5kZXJCb3gqIGNvbnRyb2xzUmVuZGVy
ZXIgPSBtX2NvbnRyb2xzLT5yZW5kZXJCb3goKTsKKyAgICAvLyBGSVhNRTogQVNTVU1FUyBGSVJT
VCBDSElMRCBJUyBTSEFET1cgUk9PVCBCT1guCisgICAgLy8gRklYTUU6IE1BS0UgUEFSVCBPRiBN
ZWRpYUNvbnRyb2xzLgorICAgIFJlbmRlckJveCogY29udHJvbHNSZW5kZXJlciA9IHRvUmVuZGVy
Qm94KG1fY2hpbGRyZW4uZmlyc3RDaGlsZCgpKTsKICAgICBpZiAoIWNvbnRyb2xzUmVuZGVyZXIp
CiAgICAgICAgIHJldHVybjsKKwogICAgIEludFNpemUgbmV3U2l6ZSA9IGNvbnRlbnRCb3hSZWN0
KCkuc2l6ZSgpOwogICAgIGlmIChuZXdTaXplID09IG9sZFNpemUgJiYgIWNvbnRyb2xzUmVuZGVy
ZXItPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg5LDcgKzc3LDYgQEAgdm9p
ZCBSZW5kZXJNZWRpYTo6bGF5b3V0KCkKICAgICAvLyBhbmQgdGhpcyBtZXRob2Qgd2lsbCBiZSBj
YWxsZWQgbWFueSB0aW1lcyBwZXIgc2Vjb25kIGR1cmluZyBwbGF5YmFjaywgdXNlIGEgTGF5b3V0
U3RhdGVNYWludGFpbmVyOgogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2
aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZs
ZWN0aW9uKCkgfHwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAKLSAg
ICBjb250cm9sc1JlbmRlcmVyLT5zZXRMb2NhdGlvbihib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CiAgICAgY29udHJvbHNSZW5kZXJlci0+
c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhlZCkpOwogICAg
IGNvbnRyb2xzUmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRo
KCksIEZpeGVkKSk7CiAgICAgY29udHJvbHNSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQodHJ1ZSwg
ZmFsc2UpOwpAQCAtOTksOSArODYsOSBAQCB2b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQogICAg
IHN0YXRlUHVzaGVyLnBvcCgpOwogfQogCi12b2lkIFJlbmRlck1lZGlhOjp1cGRhdGVGcm9tRWxl
bWVudCgpCit2b2lkIFJlbmRlck1lZGlhOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCiB7Ci0gICAgbV9jb250cm9scy0+dXBkYXRlKCk7CisgICAgUmVuZGVySW1h
Z2U6OnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAppbmRleCA3NjU4ZWY2YzE4NGMz
OTgzMmU0YzVkODJmOGY4N2E1YjY1MGI1MDMxLi41OTY0ZWE0ZTRjNWRjMWQ1NjQwMzVjYTE4Yjk3
NmM2MDEwZWI5MjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaApAQCAt
MzMsNyArMzMsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTWVkaWFFbGVt
ZW50OwotY2xhc3MgTWVkaWFDb250cm9sczsKIAogY2xhc3MgUmVuZGVyTWVkaWEgOiBwdWJsaWMg
UmVuZGVySW1hZ2UgewogcHVibGljOgpAQCAtNDUsMjkgKzQ0LDIxIEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0K
IAogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0OwotICAgIE1lZGlh
Q29udHJvbHMqIGNvbnRyb2xzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJv
bUVsZW1lbnQoKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAog
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQg
dHkpOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4o
KSB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RD
aGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgCiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlck1lZGlhIjsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc01lZGlhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotCi0gICAgdmlydHVhbCB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKTsKLQogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJv
cGFnYXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBPd25QdHI8TWVkaWFDb250
cm9scz4gbV9jb250cm9sczsKICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsK
IH07CiAKQEAgLTc3LDExICs2OCw2IEBAIGlubGluZSBSZW5kZXJNZWRpYSogdG9SZW5kZXJNZWRp
YShSZW5kZXJPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTWVk
aWEqPihvYmplY3QpOwogfQogCi1pbmxpbmUgTWVkaWFDb250cm9scyogUmVuZGVyTWVkaWE6OmNv
bnRyb2xzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250cm9scy5nZXQoKTsKLX0KLQogLy8g
VGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgogdm9pZCB0
b1JlbmRlck1lZGlhKGNvbnN0IFJlbmRlck1lZGlhKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4IDUyMWQ2NGZjMDlmM2I1NjNkYjAwYmFkNGJiZGQ0MTE0
NWVjZDBlODYuLmE2NmRkYzg0ODc2YTJjYmM4MGExYzVlZDQ4M2FhMTk2MDQ5YWQzZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtNDgxLDMyICs0ODEsMTAg
QEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLAogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotYm9vbCBS
ZW5kZXJUaGVtZTo6aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBJbnRQb2ludCYgYWJzUG9pbnQpCi17Ci0gICAgaWYgKCFvLT5pc0JveCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBvLT5hYnNvbHV0ZVRv
TG9jYWwoYWJzUG9pbnQsIGZhbHNlLCB0cnVlKTsgIC8vIHJlc3BlY3QgdHJhbnNmb3JtcwotICAg
IHJldHVybiB0b1JlbmRlckJveChvKS0+Ym9yZGVyQm94UmVjdCgpLmNvbnRhaW5zKHJvdW5kZWRJ
bnRQb2ludChsb2NhbFBvaW50KSk7Ci19CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnNob3VsZFJlbmRl
ck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQgcGFydCwgRWxlbWVudCogZSkKK2Jvb2wgUmVu
ZGVyVGhlbWU6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQsIEVsZW1l
bnQqKQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxNZWRpYUVsZW1lbnQqPihlKTsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIE1l
ZGlhTXV0ZUJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRpYUVsZW1lbnQtPmhhc0F1ZGlv
KCk7Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRp
YUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSAhPSBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKLSAg
ICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBt
ZWRpYUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSA9PSBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsK
LSAgICBjYXNlIE1lZGlhRnVsbHNjcmVlbkJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRp
YUVsZW1lbnQtPnN1cHBvcnRzRnVsbHNjcmVlbigpOwotICAgIGNhc2UgTWVkaWFUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRpYUVsZW1lbnQtPmhhc0Ns
b3NlZENhcHRpb25zKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQorICAgIHJldHVybiB0cnVlOwogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWU6OmZvcm1hdE1lZGlh
Q29udHJvbHNUaW1lKGZsb2F0IHRpbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5oCmluZGV4IDM1ZjI1NmM5NmEzNTZkZmE3NmUwZGE3NzY4OTVmMTI3YWFlYTgwNjQu
LjYwMmFjZDZkYmYwYjdlYTA3ZGQzYjljMDA0ZDkwYmNkNzEwZjMzNzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCkBAIC0xNzgsNyArMTc4LDYgQEAgcHVibGljOgogCiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIC8vIE1lZGlhIGNvbnRyb2xzCi0gICAgdmlydHVhbCBib29s
IGhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IEludFBvaW50JiBh
YnNQb2ludCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQo
Q29udHJvbFBhcnQsIEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXkoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgZG91YmxlIG1l
ZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpIHsgcmV0dXJuIDAuMTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86469</attachid>
            <date>2011-03-22 10:13:46 -0700</date>
            <delta_ts>2011-04-07 16:58:30 -0700</delta_ts>
            <desc>WIP: Checkpoint after more whittling away.</desc>
            <filename>bug-53020-20110322101345.patch</filename>
            <type>text/plain</type>
            <size>77230</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE2NzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9tZWRpYUNvbnRyb2xzLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNz
cwppbmRleCA4ODE0NGI0NmRmZDMzZGYwMzU1OTk5OGEzMmE1M2IzZGU5N2I0N2U5Li5kYTZjZDVm
MGViZTBjZDQwZjViNWJiNWUzMDgxMTdiYjE4NmUyZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlh
Q29udHJvbHMuY3NzCkBAIC0yOSw2ICsyOSwxMyBAQCBhdWRpbyB7CiAgICAgaGVpZ2h0OiAxNnB4
OwogfQogCis6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMgeworICAgIHdpZHRoOiBpbmhlcml0Owor
ICAgIGhlaWdodDogaW5oZXJpdDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZGlzcGxh
eTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CiAgICAgZGlzcGxheTogLXdlYmtpdC1i
b3g7CiAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOwpAQCAtOTgsMTIgKzEwNSw3
IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7CiAgICAgbWFyZ2luOiBpbml0aWFsOwogfQogCi1h
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlk
ZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAg
IGRpc3BsYXk6IG5vbmU7Ci19Ci0KIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVt
ZS1zbGlkZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgewot
ICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKICAgICBi
b3JkZXI6IGluaXRpYWw7CiAgICAgY29sb3I6IGluaGVyaXQ7CkBAIC0xNjYsNyArMTY4LDYgQEAg
YXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0
b24sIHZpZGVvOjotd2Via2l0LW1lZGkKIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dm9sdW1lLXNsaWRlci1tdXRlLWJ1dHRvbiB7CiAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRp
YS12b2x1bWUtc2xpZGVyLW11dGUtYnV0dG9uOwotICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgYmFj
a2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKICAgICBib3JkZXI6IGluaXRpYWw7CiAgICAgY29sb3I6
IGluaGVyaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAw
NDcxMTI2OTUyY2JmMzFiZTc4MmQ5ZWNhODkyNzQ1OWZiYjZmM2EzLi5kYjkwYmFhZDdhNzFjMWEz
YmRmYWVlZWViMDdlYzYwYTJhMTkxNWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIK
KyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgpAQCAtMTYxLDYgKzE2
Miw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX3NlbmRQcm9ncmVzc0V2ZW50
cyh0cnVlKQogICAgICwgbV9pc0Z1bGxzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2Nsb3NlZENhcHRp
b25zVmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQogI2lmIEVOQUJMRShQ
TFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKQog
I2VuZGlmCkBAIC0yMTgsMTIgKzIyMCwxNCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiAgICAgfQog
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGNvbnRyb2xzQXR0cikgewogI2lmICFFTkFCTEUoUExV
R0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICAgICAgaWYgKCFpc1ZpZGVvKCkgJiYgYXR0YWNoZWQo
KSAmJiAoY29udHJvbHMoKSAhPSAocmVuZGVyZXIoKSAhPSAwKSkpIHsKLSAgICAgICAgICAgIGRl
dGFjaCgpOwotICAgICAgICAgICAgYXR0YWNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhh
c01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsK
KyAgICAgICAgaWYgKGNvbnRyb2xzKCkpIHsKKyAgICAgICAgICAgIGlmICghaGFzTWVkaWFDb250
cm9scygpKSB7CisgICAgICAgICAgICAgICAgZW5zdXJlTWVkaWFDb250cm9scygpOworICAgICAg
ICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvdygpOworICAgICAgICB9IGVsc2UgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+aGlkZSgpOwogI2Vs
c2UKICAgICAgICAgaWYgKG1fcGxheWVyKQogICAgICAgICAgICAgbV9wbGF5ZXItPnNldENvbnRy
b2xzKGNvbnRyb2xzKCkpOwpAQCAtMzE2LDYgKzMyMCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCiAKICAgICByZXR1cm4gdHJ1
ZTsKICNlbHNlCisgICAgLy8gRklYTUU6IFdURiBJUyBUSElTPyEKICAgICByZXR1cm4gY29udHJv
bHMoKSA/IEhUTUxFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSA6IGZhbHNlOwogI2Vu
ZGlmCiB9CkBAIC0zNjksOCArMzc0LDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphdHRhY2go
KQogCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21F
bGVtZW50KCk7CisKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICBlbHNl
IGlmIChtX3Byb3h5V2lkZ2V0KSB7CisgICAgaWYgKG1fcHJveHlXaWRnZXQpIHsKICAgICAgICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICAgICAgRnJhbWVMb2FkZXIq
IGxvYWRlciA9IGZyYW1lID8gZnJhbWUtPmxvYWRlcigpIDogMDsKICAgICAgICAgaWYgKGxvYWRl
cikKQEAgLTg4OSw2ICs4OTUsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtT
dGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQogICAgICAgICAgICAgbm9uZVN1
cHBvcnRlZCgpOwogCiAgICAgICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOworICAgICAgICBpZiAo
aGFzTWVkaWFDb250cm9scygpKQorICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5yZXBvcnRl
ZEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkxOCw2ICs5MjYsOSBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIHN0YXRlKQogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE5FVFdPUktfSURMRTsKICAg
ICAgICAgbV9jb21wbGV0ZWx5TG9hZGVkID0gdHJ1ZTsKICAgICB9CisKKyAgICBpZiAoaGFzTWVk
aWFDb250cm9scygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNoYW5nZWROZXR3b3JrU3Rh
dGUoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclJlYWR5U3RhdGVD
aGFuZ2VkKE1lZGlhUGxheWVyKikKQEAgLTk2Nyw2ICs5NzgsOCBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZFX01FVEFEQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9NRVRB
REFUQSkgewogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5n
ZUV2ZW50KTsKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVkbWV0YWRh
dGFFdmVudCk7CisgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBt
ZWRpYUNvbnRyb2xzKCktPmxvYWRlZE1ldGFkYXRhKCk7CiAgICAgICAgIGlmIChyZW5kZXJlcigp
KQogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICAgICAg
bV9wbGF5ZXItPnNlZWsoMCk7CkBAIC0xNTk1LDkgKzE2MDgsMTEgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpwbGF5YmFja1Byb2dyZXNzVGltZXJGaXJlZChUaW1lcjxIVE1MTWVkaWFFbGVtZW50
PiopCiAgICAgICAgIHJldHVybjsKIAogICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KHRydWUp
OwotICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgaWYgKGhhc01lZGlhQ29udHJvbHMo
KSkgeworICAgICAgICBpZiAoIW1fbW91c2VPdmVyICYmIGNvbnRyb2xzKCkpCisgICAgICAgICAg
ICBtZWRpYUNvbnRyb2xzKCktPm1ha2VUcmFuc3BhcmVudCgpOwogICAgICAgICBtZWRpYUNvbnRy
b2xzKCktPnBsYXliYWNrUHJvZ3Jlc3NlZCgpOwotCisgICAgfQogICAgIC8vIEZJWE1FOiBkZWFs
IHdpdGggY3VlIHJhbmdlcyBoZXJlCiB9CiAKQEAgLTIzMTMsMTAgKzIzMjgsMTggQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBp
ZiAod2lkZ2V0KQogICAgICAgICB3aWRnZXQtPmhhbmRsZUV2ZW50KGV2ZW50KTsKICNlbHNlCi0g
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgbWVkaWFDb250cm9scygpLT5mb3J3
YXJkRXZlbnQoZXZlbnQpOwotICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgTW91
c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Cisg
ICAgICAgIGlmIChtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCkgIT0gdGhpcykgeworICAgICAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7
CisgICAgICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIGlm
IChoYXNNZWRpYUNvbnRyb2xzKCkgJiYgY29udHJvbHMoKSAmJiAhY2FuUGxheSgpKQorICAgICAg
ICAgICAgICAgICAgICBtZWRpYUNvbnRyb2xzKCktPm1ha2VPcGFxdWUoKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkK
KyAgICAgICAgICAgICAgICBtX21vdXNlT3ZlciA9IGZhbHNlOworICAgICAgICB9CisgICAgfQor
CiAgICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogI2VuZGlmCiB9
CkBAIC0yNTgxLDE1ICsyNjA0LDIwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJpdmF0ZUJy
b3dzaW5nU3RhdGVEaWRDaGFuZ2UoKQogICAgIG1fcGxheWVyLT5zZXRQcml2YXRlQnJvd3NpbmdN
b2RlKHByaXZhdGVNb2RlKTsKIH0KIAorYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNv
bnRyb2xzKCkKK3sKKyAgICByZXR1cm4gc2hhZG93Um9vdCgpOworfQorCiBNZWRpYUNvbnRyb2xz
KiBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUNvbnRyb2xzKCkKIHsKLSAgICBBU1NFUlQocmVuZGVy
ZXIoKSk7Ci0gICAgcmV0dXJuIHRvUmVuZGVyTWVkaWEocmVuZGVyZXIoKSktPmNvbnRyb2xzKCk7
CisgICAgcmV0dXJuIHRvTWVkaWFDb250cm9scyhzaGFkb3dSb290KCkpOwogfQogCi1ib29sIEhU
TUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlhQ29udHJvbHMoKSBjb25zdAordm9pZCBIVE1MTWVkaWFF
bGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzKCkKIHsKLSAgICByZXR1cm4gcmVuZGVyZXIoKSAm
JiByZW5kZXJlcigpLT5pc01lZGlhKCk7CisgICAgaWYgKCFoYXNNZWRpYUNvbnRyb2xzKCkpCisg
ICAgICAgIHNldFNoYWRvd1Jvb3QoTWVkaWFDb250cm9sczo6Y3JlYXRlKHRoaXMpKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBmNWQ3YzZhMDc0NjBm
ODIzYWU1NmQyMmVlYTM0YzA4YWNkZTEyMmE4Li4wNmRjODI3MDg1ZTNmYWNjYjE4OGM0ZGE4MDU1
ZDQyNDg1YzdjNzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAt
MzIzLDcgKzMyMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkVGltZSgp
OwogICAgIHZvaWQgcmVmcmVzaENhY2hlZFRpbWUoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzTWVk
aWFDb250cm9scygpIGNvbnN0OworICAgIGJvb2wgaGFzTWVkaWFDb250cm9scygpOworICAgIHZv
aWQgZW5zdXJlTWVkaWFDb250cm9scygpOwogCiAgICAgVGltZXI8SFRNTE1lZGlhRWxlbWVudD4g
bV9sb2FkVGltZXI7CiAgICAgVGltZXI8SFRNTE1lZGlhRWxlbWVudD4gbV9hc3luY0V2ZW50VGlt
ZXI7CkBAIC00MDQsNiArNDA1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pc0Z1bGxzY3Jl
ZW4gOiAxOwogICAgIGJvb2wgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgOiAxOworICAgIGJvb2wg
bV9tb3VzZU92ZXIgOiAxOwogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAg
ICAgYm9vbCBtX25lZWRXaWRnZXRVcGRhdGUgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xzLmNwcAppbmRleCAwOGM3OWI4YWMxYWIzNTNlMWNkYTcwMzM5NDU4
MjNiNGEyMzM3MDkwLi5iZGUxODlmOTVhYjI0N2UyYzA4MzgxZDcxNzE0MzI4ZDQwMDEwZjQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApAQCAtNDcs
NTIwICs0NywzMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCi1zdGF0aWMgY29uc3QgZG91YmxlIGNPcGFjaXR5QW5pbWF0aW9uUmVwZWF0RGVs
YXkgPSAwLjA1OwotCiBNZWRpYUNvbnRyb2xzOjpNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKLSAg
ICAsIG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyKHRoaXMsICZNZWRpYUNvbnRyb2xzOjpvcGFjaXR5
QW5pbWF0aW9uVGltZXJGaXJlZCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZSgw
KQotICAgICwgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24oMCkKLSAgICAsIG1fb3BhY2l0eUFu
aW1hdGlvbkZyb20oMCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblRvKDEuMGYpCi0gICAgLCBt
X21vdXNlT3ZlcihmYWxzZSkKLXsKLX0KKyAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgbWVk
aWFFbGVtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV9tZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50
KQorICAgICwgbV9yZXdpbmRCdXR0b24oMCkKKyAgICAsIG1fcGxheUJ1dHRvbigwKQorICAgICwg
bV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uKDApCisgICAgLCBtX3N0YXR1c0Rpc3BsYXkoMCkKKyAg
ICAsIG1fY3VycmVudFRpbWVEaXNwbGF5KDApCisgICAgLCBtX3RpbWVsaW5lKDApCisgICAgLCBt
X3RpbWVSZW1haW5pbmdEaXNwbGF5KDApCisgICAgLCBtX3RpbWVsaW5lQ29udGFpbmVyKDApCisg
ICAgLCBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKDApCisgICAgLCBtX3BhbmVsTXV0ZUJ1
dHRvbigwKQorICAgICwgbV92b2x1bWVTbGlkZXIoMCkKKyAgICAsIG1fdm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbigwKQorICAgICwgbV92b2x1bWVTbGlkZXJDb250YWluZXIoMCkKKyAgICAsIG1fZnVs
bFNjcmVlbkJ1dHRvbigwKQorICAgICwgbV9wYW5lbCgwKQorICAgICwgbV9vcGFxdWUodHJ1ZSkK
K3sKK30KKworUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xzPiBNZWRpYUNvbnRyb2xzOjpjcmVhdGUo
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQoreworICAgIFJlZlB0cjxNZWRpYUNvbnRy
b2xzPiBjb250cm9scyA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xzKG1lZGlhRWxlbWVudCkp
OworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudD4gcGFuZWwgPSBNZWRpYUNv
bnRyb2xQYW5lbEVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworCisgICAgLy8gRklYTUU6
IFdIQVQgVE8gRE8gV0lUSCBlYz8/IT8hPyE/IQorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAKLXZv
aWQgTWVkaWFDb250cm9sczo6cmVzZXQoKQotewotICAgIHVwZGF0ZSgpOwotfQorICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50PiByZXdpbmRCdXR0b24gPSBNZWRpYUNv
bnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250
cm9scy0+bV9yZXdpbmRCdXR0b24gPSByZXdpbmRCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFw
cGVuZENoaWxkKHJld2luZEJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlCdXR0b25F
bGVtZW50PiBwbGF5QnV0dG9uID0gTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX3BsYXlCdXR0b24gPSBwbGF5QnV0dG9u
LmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChwbGF5QnV0dG9uLnJlbGVhc2UoKSwgZWMs
IHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVk
aWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+IHJldHVyblRvUmVhbHRpbWVC
dXR0b24gPSBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fcmV0dXJuVG9SZWFsVGltZUJ1dHRvbiA9
IHJldHVyblRvUmVhbHRpbWVCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHJl
dHVyblRvUmVhbHRpbWVCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCktPnBh
Z2UoKS0+dGhlbWUoKS0+dXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKSkgeworICAgICAg
ICBSZWZQdHI8TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+IHN0YXR1c0Rpc3BsYXkg
PSBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7
CisgICAgICAgIGNvbnRyb2xzLT5tX3N0YXR1c0Rpc3BsYXkgPSBzdGF0dXNEaXNwbGF5LmdldCgp
OworICAgICAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoc3RhdHVzRGlzcGxheS5yZWxlYXNlKCksIGVj
LCB0cnVlKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQog
Ci12b2lkIE1lZGlhQ29udHJvbHM6OnBsYXliYWNrUHJvZ3Jlc3NlZCgpCi17Ci0gICAgaWYgKG1f
dGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZShmYWxzZSk7Ci0gICAgdXBkYXRl
VGltZURpc3BsYXkoKTsKLX0KKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWlu
ZXJFbGVtZW50PiB0aW1lbGluZUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFp
bmVyRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CiAKLXZvaWQgTWVkaWFDb250cm9sczo6
cGxheWJhY2tTdGFydGVkKCkKLXsKLSAgICBwbGF5YmFja1Byb2dyZXNzZWQoKTsKLX0KKyAgICBS
ZWZQdHI8TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudD4gY3VycmVudFRpbWVE
aXNwbGF5ID0gTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1l
ZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fY3VycmVudFRpbWVEaXNwbGF5ID0gY3VycmVu
dFRpbWVEaXNwbGF5LmdldCgpOworICAgIHRpbWVsaW5lQ29udGFpbmVyLT5hcHBlbmRDaGlsZChj
dXJyZW50VGltZURpc3BsYXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gMDsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpwbGF5YmFja1N0b3BwZWQoKQot
ewotICAgIHBsYXliYWNrUHJvZ3Jlc3NlZCgpOwotfQorICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5lID0gTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50Ojpj
cmVhdGUobWVkaWFFbGVtZW50LCBjb250cm9scy5nZXQoKSk7CisgICAgY29udHJvbHMtPm1fdGlt
ZWxpbmUgPSB0aW1lbGluZS5nZXQoKTsKKyAgICB0aW1lbGluZUNvbnRhaW5lci0+YXBwZW5kQ2hp
bGQodGltZWxpbmUucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICBy
ZXR1cm4gMDsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkTXV0ZSgpCi17Ci0gICAgdXBk
YXRlKCk7Ci19CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxl
bWVudD4gdGltZVJlbWFpbmluZ0Rpc3BsYXkgPSBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlz
cGxheUVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX3RpbWVS
ZW1haW5pbmdEaXNwbGF5ID0gdGltZVJlbWFpbmluZ0Rpc3BsYXkuZ2V0KCk7CisgICAgdGltZWxp
bmVDb250YWluZXItPmFwcGVuZENoaWxkKHRpbWVSZW1haW5pbmdEaXNwbGF5LnJlbGVhc2UoKSwg
ZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CiAKLXZvaWQgTWVkaWFD
b250cm9sczo6Y2hhbmdlZFZvbHVtZSgpCi17Ci0gICAgdXBkYXRlKCk7Ci19CisgICAgY29udHJv
bHMtPm1fdGltZWxpbmVDb250YWluZXIgPSB0aW1lbGluZUNvbnRhaW5lci5nZXQoKTsKKyAgICBw
YW5lbC0+YXBwZW5kQ2hpbGQodGltZWxpbmVDb250YWluZXIucmVsZWFzZSgpLCBlYywgdHJ1ZSk7
CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpj
aGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCkKLXsKLSAgICB1cGRhdGUoKTsKLX0KKyAg
ICAvLyBGSVhNRTogT05MWSBBUFBFTkQgV0hFTiBTVVBQT1JUUyBTRUVLQkFDSworICAgIHBhbmVs
LT5hcHBlbmRDaGlsZChNZWRpYUNvbnRyb2xTZWVrQmFja0J1dHRvbkVsZW1lbnQ6OmNyZWF0ZSht
ZWRpYUVsZW1lbnQpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsK
IAotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVTdHlsZSgpCi17Ci0gICAgaWYgKCFtX2NvbnRy
b2xzU2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBPTkxZIEFQUEVO
RCBXSEVOIFNVUFBPUlRTIFNFRUtGT1JXQVJECisgICAgcGFuZWwtPmFwcGVuZENoaWxkKE1lZGlh
Q29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCksIGVj
LCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fcGFu
ZWwpCi0gICAgICAgIG1fcGFuZWwtPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fbXV0ZUJ1dHRv
bikKLSAgICAgICAgbV9tdXRlQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3BsYXlC
dXR0b24pCi0gICAgICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9z
ZWVrQmFja0J1dHRvbikKLSAgICAgICAgbV9zZWVrQmFja0J1dHRvbi0+dXBkYXRlU3R5bGUoKTsK
LSAgICBpZiAobV9zZWVrRm9yd2FyZEJ1dHRvbikKLSAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRv
bi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9yZXdpbmRCdXR0b24pCi0gICAgICAgIG1fcmV3
aW5kQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3JldHVyblRvUmVhbHRpbWVCdXR0
b24pCi0gICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAg
ICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbikKLSAgICAgICAgbV90b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9zdGF0dXNEaXNwbGF5
KQotICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fdGlt
ZWxpbmVDb250YWluZXIpCi0gICAgICAgIG1fdGltZWxpbmVDb250YWluZXItPnVwZGF0ZVN0eWxl
KCk7Ci0gICAgaWYgKG1fdGltZWxpbmUpCi0gICAgICAgIG1fdGltZWxpbmUtPnVwZGF0ZVN0eWxl
KCk7Ci0gICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbikKLSAgICAgICAgbV9mdWxsc2NyZWVuQnV0
dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX2N1cnJlbnRUaW1lRGlzcGxheSkKLSAgICAg
ICAgbV9jdXJyZW50VGltZURpc3BsYXktPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fdGltZVJl
bWFpbmluZ0Rpc3BsYXkpCi0gICAgICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnVwZGF0ZVN0
eWxlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKQotICAgICAgICBtX3ZvbHVt
ZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXJN
dXRlQnV0dG9uKQotICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPnVwZGF0ZVN0eWxl
KCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBk
YXRlU3R5bGUoKTsKLX0KKyAgICAvLyBGSVhNRTogVXBkYXRlIGNjIGJ1dHRvbiB3aGVuIHR1cm5p
bmcgb24vb2ZmIGZyb20gRE9NISEhIQorICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IHRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uID0gTWVk
aWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFF
bGVtZW50KTsKKyAgICBjb250cm9scy0+bV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA9IHRv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZCh0
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybiAwOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OmRlc3Ryb3koKQot
ewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgUmVmUHRyPE1l
ZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50PiBmdWxsU2NyZWVuQnV0dG9uID0gTWVk
aWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwor
ICAgIGNvbnRyb2xzLT5tX2Z1bGxTY3JlZW5CdXR0b24gPSBmdWxsU2NyZWVuQnV0dG9uLmdldCgp
OworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChmdWxsU2NyZWVuQnV0dG9uLnJlbGVhc2UoKSwgZWMs
IHRydWUpOwogCi0gICAgaWYgKG1fY29udHJvbHNTaGFkb3dSb290ICYmIG1fY29udHJvbHNTaGFk
b3dSb290LT5yZW5kZXJlcigpKSB7CisgICAgLy8gRklYTUU6IFVwZGF0ZSBtdXRlQnV0dG9uIHdo
ZW4gbXV0aW5nIGZyb20gRE9NISEhCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQ+IHBhbmVsTXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRv
bkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQsIGNvbnRyb2xzLmdldCgpKTsKKyAgICBjb250
cm9scy0+bV9wYW5lbE11dGVCdXR0b24gPSBwYW5lbE11dGVCdXR0b24uZ2V0KCk7CisgICAgcGFu
ZWwtPmFwcGVuZENoaWxkKHBhbmVsTXV0ZUJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIC8vIGRldGFjaCB0aGUgcGFu
ZWwgYmVmb3JlIHJlbW92aW5nIHRoZSBzaGFkb3cgcmVuZGVyZXIgdG8gcHJldmVudCBhIGNyYXNo
IGluIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKSAKLSAgICAgICAgLy8gIHdoZW4gZGlz
cGxheTogc3R5bGUgY2hhbmdlcwotICAgICAgICBtX3BhbmVsLT5kZXRhY2goKTsKKyAgICBSZWZQ
dHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gdm9sdW1lU2xpZGVy
Q29udGFpbmVyID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3Jl
YXRlKG1lZGlhRWxlbWVudCk7CiAKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkt
PnJlbW92ZUNoaWxkKG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpKTsKLSAgICAgICAg
bV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpOwotICAgICAgICBtX2NvbnRyb2xzU2hhZG93
Um9vdCA9IDA7Ci0gICAgfQotfQorICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJF
bGVtZW50PiBzbGlkZXIgPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUo
bWVkaWFFbGVtZW50KTsKKyAgICBjb250cm9scy0+bV92b2x1bWVTbGlkZXIgPSBzbGlkZXIuZ2V0
KCk7CisgICAgdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5hcHBlbmRDaGlsZChzbGlkZXIucmVsZWFz
ZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKIAotdm9pZCBN
ZWRpYUNvbnRyb2xzOjp1cGRhdGUoKQotewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhID0g
bV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+Y29udHJvbHMoKSB8fCAhbWVkaWEtPmlu
QWN0aXZlRG9jdW1lbnQoKSkgewotICAgICAgICBpZiAobV9jb250cm9sc1NoYWRvd1Jvb3QpIHsK
LSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKTsKLSAgICAgICAgICAg
IG1fcGFuZWwgPSAwOwotICAgICAgICAgICAgbV9tdXRlQnV0dG9uID0gMDsKLSAgICAgICAgICAg
IG1fcGxheUJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3N0YXR1c0Rpc3BsYXkgPSAwOwotICAg
ICAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lciA9IDA7Ci0gICAgICAgICAgICBtX3RpbWVsaW5l
ID0gMDsKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24gPSAwOwotICAgICAgICAgICAgbV9z
ZWVrRm9yd2FyZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3Jld2luZEJ1dHRvbiA9IDA7Ci0g
ICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSAwOwotICAgICAgICAgICAgbV9j
dXJyZW50VGltZURpc3BsYXkgPSAwOwotICAgICAgICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxh
eSA9IDA7Ci0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSAwOwotICAgICAgICAgICAg
bV92b2x1bWVTbGlkZXJDb250YWluZXIgPSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXIg
PSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0gMDsKLSAgICAgICAg
ICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gMDsKLSAgICAgICAgICAgIG1fdG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b24gPSAwOwotICAgICAgICB9Ci0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlv
blRvID0gMS4wZjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJN
dXRlQnV0dG9uRWxlbWVudD4gdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFZv
bHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBj
b250cm9scy0+bV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0gdm9sdW1lU2xpZGVyTXV0ZUJ1dHRv
bi5nZXQoKTsKKyAgICB2b2x1bWVTbGlkZXJDb250YWluZXItPmFwcGVuZENoaWxkKHZvbHVtZVNs
aWRlck11dGVCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAg
ICByZXR1cm4gMDsKIAotICAgIGlmICghbV9jb250cm9sc1NoYWRvd1Jvb3QpIHsKLSAgICAgICAg
Y3JlYXRlQ29udHJvbHNTaGFkb3dSb290KCk7Ci0gICAgICAgIGNyZWF0ZVBhbmVsKCk7Ci0gICAg
ICAgIGlmIChtX3BhbmVsKSB7Ci0gICAgICAgICAgICBjcmVhdGVSZXdpbmRCdXR0b24oKTsKLSAg
ICAgICAgICAgIGNyZWF0ZVBsYXlCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVJldHVyblRv
UmVhbHRpbWVCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVN0YXR1c0Rpc3BsYXkoKTsKLSAg
ICAgICAgICAgIGNyZWF0ZVRpbWVsaW5lQ29udGFpbmVyKCk7Ci0gICAgICAgICAgICBpZiAobV90
aW1lbGluZUNvbnRhaW5lcikgewotICAgICAgICAgICAgICAgIGNyZWF0ZUN1cnJlbnRUaW1lRGlz
cGxheSgpOwotICAgICAgICAgICAgICAgIGNyZWF0ZVRpbWVsaW5lKCk7Ci0gICAgICAgICAgICAg
ICAgY3JlYXRlVGltZVJlbWFpbmluZ0Rpc3BsYXkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNyZWF0ZVNlZWtCYWNrQnV0dG9uKCk7Ci0gICAgICAgICAgICBjcmVhdGVTZWVrRm9yd2Fy
ZEJ1dHRvbigpOwotICAgICAgICAgICAgY3JlYXRlVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24o
KTsKLSAgICAgICAgICAgIGNyZWF0ZUZ1bGxzY3JlZW5CdXR0b24oKTsKLSAgICAgICAgICAgIGNy
ZWF0ZU11dGVCdXR0b24oKTsKLSAgICAgICAgICAgIGNyZWF0ZVZvbHVtZVNsaWRlckNvbnRhaW5l
cigpOwotICAgICAgICAgICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKSB7Ci0gICAgICAg
ICAgICAgICAgY3JlYXRlVm9sdW1lU2xpZGVyKCk7Ci0gICAgICAgICAgICAgICAgY3JlYXRlVm9s
dW1lU2xpZGVyTXV0ZUJ1dHRvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9wYW5l
bC0+YXR0YWNoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9wYW5lbCkgewotICAg
ICAgICAvLyB1cGRhdGUoKSBtaWdodCBhbHRlciB0aGUgb3BhY2l0eSBvZiB0aGUgZWxlbWVudCwg
ZXNwZWNpYWxseSBpZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZQotICAgICAgICAvLyBvZiBhbiBhbmlt
YXRpb24uIFRoaXMgaXMgdGhlIG9ubHkgZWxlbWVudCBjb25jZXJuZWQgYXMgd2UgYW5pbWF0ZSBv
bmx5IHRoaXMgZWxlbWVudC4KLSAgICAgICAgZmxvYXQgb3BhY2l0eUJlZm9yZUNoYW5naW5nU3R5
bGUgPSBtX3BhbmVsLT5yZW5kZXJlcigpID8gbV9wYW5lbC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
b3BhY2l0eSgpIDogMDsKLSAgICAgICAgbV9wYW5lbC0+dXBkYXRlKCk7Ci0gICAgICAgIGNoYW5n
ZU9wYWNpdHkobV9wYW5lbC5nZXQoKSwgb3BhY2l0eUJlZm9yZUNoYW5naW5nU3R5bGUpOwotICAg
IH0KLSAgICBpZiAobV9tdXRlQnV0dG9uKQotICAgICAgICBtX211dGVCdXR0b24tPnVwZGF0ZSgp
OwotICAgIGlmIChtX3BsYXlCdXR0b24pCi0gICAgICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlKCk7
Ci0gICAgaWYgKG1fdGltZWxpbmVDb250YWluZXIpCi0gICAgICAgIG1fdGltZWxpbmVDb250YWlu
ZXItPnVwZGF0ZSgpOwotICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKLSAgICAgICAg
bV92b2x1bWVTbGlkZXJDb250YWluZXItPnVwZGF0ZSgpOwotICAgIGlmIChtX3RpbWVsaW5lKQot
ICAgICAgICBtX3RpbWVsaW5lLT51cGRhdGUoKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3Bs
YXkpCi0gICAgICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT51cGRhdGUoKTsKLSAgICBpZiAobV90
aW1lUmVtYWluaW5nRGlzcGxheSkKLSAgICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+dXBk
YXRlKCk7Ci0gICAgaWYgKG1fc2Vla0JhY2tCdXR0b24pCi0gICAgICAgIG1fc2Vla0JhY2tCdXR0
b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3NlZWtGb3J3YXJkQnV0dG9uKQotICAgICAgICBtX3Nl
ZWtGb3J3YXJkQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9yZXdpbmRCdXR0b24pCi0gICAg
ICAgIG1fcmV3aW5kQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9yZXR1cm5Ub1JlYWx0aW1l
QnV0dG9uKQotICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPnVwZGF0ZSgpOwotICAg
IGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQotICAg
ICAgICBtX3N0YXR1c0Rpc3BsYXktPnVwZGF0ZSgpOwotICAgIGlmIChtX2Z1bGxzY3JlZW5CdXR0
b24pCi0gICAgICAgIG1fZnVsbHNjcmVlbkJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdm9s
dW1lU2xpZGVyKQotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1f
dm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9u
LT51cGRhdGUoKTsKKyAgICBjb250cm9scy0+bV92b2x1bWVTbGlkZXJDb250YWluZXIgPSB2b2x1
bWVTbGlkZXJDb250YWluZXIuZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHZvbHVtZVNs
aWRlckNvbnRhaW5lci5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybiAwOwogCi0gICAgdXBkYXRlVGltZURpc3BsYXkoKTsKLSAgICB1cGRhdGVDb250cm9s
VmlzaWJpbGl0eSgpOwotfQorICAgIC8vIEZJWE1FOiBETyBXRSBORUVEIG1fcGFuZWw/IT8hPyE/
CisgICAgY29udHJvbHMtPm1fcGFuZWwgPSBwYW5lbC5nZXQoKTsKKyAgICBjb250cm9scy0+YXBw
ZW5kQ2hpbGQocGFuZWwucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAg
ICByZXR1cm4gMDsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVDb250cm9sc1NoYWRvd1Jv
b3QoKQotewotICAgIEFTU0VSVCghbV9jb250cm9sc1NoYWRvd1Jvb3QpOwotICAgIG1fY29udHJv
bHNTaGFkb3dSb290ID0gTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmNyZWF0ZShtX21l
ZGlhRWxlbWVudCk7Ci0gICAgbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPmFkZENoaWxkKG1f
Y29udHJvbHNTaGFkb3dSb290LT5yZW5kZXJlcigpKTsKKyAgICByZXR1cm4gY29udHJvbHMucmVs
ZWFzZSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBhbmVsKCkKK3ZvaWQgTWVk
aWFDb250cm9sczo6c2hvdygpCiB7Ci0gICAgQVNTRVJUKCFtX3BhbmVsKTsKLSAgICBtX3BhbmVs
ID0gTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAg
IG1fcGFuZWwtPmF0dGFjaFRvUGFyZW50KG1fY29udHJvbHNTaGFkb3dSb290LmdldCgpKTsKKyAg
ICBtX3BhbmVsLT5zaG93KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlTXV0ZUJ1
dHRvbigpCit2b2lkIE1lZGlhQ29udHJvbHM6OmhpZGUoKQogewotICAgIEFTU0VSVCghbV9tdXRl
QnV0dG9uKTsKLSAgICBtX211dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25F
bGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fbXV0ZUJ1dHRvbi0+YXR0YWNo
VG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7CisgICAgbV9wYW5lbC0+aGlkZSgpOwogfQogCi12b2lk
IE1lZGlhQ29udHJvbHM6OmNyZWF0ZVBsYXlCdXR0b24oKQorc3RhdGljIGNvbnN0IFN0cmluZyYg
d2Via2l0VHJhbnNpdGlvblN0cmluZygpCiB7Ci0gICAgQVNTRVJUKCFtX3BsYXlCdXR0b24pOwot
ICAgIG1fcGxheUJ1dHRvbiA9IE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpjcmVhdGUo
bV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcGxheUJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5l
bC5nZXQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHMsICgiLXdlYmtpdC10
cmFuc2l0aW9uIikpOworICAgIHJldHVybiBzOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNy
ZWF0ZVNlZWtCYWNrQnV0dG9uKCkKK3N0YXRpYyBjb25zdCBTdHJpbmcmIG9wYWNpdHlTdHJpbmco
KQogewotICAgIEFTU0VSVCghbV9zZWVrQmFja0J1dHRvbik7Ci0gICAgbV9zZWVrQmFja0J1dHRv
biA9IE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVt
ZW50KTsKLSAgICBtX3NlZWtCYWNrQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcywgKCJvcGFjaXR5IikpOworICAg
IHJldHVybiBzOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVNlZWtGb3J3YXJkQnV0
dG9uKCkKK3ZvaWQgTWVkaWFDb250cm9sczo6bWFrZU9wYXF1ZSgpCiB7Ci0gICAgQVNTRVJUKCFt
X3NlZWtGb3J3YXJkQnV0dG9uKTsKLSAgICBtX3NlZWtGb3J3YXJkQnV0dG9uID0gTWVkaWFDb250
cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAg
IG1fc2Vla0ZvcndhcmRCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotfQor
ICAgIGlmIChtX29wYXF1ZSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIE1lZGlhQ29udHJvbHM6
OmNyZWF0ZVJld2luZEJ1dHRvbigpCi17Ci0gICAgQVNTRVJUKCFtX3Jld2luZEJ1dHRvbik7Ci0g
ICAgbV9yZXdpbmRCdXR0b24gPSBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpjcmVh
dGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcmV3aW5kQnV0dG9uLT5hdHRhY2hUb1BhcmVudCht
X3BhbmVsLmdldCgpKTsKLX0KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHJhbnNp
dGlvblZhbHVlLCAoKSk7CisgICAgaWYgKHRyYW5zaXRpb25WYWx1ZS5pc051bGwoKSkKKyAgICAg
ICAgdHJhbnNpdGlvblZhbHVlID0gU3RyaW5nOjpmb3JtYXQoIm9wYWNpdHkgJS4xZ3MiLCBkb2N1
bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgb3BhY2l0eVZhbHVlLCAoIjEiKSk7CiAK
LXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlUmV0dXJuVG9SZWFsdGltZUJ1dHRvbigpCi17Ci0g
ICAgQVNTRVJUKCFtX3JldHVyblRvUmVhbHRpbWVCdXR0b24pOwotICAgIG1fcmV0dXJuVG9SZWFs
dGltZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50Ojpj
cmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+YXR0
YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBt
X3BhbmVsLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eSh3ZWJraXRUcmFuc2l0aW9uU3RyaW5nKCksIHRy
YW5zaXRpb25WYWx1ZSwgZWMpOworICAgIG1fcGFuZWwtPnN0eWxlKCktPnNldFByb3BlcnR5KG9w
YWNpdHlTdHJpbmcoKSwgb3BhY2l0eVZhbHVlLCBlYyk7CisgICAgbV9vcGFxdWUgPSB0cnVlOwog
fQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
KCkKK3ZvaWQgTWVkaWFDb250cm9sczo6bWFrZVRyYW5zcGFyZW50KCkKIHsKLSAgICBBU1NFUlQo
IW1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24pOwotICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlv
bnNCdXR0b24gPSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6
OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRv
bi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci19CisgICAgaWYgKCFtX29wYXF1ZSkK
KyAgICAgICAgcmV0dXJuOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVN0YXR1c0Rpc3Bs
YXkoKQotewotICAgIEFTU0VSVCghbV9zdGF0dXNEaXNwbGF5KTsKLSAgICBtX3N0YXR1c0Rpc3Bs
YXkgPSBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVt
ZW50KTsKLSAgICBtX3N0YXR1c0Rpc3BsYXktPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkp
OwotfQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0cmFuc2l0aW9uVmFsdWUsICgp
KTsKKyAgICBpZiAodHJhbnNpdGlvblZhbHVlLmlzTnVsbCgpKQorICAgICAgICB0cmFuc2l0aW9u
VmFsdWUgPSBTdHJpbmc6OmZvcm1hdCgib3BhY2l0eSAlLjFncyIsIGRvY3VtZW50KCktPnBhZ2Uo
KS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpKTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgb3BhY2l0eVZhbHVlLCAoIjAiKSk7CiAKLXZvaWQgTWVkaWFD
b250cm9sczo6Y3JlYXRlVGltZWxpbmVDb250YWluZXIoKQotewotICAgIEFTU0VSVCghbV90aW1l
bGluZUNvbnRhaW5lcik7Ci0gICAgbV90aW1lbGluZUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRp
bWVsaW5lQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3Rp
bWVsaW5lQ29udGFpbmVyLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKKyAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgIC8vIEZJWE1FOiBNYWtlIG1vcmUgZWZmaWNpZW50LgorICAgIG1f
cGFuZWwtPnN0eWxlKCktPnNldFByb3BlcnR5KHdlYmtpdFRyYW5zaXRpb25TdHJpbmcoKSwgdHJh
bnNpdGlvblZhbHVlLCBlYyk7CisgICAgbV9wYW5lbC0+c3R5bGUoKS0+c2V0UHJvcGVydHkob3Bh
Y2l0eVN0cmluZygpLCBvcGFjaXR5VmFsdWUsIGVjKTsKKyAgICBtX29wYXF1ZSA9IGZhbHNlOwog
fQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVRpbWVsaW5lKCkKK3ZvaWQgTWVkaWFDb250
cm9sczo6cmVzZXQoKQogewotICAgIEFTU0VSVCghbV90aW1lbGluZSk7Ci0gICAgbV90aW1lbGlu
ZSA9IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsK
LSAgICBtX3RpbWVsaW5lLT5zZXRBdHRyaWJ1dGUocHJlY2lzaW9uQXR0ciwgImZsb2F0Iik7Ci0g
ICAgbV90aW1lbGluZS0+YXR0YWNoVG9QYXJlbnQobV90aW1lbGluZUNvbnRhaW5lci5nZXQoKSk7
Ci19CisgICAgY2hhbmdlZE5ldHdvcmtTdGF0ZSgpOworICAgIGZsb2F0IGR1cmF0aW9uID0gbV9t
ZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CisgICAgaWYgKCFpc25hbihkdXJhdGlvbikpIHsKKyAg
ICAgICAgbV90aW1lbGluZS0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworICAgICAgICBtX3RpbWVs
aW5lQ29udGFpbmVyLT5zaG93KCk7CisgICAgICAgIG1fdGltZWxpbmUtPnNldFBvc2l0aW9uKG1f
bWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpKTsKKyAgICAgICAgdXBkYXRlVGltZURpc3BsYXko
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lci0+aGlkZSgpOworCisg
ICAgaWYgKG1fbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpKQorICAgICAgICBtX3BhbmVsTXV0ZUJ1
dHRvbi0+c2hvdygpOworICAgIGVsc2UKKyAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPmhpZGUo
KTsKIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoKQot
ewotICAgIEFTU0VSVCghbV92b2x1bWVTbGlkZXJDb250YWluZXIpOwotICAgIG1fdm9sdW1lU2xp
ZGVyQ29udGFpbmVyID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6
Y3JlYXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+YXR0
YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci19CisgICAgbV92b2x1bWVTbGlkZXItPnNldFZv
bHVtZShtX21lZGlhRWxlbWVudC0+dm9sdW1lKCkpOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNy
ZWF0ZVZvbHVtZVNsaWRlcigpCi17Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlcik7Ci0gICAg
bV92b2x1bWVTbGlkZXIgPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUo
bV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRBdHRyaWJ1dGUocHJlY2lz
aW9uQXR0ciwgImZsb2F0Iik7Ci0gICAgbV92b2x1bWVTbGlkZXItPnNldEF0dHJpYnV0ZShtYXhB
dHRyLCAiMSIpOwotICAgIG1fdm9sdW1lU2xpZGVyLT5zZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBT
dHJpbmc6Om51bWJlcihtX21lZGlhRWxlbWVudC0+dm9sdW1lKCkpKTsKLSAgICBtX3ZvbHVtZVNs
aWRlci0+YXR0YWNoVG9QYXJlbnQobV92b2x1bWVTbGlkZXJDb250YWluZXIuZ2V0KCkpOwotfQor
ICAgIGlmIChtX21lZGlhRWxlbWVudC0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKKyAgICAgICAgbV90
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+c2hvdygpOworICAgIGVsc2UKKyAgICAgICAgbV90
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOworCisgICAgaWYgKG1fbWVkaWFFbGVt
ZW50LT5tb3ZpZUxvYWRUeXBlKCkgIT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW0pIHsKKyAgICAg
ICAgbV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uLT5oaWRlKCk7CisgICAgICAgIG1fcmV3aW5kQnV0
dG9uLT5zaG93KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9yZXR1cm5Ub1JlYWxUaW1lQnV0
dG9uLT5zaG93KCk7CisgICAgICAgIG1fcmV3aW5kQnV0dG9uLT5oaWRlKCk7CisgICAgfQogCi12
b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZVZvbHVtZVNsaWRlck11dGVCdXR0b24oKQotewotICAg
IEFTU0VSVCghbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uKTsKLSAgICBtX3ZvbHVtZVNsaWRlck11
dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKG1fbWVkaWFFbGVtZW50KTsKLSAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPmF0dGFj
aFRvUGFyZW50KG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLmdldCgpKTsKKyAgICBtYWtlT3BhcXVl
KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y3JlYXRlQ3VycmVudFRpbWVEaXNwbGF5KCkK
K3ZvaWQgTWVkaWFDb250cm9sczo6cGxheWJhY2tTdGFydGVkKCkKIHsKLSAgICBBU1NFUlQoIW1f
Y3VycmVudFRpbWVEaXNwbGF5KTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheSA9IE1lZGlhQ29u
dHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0g
ICAgbV9jdXJyZW50VGltZURpc3BsYXktPmF0dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWlu
ZXIuZ2V0KCkpOworICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKKyAgICBt
X3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSk7Cisg
ICAgdXBkYXRlVGltZURpc3BsYXkoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjcmVhdGVU
aW1lUmVtYWluaW5nRGlzcGxheSgpCit2b2lkIE1lZGlhQ29udHJvbHM6OnBsYXliYWNrUHJvZ3Jl
c3NlZCgpCiB7Ci0gICAgQVNTRVJUKCFtX3RpbWVSZW1haW5pbmdEaXNwbGF5KTsKLSAgICBtX3Rp
bWVSZW1haW5pbmdEaXNwbGF5ID0gTWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVt
ZW50OjpjcmVhdGUobV9tZWRpYUVsZW1lbnQpOwotICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXkt
PmF0dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOworICAgIG1fdGltZWxp
bmUtPnNldFBvc2l0aW9uKG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpKTsKKyAgICB1cGRh
dGVUaW1lRGlzcGxheSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNyZWF0ZUZ1bGxzY3Jl
ZW5CdXR0b24oKQordm9pZCBNZWRpYUNvbnRyb2xzOjpwbGF5YmFja1N0b3BwZWQoKQogewotICAg
IEFTU0VSVCghbV9mdWxsc2NyZWVuQnV0dG9uKTsKLSAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSBN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1fbWVkaWFFbGVtZW50
KTsKLSAgICBtX2Z1bGxzY3JlZW5CdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkp
OworICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKKyAgICBtX3RpbWVsaW5l
LT5zZXRQb3NpdGlvbihtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSk7CisgICAgdXBkYXRl
VGltZURpc3BsYXkoKTsKKyAgICBtYWtlT3BhcXVlKCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9s
czo6dXBkYXRlVGltZURpc3BsYXkoKQogewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVu
ZGVyZXIoKSk7Ci0KLSAgICBpZiAoIW1fY3VycmVudFRpbWVEaXNwbGF5IHx8ICFtX2N1cnJlbnRU
aW1lRGlzcGxheS0+cmVuZGVyZXIoKSB8fCBtX2N1cnJlbnRUaW1lRGlzcGxheS0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+ZGlzcGxheSgpID09IE5PTkUgfHwgbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVy
KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBmbG9hdCBub3cgPSBtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKTsKICAgICBmbG9h
dCBkdXJhdGlvbiA9IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwogCi0gICAgLy8gQWxsb3cg
dGhlIHRoZW1lIHRvIGZvcm1hdCB0aGUgdGltZQorICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgp
LT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBbGxv
dyB0aGUgdGhlbWUgdG8gZm9ybWF0IHRoZSB0aW1lLgogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0g
ICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldElubmVyVGV4dChtX21lZGlhRWxlbWVudC0+cmVu
ZGVyZXIoKS0+dGhlbWUoKS0+Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKG5vdywgZHVy
YXRpb24pLCBlYyk7CisgICAgbV9jdXJyZW50VGltZURpc3BsYXktPnNldElubmVyVGV4dChkb2N1
bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShu
b3csIGR1cmF0aW9uKSwgZWMpOwogICAgIG1fY3VycmVudFRpbWVEaXNwbGF5LT5zZXRDdXJyZW50
VmFsdWUobm93KTsKLSAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5LT5zZXRJbm5lclRleHQobV9t
ZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnRoZW1lKCktPmZvcm1hdE1lZGlhQ29udHJvbHNSZW1h
aW5pbmdUaW1lKG5vdywgZHVyYXRpb24pLCBlYyk7CisgICAgbV90aW1lUmVtYWluaW5nRGlzcGxh
eS0+c2V0SW5uZXJUZXh0KGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+Zm9ybWF0TWVkaWFD
b250cm9sc1JlbWFpbmluZ1RpbWUobm93LCBkdXJhdGlvbiksIGVjKTsKICAgICBtX3RpbWVSZW1h
aW5pbmdEaXNwbGF5LT5zZXRDdXJyZW50VmFsdWUobm93IC0gZHVyYXRpb24pOwogfQogCi1SZW5k
ZXJCb3gqIE1lZGlhQ29udHJvbHM6OnJlbmRlckJveCgpCit2b2lkIE1lZGlhQ29udHJvbHM6OnJl
cG9ydGVkRXJyb3IoKQogewotICAgIHJldHVybiBtX2NvbnRyb2xzU2hhZG93Um9vdCA/IG1fY29u
dHJvbHNTaGFkb3dSb290LT5yZW5kZXJCb3goKSA6IDA7CisgICAgbV90aW1lbGluZUNvbnRhaW5l
ci0+aGlkZSgpOworICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CisgICAgbV92b2x1bWVT
bGlkZXJDb250YWluZXItPmhpZGUoKTsKKyAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
LT5oaWRlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6dXBkYXRlQ29udHJvbFZpc2liaWxp
dHkoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkTmV0d29ya1N0YXRlKCkKIHsKLSAgICBp
ZiAoIW1fcGFuZWwgfHwgIW1fcGFuZWwtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIERvbid0IGZhZGUgZm9yIGF1ZGlvIGNvbnRyb2xzLgotICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+aGFzVmlkZW8oKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1lZGlhLT5yZW5kZXJlcigpKTsKLQotICAg
IC8vIERvbid0IGZhZGUgaWYgdGhlIG1lZGlhIGVsZW1lbnQgaXMgbm90IHZpc2libGUKLSAgICBp
ZiAobWVkaWEtPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBzaG91bGRIaWRlQ29udHJvbGxlciA9ICFt
X21vdXNlT3ZlciAmJiAhbWVkaWEtPmNhblBsYXkoKTsKLQotICAgIC8vIERvIGZhZGluZyBtYW51
YWxseSwgY3NzIGFuaW1hdGlvbnMgZG9uJ3Qgd29yayB3aXRoIHNoYWRvdyB0cmVlcwotCi0gICAg
ZmxvYXQgYW5pbWF0ZUZyb20gPSBtX3BhbmVsLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vcGFjaXR5
KCk7Ci0gICAgZmxvYXQgYW5pbWF0ZVRvID0gc2hvdWxkSGlkZUNvbnRyb2xsZXIgPyAwLjBmIDog
MS4wZjsKLQotICAgIGlmIChhbmltYXRlRnJvbSA9PSBhbmltYXRlVG8pCi0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQtPnN1cHBvcnRzRnVsbHNjcmVlbigpKQorICAgICAg
ICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNob3coKTsKKyAgICBlbHNlCisgICAgICAgIG1fZnVsbFNj
cmVlbkJ1dHRvbi0+aGlkZSgpOwogCi0gICAgaWYgKG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyLmlz
QWN0aXZlKCkpIHsKLSAgICAgICAgaWYgKG1fb3BhY2l0eUFuaW1hdGlvblRvID09IGFuaW1hdGVU
bykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIu
c3RvcCgpOwotICAgIH0KKyAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQorICAgICAgICBtX3N0YXR1
c0Rpc3BsYXktPnVwZGF0ZSgpOworfQogCi0gICAgaWYgKGFuaW1hdGVGcm9tIDwgYW5pbWF0ZVRv
KQotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbiA9IG1fcGFuZWwtPnJlbmRlcmVy
KCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24gPSBtX3BhbmVsLT5yZW5kZXJlcigpLT50
aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7Cit2b2lkIE1lZGlhQ29udHJv
bHM6OmxvYWRlZE1ldGFkYXRhKCkKK3sKKyAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQorICAgICAg
ICBtX3N0YXR1c0Rpc3BsYXktPmhpZGUoKTsKIAotICAgIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20g
PSBhbmltYXRlRnJvbTsKLSAgICBtX29wYWNpdHlBbmltYXRpb25UbyA9IGFuaW1hdGVUbzsKKyAg
ICByZXNldCgpOworfQogCi0gICAgbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVu
dFRpbWUoKTsKLSAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjT3Bh
Y2l0eUFuaW1hdGlvblJlcGVhdERlbGF5KTsKK3ZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZENs
b3NlZENhcHRpb25zVmlzaWJpbGl0eSgpCit7CisgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbi0+dXBkYXRlRGlzcGxheVR5cGUoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFu
Z2VPcGFjaXR5KEhUTUxFbGVtZW50KiBlLCBmbG9hdCBvcGFjaXR5KQordm9pZCBNZWRpYUNvbnRy
b2xzOjpjaGFuZ2VkTXV0ZSgpCiB7Ci0gICAgaWYgKCFlIHx8ICFlLT5yZW5kZXJlcigpIHx8ICFl
LT5yZW5kZXJlcigpLT5zdHlsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBzID0gUmVuZGVyU3R5bGU6OmNsb25lKGUtPnJlbmRlcmVyKCktPnN0eWxlKCkpOwot
ICAgIHMtPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgLy8gei1pbmRleCBjYW4ndCBiZSBhdXRv
IGlmIG9wYWNpdHkgaXMgdXNlZAotICAgIHMtPnNldFpJbmRleCgwKTsKLSAgICBlLT5yZW5kZXJl
cigpLT5zZXRTdHlsZShzLnJlbGVhc2UoKSk7CisgICAgbV9wYW5lbE11dGVCdXR0b24tPmNoYW5n
ZWRNdXRlKCk7CisgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT5jaGFuZ2VkTXV0ZSgpOwog
fQogCi12b2lkIE1lZGlhQ29udHJvbHM6Om9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVkKFRpbWVy
PE1lZGlhQ29udHJvbHM+KikKK3ZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZFZvbHVtZSgpCiB7
Ci0gICAgZG91YmxlIHRpbWUgPSBjdXJyZW50VGltZSgpIC0gbV9vcGFjaXR5QW5pbWF0aW9uU3Rh
cnRUaW1lOwotICAgIGlmICh0aW1lID49IG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uKSB7Ci0g
ICAgICAgIHRpbWUgPSBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbjsKLSAgICAgICAgbV9vcGFj
aXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgIH0KLSAgICBmbG9hdCBvcGFjaXR5ID0gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChtX29wYWNpdHlBbmltYXRpb25Gcm9tICsgKG1fb3BhY2l0eUFu
aW1hdGlvblRvIC0gbV9vcGFjaXR5QW5pbWF0aW9uRnJvbSkgKiB0aW1lIC8gbV9vcGFjaXR5QW5p
bWF0aW9uRHVyYXRpb24pOwotICAgIGNoYW5nZU9wYWNpdHkobV9wYW5lbC5nZXQoKSwgb3BhY2l0
eSk7CisgICAgbV92b2x1bWVTbGlkZXItPnNldFZvbHVtZShtX21lZGlhRWxlbWVudC0+dm9sdW1l
KCkpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5l
cihib29sIHZpc2libGUpCit2b2lkIE1lZGlhQ29udHJvbHM6OnNob3dWb2x1bWVTbGlkZXIoKQog
ewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkgfHwgIW1fdm9sdW1lU2xpZGVy
Q29udGFpbmVyIHx8ICFtX3ZvbHVtZVNsaWRlcikKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50LT5o
YXNBdWRpbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodmlzaWJsZSAmJiAhbV92b2x1
bWVTbGlkZXJDb250YWluZXItPmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGlmICghbV9tdXRlQnV0
dG9uIHx8ICFtX211dGVCdXR0b24tPnJlbmRlcmVyKCkgfHwgIW1fbXV0ZUJ1dHRvbi0+cmVuZGVy
Qm94KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBzID0gbV92b2x1bWVTbGlkZXJDb250YWluZXItPnN0eWxlRm9yRWxlbWVudCgpOwotICAgICAg
ICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgICAgbV92
b2x1bWVTbGlkZXJDb250YWluZXItPnVwZGF0ZSgpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+
dXBkYXRlKCk7Ci0gICAgfSBlbHNlIGlmICghdmlzaWJsZSAmJiBtX3ZvbHVtZVNsaWRlckNvbnRh
aW5lci0+aXNWaXNpYmxlKCkpIHsKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNl
dFZpc2libGUoZmFsc2UpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRl
U3R5bGUoKTsKLSAgICB9CisgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNob3coKTsKIH0K
IAotdm9pZCBNZWRpYUNvbnRyb2xzOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQorY29uc3Qg
QXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xzOjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAgIGlmIChldmVudC0+
aXNNb3VzZUV2ZW50KCkgJiYgbV9jb250cm9sc1NoYWRvd1Jvb3QpIHsKLSAgICAgICAgTW91c2VF
dmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAg
ICAgIEludFBvaW50IHBvaW50KG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSk7Ci0KLSAg
ICAgICAgYm9vbCBkZWZhdWx0SGFuZGxlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV92b2x1bWVT
bGlkZXJNdXRlQnV0dG9uICYmIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+aGl0VGVzdChwb2lu
dCkpIHsKLSAgICAgICAgICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0gICAgICAgICAgICBkZWZhdWx0SGFuZGxlZCA9IGV2ZW50LT5kZWZh
dWx0SGFuZGxlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaG93Vm9sdW1lU2xpZGVy
ID0gZmFsc2U7Ci0gICAgICAgIGlmICghZGVmYXVsdEhhbmRsZWQgJiYgbV9tdXRlQnV0dG9uICYm
IG1fbXV0ZUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpIHsKLSAgICAgICAgICAgIG1fbXV0ZUJ1dHRv
bi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKLSAgICAgICAgICAgICAgICBzaG93
Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3ZvbHVtZVNs
aWRlckNvbnRhaW5lciAmJiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+aGl0VGVzdChwb2ludCkp
Ci0gICAgICAgICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV92
b2x1bWVTbGlkZXIgJiYgbV92b2x1bWVTbGlkZXItPmhpdFRlc3QocG9pbnQpKSB7Ci0gICAgICAg
ICAgICBtX3ZvbHVtZVNsaWRlci0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAg
ICAgICBzaG93Vm9sdW1lU2xpZGVyID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0
ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihzaG93Vm9sdW1lU2xpZGVyKTsKLQotICAgICAgICBpZiAo
bV9wbGF5QnV0dG9uICYmIG1fcGxheUJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAg
ICBtX3BsYXlCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlm
IChtX3NlZWtCYWNrQnV0dG9uICYmIG1fc2Vla0JhY2tCdXR0b24tPmhpdFRlc3QocG9pbnQpKQot
ICAgICAgICAgICAgbV9zZWVrQmFja0J1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
Ci0KLSAgICAgICAgaWYgKG1fc2Vla0ZvcndhcmRCdXR0b24gJiYgbV9zZWVrRm9yd2FyZEJ1dHRv
bi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT5kZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV9yZXdpbmRCdXR0b24gJiYg
bV9yZXdpbmRCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9yZXdpbmRCdXR0
b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3JldHVyblRv
UmVhbHRpbWVCdXR0b24gJiYgbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLT5oaXRUZXN0KHBvaW50
KSkKLSAgICAgICAgICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7Ci0KLSAgICAgICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiAm
JiBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAg
ICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOwotCi0gICAgICAgIGlmIChtX3RpbWVsaW5lICYmIG1fdGltZWxpbmUtPmhpdFRlc3QocG9p
bnQpKQotICAgICAgICAgICAgbV90aW1lbGluZS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
Ci0KLSAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkJ1dHRvbiAmJiBtX2Z1bGxzY3JlZW5CdXR0b24t
PmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5kZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgICAgIG1fbW91c2VPdmVyID0gdHJ1
ZTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpIHsK
LSAgICAgICAgICAgIC8vIFdoZW4gdGhlIHNjcm9sbGJhciB0aHVtYiBjYXB0dXJlcyBtb3VzZSBl
dmVudHMsIHdlIHNob3VsZCB0cmVhdCB0aGUgbW91c2UgYXMgc3RpbGwgYmVpbmcgb3ZlciBvdXIg
cmVuZGVyZXIgaWYgdGhlIG5ldyB0YXJnZXQgaXMgYSBkZXNjZW5kYW50Ci0gICAgICAgICAgICBO
b2RlKiBtb3VzZU92ZXJOb2RlID0gbW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpID8gbW91c2VF
dmVudC0+cmVsYXRlZFRhcmdldCgpLT50b05vZGUoKSA6IDA7Ci0gICAgICAgICAgICBSZW5kZXJP
YmplY3QqIG1vdXNlT3ZlclJlbmRlcmVyID0gbW91c2VPdmVyTm9kZSA/IG1vdXNlT3Zlck5vZGUt
PnJlbmRlcmVyKCkgOiAwOwotICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSBtb3VzZU92ZXJSZW5k
ZXJlciAmJiBtb3VzZU92ZXJSZW5kZXJlci0+aXNEZXNjZW5kYW50T2YobV9tZWRpYUVsZW1lbnQt
PnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaWQs
ICgiLXdlYmtpdC1tZWRpYS1jb250cm9scyIpKTsKKyAgICByZXR1cm4gaWQ7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAppbmRleCA2ZDYyZjhmYWQw
OGVmZDVhMjQxODMxMTUzZDQzNzgyOWY5YjFjYTEwLi5kZTc5ZWViYTA2NTA1NmY3ZTM4NDZlOTY2
M2Q5MGM5ZmVhN2MyZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9scy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKKyNpbmNsdWRl
ICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCkBAIC0zOCwyOSArMzksMzkgQEAgY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBI
VE1MSW5wdXRFbGVtZW50OwogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIEV2ZW50Owot
Y2xhc3MgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xQ
YW5lbE11dGVCdXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1l
bnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudDsKLWNsYXNzIE1lZGlhQ29u
dHJvbFNoYWRvd1Jvb3RFbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxl
bWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50Owog
Y2xhc3MgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OworY2xh
c3MgTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29u
dHJvbFRpbWVsaW5lRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNw
bGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ7CiBjbGFz
cyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJv
bFRpbWVEaXNwbGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVt
ZW50OwogY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OworY2xhc3Mg
TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJFbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVs
ZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50Owot
Y2xhc3MgTWVkaWFDb250cm9sRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVu
dDsKIGNsYXNzIE1lZGlhUGxheWVyOwogCiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJN
ZWRpYTsKIAotY2xhc3MgTWVkaWFDb250cm9scyB7CisvLyBGSVhNRTogUmVuYW1lIHRvIE1lZGlh
Q29udHJvbFJvb3RFbGVtZW50LgorY2xhc3MgTWVkaWFDb250cm9scyA6IHB1YmxpYyBIVE1MRGl2
RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgTWVkaWFDb250cm9scyhIVE1MTWVkaWFFbGVtZW50Kik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9scz4gY3JlYXRlKEhUTUxNZWRpYUVs
ZW1lbnQqKTsKKworICAgIHZvaWQgc2hvdygpOworICAgIHZvaWQgaGlkZSgpOworICAgIHZvaWQg
bWFrZU9wYXF1ZSgpOworICAgIHZvaWQgbWFrZVRyYW5zcGFyZW50KCk7CiAKICAgICB2b2lkIHJl
c2V0KCk7CiAKQEAgLTcwLDc2ICs4MSw0NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNoYW5nZWRN
dXRlKCk7CiAgICAgdm9pZCBjaGFuZ2VkVm9sdW1lKCk7CisKKyAgICB2b2lkIHJlcG9ydGVkRXJy
b3IoKTsKKyAgICB2b2lkIGNoYW5nZWROZXR3b3JrU3RhdGUoKTsKKyAgICB2b2lkIGxvYWRlZE1l
dGFkYXRhKCk7CiAgICAgdm9pZCBjaGFuZ2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCk7CiAK
LSAgICB2b2lkIGRlc3Ryb3koKTsKLSAgICB2b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQgdXBkYXRl
U3R5bGUoKTsKLSAgICB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOworICAgIHZvaWQgc2hvd1Zv
bHVtZVNsaWRlcigpOwogICAgIHZvaWQgdXBkYXRlVGltZURpc3BsYXkoKTsKIAotICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB0byBhbGxvdyBSZW5kZXJNZWRpYTo6bGF5b3V0IHR3ZWFr
IHRoZSBwb3NpdGlvbiBvZiBjb250cm9scy4KLSAgICAvLyBPbmNlIHNoYWRvdyBET00gcmVmYWN0
b3JpbmcgaXMgY29tcGxldGUsIHRoZSB0d2Vha2luZyB3aWxsIGJlIGluIE1lZGlhQ29udHJvbHNT
aGFkb3dSb290IGFuZCB0aGlzIGFjY2Vzc29yIHdpbGwgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4K
LSAgICBSZW5kZXJCb3gqIHJlbmRlckJveCgpOwotCiBwcml2YXRlOgotICAgIHZvaWQgY3JlYXRl
Q29udHJvbHNTaGFkb3dSb290KCk7Ci0gICAgdm9pZCBkZXN0cm95Q29udHJvbHNTaGFkb3dSb290
KCk7Ci0gICAgdm9pZCBjcmVhdGVQYW5lbCgpOwotICAgIHZvaWQgY3JlYXRlTXV0ZUJ1dHRvbigp
OwotICAgIHZvaWQgY3JlYXRlUGxheUJ1dHRvbigpOwotICAgIHZvaWQgY3JlYXRlU2Vla0JhY2tC
dXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVNlZWtGb3J3YXJkQnV0dG9uKCk7Ci0gICAgdm9pZCBj
cmVhdGVSZXdpbmRCdXR0b24oKTsKLSAgICB2b2lkIGNyZWF0ZVJldHVyblRvUmVhbHRpbWVCdXR0
b24oKTsKLSAgICB2b2lkIGNyZWF0ZVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKCk7Ci0gICAg
dm9pZCBjcmVhdGVTdGF0dXNEaXNwbGF5KCk7Ci0gICAgdm9pZCBjcmVhdGVUaW1lbGluZUNvbnRh
aW5lcigpOwotICAgIHZvaWQgY3JlYXRlVGltZWxpbmUoKTsKLSAgICB2b2lkIGNyZWF0ZVZvbHVt
ZVNsaWRlckNvbnRhaW5lcigpOwotICAgIHZvaWQgY3JlYXRlVm9sdW1lU2xpZGVyKCk7Ci0gICAg
dm9pZCBjcmVhdGVWb2x1bWVTbGlkZXJNdXRlQnV0dG9uKCk7Ci0gICAgdm9pZCBjcmVhdGVDdXJy
ZW50VGltZURpc3BsYXkoKTsKLSAgICB2b2lkIGNyZWF0ZVRpbWVSZW1haW5pbmdEaXNwbGF5KCk7
Ci0gICAgdm9pZCBjcmVhdGVGdWxsc2NyZWVuQnV0dG9uKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUNv
bnRyb2xWaXNpYmlsaXR5KCk7Ci0gICAgdm9pZCBjaGFuZ2VPcGFjaXR5KEhUTUxFbGVtZW50Kiwg
ZmxvYXQgb3BhY2l0eSk7Ci0gICAgdm9pZCBvcGFjaXR5QW5pbWF0aW9uVGltZXJGaXJlZChUaW1l
cjxNZWRpYUNvbnRyb2xzPiopOwotCi0gICAgdm9pZCB1cGRhdGVWb2x1bWVTbGlkZXJDb250YWlu
ZXIoYm9vbCB2aXNpYmxlKTsKKyAgICBNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQqKTsK
IAotcHJpdmF0ZToKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IG1f
Y29udHJvbHNTaGFkb3dSb290OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xFbGVtZW50PiBtX3Bh
bmVsOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudD4gbV9tdXRlQnV0
dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4gbV9wbGF5QnV0
dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudD4gbV9zZWVrQmFj
a0J1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ+IG1fc2Vl
a0ZvcndhcmRCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1l
bnQ+IG1fcmV3aW5kQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0
aW1lQnV0dG9uRWxlbWVudD4gbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uOwotICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IG1fdG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVu
dD4gbV90aW1lbGluZTsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dD4gbV92b2x1bWVTbGlkZXI7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50PiBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5CdXR0b25FbGVtZW50PiBtX2Z1bGxzY3JlZW5CdXR0b247Ci0gICAgUmVmUHRyPE1l
ZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gbV90aW1lbGluZUNvbnRhaW5lcjsK
LSAgICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gbV92
b2x1bWVTbGlkZXJDb250YWluZXI7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVEaXNwbGF5
RWxlbWVudD4gbV9jdXJyZW50VGltZURpc3BsYXk7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRp
bWVEaXNwbGF5RWxlbWVudD4gbV90aW1lUmVtYWluaW5nRGlzcGxheTsKLSAgICBSZWZQdHI8TWVk
aWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+IG1fc3RhdHVzRGlzcGxheTsKKyAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIAogICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVtZW50OwotICAgIFRpbWVyPE1lZGlhQ29udHJvbHM+
IG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyOwogCi0gICAgZG91YmxlIG1fb3BhY2l0eUFuaW1hdGlv
blN0YXJ0VGltZTsKLSAgICBkb3VibGUgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb247Ci0gICAg
ZmxvYXQgbV9vcGFjaXR5QW5pbWF0aW9uRnJvbTsKLSAgICBmbG9hdCBtX29wYWNpdHlBbmltYXRp
b25UbzsKLQotICAgIGJvb2wgbV9tb3VzZU92ZXI7CisgICAgTWVkaWFDb250cm9sUmV3aW5kQnV0
dG9uRWxlbWVudCogbV9yZXdpbmRCdXR0b247CisgICAgTWVkaWFDb250cm9sUGxheUJ1dHRvbkVs
ZW1lbnQqIG1fcGxheUJ1dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0
dG9uRWxlbWVudCogbV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFN0
YXR1c0Rpc3BsYXlFbGVtZW50KiBtX3N0YXR1c0Rpc3BsYXk7CisgICAgTWVkaWFDb250cm9sQ3Vy
cmVudFRpbWVEaXNwbGF5RWxlbWVudCogbV9jdXJyZW50VGltZURpc3BsYXk7CisgICAgTWVkaWFD
b250cm9sVGltZWxpbmVFbGVtZW50KiBtX3RpbWVsaW5lOworICAgIE1lZGlhQ29udHJvbFRpbWVS
ZW1haW5pbmdEaXNwbGF5RWxlbWVudCogbV90aW1lUmVtYWluaW5nRGlzcGxheTsKKyAgICBNZWRp
YUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQqIG1fdGltZWxpbmVDb250YWluZXI7Cisg
ICAgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KiBtX3RvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVs
ZW1lbnQqIG1fcGFuZWxNdXRlQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVs
ZW1lbnQqIG1fdm9sdW1lU2xpZGVyOworICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVC
dXR0b25FbGVtZW50KiBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b247CisgICAgTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudCogbV92b2x1bWVTbGlkZXJDb250YWluZXI7Cisg
ICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQqIG1fZnVsbFNjcmVlbkJ1dHRv
bjsKKyAgICBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQqIG1fcGFuZWw7CisKKyAgICBib29sIG1f
b3BhcXVlOwogfTsKIAoraW5saW5lIE1lZGlhQ29udHJvbHMqIHRvTWVkaWFDb250cm9scyhOb2Rl
KiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xzKj4obm9kZSk7Cit9CiAKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggOWU2
MTI4YWFmM2ZhYTNlMzVlYmQ3OGIzN2IxMzYwMjRhNjk2YmI0YS4uNjIwM2ZiNzQxMmZkYTczNWEw
N2JlMjBhZjM0NDAwOTRmOGRkZWU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC02NywxMjggKzY3LDMzIEBAIHN0YXRpYyBj
b25zdCBmbG9hdCBjU2Vla1JlcGVhdERlbGF5ID0gMC4xZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBj
U3RlcFRpbWUgPSAwLjA3ZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBjU2Vla1RpbWUgPSAwLjJmOwog
Ci1pbmxpbmUgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNoYWRv
d1Jvb3RFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IEhUTUxE
aXZFbGVtZW50KGRpdlRhZywgbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpKQotewotICAgIHNldFNo
YWRvd0hvc3QobWVkaWFFbGVtZW50KTsKLX0KLQotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xTaGFk
b3dSb290RWxlbWVudD4gTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmNyZWF0ZShIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi17Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFNo
YWRvd1Jvb3RFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFNoYWRv
d1Jvb3RFbGVtZW50KG1lZGlhRWxlbWVudCkpOwotCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBy
b290U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgcm9vdFN0eWxlLT5pbmhlcml0
RnJvbShtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkpOwotICAgIHJvb3RTdHlsZS0+
c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgcm9vdFN0eWxlLT5zZXRQb3NpdGlvbihSZWxhdGl2ZVBv
c2l0aW9uKTsKLQotICAgIFJlbmRlck1lZGlhQ29udHJvbFNoYWRvd1Jvb3QqIHJlbmRlcmVyID0g
bmV3IChtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnJlbmRlckFyZW5hKCkpIFJlbmRlck1lZGlh
Q29udHJvbFNoYWRvd1Jvb3QoZWxlbWVudC5nZXQoKSk7Ci0gICAgcmVuZGVyZXItPnNldFN0eWxl
KHJvb3RTdHlsZS5yZWxlYXNlKCkpOwotCi0gICAgZWxlbWVudC0+c2V0UmVuZGVyZXIocmVuZGVy
ZXIpOwotICAgIGVsZW1lbnQtPnNldEF0dGFjaGVkKCk7Ci0gICAgZWxlbWVudC0+c2V0SW5Eb2N1
bWVudCgpOwotCi0gICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwotfQotCi12b2lkIE1lZGlh
Q29udHJvbFNoYWRvd1Jvb3RFbGVtZW50OjpkZXRhY2goKQotewotICAgIEhUTUxEaXZFbGVtZW50
OjpkZXRhY2goKTsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ugc2hhZG93IERPTSB1c2VzIEVs
ZW1lbnQ6OnNldFNoYWRvd1Jvb3QoKS4KLSAgICBzZXRTaGFkb3dIb3N0KDApOwotfQotCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIE1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlh
Q29udHJvbEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogSFRN
TERpdkVsZW1lbnQoZGl2VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX21l
ZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCiB7Ci0gICAgc2V0SW5Eb2N1bWVudCgpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmF0dGFjaFRvUGFyZW50KEVsZW1lbnQqIHBhcmVudCkK
LXsKLSAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJlIHdl
IG1hZ2ljYWxseSBhZGRpbmcgfHRoaXN8IHRvIHRoZSBET00gaGVyZT8KLSAgICAvLyAgICAgICAg
V2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcgcGFyc2VyIEFQSSBtZXRob2RzIG91dHNpZGUgb2YgdGhl
IHBhcnNlciEKLSAgICBwYXJlbnQtPnBhcnNlckFkZENoaWxkKHRoaXMpOwogfQogCi12b2lkIE1l
ZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZSgpCitzdGF0aWMgY29uc3QgU3RyaW5nJiBkaXNwbGF5
U3RyaW5nKCkKIHsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlRnJvbUVsZW1lbnQoKTsKLSAgICB1cGRhdGVTdHlsZSgpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBzLCAoImRpc3BsYXkiKSk7CisgICAgcmV0dXJuIHM7CiB9CiAKLVBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgp
Cit2b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnNob3coKQogewotICAgIEFTU0VSVChtX21lZGlh
RWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGRv
Y3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIG1fbWVkaWFF
bGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLCB0cnVlKTsKLSAgICBpZiAoIXN0eWxlKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICAKLSAgICAvLyB0ZXh0LWRlY29yYXRpb24gY2FuJ3QgYmUgb3Zl
cnJpZGVkIGZyb20gQ1NTLiBTbyB3ZSBkbyBpdCBoZXJlLgotICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwMTUKLSAgICBzdHlsZS0+c2V0VGV4dERl
Y29yYXRpb24oVEROT05FKTsKLSAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb25zSW5FZmZlY3Qo
VEROT05FKTsKLQotICAgIHJldHVybiBzdHlsZTsKLX0KLQotYm9vbCBNZWRpYUNvbnRyb2xFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBBU1NFUlQo
ZG9jdW1lbnQoKS0+cGFnZSgpKTsKLQotICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZChzdHlsZSkgJiYgcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+cmVuZGVy
ZXIoKQotICAgICAgICAmJiAoIXN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgfHwgZG9jdW1lbnQoKS0+
cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHN0eWxlLT5hcHBl
YXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KSk7Ci19Ci0gICAgCi12b2lkIE1lZGlhQ29udHJvbEVs
ZW1lbnQ6OmF0dGFjaCgpCi17Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxl
Rm9yRWxlbWVudCgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICBib29s
IG5lZWRzUmVuZGVyZXIgPSByZW5kZXJlcklzTmVlZGVkKHN0eWxlLmdldCgpKTsKLSAgICBpZiAo
IW5lZWRzUmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gY3JlYXRlUmVuZGVyZXIobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnJlbmRlckFy
ZW5hKCksIHN0eWxlLmdldCgpKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47
Ci0gICAgcmVuZGVyZXItPnNldFN0eWxlKHN0eWxlLmdldCgpKTsKLSAgICBzZXRSZW5kZXJlcihy
ZW5kZXJlcik7Ci0gICAgaWYgKHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnJlbmRlcmVy
KCkpIHsKLSAgICAgICAgLy8gRmluZCBuZXh0IHNpYmxpbmcgd2l0aCBhIHJlbmRlcmVyIHRvIGRl
dGVybWluZSB3aGVyZSB0byBpbnNlcnQuCi0gICAgICAgIE5vZGUqIHNpYmxpbmcgPSBuZXh0U2li
bGluZygpOwotICAgICAgICB3aGlsZSAoc2libGluZyAmJiAhc2libGluZy0+cmVuZGVyZXIoKSkK
LSAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0U2libGluZygpOwotICAgICAgICBw
YXJlbnROb2RlKCktPnJlbmRlcmVyKCktPmFkZENoaWxkKHJlbmRlcmVyLCBzaWJsaW5nID8gc2li
bGluZy0+cmVuZGVyZXIoKSA6IDApOwotICAgIH0KLSAgICBDb250YWluZXJOb2RlOjphdHRhY2go
KTsKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIC8vIEZJWE1FOiBNYWtlIG1vcmUgZWZmaWNp
ZW50LgorICAgIHN0eWxlKCktPnJlbW92ZVByb3BlcnR5KGRpc3BsYXlTdHJpbmcoKSwgZWMpOwog
fQogCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVN0eWxlKCkKK3ZvaWQgTWVkaWFD
b250cm9sRWxlbWVudDo6aGlkZSgpCiB7Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9t
ZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIG5lZWRzUmVuZGVyZXIgPSByZW5kZXJlcklzTmVl
ZGVkKHN0eWxlLmdldCgpKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJl
cigpOwotICAgIGlmIChyZW5kZXJlcigpICYmICFuZWVkc1JlbmRlcmVyKQotICAgICAgICBkZXRh
Y2goKTsKLSAgICBlbHNlIGlmICghcmVuZGVyZXIoKSAmJiBuZWVkc1JlbmRlcmVyKQotICAgICAg
ICBhdHRhY2goKTsKLSAgICBlbHNlIGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgIHJlbmRlcmVy
KCktPnNldFN0eWxlKHN0eWxlLmdldCgpKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBp
ZiB0aGVyZSBpcyBhbnkgaW5uZXJUZXh0IHJlbmRlcmVyLCBpdCBpcyB1cGRhdGVkIGFzIHdlbGwu
Ci0gICAgICAgIGlmIChmaXJzdENoaWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5yZW5kZXJlcigpKQot
ICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5yZW5kZXJlcigpLT5zZXRTdHlsZShzdHlsZS5nZXQo
KSk7Ci0gICAgfQorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2UgbW9y
ZSBlZmZpY2llbnQuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5vbmUsICgibm9u
ZSIpKTsKKyAgICBzdHlsZSgpLT5zZXRQcm9wZXJ0eShkaXNwbGF5U3RyaW5nKCksIG5vbmUsIGVj
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE5LDYgKzEyNCw3
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0CiBpbmxpbmUgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVt
ZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQogICAgIDogTWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1lbnQp
CiB7CisgICAgaGlkZSgpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVh
dGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQpAQCAtMjI2LDE5ICsxMzIsNiBAQCBQ
YXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250
cm9sVGltZWxpbmVDb250YWluZXJFbAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFDb250
cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KG1lZGlhRWxlbWVudCkpOwogfQogCi1ib29sIE1l
ZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgaWYgKCFNZWRpYUNvbnRyb2xFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKHN0eWxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWx3YXlz
IHNob3cgdGhlIHRpbWVsaW5lIGlmIHRoZSB0aGVtZSBkb2Vzbid0IHVzZSBzdGF0dXMgZGlzcGxh
eSAoTWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBmb3IgaW5zdGFuY2UpLgotICAgIGlmICgh
ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT51c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxh
eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFF
bGVtZW50KCktPmR1cmF0aW9uKCk7Ci0gICAgcmV0dXJuICFpc25hbihkdXJhdGlvbikgJiYgIWlz
aW5mKGR1cmF0aW9uKTsKLX0KLQogTWVkaWFDb250cm9sRWxlbWVudFR5cGUgTWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50OjpkaXNwbGF5VHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIE1lZGlhVGltZWxpbmVDb250YWluZXI7CkBAIC0yODYsOCArMTc5LDggQEAgdm9pZCBSZW5k
ZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KCkKIAogaW5saW5lIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckNvbnRhaW5lckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDog
TWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1lbnQpCi0gICAgLCBtX2lzVmlzaWJsZShmYWxz
ZSkKIHsKKyAgICBoaWRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTMwMCwyOSAr
MTkzLDIzIEBAIFJlbmRlck9iamVjdCogTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlck1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKHRoaXMpOwogfQogCi1QYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50Ojpz
dHlsZUZvckVsZW1lbnQoKQordm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlID0gTWVkaWFDb250cm9sRWxlbWVudDo6c3R5bGVGb3JFbGVtZW50
KCk7Ci0gICAgc3R5bGUtPnNldFBvc2l0aW9uKEFic29sdXRlUG9zaXRpb24pOwotICAgIHN0eWxl
LT5zZXREaXNwbGF5KG1faXNWaXNpYmxlID8gQkxPQ0sgOiBOT05FKTsKLSAgICByZXR1cm4gc3R5
bGU7Ci19CisgICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSAh
PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnNldFZpc2libGUoYm9vbCB2
aXNpYmxlKQotewotICAgIGlmICh2aXNpYmxlID09IG1faXNWaXNpYmxlKQorICAgIC8vIFBvb3Ig
bWFuJ3MgbW91c2VsZWF2ZSBldmVudCBkZXRlY3Rpb24uCisgICAgTW91c2VFdmVudCogbW91c2VF
dmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CisgICAgaWYgKCFtb3VzZUV2
ZW50LT5yZWxhdGVkVGFyZ2V0KCkgfHwgIW1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKS0+dG9O
b2RlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7Ci19CiAK
LWJvb2wgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6aGl0VGVzdChj
b25zdCBJbnRQb2ludCYgYWJzUG9pbnQpCi17Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXIo
KS0+dGhlbWUoKS0+aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQocmVuZGVyZXIoKSwgYWJzUG9pbnQp
OworICAgIGlmICh0aGlzLT5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTShtb3VzZUV2ZW50LT5y
ZWxhdGVkVGFyZ2V0KCktPnRvTm9kZSgpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIGhpZGUoKTsKIH0KIAorCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBNZWRp
YUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpkaXNwbGF5VHlwZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOwpAQCAtMzQwLDYgKzIy
Nyw3IEBAIGlubGluZSBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250
cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQoSFRNTE1lCiAgICAgOiBNZWRpYUNvbnRyb2xFbGVtZW50
KG1lZGlhRWxlbWVudCkKICAgICAsIG1fc3RhdGVCZWluZ0Rpc3BsYXllZChOb3RoaW5nKQogewor
ICAgIGhpZGUoKTsKIH0KIAogUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxl
bWVudD4gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQpCkBAIC0zNDksOCArMjM3LDYgQEAgUGFzc1JlZlB0cjxNZWRp
YUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudD4gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVs
ZW1lbnQ6OmMKIAogdm9pZCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRl
KCkKIHsKLSAgICBNZWRpYUNvbnRyb2xFbGVtZW50Ojp1cGRhdGUoKTsKLQogICAgIC8vIEdldCB0
aGUgbmV3IHN0YXRlIHRoYXQgd2UnbGwgaGF2ZSB0byBkaXNwbGF5LgogICAgIFN0YXRlQmVpbmdE
aXNwbGF5ZWQgbmV3U3RhdGVUb0Rpc3BsYXkgPSBOb3RoaW5nOwogCkBAIC0zNTksMTIgKzI0NSwx
OCBAQCB2b2lkIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50Ojp1cGRhdGUoKQogICAg
IGVsc2UgaWYgKG1lZGlhRWxlbWVudCgpLT5tb3ZpZUxvYWRUeXBlKCkgPT0gTWVkaWFQbGF5ZXI6
OkxpdmVTdHJlYW0pCiAgICAgICAgIG5ld1N0YXRlVG9EaXNwbGF5ID0gTGl2ZUJyb2FkY2FzdDsK
IAotICAgIC8vIFByb3BhZ2F0ZSBvbmx5IGlmIG5lZWRlZC4KICAgICBpZiAobmV3U3RhdGVUb0Rp
c3BsYXkgPT0gbV9zdGF0ZUJlaW5nRGlzcGxheWVkKQogICAgICAgICByZXR1cm47Ci0gICAgbV9z
dGF0ZUJlaW5nRGlzcGxheWVkID0gbmV3U3RhdGVUb0Rpc3BsYXk7CiAKICAgICBFeGNlcHRpb25D
b2RlIGU7CisKKyAgICBpZiAobV9zdGF0ZUJlaW5nRGlzcGxheWVkID09IE5vdGhpbmcpCisgICAg
ICAgIHNob3coKTsKKyAgICBlbHNlIGlmIChuZXdTdGF0ZVRvRGlzcGxheSA9PSBOb3RoaW5nKQor
ICAgICAgICBoaWRlKCk7CisKKyAgICBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRv
RGlzcGxheTsKKwogICAgIHN3aXRjaCAobV9zdGF0ZUJlaW5nRGlzcGxheWVkKSB7CiAgICAgY2Fz
ZSBOb3RoaW5nOgogICAgICAgICBzZXRJbm5lclRleHQoIiIsIGUpOwpAQCAtMzc4LDE0ICsyNzAs
NiBAQCB2b2lkIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50Ojp1cGRhdGUoKQogICAg
IH0KIH0KIAotYm9vbCBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgaWYgKCFNZWRpYUNvbnRyb2xFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSB8fCAhZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVt
ZSgpLT51c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKTsKLSAg
ICByZXR1cm4gKGlzbmFuKGR1cmF0aW9uKSB8fCBpc2luZihkdXJhdGlvbikpOwotfQotCiBNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6ZGlz
cGxheVR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBNZWRpYVN0YXR1c0Rpc3BsYXk7CkBAIC00
MDYsOTYgKzI5MCwxOCBAQCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29udHJvbElu
cHV0RWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbgogewogfQogCi12b2lkIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0YWNoVG9QYXJlbnQoRWxlbWVudCogcGFyZW50KQot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2VlbXMgdmVyeSB3cm9uZy4gIFdoeSBhcmUgd2Ug
bWFnaWNhbGx5IGFkZGluZyB8dGhpc3wgdG8gdGhlIERPTSBoZXJlPwotICAgIC8vICAgICAgICBX
ZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBwYXJzZXIgQVBJIG1ldGhvZHMgb3V0c2lkZSBvZiB0aGUg
cGFyc2VyIQotICAgIHBhcmVudC0+cGFyc2VyQWRkQ2hpbGQodGhpcyk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGUoKQotewotICAgIHVwZGF0ZURpc3BsYXlUeXBl
KCk7Ci0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21F
bGVtZW50KCk7Ci0gICAgdXBkYXRlU3R5bGUoKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpzdHlsZUZvckVsZW1lbnQoKQordm9pZCBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnNob3coKQogewotICAgIHJldHVybiBkb2N1bWVudCgpLT5z
dHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzLCAwLCB0cnVlKTsKLX0KLQotYm9v
bCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUq
IHN0eWxlKQotewotICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkpOwotCi0gICAgcmV0dXJu
IEhUTUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpICYmIHBhcmVudE5vZGUo
KSAmJiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkKLSAgICAgICAgJiYgKCFzdHlsZS0+aGFzQXBw
ZWFyYW5jZSgpIHx8IGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+c2hvdWxkUmVuZGVyTWVk
aWFDb250cm9sUGFydChzdHlsZS0+YXBwZWFyYW5jZSgpLCBtZWRpYUVsZW1lbnQoKSkpOworICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgc3R5bGUoKS0+cmVtb3ZlUHJvcGVydHkoZGlzcGxheVN0
cmluZygpLCBlYyk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjphdHRhY2go
KQordm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmhpZGUoKQogewotICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBuZWVkc1JlbmRlcmVyID0gcmVuZGVyZXJJ
c05lZWRlZChzdHlsZS5nZXQoKSk7Ci0gICAgaWYgKCFuZWVkc1JlbmRlcmVyKQotICAgICAgICBy
ZXR1cm47Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyKG1lZGlh
RWxlbWVudCgpLT5yZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7Ci0gICAg
aWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHJlbmRlcmVyLT5zZXRTdHlsZShz
dHlsZS5nZXQoKSk7Ci0gICAgc2V0UmVuZGVyZXIocmVuZGVyZXIpOwotICAgIGlmIChwYXJlbnRO
b2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIC8vIEZpbmQgbmV4
dCBzaWJsaW5nIHdpdGggYSByZW5kZXJlciB0byBkZXRlcm1pbmUgd2hlcmUgdG8gaW5zZXJ0Lgot
ICAgICAgICBOb2RlKiBzaWJsaW5nID0gbmV4dFNpYmxpbmcoKTsKLSAgICAgICAgd2hpbGUgKHNp
YmxpbmcgJiYgIXNpYmxpbmctPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICBzaWJsaW5nID0gc2li
bGluZy0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpLT5h
ZGRDaGlsZChyZW5kZXJlciwgc2libGluZyA/IHNpYmxpbmctPnJlbmRlcmVyKCkgOiAwKTsKLSAg
ICB9ICAKLSAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKLSAgICAvLyBGSVhNRTogQ3VycmVu
dGx5LCBNZWlkYUNvbnRyb2xJbnB1dCBjaXJjdW12ZW50cyB0aGUgbm9ybWFsIGF0dGFjaG1lbnQK
LSAgICAvLyBhbmQgc3R5bGUgcmVjYWxjIGN5Y2xlIGFuZCB0aHVzIHdlIG5lZWQgdG8gYWRkIGV4
dHJhIGxvZ2ljIHRvIGJlIGF3YXJlIG9mCi0gICAgLy8gdGhlIHNoYWRvdyBET00uIFJlbW92ZSB0
aGlzIG9uY2UgYWxsIG1lZGlhIGNvbnRyb2xzIGFyZSB0cmFuc2l0aW9uZWQgdG8gdXNlIHRoZSBy
ZWd1bGFyCi0gICAgLy8gc3R5bGUgY2FsY3VsYXRpb24uCi0gICAgaWYgKE5vZGUqIHNoYWRvd05v
ZGUgPSBzaGFkb3dSb290KCkpCi0gICAgICAgIHNoYWRvd05vZGUtPmF0dGFjaCgpOwotfQotCi12
b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6dXBkYXRlU3R5bGUoKQotewotICAgIGlmICgh
bWVkaWFFbGVtZW50KCkgfHwgIW1lZGlhRWxlbWVudCgpLT5yZW5kZXJlcigpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxl
bWVudCgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBib29s
IG5lZWRzUmVuZGVyZXIgPSByZW5kZXJlcklzTmVlZGVkKHN0eWxlLmdldCgpKSAmJiBwYXJlbnRO
b2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlcigpICYm
ICFuZWVkc1JlbmRlcmVyKQotICAgICAgICBkZXRhY2goKTsKLSAgICBlbHNlIGlmICghcmVuZGVy
ZXIoKSAmJiBuZWVkc1JlbmRlcmVyKQotICAgICAgICBhdHRhY2goKTsKLSAgICBlbHNlIGlmIChy
ZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlcigpLT5zZXRTdHlsZShzdHlsZS5nZXQoKSk7Ci0K
LSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBNZWlkYUNvbnRyb2xJbnB1dCBjaXJjdW12ZW50cyB0
aGUgbm9ybWFsIGF0dGFjaG1lbnQKLSAgICAvLyBhbmQgc3R5bGUgcmVjYWxjIGN5Y2xlIGFuZCB0
aHVzIHdlIG5lZWQgdG8gYWRkIGV4dHJhIGxvZ2ljIHRvIGJlIGF3YXJlIG9mCi0gICAgLy8gdGhl
IHNoYWRvdyBET00uIFJlbW92ZSB0aGlzIG9uY2UgYWxsIG1lZGlhIGNvbnRyb2xzIGFyZSB0cmFu
c2l0aW9uZWQgdG8gdXNlCi0gICAgLy8gdGhlIG5ldyBzaGFkb3cgRE9NLgotICAgIGlmIChOb2Rl
KiBzaGFkb3dOb2RlID0gc2hhZG93Um9vdCgpKQotICAgICAgICBzaGFkb3dOb2RlLT5yZWNhbGNT
dHlsZShOb2RlOjpGb3JjZSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBzdHlsZSgpLT5z
ZXRQcm9wZXJ0eShkaXNwbGF5U3RyaW5nKCksICJub25lIiwgZWMpOwogfQogCi1ib29sIE1lZGlh
Q29udHJvbElucHV0RWxlbWVudDo6aGl0VGVzdChjb25zdCBJbnRQb2ludCYgYWJzUG9pbnQpCi17
Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5j
ZSgpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+dGhlbWUoKS0+aGl0VGVzdE1lZGlhQ29u
dHJvbFBhcnQocmVuZGVyZXIoKSwgYWJzUG9pbnQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQog
CiB2b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6c2V0RGlzcGxheVR5cGUoTWVkaWFDb250
cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUpCiB7CkBAIC01MjAsOSArMzI2LDE1IEBAIHZvaWQg
TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
IGV2ZW50KQogICAgICAgICBtZWRpYUVsZW1lbnQoKS0+c2V0TXV0ZWQoIW1lZGlhRWxlbWVudCgp
LT5tdXRlZCgpKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQor
CiAgICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAK
K3ZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNoYW5nZWRNdXRlKCkKK3sKKyAg
ICB1cGRhdGVEaXNwbGF5VHlwZSgpOworfQorCiB2b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0b25F
bGVtZW50Ojp1cGRhdGVEaXNwbGF5VHlwZSgpCiB7CiAgICAgc2V0RGlzcGxheVR5cGUobWVkaWFF
bGVtZW50KCktPm11dGVkKCkgPyBNZWRpYVVuTXV0ZUJ1dHRvbiA6IE1lZGlhTXV0ZUJ1dHRvbik7
CkBAIC01MzAsMTggKzM0MiwyOSBAQCB2b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
Ojp1cGRhdGVEaXNwbGF5VHlwZSgpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotaW5saW5lIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJv
bFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQor
aW5saW5lIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbFBh
bmVsTXV0ZUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50LCBNZWRp
YUNvbnRyb2xzKiBjb250cm9scykKICAgICA6IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
KG1lZGlhRWxlbWVudCwgTWVkaWFNdXRlQnV0dG9uKQorICAgICwgbV9jb250cm9scyhjb250cm9s
cykKIHsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50
PiBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KQorUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0
b25FbGVtZW50PiBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKIHsK
LSAgICBSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gYnV0dG9uID0g
YWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVt
ZW50KSk7CisgICAgQVNTRVJUKGNvbnRyb2xzKTsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQ
YW5lbE11dGVCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9s
UGFuZWxNdXRlQnV0dG9uRWxlbWVudChtZWRpYUVsZW1lbnQsIGNvbnRyb2xzKSk7CiAgICAgYnV0
dG9uLT5zZXRUeXBlKCJidXR0b24iKTsKICAgICByZXR1cm4gYnV0dG9uLnJlbGVhc2UoKTsKIH0K
IAordm9pZCBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2VvdmVyRXZlbnQpCisgICAgICAgIG1fY29udHJvbHMtPnNob3dWb2x1bWVTbGlk
ZXIoKTsKKworICAgIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKGV2ZW50KTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xQYW5l
bE11dGVCdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiB7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMt
bXV0ZS1idXR0b24iKSk7CkBAIC01NTEsNyArMzc0LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBN
ZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGlubGluZSBNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotICAgIDogTWVk
aWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50LCBNZWRpYVZvbHVtZVNsaWRl
ck11dGVCdXR0b24pCisgICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChtZWRpYUVs
ZW1lbnQsIE1lZGlhTXV0ZUJ1dHRvbikKIHsKIH0KIApAQCAtNTg2LDYgKzQwOSw3IEBAIHZvaWQg
TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
IGV2ZW50KQogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50KSB7CiAgICAgICAgIG1lZGlhRWxlbWVudCgpLT50b2dnbGVQbGF5U3RhdGUoKTsKKyAgICAg
ICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOwpAQCAtNjEwLDYgKzQzNCw3IEBAIGlubGluZSBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxl
bWVudDo6TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlCiAgICAgLCBt
X2NhcHR1cmluZyhmYWxzZSkKICAgICAsIG1fc2Vla1RpbWVyKHRoaXMsICZNZWRpYUNvbnRyb2xT
ZWVrQnV0dG9uRWxlbWVudDo6c2Vla1RpbWVyRmlyZWQpCiB7CisgICAgaGlkZSgpOwogfQogCiB2
b2lkIE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldmVudCkKQEAgLTczMyw2ICs1NTgsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlh
Q29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIGlubGlu
ZSBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9s
UmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50KQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKQogeworICAgIGhpZGUoKTsKIH0KIAogUGFzc1JlZlB0cjxN
ZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sUmV0
dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQpCkBAIC03NjIsNiArNTg4LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNv
bnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKQogaW5s
aW5lIE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6TWVkaWFD
b250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQq
IG1lZGlhRWxlbWVudCkKICAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1l
bnQsIE1lZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uKQogeworICAgIGhpZGUoKTsKIH0KIAog
UGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+
IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTc3Niw4ICs2MDMsMTAgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGUKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkgewogICAgICAgICBtZWRpYUVsZW1lbnQoKS0+c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKCFtZWRpYUVsZW1lbnQoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkpOwogICAgICAg
ICBzZXRDaGVja2VkKG1lZGlhRWxlbWVudCgpLT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKSk7Cisg
ICAgICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogICAgIH0KKwogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOwogfQogCkBAIC03OTQsMTQgKzYyMywxOCBAQCBjb25zdCBBdG9taWNTdHJpbmcm
IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6c2hhZG93UHNl
dWRvSQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCkKK01lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6TWVkaWFDb250
cm9sVGltZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFD
b250cm9scyogY29udHJvbHMpCiAgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFF
bGVtZW50LCBNZWRpYVNsaWRlcikKKyAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCiB7CisgICAg
c2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOwogfQogCi1QYXNzUmVmUHRyPE1l
ZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50Ojpj
cmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQorUGFzc1JlZlB0cjxNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRl
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMp
CiB7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gdGltZWxpbmUgPSBh
ZG9wdFJlZihuZXcgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KG1lZGlhRWxlbWVudCkpOwor
ICAgIEFTU0VSVChjb250cm9scyk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVF
bGVtZW50PiB0aW1lbGluZSA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQobWVkaWFFbGVtZW50LCBjb250cm9scykpOwogICAgIHRpbWVsaW5lLT5zZXRUeXBlKCJyYW5n
ZSIpOwogICAgIHJldHVybiB0aW1lbGluZS5yZWxlYXNlKCk7CiB9CkBAIC04MjUsMjggKzY1OCwz
MCBAQCB2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiAKICAgICBmbG9hdCB0aW1lID0gbmFycm93UHJlY2lzaW9uVG9GbG9h
dCh2YWx1ZSgpLnRvRG91YmxlKCkpOwogICAgIGlmICh0aW1lICE9IG1lZGlhRWxlbWVudCgpLT5j
dXJyZW50VGltZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGZpcmVkIDMgdGltZXMg
b24gZXZlcnkgY2xpY2suIFdlIHNob3VsZCBub3QgYmUgZG9pbmcgdGhhdC4KICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKICAgICAgICAgbWVkaWFFbGVtZW50KCktPnNldEN1cnJlbnRUaW1lKHRp
bWUsIGVjKTsKICAgICB9CiAKICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xp
ZGVyKHJlbmRlcmVyKCkpOwogICAgIGlmIChzbGlkZXIgJiYgc2xpZGVyLT5pbkRyYWdNb2RlKCkp
Ci0gICAgICAgIHRvUmVuZGVyTWVkaWEobWVkaWFFbGVtZW50KCktPnJlbmRlcmVyKCkpLT5jb250
cm9scygpLT51cGRhdGVUaW1lRGlzcGxheSgpOworICAgICAgICBtX2NvbnRyb2xzLT51cGRhdGVU
aW1lRGlzcGxheSgpOwogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNldXBFdmVudCkKICAgICAgICAgbWVkaWFFbGVtZW50KCktPmVuZFNjcnViYmluZygpOwogfQog
Ci12b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6dXBkYXRlKGJvb2wgdXBkYXRlRHVy
YXRpb24pIAordm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OnNldFBvc2l0aW9uKGZs
b2F0IGN1cnJlbnRUaW1lKSAKIHsKLSAgICBpZiAodXBkYXRlRHVyYXRpb24pIHsKLSAgICAgICAg
ZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKTsKLSAgICAgICAgc2V0
QXR0cmlidXRlKG1heEF0dHIsIFN0cmluZzo6bnVtYmVyKGlzZmluaXRlKGR1cmF0aW9uKSA/IGR1
cmF0aW9uIDogMCkpOwotICAgIH0KLSAgICBzZXRWYWx1ZShTdHJpbmc6Om51bWJlcihtZWRpYUVs
ZW1lbnQoKS0+Y3VycmVudFRpbWUoKSkpOwotICAgIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6
dXBkYXRlKCk7CisgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIoY3VycmVudFRpbWUpKTsKK30K
Kwordm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OnNldER1cmF0aW9uKGZsb2F0IGR1
cmF0aW9uKQoreworICAgIHNldEF0dHJpYnV0ZShtYXhBdHRyLCBTdHJpbmc6Om51bWJlcihpc2Zp
bml0ZShkdXJhdGlvbikgPyBkdXJhdGlvbiA6IDApKTsKIH0KIAorCiBjb25zdCBBdG9taWNTdHJp
bmcmIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAog
ewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLXRpbWVsaW5lIikpOwpAQCAtODU4LDYgKzY5Myw4IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNv
bnN0CiBpbmxpbmUgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6TWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiAgICAg
OiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFFbGVtZW50LCBNZWRpYVZvbHVtZVNsaWRl
cikKIHsKKyAgICBzZXRBdHRyaWJ1dGUocHJlY2lzaW9uQXR0ciwgImZsb2F0Iik7CisgICAgc2V0
QXR0cmlidXRlKG1heEF0dHIsICIxIik7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6Y3JlYXRl
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKQEAgLTg4OSwxMiArNzI2LDEwIEBAIHZv
aWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiAgICAgfQogfQogCi12b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVs
ZW1lbnQ6OnVwZGF0ZSgpCit2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OnNl
dFZvbHVtZShmbG9hdCB2b2x1bWUpCiB7Ci0gICAgZmxvYXQgdm9sdW1lID0gbWVkaWFFbGVtZW50
KCktPnZvbHVtZSgpOwogICAgIGlmICh2YWx1ZSgpLnRvRmxvYXQoKSAhPSB2b2x1bWUpCiAgICAg
ICAgIHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZvbHVtZSkpOwotICAgIE1lZGlhQ29udHJvbElu
cHV0RWxlbWVudDo6dXBkYXRlKCk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdApAQCAtOTA4LDYg
Kzc0Myw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxl
bWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogaW5saW5lIE1lZGlhQ29udHJvbEZ1bGxzY3Jl
ZW5CdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudChIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiAgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQobWVkaWFFbGVtZW50LCBNZWRpYUZ1bGxzY3JlZW5CdXR0b24pCiB7CisgICAgaGlkZSgpOwog
fQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50PiBNZWRp
YUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQq
IG1lZGlhRWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRp
YUNvbnRyb2xFbGVtZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJv
bEVsZW1lbnRzLmgKaW5kZXggNTFjNjE0OTc0ZjEzYWFhMWFhYjljODVlMDQzNmY5MDI3NmI4MWUx
NS4uMTRjMmNkOWIyYWNlMTVhZThlNzc2NzIxY2E3ODY2OTY1ODA2YWZiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmgKQEAgLTQyLDYgKzQy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKIGNsYXNzIEZyYW1lOwor
Y2xhc3MgTWVkaWFDb250cm9sczsKIAogLy8gTXVzdCBtYXRjaCBXZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UuaAogZW51bSBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSB7CkBAIC03MSwyNCArNzIsMTMgQEAg
ZW51bSBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSB7CiAKIEhUTUxNZWRpYUVsZW1lbnQqIHRvUGFy
ZW50TWVkaWFFbGVtZW50KFJlbmRlck9iamVjdCopOwogCi1jbGFzcyBNZWRpYUNvbnRyb2xTaGFk
b3dSb290RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IGNyZWF0ZShIVE1M
TWVkaWFFbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgCi1wcml2
YXRlOgotICAgIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQq
KTsKLX07Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgTWVkaWFD
b250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZvaWQgYXR0YWNoVG9QYXJlbnQoRWxlbWVudCopOwot
ICAgIHZvaWQgdXBkYXRlKCk7Ci0gICAgdm9pZCB1cGRhdGVTdHlsZSgpOworICAgIC8vIEZJWE1F
OiBUaGVzZSBzaG91bGQgYmUgcGFydCBvZiBzb21lIElubGluZVN0eWxhYmxlRWxlbWVudC4KKyAg
ICB2b2lkIGhpZGUoKTsKKyAgICB2b2lkIHNob3coKTsKIAogICAgIHZpcnR1YWwgTWVkaWFDb250
cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdCA9IDA7CiAKQEAgLTk3LDkgKzg3LDcg
QEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIE1lZGlhQ29udHJvbEVsZW1lbnQoSFRNTE1lZGlh
RWxlbWVudCopOwogCi0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUqKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVt
ZW50KCk7CisvLyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxl
bWVudCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC0xMTksNyArMTA3LDYgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsK
IH07CiAKLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBNZWRpYUNv
bnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVu
dCB7CkBAIC0xMjgsOSArMTE1LDkgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIE1lZGlhQ29u
dHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgdmly
dHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3Q7CiB9OwogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzksMTkgKzEyNiwxMiBAQCBjbGFzcyBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlhQ29u
dHJvbEVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7
CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudCgp
OwotICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKLSAgICBib29sIGlzVmlzaWJsZSgpIHsgcmV0
dXJuIG1faXNWaXNpYmxlOyB9Ci0gICAgYm9vbCBoaXRUZXN0KGNvbnN0IEludFBvaW50JiBhYnNQ
b2ludCk7Ci0KIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVy
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7Ci0KICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCog
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwg
dm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAgICAgdmlydHVhbCBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwotCi0gICAgYm9vbCBtX2lzVmlzaWJs
ZTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2Niw3ICsxNDYs
NiBAQCBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KEhUTUxN
ZWRpYUVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlz
cGxheVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSopOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9J
ZCgpIGNvbnN0OwogCiAgICAgZW51bSBTdGF0ZUJlaW5nRGlzcGxheWVkIHsgTm90aGluZywgTG9h
ZGluZywgTGl2ZUJyb2FkY2FzdCB9OwpAQCAtMTc3LDExICsxNTYsOSBAQCBwcml2YXRlOgogCiBj
bGFzcyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCB7
CiBwdWJsaWM6Ci0gICAgdm9pZCBhdHRhY2hUb1BhcmVudChFbGVtZW50Kik7Ci0gICAgdm9pZCB1
cGRhdGUoKTsKLSAgICB2b2lkIHVwZGF0ZVN0eWxlKCk7Ci0KLSAgICBib29sIGhpdFRlc3QoY29u
c3QgSW50UG9pbnQmIGFic1BvaW50KTsKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHBh
cnQgb2Ygc29tZSBJbmxpbmVTdHlsYWJsZUVsZW1lbnQuCisgICAgdm9pZCBoaWRlKCk7CisgICAg
dm9pZCBzaG93KCk7CiAKICAgICBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheVR5cGU7IH0KIApAQCAtMTkzLDExICsxNzAsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXREaXNwbGF5VHlwZShNZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSk7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudCgpOwotCiAgICAgdmlydHVhbCBib29s
IGlzTWVkaWFDb250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpIHsgfQpAQCAtMjEwLDEwICsxODIsMTIgQEAg
cHJpdmF0ZToKIAogY2xhc3MgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMg
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZvaWQgY2hhbmdlZE11dGUoKTsKIAogcHJv
dGVjdGVkOgogICAgIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqLCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqKTsKKwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVEaXNwbGF5VHlwZSgpOwpAQCAtMjIzLDEyICsxOTcsMTUgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFD
b250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50
PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJvbHMqKTsKIAogcHJpdmF0ZToK
LSAgICBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQq
KTsKKyAgICBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqLCBNZWRpYUNvbnRyb2xzKik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCopOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1
ZG9JZCgpIGNvbnN0OworCisgICAgTWVkaWFDb250cm9scyogbV9jb250cm9sczsKIH07CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1MSwxMSArMjI4LDEyIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudD4g
Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50Kik7CisgICAgLy8gRklYTUU6IFBFUkhBUFMgTUFLRSBFWFBMSUNJVCBQ
TEFZL1BBVVNFIENBTExTLgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpOwog
CiBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpOwogICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogfTsKIApA
QCAtMzQwLDExICszMTgsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4gY3JlYXRlKEhUTUxNZWRp
YUVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Kik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAKIHByaXZhdGU6CiAg
ICAgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KEhUTUxNZWRp
YUVsZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEaXNwbGF5VHlwZSgpOwogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogfTsg
ICAgCiAKQEAgLTM1MiwxNSArMzMwLDE4IEBAIHByaXZhdGU6CiAKIGNsYXNzIE1lZGlhQ29udHJv
bFRpbWVsaW5lRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4g
Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiwgTWVkaWFDb250
cm9scyopOwogCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsK
LSAgICB2b2lkIHVwZGF0ZShib29sIHVwZGF0ZUR1cmF0aW9uID0gdHJ1ZSk7CisgICAgdm9pZCBz
ZXRQb3NpdGlvbihmbG9hdCk7CisgICAgdm9pZCBzZXREdXJhdGlvbihmbG9hdCk7CiAKIHByaXZh
dGU6Ci0gICAgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsK
KyAgICBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCosIE1lZGlh
Q29udHJvbHMqKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1
ZG9JZCgpIGNvbnN0OworCisgICAgTWVkaWFDb250cm9scyogbV9jb250cm9sczsKIH07CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3MCw3ICszNTEsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudD4g
Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50Kik7Ci0gICAgdm9pZCB1cGRhdGUoKTsKKyAgICB2b2lkIHNldFZvbHVt
ZShmbG9hdCk7CiAKIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dChIVE1MTWVkaWFFbGVtZW50Kik7CkBAIC00MzMsMTUgKzQxNCw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJNZWRpYUNv
bnRyb2xTaGFkb3dSb290IDogcHVibGljIFJlbmRlckJsb2NrIHsKLXB1YmxpYzoKLSAgICBSZW5k
ZXJNZWRpYUNvbnRyb2xTaGFkb3dSb290KEVsZW1lbnQqIGUpIDogUmVuZGVyQmxvY2soZSkgeyB9
Ci0gICAgdm9pZCBzZXRQYXJlbnQoUmVuZGVyT2JqZWN0KiBwKSB7IFJlbmRlck9iamVjdDo6c2V0
UGFyZW50KHApOyB9Ci19OwotICAgIAorIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZWRpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWEuY3BwCmluZGV4IDY5ZDcxZWMyODZiZjkyYzEwNTU4Zjc5MDE0N2Y3Zjk1NWEzYWEyZWEu
LjNjYzk2MDk2OWYwZTY3MWZkYWVhZTQ4OGUzM2VhNGUwN2I4NjM3NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcApAQCAtMjksMjIgKzI5LDE4IEBACiAjaW5jbHVk
ZSAiUmVuZGVyTWVkaWEuaCIKIAogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNs
dWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbHMuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVy
TWVkaWE6OlJlbmRlck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvKQogICAgIDogUmVuZGVy
SW1hZ2UodmlkZW8pCi0gICAgLCBtX2NvbnRyb2xzKG5ldyBNZWRpYUNvbnRyb2xzKHZpZGVvKSkK
IHsKICAgICBzZXRJbWFnZVJlc291cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsK
IH0KIAogUmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvLCBj
b25zdCBJbnRTaXplJiBpbnRyaW5zaWNTaXplKQogICAgIDogUmVuZGVySW1hZ2UodmlkZW8pCi0g
ICAgLCBtX2NvbnRyb2xzKG5ldyBNZWRpYUNvbnRyb2xzKHZpZGVvKSkKIHsKICAgICBzZXRJbWFn
ZVJlc291cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsKICAgICBzZXRJbnRyaW5z
aWNTaXplKGludHJpbnNpY1NpemUpOwpAQCAtNTQsMzIgKzUwLDI0IEBAIFJlbmRlck1lZGlhOjp+
UmVuZGVyTWVkaWEoKQogewogfQogCi12b2lkIFJlbmRlck1lZGlhOjpkZXN0cm95KCkKLXsKLSAg
ICBtX2NvbnRyb2xzLT5kZXN0cm95KCk7Ci0gICAgUmVuZGVySW1hZ2U6OmRlc3Ryb3koKTsKLX0K
LQorLy8gRklYTUU6IE1vdmUgdG8gUmVuZGVyVmlkZW8KIEhUTUxNZWRpYUVsZW1lbnQqIFJlbmRl
ck1lZGlhOjptZWRpYUVsZW1lbnQoKSBjb25zdAogeyAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTE1lZGlhRWxlbWVudCo+KG5vZGUoKSk7IAogfQogCi12b2lkIFJlbmRlck1lZGlhOjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQotewotICAgIFJlbmRlckltYWdlOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7
Ci0gICAgbV9jb250cm9scy0+dXBkYXRlU3R5bGUoKTsKLX0KLQogdm9pZCBSZW5kZXJNZWRpYTo6
bGF5b3V0KCkKIHsKICAgICBJbnRTaXplIG9sZFNpemUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUo
KTsKIAogICAgIFJlbmRlckltYWdlOjpsYXlvdXQoKTsKIAotICAgIFJlbmRlckJveCogY29udHJv
bHNSZW5kZXJlciA9IG1fY29udHJvbHMtPnJlbmRlckJveCgpOworICAgIC8vIEZJWE1FOiBBU1NV
TUVTIEZJUlNUIENISUxEIElTIFNIQURPVyBST09UIEJPWC4KKyAgICAvLyBGSVhNRTogTUFLRSBQ
QVJUIE9GIE1lZGlhQ29udHJvbHMuCisgICAgUmVuZGVyQm94KiBjb250cm9sc1JlbmRlcmVyID0g
dG9SZW5kZXJCb3gobV9jaGlsZHJlbi5maXJzdENoaWxkKCkpOwogICAgIGlmICghY29udHJvbHNS
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuOworCiAgICAgSW50U2l6ZSBuZXdTaXplID0gY29udGVu
dEJveFJlY3QoKS5zaXplKCk7CiAgICAgaWYgKG5ld1NpemUgPT0gb2xkU2l6ZSAmJiAhY29udHJv
bHNSZW5kZXJlci0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODksNyArNzcs
NiBAQCB2b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQogICAgIC8vIGFuZCB0aGlzIG1ldGhvZCB3
aWxsIGJlIGNhbGxlZCBtYW55IHRpbWVzIHBlciBzZWNvbmQgZHVyaW5nIHBsYXliYWNrLCB1c2Ug
YSBMYXlvdXRTdGF0ZU1haW50YWluZXI6CiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRl
UHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIGhhc1RyYW5zZm9ybSgpIHx8
IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
KTsKIAotICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKGJvcmRlckxlZnQoKSArIHBh
ZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKICAgICBjb250cm9sc1Jl
bmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVk
KSk7CiAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKG5ld1Np
emUud2lkdGgoKSwgRml4ZWQpKTsKICAgICBjb250cm9sc1JlbmRlcmVyLT5zZXROZWVkc0xheW91
dCh0cnVlLCBmYWxzZSk7CkBAIC05OSw5ICs4Niw5IEBAIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91
dCgpCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiB9CiAKLXZvaWQgUmVuZGVyTWVkaWE6OnVwZGF0
ZUZyb21FbGVtZW50KCkKK3ZvaWQgUmVuZGVyTWVkaWE6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBtX2NvbnRyb2xzLT51cGRhdGUoKTsKKyAgICBS
ZW5kZXJJbWFnZTo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVk
aWEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCmluZGV4IDc2NThl
ZjZjMTg0YzM5ODMyZTRjNWQ4MmY4Zjg3YTViNjUwYjUwMzEuLjU5NjRlYTRlNGM1ZGMxZDU2NDAz
NWNhMThiOTc2YzYwMTBlYjkyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRp
YS5oCkBAIC0zMyw3ICszMyw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxN
ZWRpYUVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xzOwogCiBjbGFzcyBSZW5kZXJNZWRpYSA6
IHB1YmxpYyBSZW5kZXJJbWFnZSB7CiBwdWJsaWM6CkBAIC00NSwyOSArNDQsMjEgQEAgcHVibGlj
OgogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGls
ZHJlbjsgfQogCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgY29uc3Q7Ci0g
ICAgTWVkaWFDb250cm9scyogY29udHJvbHMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGcm9tRWxlbWVudCgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQg
dHgsIGludCB0eSk7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxD
aGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRl
ck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRy
ZW4oKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICAKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTWVkaWEiOyB9
CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0KLSAgICB2
aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOwotCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVS
ZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIE93blB0cjxN
ZWRpYUNvbnRyb2xzPiBtX2NvbnRyb2xzOwogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2No
aWxkcmVuOwogfTsKIApAQCAtNzcsMTEgKzY4LDYgQEAgaW5saW5lIFJlbmRlck1lZGlhKiB0b1Jl
bmRlck1lZGlhKFJlbmRlck9iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJNZWRpYSo+KG9iamVjdCk7CiB9CiAKLWlubGluZSBNZWRpYUNvbnRyb2xzKiBSZW5kZXJN
ZWRpYTo6Y29udHJvbHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRyb2xzLmdldCgpOwot
fQotCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3Qu
CiB2b2lkIHRvUmVuZGVyTWVkaWEoY29uc3QgUmVuZGVyTWVkaWEqKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggNTIxZDY0ZmMwOWYzYjU2M2RiMDBiYWQ0
YmJkZDQxMTQ1ZWNkMGU4Ni4uYTY2ZGRjODQ4NzZhMmNiYzgwYTFjNWVkNDgzYWExOTYwNDlhZDNk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC00ODEsMzIg
KzQ4MSwxMCBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiB9CiAKICNpZiBFTkFCTEUoVklERU8p
Ci1ib29sIFJlbmRlclRoZW1lOjpoaXRUZXN0TWVkaWFDb250cm9sUGFydChSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IEludFBvaW50JiBhYnNQb2ludCkKLXsKLSAgICBpZiAoIW8tPmlzQm94KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG8tPmFi
c29sdXRlVG9Mb2NhbChhYnNQb2ludCwgZmFsc2UsIHRydWUpOyAgLy8gcmVzcGVjdCB0cmFuc2Zv
cm1zCi0gICAgcmV0dXJuIHRvUmVuZGVyQm94KG8pLT5ib3JkZXJCb3hSZWN0KCkuY29udGFpbnMo
cm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKLX0KIAotYm9vbCBSZW5kZXJUaGVtZTo6c2hv
dWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBwYXJ0LCBFbGVtZW50KiBlKQor
Ym9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFy
dCwgRWxlbWVudCopCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KGUpOwotICAgIHN3aXRjaCAocGFydCkgewotICAg
IGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+
aGFzQXVkaW8oKTsKLSAgICBjYXNlIE1lZGlhUmV3aW5kQnV0dG9uUGFydDoKLSAgICAgICAgcmV0
dXJuIG1lZGlhRWxlbWVudC0+bW92aWVMb2FkVHlwZSgpICE9IE1lZGlhUGxheWVyOjpMaXZlU3Ry
ZWFtOwotICAgIGNhc2UgTWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uUGFydDoKLSAgICAgICAg
cmV0dXJuIG1lZGlhRWxlbWVudC0+bW92aWVMb2FkVHlwZSgpID09IE1lZGlhUGxheWVyOjpMaXZl
U3RyZWFtOwotICAgIGNhc2UgTWVkaWFGdWxsc2NyZWVuQnV0dG9uUGFydDoKLSAgICAgICAgcmV0
dXJuIG1lZGlhRWxlbWVudC0+c3VwcG9ydHNGdWxsc2NyZWVuKCk7Ci0gICAgY2FzZSBNZWRpYVRv
Z2dsZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVu
dC0+aGFzQ2xvc2VkQ2FwdGlvbnMoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZTo6Zm9y
bWF0TWVkaWFDb250cm9sc1RpbWUoZmxvYXQgdGltZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmgKaW5kZXggMzVmMjU2Yzk2YTM1NmRmYTc2ZTBkYTc3Njg5NWYxMjdh
YWVhODA2NC4uNjAyYWNkNmRiZjBiN2VhMDdkZDNiOWMwMDRkOTBiY2Q3MTBmMzM3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKQEAgLTE3OCw3ICsxNzgsNiBAQCBwdWJs
aWM6CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgLy8gTWVkaWEgY29udHJvbHMKLSAgICB2aXJ0
dWFsIGJvb2wgaGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50
UG9pbnQmIGFic1BvaW50KTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVuZGVyTWVkaWFDb250
cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCopOwogICAgIHZpcnR1YWwgYm9vbCB1c2VzTWVk
aWFDb250cm9sU3RhdHVzRGlzcGxheSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBk
b3VibGUgbWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCkgeyByZXR1cm4gMC4xOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88736</attachid>
            <date>2011-04-07 16:58:34 -0700</date>
            <delta_ts>2011-04-08 15:50:39 -0700</delta_ts>
            <desc>Nearly ready for landing. Bake on EWSs.</desc>
            <filename>bug-53020-20110407165832.patch</filename>
            <type>text/plain</type>
            <size>95629</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2OWNlYjViYTEzY2I0OGIx
NTQyNTgyMGVmMTEzOGU2ZGJkYTVjNzY5Li5iN2YwNTlmYzBiY2RhOGE4Y2U3ZTJhZmY5YTFhYWU3
YjNmNDRjZGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM2IEBACisyMDExLTA0LTA3ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW01ldGFdIENvbnZlcnQgSFRNTE1lZGlhRWxl
bWVudCB0byB1c2UgdGhlIG5ldyBzaGFkb3cgRE9NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzAyMAorCisgICAgICAgIFRoaXMgY29udmVyc2lvbiBp
cyBub24tdHJpdmlhbCwgZm9yIHNldmVyYWwgcmVhc29uczoKKworICAgICAgICAxKSBTaW5jZSBI
VE1MTWVkaWFFbGVtZW50IG5vdyBob3N0cyB0aGUgc2hhZG93IERPTSBmb3IgY29udHJvbHMsIGhp
ZGluZworICAgICAgICBhbmQgc2hvd2luZyBjb250cm9scyBkb2VzIG5vdCByZXN1bHQgaW4gZGVz
dHJveWluZyBhbmQgcmUtY3JlYXRpbmcgdGhlCisgICAgICAgIHNoYWRvdyBET00gdHJlZS4gSW5z
dGVhZCwgdGhlIHRyZWUgaXMgY3JlYXRlZCBhcyBuZWVkZWQgYW5kIHNob3duL2hpZGRlbgorICAg
ICAgICB1c2luZyBpbmxpbmUgc3R5bGVzLgorICAgICAgICAKKyAgICAgICAgMikgSW5zdGVhZCBv
ZiBkZXRhY2hpbmcvYXR0YWNoaW5nIG9uIGVhY2ggc3R5bGUgY2hhbmdlLCB0aGUgY29udHJvbCBw
YXJ0cworICAgICAgICBhcmUgbm93IHVzaW5nIGEgc2V0IG9mIGhpZ2hlciBmaWRlbGl0eSBzZXQg
b2YgaG9va3MgdGhhdCBub3RpZnkgTWVkaWFDb250cm9scworICAgICAgICBhYm91dCBjaGFuZ2Vz
IHRvIHdoaWNoIGl0IHNob3VsZCByZWFjdC4gRWFjaCByZWFjdGlvbiByZXN1bHRzIGluIGhpZGlu
ZywKKyAgICAgICAgc2hvd2luZywgb3IgY2hhbmdpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb250cm9s
IHBhcnRzIHVzaW5nIGlubGluZSBzdHlsZXMKKyAgICAgICAgYW5kIERPTSBBUElzLgorCisgICAg
ICAgIDMpIEhpZGluZyBhbmQgc2hvd2luZyBjb250cm9scyBpcyBhY2NvbXBsaXNoZWQgdXNpbmcg
aW5saW5lIHN0eWxlcywgcmF0aGVyCisgICAgICAgIHRoYW4gd2lyaW5nIHJlbmRlcmVySXNOZWVk
ZWQsIGJlY2F1c2UgcmVuZGVyZXJzIGFyZSBub3cgcmUtY3JlYXRlZCBsZXNzCisgICAgICAgIGZy
ZXF1ZW50bHkuCisKKyAgICAgICAgNCkgSW5zdGVhZCBvZiBjb25zdGFudGx5IHF1ZXJ5aW5nIFJl
bmRlclRoZW1lIGFib3V0IHZpc2liaWxpdHkgb2YgYSBwYXJ0aWN1bGFyCisgICAgICAgIGNvbnRy
b2wgcGFydCwgd2UgbGV0IHRoZSB0aGVtZSBkZXRlcm1pbmUgd2hpY2ggcGFydHMgYXJlIHN1cHBv
cnRlZCBhbmQKKyAgICAgICAgd2hpY2ggcGFydHMgYXJlIHZpc2libGUgaW4gY2VydGFpbiBjb25k
aXRpb25zLgorCisgICAgICAgIDUpIEN1c3RvbSBoaXQtdGVzdGluZywgZXZlbnQgZm9yd2FyZGlu
ZywgYW5kIHN0eWxlIHVwZGF0ZXMgYXJlIGNvbXBsZXRlbHkKKyAgICAgICAgcmVtb3ZlZCwgc2lu
Y2UgdGhleSBhcmUgbm93IHVubmVjZXNzYXJ5LgorCisgICAgICAgIDYpIEZhZGluZyBjb250cm9s
cyBpbi9vdXQgaXMgbm93IGRvbmUgYXMgQ1NTIGFuaW1hdGlvbiwgc2luY2Ugc2hhZG93IERPTQor
ICAgICAgICBzdXBwb3J0cyBpdC4KKworICAgICAgICBUZXN0OiBtYW51YWwtdGVzdHMvbWVkaWEt
Y29udHJvbHMuaHRtbAorCisgICAgICAgICogY3NzL21lZGlhQ29udHJvbHMuY3NzOgorICAgICAg
ICAoOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzKTogQWRkZWQgbmV3IHBzZXVkby1lbGVtZW50IHRv
IGRlc2NyaWJlIG1lZGlhIGNvbnRyb2xzIGNvbnRhaW5lci4KKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRN
TE1lZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjphdHRy
aWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldE5l
dHdvcmtTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFk
eVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUHJv
Z3Jlc3NUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
bWVkaWFDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpoYXNN
ZWRpYUNvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVuc3Vy
ZU1lZGlhQ29udHJvbHMpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sczo6TWVkaWFDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6c2hvdyk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpoaWRlKToKKyAgICAgICAgKFdlYkNv
cmU6OndlYmtpdFRyYW5zaXRpb25TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6b3BhY2l0eVN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjptYWtlT3BhcXVlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6Om1ha2VUcmFuc3BhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xzOjpwbGF5YmFja1N0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sczo6cGxheWJhY2tQcm9ncmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bHM6OnBsYXliYWNrU3RvcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjp1
cGRhdGVUaW1lRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpyZXBv
cnRlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OmNoYW5nZWROZXR3
b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6bG9hZGVkTWV0YWRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENhcHRp
b25zVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpjaGFuZ2Vk
TXV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkVm9sdW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHM6OnNob3dWb2x1bWVTbGlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sczo6c2hhZG93UHNldWRvSWQpOgorICAgICAgICAq
IGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvTWVkaWFD
b250cm9scyk6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGxheVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xFbGVtZW50OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
dHJvbEVsZW1lbnQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxp
bmVDb250YWluZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
Q29udGFpbmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50
Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50Ojpz
aG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6aGlkZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xNdXRlQnV0dG9u
RWxlbWVudDo6Y2hhbmdlZE11dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUGFu
ZWxNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
TXV0ZUJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0
aW9uc0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OnNldFZv
bHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxl
bWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWVkaWE6OlJlbmRlck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1l
ZGlhOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWE6OnBhaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TWVkaWFDb250cm9sc0Nocm9taXVtLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjpzdXBwb3J0c0Nsb3NlZENhcHRpb25pbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6Omhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dXNlc01lZGlhQ29udHJvbFZvbHVtZVNsaWRlcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6Omhhc093bkRpc2FibGVkU3RhdGVIYW5k
bGluZ0Zvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW06
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdG
b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnN1cHBvcnRzQ2xvc2VkQ2FwdGlvbmluZyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6Omhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zvcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6dXNlc01lZGlhQ29udHJvbFZvbHVtZVNsaWRlcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lV2luOjpzdXBwb3J0c0Nsb3NlZENhcHRpb25pbmcpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46
OnN1cHBvcnRzQ2xvc2VkQ2FwdGlvbmluZyk6CisKIDIwMTEtMDQtMDIgIERpbWl0cmkgR2xhemtv
diAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNz
cyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcwppbmRleCA4NzRjYjEzMGQ1
ZjEwOTRkOGRiOTFlMjYzZDQyZjBkZGFlNDNlY2ExLi42NDNkNGM4NjI4MTk1ZWY0ZGNmMmYyNDdi
NjEzZjlhOTNjMTEwZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250
cm9scy5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHMuY3NzCkBAIC0y
OSw2ICsyOSwxMyBAQCBhdWRpbyB7CiAgICAgaGVpZ2h0OiAxNnB4OwogfQogCis6Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMgeworICAgIHdpZHRoOiBpbmhlcml0OworICAgIGhlaWdodDogaW5oZXJp
dDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKIGF1
ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1j
b250cm9scy1wYW5lbCB7CiAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAgLXdlYmtpdC1i
b3gtb3JpZW50OiBob3Jpem9udGFsOwpAQCAtOTgsMTIgKzEwNSw3IEBAIGF1ZGlvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10
aW1lbGluZSB7CiAgICAgbWFyZ2luOiBpbml0aWFsOwogfQogCi1hdWRpbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19
Ci0KIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIsIHZpZGVvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgewotICAgIGRpc3BsYXk6IG5vbmU7
CiAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKICAgICBib3JkZXI6IGluaXRpYWw7CiAg
ICAgY29sb3I6IGluaGVyaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAppbmRleCA2NDI3ZTQ3ODRiMjkxZmIxYjQyNDJkMmUzOGFjZjQwYzdiZTI1NDI4Li45NDg5NTc4
MWQxNWMzNWJmMjc1MjdmYjNhN2E2NGVmMmUwMzk4MWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFs
dWF0b3IuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgpAQCAt
MTYxLDYgKzE2Miw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX3NlbmRQcm9n
cmVzc0V2ZW50cyh0cnVlKQogICAgICwgbV9pc0Z1bGxzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2Ns
b3NlZENhcHRpb25zVmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQogI2lm
IEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRl
KGZhbHNlKQogI2VuZGlmCkBAIC0yMTgsMTIgKzIyMCwxNCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMp
CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGNvbnRyb2xzQXR0cikgewogI2lmICFF
TkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICAgICAgaWYgKCFpc1ZpZGVvKCkgJiYg
YXR0YWNoZWQoKSAmJiAoY29udHJvbHMoKSAhPSAocmVuZGVyZXIoKSAhPSAwKSkpIHsKLSAgICAg
ICAgICAgIGRldGFjaCgpOwotICAgICAgICAgICAgYXR0YWNoKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
cmVzZXQoKTsKKyAgICAgICAgaWYgKGNvbnRyb2xzKCkpIHsKKyAgICAgICAgICAgIGlmICghaGFz
TWVkaWFDb250cm9scygpKSB7CisgICAgICAgICAgICAgICAgZW5zdXJlTWVkaWFDb250cm9scygp
OworICAgICAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvdygpOworICAgICAgICB9IGVsc2Ug
aWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+aGlk
ZSgpOwogI2Vsc2UKICAgICAgICAgaWYgKG1fcGxheWVyKQogICAgICAgICAgICAgbV9wbGF5ZXIt
PnNldENvbnRyb2xzKGNvbnRyb2xzKCkpOwpAQCAtODg5LDYgKzg5Myw4IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3Rh
dGUpCiAgICAgICAgICAgICBub25lU3VwcG9ydGVkKCk7CiAKICAgICAgICAgdXBkYXRlRGlzcGxh
eVN0YXRlKCk7CisgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBt
ZWRpYUNvbnRyb2xzKCktPnJlcG9ydGVkRXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtOTE4LDYgKzkyNCw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0
YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3RhdGUpCiAgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTkVUV09SS19JRExFOwogICAgICAgICBtX2NvbXBsZXRlbHlMb2FkZWQgPSB0cnVlOwog
ICAgIH0KKworICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIG1lZGlhQ29udHJv
bHMoKS0+Y2hhbmdlZE5ldHdvcmtTdGF0ZSgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhUGxheWVyUmVhZHlTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQpAQCAtOTY3LDYgKzk3
Niw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSBzdGF0ZSkKICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfTUVUQURBVEEg
JiYgb2xkU3RhdGUgPCBIQVZFX01FVEFEQVRBKSB7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZl
bnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpOwogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2
ZW50TmFtZXMoKS5sb2FkZWRtZXRhZGF0YUV2ZW50KTsKKyAgICAgICAgaWYgKGhhc01lZGlhQ29u
dHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsK
ICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVG
cm9tRWxlbWVudCgpOwogICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKQEAgLTE1OTQsOSArMTYw
NSwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUHJvZ3Jlc3NUaW1lckZpcmVk
KFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+KikKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2NoZWR1
bGVUaW1ldXBkYXRlRXZlbnQodHJ1ZSk7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAg
ICBpZiAoaGFzTWVkaWFDb250cm9scygpKSB7CisgICAgICAgIGlmICghbV9tb3VzZU92ZXIgJiYg
Y29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bWFrZVRyYW5zcGFyZW50
KCk7CiAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cGxheWJhY2tQcm9ncmVzc2VkKCk7Ci0KKyAg
ICB9CiAgICAgLy8gRklYTUU6IGRlYWwgd2l0aCBjdWUgcmFuZ2VzIGhlcmUKIH0KIApAQCAtMjMx
MiwxMCArMjMyNSwxOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogICAgIGlmICh3aWRnZXQpCiAgICAgICAgIHdpZGdldC0+aGFuZGxl
RXZlbnQoZXZlbnQpOwogI2Vsc2UKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAg
ICBtZWRpYUNvbnRyb2xzKCktPmZvcndhcmRFdmVudChldmVudCk7Ci0gICAgaWYgKGV2ZW50LT5k
ZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGV2ZW50LT5pc01vdXNl
RXZlbnQoKSkgeworICAgICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2ZW50KTsKKyAgICAgICAgaWYgKG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJn
ZXQoKSAhPSB0aGlzKSB7CisgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAgICAgICAgICBtX21vdXNlT3ZlciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSAmJiBjb250cm9scygp
ICYmICFjYW5QbGF5KCkpCisgICAgICAgICAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bWFr
ZU9wYXF1ZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgICAgICAgICAgICAgIG1fbW91c2VPdmVyID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7CiAjZW5kaWYKIH0KQEAgLTI1OTUsMTMgKzI2MTYsMTggQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpCiAKIE1lZGlhQ29u
dHJvbHMqIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29udHJvbHMoKQogewotICAgIEFTU0VSVChy
ZW5kZXJlcigpKTsKLSAgICByZXR1cm4gdG9SZW5kZXJNZWRpYShyZW5kZXJlcigpKS0+Y29udHJv
bHMoKTsKKyAgICByZXR1cm4gdG9NZWRpYUNvbnRyb2xzKHNoYWRvd1Jvb3QoKSk7Cit9CisKK2Jv
b2wgSFRNTE1lZGlhRWxlbWVudDo6aGFzTWVkaWFDb250cm9scygpCit7CisgICAgcmV0dXJuIHNo
YWRvd1Jvb3QoKTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNvbnRyb2xz
KCkgY29uc3QKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm9scygpCiB7
Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNNZWRpYSgpOworICAgIGlm
ICghaGFzTWVkaWFDb250cm9scygpKQorICAgICAgICBzZXRTaGFkb3dSb290KE1lZGlhQ29udHJv
bHM6OmNyZWF0ZSh0aGlzKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKaW5kZXggZWE5NThmYWE0M2ZkNzdlYjI1OThkMTg1ZTZkYjY2ZmMyOTYxNDE4ZS4uMzY5
NjFkZmNhODQzYTQ0NTg5ZDdhMGMzYWYxODFlN2YzOGY5MWYzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTMyMyw3ICszMjMsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgaW52YWxpZGF0ZUNhY2hlZFRpbWUoKTsKICAgICB2b2lkIHJlZnJlc2hDYWNoZWRUaW1lKCkg
Y29uc3Q7CiAKLSAgICBib29sIGhhc01lZGlhQ29udHJvbHMoKSBjb25zdDsKKyAgICBib29sIGhh
c01lZGlhQ29udHJvbHMoKTsKKyAgICB2b2lkIGVuc3VyZU1lZGlhQ29udHJvbHMoKTsKIAogICAg
IFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbG9hZFRpbWVyOwogICAgIFRpbWVyPEhUTUxNZWRp
YUVsZW1lbnQ+IG1fYXN5bmNFdmVudFRpbWVyOwpAQCAtNDA0LDYgKzQwNSw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1faXNGdWxsc2NyZWVuIDogMTsKICAgICBib29sIG1fY2xvc2VkQ2FwdGlv
bnNWaXNpYmxlIDogMTsKKyAgICBib29sIG1fbW91c2VPdmVyIDogMTsKIAogI2lmIEVOQUJMRShQ
TFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgIGJvb2wgbV9uZWVkV2lkZ2V0VXBkYXRlIDogMTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKaW5kZXggMzQ1
ZjM3YjdhMWJiM2E2NjU1NjA5ZmEwZGJkOGZhZTgxYWYzOTU5Ni4uMzg2YWJhOGU1MTA5MDZkYWMx
NGY4NjhhYzZjMmMyZGZjYTYzOTQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9scy5jcHAKQEAgLTQ3LDQ3NiArNDcsMzc1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGNvbnN0IGRvdWJsZSBj
T3BhY2l0eUFuaW1hdGlvblJlcGVhdERlbGF5ID0gMC4wNTsKLQogTWVkaWFDb250cm9sczo6TWVk
aWFDb250cm9scyhIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBtX21lZGlh
RWxlbWVudChtZWRpYUVsZW1lbnQpCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25UaW1lcih0aGlz
LCAmTWVkaWFDb250cm9sczo6b3BhY2l0eUFuaW1hdGlvblRpbWVyRmlyZWQpCi0gICAgLCBtX29w
YWNpdHlBbmltYXRpb25TdGFydFRpbWUoMCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0
aW9uKDApCi0gICAgLCBtX29wYWNpdHlBbmltYXRpb25Gcm9tKDApCi0gICAgLCBtX29wYWNpdHlB
bmltYXRpb25UbygxLjBmKQotICAgICwgbV9tb3VzZU92ZXIoZmFsc2UpCisgICAgOiBIVE1MRGl2
RWxlbWVudChkaXZUYWcsIG1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fbWVkaWFF
bGVtZW50KG1lZGlhRWxlbWVudCkKKyAgICAsIG1fcmV3aW5kQnV0dG9uKDApCisgICAgLCBtX3Bs
YXlCdXR0b24oMCkKKyAgICAsIG1fcmV0dXJuVG9SZWFsVGltZUJ1dHRvbigwKQorICAgICwgbV9z
dGF0dXNEaXNwbGF5KDApCisgICAgLCBtX2N1cnJlbnRUaW1lRGlzcGxheSgwKQorICAgICwgbV90
aW1lbGluZSgwKQorICAgICwgbV90aW1lUmVtYWluaW5nRGlzcGxheSgwKQorICAgICwgbV90aW1l
bGluZUNvbnRhaW5lcigwKQorICAgICwgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbigwKQor
ICAgICwgbV9wYW5lbE11dGVCdXR0b24oMCkKKyAgICAsIG1fdm9sdW1lU2xpZGVyKDApCisgICAg
LCBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24oMCkKKyAgICAsIG1fdm9sdW1lU2xpZGVyQ29udGFp
bmVyKDApCisgICAgLCBtX2Z1bGxTY3JlZW5CdXR0b24oMCkKKyAgICAsIG1fZnVsbFNjcmVlbk1p
blZvbHVtZUJ1dHRvbigwKQorICAgICwgbV9mdWxsU2NyZWVuVm9sdW1lU2xpZGVyKDApCisgICAg
LCBtX2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0b24oMCkKKyAgICAsIG1fcGFuZWwoMCkKKyAgICAs
IG1fb3BhcXVlKHRydWUpCiB7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIHdpbGwgdHVybiBpbnRvIHRo
ZSBzdGFuZGFyZCBlbGVtZW50IGZhY3RvcnkgbWV0aG9kIG9uY2Ugc2hhZG93IERPTSBjb252ZXJz
aW9uIGlzIGNvbXBsZXRlLgotLy8gKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTMwMjApCi1QYXNzUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50
PiBNZWRpYUNvbnRyb2xzOjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQor
UGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xzPiBNZWRpYUNvbnRyb2xzOjpjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50KQogewotICAgIEFTU0VSVCghbV9wYW5lbCk7Ci0gICAgQVNT
RVJUKCFtX211dGVCdXR0b24pOwotICAgIEFTU0VSVCghbV9wbGF5QnV0dG9uKTsKLSAgICBBU1NF
UlQoIW1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbik7Ci0gICAgQVNTRVJUKCFtX3N0YXR1c0Rpc3Bs
YXkpOwotICAgIEFTU0VSVCghbV90aW1lbGluZUNvbnRhaW5lcik7Ci0gICAgQVNTRVJUKCFtX2N1
cnJlbnRUaW1lRGlzcGxheSk7Ci0gICAgQVNTRVJUKCFtX3RpbWVsaW5lKTsKLSAgICBBU1NFUlQo
IW1fdGltZVJlbWFpbmluZ0Rpc3BsYXkpOwotICAgIEFTU0VSVCghbV9zZWVrQmFja0J1dHRvbik7
Ci0gICAgQVNTRVJUKCFtX3NlZWtGb3J3YXJkQnV0dG9uKTsKLSAgICBBU1NFUlQoIW1fdG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24pOwotICAgIEFTU0VSVCghbV9mdWxsc2NyZWVuQnV0dG9uKTsK
LSAgICBBU1NFUlQoIW1fbXV0ZUJ1dHRvbik7Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlckNv
bnRhaW5lcik7Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZVNsaWRlcik7Ci0gICAgQVNTRVJUKCFtX3Zv
bHVtZVNsaWRlck11dGVCdXR0b24pOwotICAgIEFTU0VSVCghbV9mdWxsU2NyZWVuTWluVm9sdW1l
QnV0dG9uKTsKLSAgICBBU1NFUlQoIW1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbik7Ci0gICAg
QVNTRVJUKCFtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXIpOwotCi0gICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBjb250cm9scyA9IE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RF
bGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLQotICAgIG1fcGFuZWwgPSBNZWRpYUNvbnRy
b2xQYW5lbEVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotCi0gICAgbV9yZXdpbmRCdXR0
b24gPSBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50
KTsKLSAgICBtX3Jld2luZEJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci0K
LSAgICBtX3BsYXlCdXR0b24gPSBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRl
KG1lZGlhRWxlbWVudCk7Ci0gICAgbV9wbGF5QnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVs
LmdldCgpKTsKLQotICAgIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFJl
dHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLSAgICBt
X3JldHVyblRvUmVhbHRpbWVCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwot
Ci0gICAgbV9zdGF0dXNEaXNwbGF5ID0gTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6
OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fc3RhdHVzRGlzcGxheS0+YXR0YWNoVG9QYXJl
bnQobV9wYW5lbC5nZXQoKSk7Ci0KLSAgICBtX3RpbWVsaW5lQ29udGFpbmVyID0gTWVkaWFDb250
cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLQotICAg
IG1fY3VycmVudFRpbWVEaXNwbGF5ID0gTWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXktPmF0
dGFjaFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOwotCi0gICAgbV90aW1lbGlu
ZSA9IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7Ci0g
ICAgbV90aW1lbGluZS0+YXR0YWNoVG9QYXJlbnQobV90aW1lbGluZUNvbnRhaW5lci5nZXQoKSk7
Ci0KLSAgICBtX3RpbWVSZW1haW5pbmdEaXNwbGF5ID0gTWVkaWFDb250cm9sVGltZVJlbWFpbmlu
Z0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLSAgICBtX3RpbWVSZW1haW5p
bmdEaXNwbGF5LT5hdHRhY2hUb1BhcmVudChtX3RpbWVsaW5lQ29udGFpbmVyLmdldCgpKTsKLQot
ICAgIG1fdGltZWxpbmVDb250YWluZXItPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwot
Ci0gICAgbV9zZWVrQmFja0J1dHRvbiA9IE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7Ci0gICAgbV9zZWVrQmFja0J1dHRvbi0+YXR0YWNoVG9Q
YXJlbnQobV9wYW5lbC5nZXQoKSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkt
PnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX3NlZWtGb3J3YXJkQnV0dG9uID0g
TWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50
KTsKLSAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgp
KTsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9scz4gY29udHJvbHMgPSBhZG9wdFJlZihuZXcgTWVk
aWFDb250cm9scyhtZWRpYUVsZW1lbnQpKTsKIAotICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b24gPSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmNy
ZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPmF0
dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQYW5l
bEVsZW1lbnQ+IHBhbmVsID0gTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpjcmVhdGUobWVkaWFF
bGVtZW50KTsKIAotICAgIG1fZnVsbHNjcmVlbkJ1dHRvbiA9IE1lZGlhQ29udHJvbEZ1bGxzY3Jl
ZW5CdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLSAgICBtX2Z1bGxzY3JlZW5C
dXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotCi0gICAgbV9tdXRlQnV0dG9u
ID0gTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVu
dCk7Ci0gICAgbV9tdXRlQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKKyAg
ICAvLyBGSVhNRTogV0hBVCBUTyBETyBXSVRIIGVjPz8hPyE/IT8hCisgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKIAotICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyID0gTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgUmVmUHRy
PE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IHJld2luZEJ1dHRvbiA9IE1lZGlhQ29u
dHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRy
b2xzLT5tX3Jld2luZEJ1dHRvbiA9IHJld2luZEJ1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+YXBw
ZW5kQ2hpbGQocmV3aW5kQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVs
ZW1lbnQ+IHBsYXlCdXR0b24gPSBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDo6Y3JlYXRl
KG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fcGxheUJ1dHRvbiA9IHBsYXlCdXR0b24u
Z2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHBsYXlCdXR0b24ucmVsZWFzZSgpLCBlYywg
dHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gcmV0dXJuVG9SZWFsdGltZUJ1
dHRvbiA9IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50OjpjcmVhdGUo
bWVkaWFFbGVtZW50KTsKKyAgICBjb250cm9scy0+bV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uID0g
cmV0dXJuVG9SZWFsdGltZUJ1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQocmV0
dXJuVG9SZWFsdGltZUJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFn
ZSgpLT50aGVtZSgpLT51c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgpKSB7CisgICAgICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudD4gc3RhdHVzRGlzcGxheSA9
IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsK
KyAgICAgICAgY29udHJvbHMtPm1fc3RhdHVzRGlzcGxheSA9IHN0YXR1c0Rpc3BsYXkuZ2V0KCk7
CisgICAgICAgIHBhbmVsLT5hcHBlbmRDaGlsZChzdGF0dXNEaXNwbGF5LnJlbGVhc2UoKSwgZWMs
IHRydWUpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAK
LSAgICBtX3ZvbHVtZVNsaWRlciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmNy
ZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fdm9sdW1lU2xpZGVyLT5hdHRhY2hUb1BhcmVudCht
X3ZvbHVtZVNsaWRlckNvbnRhaW5lci5nZXQoKSk7CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFRp
bWVsaW5lQ29udGFpbmVyRWxlbWVudD4gdGltZWxpbmVDb250YWluZXIgPSBNZWRpYUNvbnRyb2xU
aW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworCisgICAgUmVm
UHRyPE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ+IGN1cnJlbnRUaW1lRGlz
cGxheSA9IE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ6OmNyZWF0ZShtZWRp
YUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX2N1cnJlbnRUaW1lRGlzcGxheSA9IGN1cnJlbnRU
aW1lRGlzcGxheS5nZXQoKTsKKyAgICB0aW1lbGluZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoY3Vy
cmVudFRpbWVEaXNwbGF5LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiB0
aW1lbGluZSA9IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVu
dCwgY29udHJvbHMuZ2V0KCkpOworICAgIGNvbnRyb2xzLT5tX3RpbWVsaW5lID0gdGltZWxpbmUu
Z2V0KCk7CisgICAgdGltZWxpbmVDb250YWluZXItPmFwcGVuZENoaWxkKHRpbWVsaW5lLnJlbGVh
c2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBS
ZWZQdHI8TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50PiB0aW1lUmVtYWlu
aW5nRGlzcGxheSA9IE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudDo6Y3Jl
YXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fdGltZVJlbWFpbmluZ0Rpc3BsYXkg
PSB0aW1lUmVtYWluaW5nRGlzcGxheS5nZXQoKTsKKyAgICB0aW1lbGluZUNvbnRhaW5lci0+YXBw
ZW5kQ2hpbGQodGltZVJlbWFpbmluZ0Rpc3BsYXkucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAg
aWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnRyb2xzLT5tX3RpbWVsaW5lQ29u
dGFpbmVyID0gdGltZWxpbmVDb250YWluZXIuZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxk
KHRpbWVsaW5lQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogT05MWSBBUFBFTkQgV0hFTiBTVVBQT1JU
UyBTRUVLQkFDSworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChNZWRpYUNvbnRyb2xTZWVrQmFja0J1
dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVj
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiBPTkxZIEFQUEVORCBXSEVOIFNV
UFBPUlRTIFNFRUtGT1JXQVJECisgICAgcGFuZWwtPmFwcGVuZENoaWxkKE1lZGlhQ29udHJvbFNl
ZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCksIGVjLCB0cnVlKTsK
KyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1lZGlhRWxlbWVudC0+
ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zdXBwb3J0c0Nsb3NlZENhcHRpb25pbmcoKSkg
eworICAgICAgICBSZWZQdHI8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25F
bGVtZW50PiB0b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiA9IE1lZGlhQ29udHJvbFRvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgICAg
IGNvbnRyb2xzLT5tX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uID0gdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24uZ2V0KCk7CisgICAgICAgIHBhbmVsLT5hcHBlbmRDaGlsZCh0b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICAgICAgaWYgKGVjKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi0gICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0
dG9uID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSht
ZWRpYUVsZW1lbnQpOwotICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+YXR0YWNoVG9QYXJl
bnQobV92b2x1bWVTbGlkZXJDb250YWluZXIuZ2V0KCkpOworICAgIFJlZlB0cjxNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gZnVsbFNjcmVlbkJ1dHRvbiA9IE1lZGlhQ29udHJv
bEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250
cm9scy0+bV9mdWxsU2NyZWVuQnV0dG9uID0gZnVsbFNjcmVlbkJ1dHRvbi5nZXQoKTsKKyAgICBw
YW5lbC0+YXBwZW5kQ2hpbGQoZnVsbFNjcmVlbkJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsK
KworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50PiBwYW5lbE11
dGVCdXR0b24gPSBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUobWVk
aWFFbGVtZW50LCBjb250cm9scy5nZXQoKSk7CisgICAgY29udHJvbHMtPm1fcGFuZWxNdXRlQnV0
dG9uID0gcGFuZWxNdXRlQnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChwYW5l
bE11dGVCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhl
bWUoKS0+dXNlc01lZGlhQ29udHJvbFZvbHVtZVNsaWRlcigpKSB7CisgICAgICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiB2b2x1bWVTbGlkZXJDb250
YWluZXIgPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGUo
bWVkaWFFbGVtZW50KTsKKworICAgICAgICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
RWxlbWVudD4gc2xpZGVyID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6Y3JlYXRl
KG1lZGlhRWxlbWVudCk7CisgICAgICAgIGNvbnRyb2xzLT5tX3ZvbHVtZVNsaWRlciA9IHNsaWRl
ci5nZXQoKTsKKyAgICAgICAgdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5hcHBlbmRDaGlsZChzbGlk
ZXIucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJl
dHVybiAwOworCisgICAgICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0
dG9uRWxlbWVudD4gdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlck11dGVCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICAgICAgY29u
dHJvbHMtPm1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiA9IHZvbHVtZVNsaWRlck11dGVCdXR0b24u
Z2V0KCk7CisgICAgICAgIHZvbHVtZVNsaWRlckNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodm9sdW1l
U2xpZGVyTXV0ZUJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICAgICAgaWYgKGVjKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY29udHJvbHMtPm1fdm9sdW1lU2xpZGVy
Q29udGFpbmVyID0gdm9sdW1lU2xpZGVyQ29udGFpbmVyLmdldCgpOworICAgICAgICBwYW5lbC0+
YXBwZW5kQ2hpbGQodm9sdW1lU2xpZGVyQ29udGFpbmVyLnJlbGVhc2UoKSwgZWMsIHRydWUpOwor
ICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgICBtX3Zv
bHVtZVNsaWRlckNvbnRhaW5lci0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci0gICAg
CiAgICAgLy8gRklYTUU6IFRoZXNlIGNvbnRyb2xzLCBhbmQgb3RoZXJzLCBzaG91bGQgYmUgY3Jl
YXRlZCBkeW5hbWljYWxseSB3aGVuIG5lZWRlZCwgaW5zdGVhZCBvZiAKICAgICAvLyBhbHdheXMg
Y3JlYXRlZC4gIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU3MTYzPgotICAgIG1fZnVsbFNjcmVlbk1p
blZvbHVtZUJ1dHRvbiA9IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVt
ZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLSAgICBtX2Z1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0
b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotICAgIAotICAgIG1fZnVsbFNjcmVl
blZvbHVtZVNsaWRlciA9IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50
OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLSAgICBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXItPmF0
dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotICAgIAotICAgIG1fZnVsbFNjcmVlbk1heFZv
bHVtZUJ1dHRvbiA9IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50
OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLSAgICBtX2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0b24t
PmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotICAgIAotICAgIG1fcGFuZWwtPmF0dGFj
aFRvUGFyZW50KGNvbnRyb2xzLmdldCgpKTsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNj
cmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ+IGZ1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24gPSBN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlh
RWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fZnVsbFNjcmVlbk1pblZvbHVtZUJ1dHRvbiA9IGZ1
bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKGZ1
bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVj
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lU2xpZGVyRWxlbWVudD4gZnVsbFNjcmVlblZvbHVtZVNsaWRlciA9IE1lZGlhQ29udHJv
bEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAg
ICBjb250cm9scy0+bV9mdWxsU2NyZWVuVm9sdW1lU2xpZGVyID0gZnVsbFNjcmVlblZvbHVtZVNs
aWRlci5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoZnVsbFNjcmVlblZvbHVtZVNsaWRl
ci5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50
PiBmdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uID0gTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVt
ZU1heEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5t
X2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0b24gPSBmdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uLmdl
dCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGlsZChmdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uLnJl
bGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBjb250cm9scy0+bV9wYW5lbCA9IHBhbmVsLmdldCgpOworICAgIGNvbnRyb2xzLT5hcHBlbmRD
aGlsZChwYW5lbC5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybiAwOworCiAgICAgcmV0dXJuIGNvbnRyb2xzLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBNZWRp
YUNvbnRyb2xzOjpyZXNldCgpCit2b2lkIE1lZGlhQ29udHJvbHM6OnNob3coKQogewotICAgIHVw
ZGF0ZSgpOworICAgIG1fcGFuZWwtPnNob3coKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpw
bGF5YmFja1Byb2dyZXNzZWQoKQordm9pZCBNZWRpYUNvbnRyb2xzOjpoaWRlKCkKIHsKLSAgICBp
ZiAobV90aW1lbGluZSkKLSAgICAgICAgbV90aW1lbGluZS0+dXBkYXRlKGZhbHNlKTsKLSAgICB1
cGRhdGVUaW1lRGlzcGxheSgpOworICAgIG1fcGFuZWwtPmhpZGUoKTsKIH0KIAotdm9pZCBNZWRp
YUNvbnRyb2xzOjpwbGF5YmFja1N0YXJ0ZWQoKQorc3RhdGljIGNvbnN0IFN0cmluZyYgd2Via2l0
VHJhbnNpdGlvblN0cmluZygpCiB7Ci0gICAgcGxheWJhY2tQcm9ncmVzc2VkKCk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHMsICgiLXdlYmtpdC10cmFuc2l0aW9uIikpOworICAg
IHJldHVybiBzOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OnBsYXliYWNrU3RvcHBlZCgpCitz
dGF0aWMgY29uc3QgU3RyaW5nJiBvcGFjaXR5U3RyaW5nKCkKIHsKLSAgICBwbGF5YmFja1Byb2dy
ZXNzZWQoKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcywgKCJvcGFjaXR5Iikp
OworICAgIHJldHVybiBzOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNoYW5nZWRNdXRlKCkK
K3ZvaWQgTWVkaWFDb250cm9sczo6bWFrZU9wYXF1ZSgpCiB7Ci0gICAgdXBkYXRlKCk7Ci19Cisg
ICAgaWYgKG1fb3BhcXVlKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgTWVkaWFDb250cm9sczo6
Y2hhbmdlZFZvbHVtZSgpCi17Ci0gICAgdXBkYXRlKCk7Ci19CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHRyYW5zaXRpb25WYWx1ZSwgKCkpOworICAgIGlmICh0cmFuc2l0aW9uVmFs
dWUuaXNOdWxsKCkpCisgICAgICAgIHRyYW5zaXRpb25WYWx1ZSA9IFN0cmluZzo6Zm9ybWF0KCJv
cGFjaXR5ICUuMWdzIiwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xz
RmFkZUluRHVyYXRpb24oKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG9wYWNp
dHlWYWx1ZSwgKCIxIikpOwogCi12b2lkIE1lZGlhQ29udHJvbHM6OmNoYW5nZWRDbG9zZWRDYXB0
aW9uc1Zpc2liaWxpdHkoKQotewotICAgIHVwZGF0ZSgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7
CisgICAgbV9wYW5lbC0+c3R5bGUoKS0+c2V0UHJvcGVydHkod2Via2l0VHJhbnNpdGlvblN0cmlu
ZygpLCB0cmFuc2l0aW9uVmFsdWUsIGVjKTsKKyAgICBtX3BhbmVsLT5zdHlsZSgpLT5zZXRQcm9w
ZXJ0eShvcGFjaXR5U3RyaW5nKCksIG9wYWNpdHlWYWx1ZSwgZWMpOworICAgIG1fb3BhcXVlID0g
dHJ1ZTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVTdHlsZSgpCit2b2lkIE1lZGlh
Q29udHJvbHM6Om1ha2VUcmFuc3BhcmVudCgpCiB7Ci0gICAgaWYgKCFtX2NvbnRyb2xzU2hhZG93
Um9vdCkKKyAgICBpZiAoIW1fb3BhcXVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9w
YW5lbCkKLSAgICAgICAgbV9wYW5lbC0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9tdXRlQnV0
dG9uKQotICAgICAgICBtX211dGVCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fcGxh
eUJ1dHRvbikKLSAgICAgICAgbV9wbGF5QnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmICht
X3NlZWtCYWNrQnV0dG9uKQotICAgICAgICBtX3NlZWtCYWNrQnV0dG9uLT51cGRhdGVTdHlsZSgp
OwotICAgIGlmIChtX3NlZWtGb3J3YXJkQnV0dG9uKQotICAgICAgICBtX3NlZWtGb3J3YXJkQnV0
dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3Jld2luZEJ1dHRvbikKLSAgICAgICAgbV9y
ZXdpbmRCdXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fcmV0dXJuVG9SZWFsdGltZUJ1
dHRvbikKLSAgICAgICAgbV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLT51cGRhdGVTdHlsZSgpOwot
ICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKQotICAgICAgICBtX3RvZ2dsZUNs
b3NlZENhcHRpb25zQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3N0YXR1c0Rpc3Bs
YXkpCi0gICAgICAgIG1fc3RhdHVzRGlzcGxheS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV90
aW1lbGluZUNvbnRhaW5lcikKLSAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lci0+dXBkYXRlU3R5
bGUoKTsKLSAgICBpZiAobV90aW1lbGluZSkKLSAgICAgICAgbV90aW1lbGluZS0+dXBkYXRlU3R5
bGUoKTsKLSAgICBpZiAobV9mdWxsc2NyZWVuQnV0dG9uKQotICAgICAgICBtX2Z1bGxzY3JlZW5C
dXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fY3VycmVudFRpbWVEaXNwbGF5KQotICAg
ICAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV90aW1l
UmVtYWluaW5nRGlzcGxheSkKLSAgICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+dXBkYXRl
U3R5bGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXJDb250YWluZXIpCi0gICAgICAgIG1fdm9s
dW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3ZvbHVtZVNsaWRl
ck11dGVCdXR0b24pCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+dXBkYXRlU3R5
bGUoKTsKLSAgICBpZiAobV92b2x1bWVTbGlkZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyLT51
cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX2Z1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24pCi0gICAg
ICAgIG1fZnVsbFNjcmVlbk1pblZvbHVtZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAo
bV9mdWxsU2NyZWVuVm9sdW1lU2xpZGVyKQotICAgICAgICBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlk
ZXItPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbikK
LSAgICAgICAgbV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uLT51cGRhdGVTdHlsZSgpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0cmFuc2l0aW9uVmFsdWUsICgpKTsKKyAgICBp
ZiAodHJhbnNpdGlvblZhbHVlLmlzTnVsbCgpKQorICAgICAgICB0cmFuc2l0aW9uVmFsdWUgPSBT
dHJpbmc6OmZvcm1hdCgib3BhY2l0eSAlLjFncyIsIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUo
KS0+bWVkaWFDb250cm9sc0ZhZGVPdXREdXJhdGlvbigpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFN0cmluZywgb3BhY2l0eVZhbHVlLCAoIjAiKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVj
OworICAgIC8vIEZJWE1FOiBNYWtlIG1vcmUgZWZmaWNpZW50LgorICAgIG1fcGFuZWwtPnN0eWxl
KCktPnNldFByb3BlcnR5KHdlYmtpdFRyYW5zaXRpb25TdHJpbmcoKSwgdHJhbnNpdGlvblZhbHVl
LCBlYyk7CisgICAgbV9wYW5lbC0+c3R5bGUoKS0+c2V0UHJvcGVydHkob3BhY2l0eVN0cmluZygp
LCBvcGFjaXR5VmFsdWUsIGVjKTsKKyAgICBtX29wYXF1ZSA9IGZhbHNlOwogfQogCi12b2lkIE1l
ZGlhQ29udHJvbHM6OmRlc3Ryb3koKQordm9pZCBNZWRpYUNvbnRyb2xzOjpyZXNldCgpCiB7Ci0g
ICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKKyAgICBQYWdlKiBwYWdlID0g
ZG9jdW1lbnQoKS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fY29udHJvbHNTaGFkb3dSb290ICYmIG1fY29udHJvbHNTaGFkb3dSb290LT5yZW5k
ZXJlcigpKSB7CisgICAgY2hhbmdlZE5ldHdvcmtTdGF0ZSgpOworICAgIGZsb2F0IGR1cmF0aW9u
ID0gbV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CisgICAgaWYgKCFpc25hbihkdXJhdGlvbikg
fHwgcGFnZS0+dGhlbWUoKS0+aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhU2xp
ZGVyUGFydCkpIHsKKyAgICAgICAgbV90aW1lbGluZS0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwor
ICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5zaG93KCk7CisgICAgICAgIG1fdGltZWxpbmUt
PnNldFBvc2l0aW9uKG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpKTsKKyAgICAgICAgdXBk
YXRlVGltZURpc3BsYXkoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV90aW1lbGluZUNvbnRhaW5l
ci0+aGlkZSgpOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpIHx8IHBhZ2Ut
PnRoZW1lKCktPmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVCdXR0b25Q
YXJ0KSkKKyAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNob3coKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CiAKLSAgICAgICAgLy8gZGV0YWNoIHRoZSBw
YW5lbCBiZWZvcmUgcmVtb3ZpbmcgdGhlIHNoYWRvdyByZW5kZXJlciB0byBwcmV2ZW50IGEgY3Jh
c2ggaW4gbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpIAotICAgICAgICAvLyAgd2hlbiBk
aXNwbGF5OiBzdHlsZSBjaGFuZ2VzCi0gICAgICAgIG1fcGFuZWwtPmRldGFjaCgpOworICAgIGlm
IChtX3ZvbHVtZVNsaWRlcikKKyAgICAgICAgbV92b2x1bWVTbGlkZXItPnNldFZvbHVtZShtX21l
ZGlhRWxlbWVudC0+dm9sdW1lKCkpOwogCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW5kZXJl
cigpLT5yZW1vdmVDaGlsZChtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSk7Ci0gICAg
ICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKTsKLSAgICAgICAgbV9jb250cm9sc1No
YWRvd1Jvb3QgPSAwOworICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKSB7Cisg
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudC0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKKyAgICAgICAg
ICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnNob3coKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOwogICAgIH0K
LX0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGUoKQotewotICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+Y29udHJvbHMoKSB8
fCAhbWVkaWEtPmluQWN0aXZlRG9jdW1lbnQoKSkgewotICAgICAgICBpZiAobV9jb250cm9sc1No
YWRvd1Jvb3QpIHsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKTsK
LSAgICAgICAgICAgIG1fcGFuZWwgPSAwOwotICAgICAgICAgICAgbV9tdXRlQnV0dG9uID0gMDsK
LSAgICAgICAgICAgIG1fcGxheUJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3N0YXR1c0Rpc3Bs
YXkgPSAwOwotICAgICAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lciA9IDA7Ci0gICAgICAgICAg
ICBtX3RpbWVsaW5lID0gMDsKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24gPSAwOwotICAg
ICAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3Jld2luZEJ1
dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSAwOwotICAg
ICAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXkgPSAwOwotICAgICAgICAgICAgbV90aW1lUmVt
YWluaW5nRGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24gPSAwOwot
ICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXIgPSAwOwotICAgICAgICAgICAgbV92
b2x1bWVTbGlkZXIgPSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0g
MDsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gMDsKLSAgICAgICAgICAgIG1f
dG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSAwOwotICAgICAgICAgICAgbV9mdWxsU2NyZWVu
TWluVm9sdW1lQnV0dG9uID0gMDsKLSAgICAgICAgICAgIG1fZnVsbFNjcmVlblZvbHVtZVNsaWRl
ciA9IDA7Ci0gICAgICAgICAgICBtX2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0b24gPSAwOwotICAg
ICAgICB9Ci0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvblRvID0gMS4wZjsKLSAgICAgICAgbV9v
cGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
bWVkaWFFbGVtZW50LT5tb3ZpZUxvYWRUeXBlKCkgIT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW0p
IHsKKyAgICAgICAgbV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uLT5oaWRlKCk7CisgICAgICAgIG1f
cmV3aW5kQnV0dG9uLT5zaG93KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9yZXR1cm5Ub1Jl
YWxUaW1lQnV0dG9uLT5zaG93KCk7CisgICAgICAgIG1fcmV3aW5kQnV0dG9uLT5oaWRlKCk7CiAg
ICAgfQogCi0gICAgaWYgKCFtX2NvbnRyb2xzU2hhZG93Um9vdCkgewotICAgICAgICBtX2NvbnRy
b2xzU2hhZG93Um9vdCA9IGNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgICAgIG1fbWVkaWFF
bGVtZW50LT5yZW5kZXJlcigpLT5hZGRDaGlsZChtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVy
ZXIoKSk7Ci0gICAgICAgIG1fcGFuZWwtPmF0dGFjaCgpOwotICAgIH0KKyAgICBtYWtlT3BhcXVl
KCk7Cit9CiAKLSAgICBpZiAobV9wYW5lbCkgewotICAgICAgICAvLyB1cGRhdGUoKSBtaWdodCBh
bHRlciB0aGUgb3BhY2l0eSBvZiB0aGUgZWxlbWVudCwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgaW4g
dGhlIG1pZGRsZQotICAgICAgICAvLyBvZiBhbiBhbmltYXRpb24uIFRoaXMgaXMgdGhlIG9ubHkg
ZWxlbWVudCBjb25jZXJuZWQgYXMgd2UgYW5pbWF0ZSBvbmx5IHRoaXMgZWxlbWVudC4KLSAgICAg
ICAgZmxvYXQgb3BhY2l0eUJlZm9yZUNoYW5naW5nU3R5bGUgPSBtX3BhbmVsLT5yZW5kZXJlcigp
ID8gbV9wYW5lbC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3BhY2l0eSgpIDogMDsKLSAgICAgICAg
bV9wYW5lbC0+dXBkYXRlKCk7Ci0gICAgICAgIGNoYW5nZU9wYWNpdHkobV9wYW5lbC5nZXQoKSwg
b3BhY2l0eUJlZm9yZUNoYW5naW5nU3R5bGUpOwotICAgIH0KLSAgICBpZiAobV9tdXRlQnV0dG9u
KQotICAgICAgICBtX211dGVCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3BsYXlCdXR0b24p
Ci0gICAgICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdGltZWxpbmVDb250
YWluZXIpCi0gICAgICAgIG1fdGltZWxpbmVDb250YWluZXItPnVwZGF0ZSgpOwotICAgIGlmICht
X3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXIt
PnVwZGF0ZSgpOwotICAgIGlmIChtX3RpbWVsaW5lKQotICAgICAgICBtX3RpbWVsaW5lLT51cGRh
dGUoKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkpCi0gICAgICAgIG1fY3VycmVudFRp
bWVEaXNwbGF5LT51cGRhdGUoKTsKLSAgICBpZiAobV90aW1lUmVtYWluaW5nRGlzcGxheSkKLSAg
ICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fc2Vla0Jh
Y2tCdXR0b24pCi0gICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmICht
X3NlZWtGb3J3YXJkQnV0dG9uKQotICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT51cGRhdGUo
KTsKLSAgICBpZiAobV9yZXdpbmRCdXR0b24pCi0gICAgICAgIG1fcmV3aW5kQnV0dG9uLT51cGRh
dGUoKTsKLSAgICBpZiAobV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKQotICAgICAgICBtX3JldHVy
blRvUmVhbHRpbWVCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT51cGRhdGUo
KTsKLSAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQotICAgICAgICBtX3N0YXR1c0Rpc3BsYXktPnVw
ZGF0ZSgpOwotICAgIGlmIChtX2Z1bGxzY3JlZW5CdXR0b24pCi0gICAgICAgIG1fZnVsbHNjcmVl
bkJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAgICBtX3Zv
bHVtZVNsaWRlci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbikK
LSAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT51cGRhdGUoKTsKLSAgICBpZiAobV9m
dWxsU2NyZWVuTWluVm9sdW1lQnV0dG9uKQotICAgICAgICBtX2Z1bGxTY3JlZW5NaW5Wb2x1bWVC
dXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXIpCi0gICAg
ICAgIG1fZnVsbFNjcmVlblZvbHVtZVNsaWRlci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fZnVsbFNj
cmVlbk1heFZvbHVtZUJ1dHRvbikKLSAgICAgICAgbV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9u
LT51cGRhdGUoKTsKK3ZvaWQgTWVkaWFDb250cm9sczo6cGxheWJhY2tTdGFydGVkKCkKK3sKKyAg
ICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7CisgICAgbV90aW1lbGluZS0+c2V0
UG9zaXRpb24obV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkpOwogICAgIHVwZGF0ZVRpbWVE
aXNwbGF5KCk7Ci0gICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKIH0KIAotdm9pZCBNZWRp
YUNvbnRyb2xzOjp1cGRhdGVUaW1lRGlzcGxheSgpCit2b2lkIE1lZGlhQ29udHJvbHM6OnBsYXli
YWNrUHJvZ3Jlc3NlZCgpCiB7Ci0gICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
KTsKKyAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhRWxlbWVudC0+Y3VycmVudFRp
bWUoKSk7CisgICAgdXBkYXRlVGltZURpc3BsYXkoKTsKK30KIAotICAgIGlmICghbV9jdXJyZW50
VGltZURpc3BsYXkgfHwgIW1fY3VycmVudFRpbWVEaXNwbGF5LT5yZW5kZXJlcigpIHx8IG1fY3Vy
cmVudFRpbWVEaXNwbGF5LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSB8
fCBtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUpCi0gICAgICAgIHJldHVybjsKK3ZvaWQgTWVkaWFDb250cm9sczo6cGxheWJhY2tTdG9w
cGVkKCkKK3sKKyAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7CisgICAgbV90
aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkpOworICAg
IHVwZGF0ZVRpbWVEaXNwbGF5KCk7CisgICAgbWFrZU9wYXF1ZSgpOworfQogCit2b2lkIE1lZGlh
Q29udHJvbHM6OnVwZGF0ZVRpbWVEaXNwbGF5KCkKK3sKICAgICBmbG9hdCBub3cgPSBtX21lZGlh
RWxlbWVudC0+Y3VycmVudFRpbWUoKTsKICAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFFbGVt
ZW50LT5kdXJhdGlvbigpOwogCi0gICAgLy8gQWxsb3cgdGhlIHRoZW1lIHRvIGZvcm1hdCB0aGUg
dGltZQorICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBbGxvdyB0aGUgdGhlbWUgdG8gZm9ybWF0IHRo
ZSB0aW1lLgogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgbV9jdXJyZW50VGltZURpc3BsYXkt
PnNldElubmVyVGV4dChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+dGhlbWUoKS0+Zm9ybWF0
TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKG5vdywgZHVyYXRpb24pLCBlYyk7CisgICAgbV9jdXJy
ZW50VGltZURpc3BsYXktPnNldElubmVyVGV4dChwYWdlLT50aGVtZSgpLT5mb3JtYXRNZWRpYUNv
bnRyb2xzQ3VycmVudFRpbWUobm93LCBkdXJhdGlvbiksIGVjKTsKICAgICBtX2N1cnJlbnRUaW1l
RGlzcGxheS0+c2V0Q3VycmVudFZhbHVlKG5vdyk7Ci0gICAgbV90aW1lUmVtYWluaW5nRGlzcGxh
eS0+c2V0SW5uZXJUZXh0KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT50aGVtZSgpLT5mb3Jt
YXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShub3csIGR1cmF0aW9uKSwgZWMpOworICAgIG1f
dGltZVJlbWFpbmluZ0Rpc3BsYXktPnNldElubmVyVGV4dChwYWdlLT50aGVtZSgpLT5mb3JtYXRN
ZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShub3csIGR1cmF0aW9uKSwgZWMpOwogICAgIG1fdGlt
ZVJlbWFpbmluZ0Rpc3BsYXktPnNldEN1cnJlbnRWYWx1ZShub3cgLSBkdXJhdGlvbik7CiB9CiAK
LVJlbmRlckJveCogTWVkaWFDb250cm9sczo6cmVuZGVyQm94KCkKK3ZvaWQgTWVkaWFDb250cm9s
czo6cmVwb3J0ZWRFcnJvcigpCiB7Ci0gICAgcmV0dXJuIG1fY29udHJvbHNTaGFkb3dSb290ID8g
bV9jb250cm9sc1NoYWRvd1Jvb3QtPnJlbmRlckJveCgpIDogMDsKLX0KLQotdm9pZCBNZWRpYUNv
bnRyb2xzOjp1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpCi17Ci0gICAgaWYgKCFtX3BhbmVsIHx8
ICFtX3BhbmVsLT5yZW5kZXJlcigpKQorICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdl
KCk7CisgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBEb24ndCBmYWRl
IGZvciBhdWRpbyBjb250cm9scy4KLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYSA9IG1fbWVk
aWFFbGVtZW50OwotICAgIGlmICghbWVkaWEtPmhhc1ZpZGVvKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChtZWRpYS0+cmVuZGVyZXIoKSk7Ci0KLSAgICAvLyBEb24ndCBmYWRlIGlm
IHRoZSBtZWRpYSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlCi0gICAgaWYgKG1lZGlhLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGJvb2wgc2hvdWxkSGlkZUNvbnRyb2xsZXIgPSAhbV9tb3VzZU92ZXIgJiYgIW1l
ZGlhLT5jYW5QbGF5KCk7CisgICAgaWYgKCFwYWdlLT50aGVtZSgpLT5oYXNPd25EaXNhYmxlZFN0
YXRlSGFuZGxpbmdGb3IoTWVkaWFTbGlkZXJQYXJ0KSkKKyAgICAgICAgbV90aW1lbGluZUNvbnRh
aW5lci0+aGlkZSgpOwogCi0gICAgLy8gRG8gZmFkaW5nIG1hbnVhbGx5LCBjc3MgYW5pbWF0aW9u
cyBkb24ndCB3b3JrIHdpdGggc2hhZG93IHRyZWVzCisgICAgaWYgKCFwYWdlLT50aGVtZSgpLT5o
YXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoTWVkaWFNdXRlQnV0dG9uUGFydCkpCisgICAg
ICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CiAKLSAgICBmbG9hdCBhbmltYXRlRnJvbSA9
IG1fcGFuZWwtPnJlbmRlcmVyKCktPnN0eWxlKCktPm9wYWNpdHkoKTsKLSAgICBmbG9hdCBhbmlt
YXRlVG8gPSBzaG91bGRIaWRlQ29udHJvbGxlciA/IDAuMGYgOiAxLjBmOworICAgIGlmIChtX3Zv
bHVtZVNsaWRlckNvbnRhaW5lcikKKyAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmhp
ZGUoKTsKKyAgICBpZiAobV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbiAmJiAhcGFnZS0+dGhl
bWUoKS0+aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhVG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b25QYXJ0KSkKKyAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+
aGlkZSgpOworfQogCi0gICAgaWYgKGFuaW1hdGVGcm9tID09IGFuaW1hdGVUbykKLSAgICAgICAg
cmV0dXJuOwordm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFuZ2VkTmV0d29ya1N0YXRlKCkKK3sKKyAg
ICBpZiAobV9tZWRpYUVsZW1lbnQtPnN1cHBvcnRzRnVsbHNjcmVlbigpKQorICAgICAgICBtX2Z1
bGxTY3JlZW5CdXR0b24tPnNob3coKTsKKyAgICBlbHNlCisgICAgICAgIG1fZnVsbFNjcmVlbkJ1
dHRvbi0+aGlkZSgpOwogCi0gICAgaWYgKG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyLmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgaWYgKG1fb3BhY2l0eUFuaW1hdGlvblRvID09IGFuaW1hdGVUbykKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgp
OwotICAgIH0KKyAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQorICAgICAgICBtX3N0YXR1c0Rpc3Bs
YXktPnVwZGF0ZSgpOworfQogCi0gICAgaWYgKGFuaW1hdGVGcm9tIDwgYW5pbWF0ZVRvKQotICAg
ICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbiA9IG1fcGFuZWwtPnJlbmRlcmVyKCktPnRo
ZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlSW5EdXJhdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAg
bV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24gPSBtX3BhbmVsLT5yZW5kZXJlcigpLT50aGVtZSgp
LT5tZWRpYUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCk7Cit2b2lkIE1lZGlhQ29udHJvbHM6Omxv
YWRlZE1ldGFkYXRhKCkKK3sKKyAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQorICAgICAgICBtX3N0
YXR1c0Rpc3BsYXktPmhpZGUoKTsKIAotICAgIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20gPSBhbmlt
YXRlRnJvbTsKLSAgICBtX29wYWNpdHlBbmltYXRpb25UbyA9IGFuaW1hdGVUbzsKKyAgICByZXNl
dCgpOworfQogCi0gICAgbV9vcGFjaXR5QW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWUo
KTsKLSAgICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjT3BhY2l0eUFu
aW1hdGlvblJlcGVhdERlbGF5KTsKK3ZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZENsb3NlZENh
cHRpb25zVmlzaWJpbGl0eSgpCit7CisgICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24pCisgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnVwZGF0ZURpc3BsYXlU
eXBlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlT3BhY2l0eShIVE1MRWxlbWVu
dCogZSwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZE11dGUoKQog
ewotICAgIGlmICghZSB8fCAhZS0+cmVuZGVyZXIoKSB8fCAhZS0+cmVuZGVyZXIoKS0+c3R5bGUo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcyA9IFJlbmRlclN0
eWxlOjpjbG9uZShlLT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKLSAgICBzLT5zZXRPcGFjaXR5KG9w
YWNpdHkpOwotICAgIC8vIHotaW5kZXggY2FuJ3QgYmUgYXV0byBpZiBvcGFjaXR5IGlzIHVzZWQK
LSAgICBzLT5zZXRaSW5kZXgoMCk7Ci0gICAgZS0+cmVuZGVyZXIoKS0+c2V0U3R5bGUocy5yZWxl
YXNlKCkpOworICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5jaGFuZ2VkTXV0ZSgpOworICAgIGlmICht
X3ZvbHVtZVNsaWRlck11dGVCdXR0b24pCisgICAgICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRv
bi0+Y2hhbmdlZE11dGUoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpvcGFjaXR5QW5pbWF0
aW9uVGltZXJGaXJlZChUaW1lcjxNZWRpYUNvbnRyb2xzPiopCit2b2lkIE1lZGlhQ29udHJvbHM6
OmNoYW5nZWRWb2x1bWUoKQogewotICAgIGRvdWJsZSB0aW1lID0gY3VycmVudFRpbWUoKSAtIG1f
b3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZTsKLSAgICBpZiAodGltZSA+PSBtX29wYWNpdHlBbmlt
YXRpb25EdXJhdGlvbikgewotICAgICAgICB0aW1lID0gbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRp
b247Ci0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLSAgICB9Ci0gICAg
ZmxvYXQgb3BhY2l0eSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV9vcGFjaXR5QW5pbWF0aW9u
RnJvbSArIChtX29wYWNpdHlBbmltYXRpb25UbyAtIG1fb3BhY2l0eUFuaW1hdGlvbkZyb20pICog
dGltZSAvIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uKTsKLSAgICBjaGFuZ2VPcGFjaXR5KG1f
cGFuZWwuZ2V0KCksIG9wYWNpdHkpOworICAgIGlmIChtX3ZvbHVtZVNsaWRlcikKKyAgICAgICAg
bV92b2x1bWVTbGlkZXItPnNldFZvbHVtZShtX21lZGlhRWxlbWVudC0+dm9sdW1lKCkpOwogfQog
Ci12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihib29sIHZp
c2libGUpCit2b2lkIE1lZGlhQ29udHJvbHM6OnNob3dWb2x1bWVTbGlkZXIoKQogewotICAgIGlm
ICghbV9tZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkgfHwgIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVy
IHx8ICFtX3ZvbHVtZVNsaWRlcikKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50LT5oYXNBdWRpbygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodmlzaWJsZSAmJiAhbV92b2x1bWVTbGlkZXJD
b250YWluZXItPmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGlmICghbV9tdXRlQnV0dG9uIHx8ICFt
X211dGVCdXR0b24tPnJlbmRlcmVyKCkgfHwgIW1fbXV0ZUJ1dHRvbi0+cmVuZGVyQm94KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzID0gbV92
b2x1bWVTbGlkZXJDb250YWluZXItPnN0eWxlRm9yRWxlbWVudCgpOwotICAgICAgICBtX3ZvbHVt
ZVNsaWRlckNvbnRhaW5lci0+c2V0VmlzaWJsZSh0cnVlKTsKLSAgICAgICAgbV92b2x1bWVTbGlk
ZXJDb250YWluZXItPnVwZGF0ZSgpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlci0+dXBkYXRlKCk7
Ci0gICAgfSBlbHNlIGlmICghdmlzaWJsZSAmJiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+aXNW
aXNpYmxlKCkpIHsKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXItPnNldFZpc2libGUo
ZmFsc2UpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlU3R5bGUoKTsK
LSAgICB9CisgICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKQorICAgICAgICBtX3ZvbHVt
ZVNsaWRlckNvbnRhaW5lci0+c2hvdygpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbHM6OmZvcndh
cmRFdmVudChFdmVudCogZXZlbnQpCitjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbHM6
OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQtPnJl
bmRlcmVyKCkpOwotCi0gICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBtX2NvbnRyb2xz
U2hhZG93Um9vdCkgewotICAgICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nh
c3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgSW50UG9pbnQgcG9pbnQobW91c2VFdmVu
dC0+YWJzb2x1dGVMb2NhdGlvbigpKTsKLQotICAgICAgICBib29sIGRlZmF1bHRIYW5kbGVkID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24gJiYgbV92b2x1bWVT
bGlkZXJNdXRlQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkgewotICAgICAgICAgICAgbV92b2x1bWVT
bGlkZXJNdXRlQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLSAgICAgICAgICAg
IGRlZmF1bHRIYW5kbGVkID0gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBib29sIHNob3dWb2x1bWVTbGlkZXIgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWZh
dWx0SGFuZGxlZCAmJiBtX211dGVCdXR0b24gJiYgbV9tdXRlQnV0dG9uLT5oaXRUZXN0KHBvaW50
KSkgewotICAgICAgICAgICAgbV9tdXRlQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91
dEV2ZW50KQotICAgICAgICAgICAgICAgIHNob3dWb2x1bWVTbGlkZXIgPSB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyICYmIG1fdm9sdW1lU2xp
ZGVyQ29udGFpbmVyLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIHNob3dWb2x1bWVTbGlk
ZXIgPSB0cnVlOwotCi0gICAgICAgIGlmIChtX3ZvbHVtZVNsaWRlciAmJiBtX3ZvbHVtZVNsaWRl
ci0+aGl0VGVzdChwb2ludCkpIHsKLSAgICAgICAgICAgIG1fdm9sdW1lU2xpZGVyLT5kZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKLSAgICAgICAgICAgIHNob3dWb2x1bWVTbGlkZXIgPSB0cnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKHNob3dW
b2x1bWVTbGlkZXIpOwotCi0gICAgICAgIGlmIChtX3BsYXlCdXR0b24gJiYgbV9wbGF5QnV0dG9u
LT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fcGxheUJ1dHRvbi0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fc2Vla0JhY2tCdXR0b24gJiYgbV9zZWVr
QmFja0J1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBtX3NlZWtCYWNrQnV0dG9u
LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV9zZWVrRm9yd2Fy
ZEJ1dHRvbiAmJiBtX3NlZWtGb3J3YXJkQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAg
ICAgIG1fc2Vla0ZvcndhcmRCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0g
ICAgICAgIGlmIChtX3Jld2luZEJ1dHRvbiAmJiBtX3Jld2luZEJ1dHRvbi0+aGl0VGVzdChwb2lu
dCkpCi0gICAgICAgICAgICBtX3Jld2luZEJ1dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVu
dCk7Ci0KLSAgICAgICAgaWYgKG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbiAmJiBtX3JldHVyblRv
UmVhbHRpbWVCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9yZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgIGlmICht
X3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uICYmIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fdGltZWxp
bmUgJiYgbV90aW1lbGluZS0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAgICBtX3RpbWVsaW5l
LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV9mdWxsc2NyZWVu
QnV0dG9uICYmIG1fZnVsbHNjcmVlbkJ1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0gICAgICAgICAg
ICBtX2Z1bGxzY3JlZW5CdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAg
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewot
ICAgICAgICAgICAgbV9tb3VzZU92ZXIgPSB0cnVlOwotICAgICAgICAgICAgdXBkYXRlQ29udHJv
bFZpc2liaWxpdHkoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkgewotICAgICAgICAgICAgLy8gV2hlbiB0aGUgc2Ny
b2xsYmFyIHRodW1iIGNhcHR1cmVzIG1vdXNlIGV2ZW50cywgd2Ugc2hvdWxkIHRyZWF0IHRoZSBt
b3VzZSBhcyBzdGlsbCBiZWluZyBvdmVyIG91ciByZW5kZXJlciBpZiB0aGUgbmV3IHRhcmdldCBp
cyBhIGRlc2NlbmRhbnQKLSAgICAgICAgICAgIE5vZGUqIG1vdXNlT3Zlck5vZGUgPSBtb3VzZUV2
ZW50LT5yZWxhdGVkVGFyZ2V0KCkgPyBtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCktPnRvTm9k
ZSgpIDogMDsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogbW91c2VPdmVyUmVuZGVyZXIgPSBt
b3VzZU92ZXJOb2RlID8gbW91c2VPdmVyTm9kZS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgICAgICAg
ICBtX21vdXNlT3ZlciA9IG1vdXNlT3ZlclJlbmRlcmVyICYmIG1vdXNlT3ZlclJlbmRlcmVyLT5p
c0Rlc2NlbmRhbnRPZihtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICB1
cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOwotICAgICAgICB9Ci0gICAgfQorICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzIikp
OworICAgIHJldHVybiBpZDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9scy5oCmluZGV4IGViZjdlZWQzMmVhZDJjNjE5OTZlMDkxNTFjZTliMjViMTU5MDNk
ZDcuLjkzYTAyYThhNWEyNmRkYWNlNmUyNTU3OTA2MmM3YjU2MDdhYTlkYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2lmIEVOQUJMRShWSURFTykKIAorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTM4LDMyICszOSw0MiBA
QCBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBIVE1M
TWVkaWFFbGVtZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9u
RWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ7CiBjbGFz
cyBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFNlZWtC
dXR0b25FbGVtZW50OwotY2xhc3MgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ7CiBjbGFz
cyBNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sUmV0
dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURp
c3BsYXlFbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OworY2xhc3Mg
TWVkaWFDb250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OwogY2xhc3MgTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0
b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50OwogY2xhc3Mg
TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1l
bGluZUNvbnRhaW5lckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVu
dDsKK2NsYXNzIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ7CitjbGFzcyBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFZv
bHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNvbnRyb2xFbGVtZW50Owog
Y2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ7CiBjbGFz
cyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudDsKIGNsYXNzIE1lZGlh
Q29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50OworY2xhc3MgTWVkaWFDb250
cm9sUGFuZWxFbGVtZW50OwogY2xhc3MgTWVkaWFQbGF5ZXI7CiAKIGNsYXNzIFJlbmRlckJveDsK
IGNsYXNzIFJlbmRlck1lZGlhOwogCi1jbGFzcyBNZWRpYUNvbnRyb2xzIHsKKy8vIEZJWE1FOiBS
ZW5hbWUgdG8gTWVkaWFDb250cm9sUm9vdEVsZW1lbnQuCitjbGFzcyBNZWRpYUNvbnRyb2xzIDog
cHVibGljIEhUTUxEaXZFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBNZWRpYUNvbnRyb2xzKEhUTUxN
ZWRpYUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xzPiBjcmVh
dGUoSFRNTE1lZGlhRWxlbWVudCopOworCisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRl
KCk7CisgICAgdm9pZCBtYWtlT3BhcXVlKCk7CisgICAgdm9pZCBtYWtlVHJhbnNwYXJlbnQoKTsK
IAogICAgIHZvaWQgcmVzZXQoKTsKIApAQCAtNzMsNjEgKzg0LDQ5IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgY2hhbmdlZE11dGUoKTsKICAgICB2b2lkIGNoYW5nZWRWb2x1bWUoKTsKKworICAgIHZv
aWQgcmVwb3J0ZWRFcnJvcigpOworICAgIHZvaWQgY2hhbmdlZE5ldHdvcmtTdGF0ZSgpOworICAg
IHZvaWQgbG9hZGVkTWV0YWRhdGEoKTsKICAgICB2b2lkIGNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zp
c2liaWxpdHkoKTsKIAotICAgIHZvaWQgZGVzdHJveSgpOwotICAgIHZvaWQgdXBkYXRlKCk7Ci0g
ICAgdm9pZCB1cGRhdGVTdHlsZSgpOwotICAgIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7Cisg
ICAgdm9pZCBzaG93Vm9sdW1lU2xpZGVyKCk7CiAgICAgdm9pZCB1cGRhdGVUaW1lRGlzcGxheSgp
OwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHRvIGFsbG93IFJlbmRlck1lZGlh
OjpsYXlvdXQgdHdlYWsgdGhlIHBvc2l0aW9uIG9mIGNvbnRyb2xzLgotICAgIC8vIE9uY2Ugc2hh
ZG93IERPTSByZWZhY3RvcmluZyBpcyBjb21wbGV0ZSwgdGhlIHR3ZWFraW5nIHdpbGwgYmUgaW4g
TWVkaWFDb250cm9sc1NoYWRvd1Jvb3QgYW5kIHRoaXMgYWNjZXNzb3Igd2lsbCBubyBsb25nZXIg
YmUgbmVjZXNzYXJ5LgotICAgIFJlbmRlckJveCogcmVuZGVyQm94KCk7Ci0KIHByaXZhdGU6Ci0g
ICAgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudD4gY3JlYXRlKEhUTUxN
ZWRpYUVsZW1lbnQqKTsKLQotICAgIHZvaWQgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKLSAg
ICB2b2lkIGNoYW5nZU9wYWNpdHkoSFRNTEVsZW1lbnQqLCBmbG9hdCBvcGFjaXR5KTsKLSAgICB2
b2lkIG9wYWNpdHlBbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPE1lZGlhQ29udHJvbHM+Kik7Ci0K
LSAgICB2b2lkIHVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihib29sIHZpc2libGUpOworICAg
IE1lZGlhQ29udHJvbHMoSFRNTE1lZGlhRWxlbWVudCopOwogCi1wcml2YXRlOgotICAgIFJlZlB0
cjxNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudD4gbV9jb250cm9sc1NoYWRvd1Jvb3Q7Ci0g
ICAgUmVmUHRyPE1lZGlhQ29udHJvbEVsZW1lbnQ+IG1fcGFuZWw7Ci0gICAgUmVmUHRyPE1lZGlh
Q29udHJvbE11dGVCdXR0b25FbGVtZW50PiBtX211dGVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlh
Q29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBtX3BsYXlCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlh
Q29udHJvbFNlZWtCdXR0b25FbGVtZW50PiBtX3NlZWtCYWNrQnV0dG9uOwotICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudD4gbV9zZWVrRm9yd2FyZEJ1dHRvbjsKLSAgICBS
ZWZQdHI8TWVkaWFDb250cm9sUmV3aW5kQnV0dG9uRWxlbWVudD4gbV9yZXdpbmRCdXR0b247Ci0g
ICAgUmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50PiBtX3Jl
dHVyblRvUmVhbHRpbWVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFRvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uRWxlbWVudD4gbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbjsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBtX3RpbWVsaW5lOwotICAgIFJl
ZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50PiBtX3ZvbHVtZVNsaWRlcjsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ+IG1fdm9sdW1lU2xpZGVyTXV0
ZUJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ+
IG1fZnVsbHNjcmVlbkJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250
YWluZXJFbGVtZW50PiBtX3RpbWVsaW5lQ29udGFpbmVyOwotICAgIFJlZlB0cjxNZWRpYUNvbnRy
b2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50PiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcjsK
LSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50PiBtX2N1cnJlbnRUaW1l
RGlzcGxheTsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZURpc3BsYXlFbGVtZW50PiBtX3Rp
bWVSZW1haW5pbmdEaXNwbGF5OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5
RWxlbWVudD4gbV9zdGF0dXNEaXNwbGF5OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2Ny
ZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVudD4gbV9mdWxsU2NyZWVuTWluVm9sdW1lQnV0dG9uOwot
ICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gbV9m
dWxsU2NyZWVuVm9sdW1lU2xpZGVyOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lTWF4QnV0dG9uRWxlbWVudD4gbV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uOworICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogCiAg
ICAgSFRNTE1lZGlhRWxlbWVudCogbV9tZWRpYUVsZW1lbnQ7Ci0gICAgVGltZXI8TWVkaWFDb250
cm9scz4gbV9vcGFjaXR5QW5pbWF0aW9uVGltZXI7Ci0KLSAgICBkb3VibGUgbV9vcGFjaXR5QW5p
bWF0aW9uU3RhcnRUaW1lOwotICAgIGRvdWJsZSBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbjsK
LSAgICBmbG9hdCBtX29wYWNpdHlBbmltYXRpb25Gcm9tOwotICAgIGZsb2F0IG1fb3BhY2l0eUFu
aW1hdGlvblRvOwogCi0gICAgYm9vbCBtX21vdXNlT3ZlcjsKKyAgICBNZWRpYUNvbnRyb2xSZXdp
bmRCdXR0b25FbGVtZW50KiBtX3Jld2luZEJ1dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xQbGF5QnV0
dG9uRWxlbWVudCogbV9wbGF5QnV0dG9uOworICAgIE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRp
bWVCdXR0b25FbGVtZW50KiBtX3JldHVyblRvUmVhbFRpbWVCdXR0b247CisgICAgTWVkaWFDb250
cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQqIG1fc3RhdHVzRGlzcGxheTsKKyAgICBNZWRpYUNvbnRy
b2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50KiBtX2N1cnJlbnRUaW1lRGlzcGxheTsKKyAgICBN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQqIG1fdGltZWxpbmU7CisgICAgTWVkaWFDb250cm9s
VGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50KiBtX3RpbWVSZW1haW5pbmdEaXNwbGF5OworICAg
IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudCogbV90aW1lbGluZUNvbnRhaW5l
cjsKKyAgICBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQqIG1f
dG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b247CisgICAgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudCogbV9wYW5lbE11dGVCdXR0b247CisgICAgTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyRWxlbWVudCogbV92b2x1bWVTbGlkZXI7CisgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
TXV0ZUJ1dHRvbkVsZW1lbnQqIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbjsKKyAgICBNZWRpYUNv
bnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KiBtX3ZvbHVtZVNsaWRlckNvbnRhaW5l
cjsKKyAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudCogbV9mdWxsU2NyZWVu
QnV0dG9uOworICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50
KiBtX2Z1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b247CisgICAgTWVkaWFDb250cm9sRnVsbHNjcmVl
blZvbHVtZVNsaWRlckVsZW1lbnQqIG1fZnVsbFNjcmVlblZvbHVtZVNsaWRlcjsKKyAgICBNZWRp
YUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxlbWVudCogbV9mdWxsU2NyZWVuTWF4
Vm9sdW1lQnV0dG9uOworICAgIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudCogbV9wYW5lbDsKKwor
ICAgIGJvb2wgbV9vcGFxdWU7CiB9OwogCitpbmxpbmUgTWVkaWFDb250cm9scyogdG9NZWRpYUNv
bnRyb2xzKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbHMqPihub2RlKTsKK30KIAogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNw
cAppbmRleCA0OWM0NTc4NGFhNzcyOTE0NDcxMjI2YmU1Mzk3ZDc4ZTRhY2IyODVlLi4xMTc3NDI0
ZWE0MzZhNzkyMjJlNDcwNWM4N2U4ODFhZTg5Y2ZkNDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTY3LDEyOCArNjcsMzMg
QEAgc3RhdGljIGNvbnN0IGZsb2F0IGNTZWVrUmVwZWF0RGVsYXkgPSAwLjFmOwogc3RhdGljIGNv
bnN0IGZsb2F0IGNTdGVwVGltZSA9IDAuMDdmOwogc3RhdGljIGNvbnN0IGZsb2F0IGNTZWVrVGlt
ZSA9IDAuMmY7CiAKLWlubGluZSBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6TWVkaWFD
b250cm9sU2hhZG93Um9vdEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQot
ICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkpCi17
Ci0gICAgc2V0U2hhZG93SG9zdChtZWRpYUVsZW1lbnQpOwotfQotCi1QYXNzUmVmUHRyPE1lZGlh
Q29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6
Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAgICBSZWZQdHI8TWVk
aWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcgTWVkaWFD
b250cm9sU2hhZG93Um9vdEVsZW1lbnQobWVkaWFFbGVtZW50KSk7Ci0KLSAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IHJvb3RTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICByb290U3R5
bGUtPmluaGVyaXRGcm9tKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAg
cm9vdFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICByb290U3R5bGUtPnNldFBvc2l0aW9u
KFJlbGF0aXZlUG9zaXRpb24pOwotCi0gICAgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdCog
cmVuZGVyZXIgPSBuZXcgKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSkg
UmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdChlbGVtZW50LmdldCgpKTsKLSAgICByZW5kZXJl
ci0+c2V0U3R5bGUocm9vdFN0eWxlLnJlbGVhc2UoKSk7Ci0KLSAgICBlbGVtZW50LT5zZXRSZW5k
ZXJlcihyZW5kZXJlcik7Ci0gICAgZWxlbWVudC0+c2V0QXR0YWNoZWQoKTsKLSAgICBlbGVtZW50
LT5zZXRJbkRvY3VtZW50KCk7Ci0KLSAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0gICAgSFRN
TERpdkVsZW1lbnQ6OmRldGFjaCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBzaGFkb3cg
RE9NIHVzZXMgRWxlbWVudDo6c2V0U2hhZG93Um9vdCgpLgotICAgIHNldFNoYWRvd0hvc3QoMCk7
Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTWVkaWFDb250cm9sRWxl
bWVudDo6TWVkaWFDb250cm9sRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQp
CiAgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIG1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKSkK
ICAgICAsIG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKIHsKLSAgICBzZXRJbkRvY3VtZW50
KCk7Ci19Ci0KLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6YXR0YWNoVG9QYXJlbnQoRWxlbWVu
dCogcGFyZW50KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2VlbXMgdmVyeSB3cm9uZy4g
IFdoeSBhcmUgd2UgbWFnaWNhbGx5IGFkZGluZyB8dGhpc3wgdG8gdGhlIERPTSBoZXJlPwotICAg
IC8vICAgICAgICBXZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBwYXJzZXIgQVBJIG1ldGhvZHMgb3V0
c2lkZSBvZiB0aGUgcGFyc2VyIQotICAgIHBhcmVudC0+cGFyc2VyQWRkQ2hpbGQodGhpcyk7CiB9
CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlKCkKK3N0YXRpYyBjb25zdCBTdHJp
bmcmIGRpc3BsYXlTdHJpbmcoKQogewotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHVwZGF0ZVN0eWxlKCk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHMsICgiZGlzcGxheSIpKTsKKyAgICByZXR1cm4gczsK
IH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gTWVkaWFDb250cm9sRWxlbWVudDo6c3R5bGVG
b3JFbGVtZW50KCkKK3ZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6c2hvdygpCiB7Ci0gICAgQVNT
RVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhp
cywgbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCksIHRydWUpOwotICAgIGlmICgh
c3R5bGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIHRleHQtZGVjb3JhdGlvbiBj
YW4ndCBiZSBvdmVycmlkZWQgZnJvbSBDU1MuIFNvIHdlIGRvIGl0IGhlcmUuCi0gICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzAxNQotICAgIHN0eWxl
LT5zZXRUZXh0RGVjb3JhdGlvbihURE5PTkUpOwotICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdChURE5PTkUpOwotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi1ib29sIE1lZGlh
Q29udHJvbEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQotewot
ICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkpOwotCi0gICAgcmV0dXJuIEhUTUxEaXZFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9k
ZSgpLT5yZW5kZXJlcigpCi0gICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBk
b2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQo
c3R5bGUtPmFwcGVhcmFuY2UoKSwgbV9tZWRpYUVsZW1lbnQpKTsKLX0KLSAgICAKLXZvaWQgTWVk
aWFDb250cm9sRWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkp
OwotICAgIGlmICghbmVlZHNSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIo
KS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotICAgIHNl
dFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUo
KS0+cmVuZGVyZXIoKSkgewotICAgICAgICAvLyBGaW5kIG5leHQgc2libGluZyB3aXRoIGEgcmVu
ZGVyZXIgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydC4KLSAgICAgICAgTm9kZSogc2libGlu
ZyA9IG5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYmICFzaWJsaW5nLT5y
ZW5kZXJlcigpKQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQocmVuZGVyZXIsIHNp
YmxpbmcgPyBzaWJsaW5nLT5yZW5kZXJlcigpIDogMCk7Ci0gICAgfQotICAgIENvbnRhaW5lck5v
ZGU6OmF0dGFjaCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2Ug
bW9yZSBlZmZpY2llbnQuCisgICAgc3R5bGUoKS0+cmVtb3ZlUHJvcGVydHkoZGlzcGxheVN0cmlu
ZygpLCBlYyk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6dXBkYXRlU3R5bGUoKQor
dm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjpoaWRlKCkKIHsKLSAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwotICAgIGlm
ICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgbmVlZHNSZW5kZXJlciA9IHJl
bmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpICYmIHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2Rl
KCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgIW5lZWRzUmVuZGVyZXIpCi0g
ICAgICAgIGRldGFjaCgpOwotICAgIGVsc2UgaWYgKCFyZW5kZXJlcigpICYmIG5lZWRzUmVuZGVy
ZXIpCi0gICAgICAgIGF0dGFjaCgpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotCi0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IGlmIHRoZXJlIGlzIGFueSBpbm5lclRleHQgcmVuZGVyZXIsIGl0IGlzIHVwZGF0
ZWQgYXMgd2VsbC4KLSAgICAgICAgaWYgKGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCktPnJl
bmRlcmVyKCkpCi0gICAgICAgICAgICBmaXJzdENoaWxkKCktPnJlbmRlcmVyKCktPnNldFN0eWxl
KHN0eWxlLmdldCgpKTsKLSAgICB9CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAvLyBGSVhN
RTogTWFrZSBtb3JlIGVmZmljaWVudC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
bm9uZSwgKCJub25lIikpOworICAgIHN0eWxlKCktPnNldFByb3BlcnR5KGRpc3BsYXlTdHJpbmco
KSwgbm9uZSwgZWMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0y
MjMsMjAgKzEyOCw5IEBAIGlubGluZSBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1l
bnQ6Ok1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVuCiAKIFBhc3NSZWZQdHI8TWVk
aWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUNv
bnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVs
ZW1lbnQobWVkaWFFbGVtZW50KSk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sVGltZWxpbmVDb250
YWluZXJFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAg
ICBpZiAoIU1lZGlhQ29udHJvbEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBbHdheXMgc2hvdyB0aGUgdGltZWxpbmUgaWYg
dGhlIHRoZW1lIGRvZXNuJ3QgdXNlIHN0YXR1cyBkaXNwbGF5IChNZWRpYUNvbnRyb2xsZXJUaGVt
ZUNsYXNzaWMsIGZvciBpbnN0YW5jZSkuCi0gICAgaWYgKCFkb2N1bWVudCgpLT5wYWdlKCktPnRo
ZW1lKCktPnVzZXNNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKTsK
LSAgICByZXR1cm4gIWlzbmFuKGR1cmF0aW9uKSAmJiAhaXNpbmYoZHVyYXRpb24pOworICAgIFJl
ZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9w
dFJlZihuZXcgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KG1lZGlhRWxlbWVu
dCkpOworICAgIGVsZW1lbnQtPmhpZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7
CiB9CiAKIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFp
bmVyRWxlbWVudDo6ZGlzcGxheVR5cGUoKSBjb25zdApAQCAtMjg2LDEzICsxODAsMTQgQEAgdm9p
ZCBSZW5kZXJNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KCkKIAogaW5saW5lIE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckNvbnRhaW5lckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQog
ICAgIDogTWVkaWFDb250cm9sRWxlbWVudChtZWRpYUVsZW1lbnQpCi0gICAgLCBtX2lzVmlzaWJs
ZShmYWxzZSkKIHsKIH0KIAogUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250
YWluZXJFbGVtZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50Ojpj
cmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChtZWRpYUVs
ZW1lbnQpKTsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudD4gZWxlbWVudCA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250
YWluZXJFbGVtZW50KG1lZGlhRWxlbWVudCkpOworICAgIGVsZW1lbnQtPmhpZGUoKTsKKyAgICBy
ZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKIFJlbmRlck9iamVjdCogTWVkaWFDb250cm9s
Vm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
IGFyZW5hLCBSZW5kZXJTdHlsZSopCkBAIC0zMDAsMjkgKzE5NSwyMyBAQCBSZW5kZXJPYmplY3Qq
IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZQogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJNZWRpYVZvbHVtZVNsaWRl
ckNvbnRhaW5lcih0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6c3R5bGVGb3JFbGVtZW50KCkKK3ZvaWQg
TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IE1l
ZGlhQ29udHJvbEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpOwotICAgIHN0eWxlLT5zZXRQb3Np
dGlvbihBYnNvbHV0ZVBvc2l0aW9uKTsKLSAgICBzdHlsZS0+c2V0RGlzcGxheShtX2lzVmlzaWJs
ZSA/IEJMT0NLIDogTk9ORSk7Ci0gICAgcmV0dXJuIHN0eWxlOwotfQorICAgIGlmICghZXZlbnQt
PmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3V0
RXZlbnQpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJD
b250YWluZXJFbGVtZW50OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAodmlz
aWJsZSA9PSBtX2lzVmlzaWJsZSkKKyAgICAvLyBQb29yIG1hbidzIG1vdXNlbGVhdmUgZXZlbnQg
ZGV0ZWN0aW9uLgorICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZlbnQpOworICAgIGlmICghbW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpIHx8
ICFtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCktPnRvTm9kZSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOwotfQogCi1ib29sIE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50
KQotewotICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnRoZW1lKCktPmhpdFRlc3RNZWRp
YUNvbnRyb2xQYXJ0KHJlbmRlcmVyKCksIGFic1BvaW50KTsKKyAgICBpZiAodGhpcy0+Y29udGFp
bnNJbmNsdWRpbmdTaGFkb3dET00obW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpLT50b05vZGUo
KSkpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBoaWRlKCk7CiB9
CiAKKwogTWVkaWFDb250cm9sRWxlbWVudFR5cGUgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29u
dGFpbmVyRWxlbWVudDo6ZGlzcGxheVR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBNZWRpYVZv
bHVtZVNsaWRlckNvbnRhaW5lcjsKQEAgLTM0NCwxMyArMjMzLDEzIEBAIGlubGluZSBNZWRpYUNv
bnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1l
bnQoSFRNTE1lCiAKIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ+
IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9s
U3RhdHVzRGlzcGxheUVsZW1lbnQobWVkaWFFbGVtZW50KSk7CisgICAgUmVmUHRyPE1lZGlhQ29u
dHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBlbGVtZW50ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29u
dHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KG1lZGlhRWxlbWVudCkpOworICAgIGVsZW1lbnQtPmhp
ZGUoKTsKKyAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgTWVkaWFDb250
cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnVwZGF0ZSgpCiB7Ci0gICAgTWVkaWFDb250cm9sRWxl
bWVudDo6dXBkYXRlKCk7Ci0KICAgICAvLyBHZXQgdGhlIG5ldyBzdGF0ZSB0aGF0IHdlJ2xsIGhh
dmUgdG8gZGlzcGxheS4KICAgICBTdGF0ZUJlaW5nRGlzcGxheWVkIG5ld1N0YXRlVG9EaXNwbGF5
ID0gTm90aGluZzsKIApAQCAtMzU5LDEyICsyNDgsMTggQEAgdm9pZCBNZWRpYUNvbnRyb2xTdGF0
dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkKICAgICBlbHNlIGlmIChtZWRpYUVsZW1lbnQoKS0+
bW92aWVMb2FkVHlwZSgpID09IE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtKQogICAgICAgICBuZXdT
dGF0ZVRvRGlzcGxheSA9IExpdmVCcm9hZGNhc3Q7CiAKLSAgICAvLyBQcm9wYWdhdGUgb25seSBp
ZiBuZWVkZWQuCiAgICAgaWYgKG5ld1N0YXRlVG9EaXNwbGF5ID09IG1fc3RhdGVCZWluZ0Rpc3Bs
YXllZCkKICAgICAgICAgcmV0dXJuOwotICAgIG1fc3RhdGVCZWluZ0Rpc3BsYXllZCA9IG5ld1N0
YXRlVG9EaXNwbGF5OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlOworCisgICAgaWYgKG1fc3RhdGVC
ZWluZ0Rpc3BsYXllZCA9PSBOb3RoaW5nKQorICAgICAgICBzaG93KCk7CisgICAgZWxzZSBpZiAo
bmV3U3RhdGVUb0Rpc3BsYXkgPT0gTm90aGluZykKKyAgICAgICAgaGlkZSgpOworCisgICAgbV9z
dGF0ZUJlaW5nRGlzcGxheWVkID0gbmV3U3RhdGVUb0Rpc3BsYXk7CisKICAgICBzd2l0Y2ggKG1f
c3RhdGVCZWluZ0Rpc3BsYXllZCkgewogICAgIGNhc2UgTm90aGluZzoKICAgICAgICAgc2V0SW5u
ZXJUZXh0KCIiLCBlKTsKQEAgLTM3OCwxNCArMjczLDYgQEAgdm9pZCBNZWRpYUNvbnRyb2xTdGF0
dXNEaXNwbGF5RWxlbWVudDo6dXBkYXRlKCkKICAgICB9CiB9CiAKLWJvb2wgTWVkaWFDb250cm9s
U3RhdHVzRGlzcGxheUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxl
KQotewotICAgIGlmICghTWVkaWFDb250cm9sRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHls
ZSkgfHwgIWRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+dXNlc01lZGlhQ29udHJvbFN0YXR1
c0Rpc3BsYXkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZsb2F0IGR1cmF0aW9uID0g
bWVkaWFFbGVtZW50KCktPmR1cmF0aW9uKCk7Ci0gICAgcmV0dXJuIChpc25hbihkdXJhdGlvbikg
fHwgaXNpbmYoZHVyYXRpb24pKTsKLX0KLQogTWVkaWFDb250cm9sRWxlbWVudFR5cGUgTWVkaWFD
b250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gTWVkaWFTdGF0dXNEaXNwbGF5OwpAQCAtNDA2LDk2ICsyOTMsMTggQEAgTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW4KIHsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmF0
dGFjaFRvUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKK3ZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50OjpzaG93KCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHNlZW1zIHZlcnkgd3Jvbmcu
ICBXaHkgYXJlIHdlIG1hZ2ljYWxseSBhZGRpbmcgfHRoaXN8IHRvIHRoZSBET00gaGVyZT8KLSAg
ICAvLyAgICAgICAgV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcgcGFyc2VyIEFQSSBtZXRob2RzIG91
dHNpZGUgb2YgdGhlIHBhcnNlciEKLSAgICBwYXJlbnQtPnBhcnNlckFkZENoaWxkKHRoaXMpOwot
fQotCi12b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6dXBkYXRlKCkKLXsKLSAgICB1cGRh
dGVEaXNwbGF5VHlwZSgpOwotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlcigp
LT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHVwZGF0ZVN0eWxlKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6c3R5bGVGb3JFbGVtZW50
KCkKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVs
ZW1lbnQodGhpcywgMCwgdHJ1ZSk7Ci19Ci0KLWJvb2wgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBBU1NFUlQoZG9j
dW1lbnQoKS0+cGFnZSgpKTsKLQotICAgIHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJl
cigpCi0gICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBkb2N1bWVudCgpLT5w
YWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoc3R5bGUtPmFwcGVh
cmFuY2UoKSwgbWVkaWFFbGVtZW50KCkpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIHN0
eWxlKCktPnJlbW92ZVByb3BlcnR5KGRpc3BsYXlTdHJpbmcoKSwgZWMpOwogfQogCi12b2lkIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0YWNoKCkKK3ZvaWQgTWVkaWFDb250cm9sSW5wdXRF
bGVtZW50OjpoaWRlKCkKIHsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gc3R5bGVG
b3JFbGVtZW50KCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGJvb2wgbmVlZHNSZW5kZXJlciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpOwotICAg
IGlmICghbmVlZHNSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtZWRpYUVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+cmVu
ZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJl
dHVybjsKLSAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotICAgIHNldFJlbmRl
cmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+cmVu
ZGVyZXIoKSkgewotICAgICAgICAvLyBGaW5kIG5leHQgc2libGluZyB3aXRoIGEgcmVuZGVyZXIg
dG8gZGV0ZXJtaW5lIHdoZXJlIHRvIGluc2VydC4KLSAgICAgICAgTm9kZSogc2libGluZyA9IG5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYmICFzaWJsaW5nLT5yZW5kZXJl
cigpKQotICAgICAgICAgICAgc2libGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQocmVuZGVyZXIsIHNpYmxpbmcg
PyBzaWJsaW5nLT5yZW5kZXJlcigpIDogMCk7Ci0gICAgfSAgCi0gICAgQ29udGFpbmVyTm9kZTo6
YXR0YWNoKCk7Ci0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgTWVpZGFDb250cm9sSW5wdXQgY2ly
Y3VtdmVudHMgdGhlIG5vcm1hbCBhdHRhY2htZW50Ci0gICAgLy8gYW5kIHN0eWxlIHJlY2FsYyBj
eWNsZSBhbmQgdGh1cyB3ZSBuZWVkIHRvIGFkZCBleHRyYSBsb2dpYyB0byBiZSBhd2FyZSBvZgot
ICAgIC8vIHRoZSBzaGFkb3cgRE9NLiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBtZWRpYSBjb250cm9s
cyBhcmUgdHJhbnNpdGlvbmVkIHRvIHVzZSB0aGUgcmVndWxhcgotICAgIC8vIHN0eWxlIGNhbGN1
bGF0aW9uLgotICAgIGlmIChOb2RlKiBzaGFkb3dOb2RlID0gc2hhZG93Um9vdCgpKQotICAgICAg
ICBzaGFkb3dOb2RlLT5hdHRhY2goKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQ6OnVwZGF0ZVN0eWxlKCkKLXsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCgpIHx8ICFtZWRpYUVs
ZW1lbnQoKS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBuZWVkc1JlbmRlcmVyID0gcmVuZGVyZXJJ
c05lZWRlZChzdHlsZS5nZXQoKSkgJiYgcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+cmVu
ZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiAhbmVlZHNSZW5kZXJlcikKLSAgICAgICAg
ZGV0YWNoKCk7Ci0gICAgZWxzZSBpZiAoIXJlbmRlcmVyKCkgJiYgbmVlZHNSZW5kZXJlcikKLSAg
ICAgICAgYXR0YWNoKCk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVy
ZXIoKS0+c2V0U3R5bGUoc3R5bGUuZ2V0KCkpOwotCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwg
TWVpZGFDb250cm9sSW5wdXQgY2lyY3VtdmVudHMgdGhlIG5vcm1hbCBhdHRhY2htZW50Ci0gICAg
Ly8gYW5kIHN0eWxlIHJlY2FsYyBjeWNsZSBhbmQgdGh1cyB3ZSBuZWVkIHRvIGFkZCBleHRyYSBs
b2dpYyB0byBiZSBhd2FyZSBvZgotICAgIC8vIHRoZSBzaGFkb3cgRE9NLiBSZW1vdmUgdGhpcyBv
bmNlIGFsbCBtZWRpYSBjb250cm9scyBhcmUgdHJhbnNpdGlvbmVkIHRvIHVzZQotICAgIC8vIHRo
ZSBuZXcgc2hhZG93IERPTS4KLSAgICBpZiAoTm9kZSogc2hhZG93Tm9kZSA9IHNoYWRvd1Jvb3Qo
KSkKLSAgICAgICAgc2hhZG93Tm9kZS0+cmVjYWxjU3R5bGUoTm9kZTo6Rm9yY2UpOworICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CisgICAgc3R5bGUoKS0+c2V0UHJvcGVydHkoZGlzcGxheVN0cmluZygp
LCAibm9uZSIsIGVjKTsKIH0KIAotYm9vbCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmhpdFRl
c3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KQotewotICAgIGlmIChyZW5kZXJlcigpICYmIHJl
bmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRl
cmVyKCktPnRoZW1lKCktPmhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KHJlbmRlcmVyKCksIGFic1Bv
aW50KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KIAogdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVs
ZW1lbnQ6OnNldERpc3BsYXlUeXBlKE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBl
KQogewpAQCAtNTIwLDkgKzMyOSwxNSBAQCB2b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgbWVkaWFFbGVt
ZW50KCktPnNldE11dGVkKCFtZWRpYUVsZW1lbnQoKS0+bXV0ZWQoKSk7CiAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KKwogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCit2b2lkIE1lZGlhQ29udHJvbE11dGVCdXR0
b25FbGVtZW50OjpjaGFuZ2VkTXV0ZSgpCit7CisgICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKK30K
Kwogdm9pZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6dXBkYXRlRGlzcGxheVR5cGUo
KQogewogICAgIHNldERpc3BsYXlUeXBlKG1lZGlhRWxlbWVudCgpLT5tdXRlZCgpID8gTWVkaWFV
bk11dGVCdXR0b24gOiBNZWRpYU11dGVCdXR0b24pOwpAQCAtNTMwLDE4ICszNDUsMjkgQEAgdm9p
ZCBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudDo6dXBkYXRlRGlzcGxheVR5cGUoKQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBNZWRpYUNvbnRyb2xQYW5l
bE11dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK2lubGluZSBNZWRpYUNvbnRyb2xQYW5lbE11
dGVCdXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50KEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCiAgICAg
OiBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudChtZWRpYUVsZW1lbnQsIE1lZGlhTXV0ZUJ1
dHRvbikKKyAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCiB7CiB9CiAKLVBhc3NSZWZQdHI8TWVk
aWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0
dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK1Bhc3NS
ZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sUGFu
ZWxNdXRlQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVu
dCwgTWVkaWFDb250cm9scyogY29udHJvbHMpCiB7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFBh
bmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xQ
YW5lbE11dGVCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCkpOworICAgIEFTU0VSVChjb250cm9s
cyk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudD4gYnV0
dG9uID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQobWVk
aWFFbGVtZW50LCBjb250cm9scykpOwogICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7CiAg
ICAgcmV0dXJuIGJ1dHRvbi5yZWxlYXNlKCk7CiB9CiAKK3ZvaWQgTWVkaWFDb250cm9sUGFuZWxN
dXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7Cisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KQorICAg
ICAgICBtX2NvbnRyb2xzLT5zaG93Vm9sdW1lU2xpZGVyKCk7CisKKyAgICBNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKIGNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6c2hhZG93
UHNldWRvSWQoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBpZCwgKCItd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9uIikpOwpAQCAtNTUxLDcg
KzM3Nyw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBpbmxpbmUgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVsZW1l
bnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
KG1lZGlhRWxlbWVudCwgTWVkaWFWb2x1bWVTbGlkZXJNdXRlQnV0dG9uKQorICAgIDogTWVkaWFD
b250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50LCBNZWRpYU11dGVCdXR0b24pCiB7
CiB9CiAKQEAgLTU4Niw2ICs0MTIsNyBAQCB2b2lkIE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICBtZWRpYUVsZW1l
bnQoKS0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgICAgIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KICAgICBIVE1MSW5wdXRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKQEAgLTczOSw2ICs1NjYsNyBAQCBQ
YXNzUmVmUHRyPE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50PiBNZWRp
YUNvbnRyb2xSZXR1cm5Ub1JlYWx0aQogewogICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xSZXR1cm5U
b1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJv
bFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCkpOwogICAgIGJ1dHRv
bi0+c2V0VHlwZSgiYnV0dG9uIik7CisgICAgYnV0dG9uLT5oaWRlKCk7CiAgICAgcmV0dXJuIGJ1
dHRvbi5yZWxlYXNlKCk7CiB9CiAKQEAgLTc2OCw2ICs1OTYsNyBAQCBQYXNzUmVmUHRyPE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4gTWVkaWFDb250cm9sVG9n
Z2xlQ2xvcwogewogICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50KSk7CiAgICAgYnV0dG9uLT5zZXRU
eXBlKCJidXR0b24iKTsKKyAgICBidXR0b24tPmhpZGUoKTsKICAgICByZXR1cm4gYnV0dG9uLnJl
bGVhc2UoKTsKIH0KIApAQCAtNzc2LDggKzYwNSwxMCBAQCB2b2lkIE1lZGlhQ29udHJvbFRvZ2ds
ZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZQogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAg
ICAgICAgIG1lZGlhRWxlbWVudCgpLT5zZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoIW1lZGlhRWxl
bWVudCgpLT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKSk7CiAgICAgICAgIHNldENoZWNrZWQobWVk
aWFFbGVtZW50KCktPmNsb3NlZENhcHRpb25zVmlzaWJsZSgpKTsKKyAgICAgICAgdXBkYXRlRGlz
cGxheVR5cGUoKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQor
CiAgICAgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAK
QEAgLTc5NCwxNCArNjI1LDE4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sVG9n
Z2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
KQorTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9s
cykKICAgICA6IE1lZGlhQ29udHJvbElucHV0RWxlbWVudChtZWRpYUVsZW1lbnQsIE1lZGlhU2xp
ZGVyKQorICAgICwgbV9jb250cm9scyhjb250cm9scykKIHsKKyAgICBzZXRBdHRyaWJ1dGUocHJl
Y2lzaW9uQXR0ciwgImZsb2F0Iik7CiB9CiAKLVBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxp
bmVFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQpCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxl
bWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50LCBNZWRpYUNvbnRyb2xzKiBjb250cm9scykKIHsKLSAgICBSZWZQdHI8
TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiB0aW1lbGluZSA9IGFkb3B0UmVmKG5ldyBNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQobWVkaWFFbGVtZW50KSk7CisgICAgQVNTRVJUKGNvbnRy
b2xzKTsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5l
ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudChtZWRpYUVsZW1lbnQs
IGNvbnRyb2xzKSk7CiAgICAgdGltZWxpbmUtPnNldFR5cGUoInJhbmdlIik7CiAgICAgdGltZWxp
bmUtPnNldEF0dHJpYnV0ZShwcmVjaXNpb25BdHRyLCAiZmxvYXQiKTsKICAgICByZXR1cm4gdGlt
ZWxpbmUucmVsZWFzZSgpOwpAQCAtODI2LDI4ICs2NjEsMzAgQEAgdm9pZCBNZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogCiAgICAg
ZmxvYXQgdGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodmFsdWUoKS50b0RvdWJsZSgpKTsK
ICAgICBpZiAodGltZSAhPSBtZWRpYUVsZW1lbnQoKS0+Y3VycmVudFRpbWUoKSkgeworICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBmaXJlZCAzIHRpbWVzIG9uIGV2ZXJ5IGNsaWNrLiBXZSBzaG91
bGQgbm90IGJlIGRvaW5nIHRoYXQuCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAg
IG1lZGlhRWxlbWVudCgpLT5zZXRDdXJyZW50VGltZSh0aW1lLCBlYyk7CiAgICAgfQogCiAgICAg
UmVuZGVyU2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihyZW5kZXJlcigpKTsKICAgICBp
ZiAoc2xpZGVyICYmIHNsaWRlci0+aW5EcmFnTW9kZSgpKQotICAgICAgICB0b1JlbmRlck1lZGlh
KG1lZGlhRWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Y29udHJvbHMoKS0+dXBkYXRlVGltZURpc3Bs
YXkoKTsKKyAgICAgICAgbV9jb250cm9scy0+dXBkYXRlVGltZURpc3BsYXkoKTsKIAogICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCiAgICAgICAgIG1l
ZGlhRWxlbWVudCgpLT5lbmRTY3J1YmJpbmcoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OnVwZGF0ZShib29sIHVwZGF0ZUR1cmF0aW9uKSAKK3ZvaWQgTWVkaWFDb250
cm9sVGltZWxpbmVFbGVtZW50OjpzZXRQb3NpdGlvbihmbG9hdCBjdXJyZW50VGltZSkgCiB7Ci0g
ICAgaWYgKHVwZGF0ZUR1cmF0aW9uKSB7Ci0gICAgICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFF
bGVtZW50KCktPmR1cmF0aW9uKCk7Ci0gICAgICAgIHNldEF0dHJpYnV0ZShtYXhBdHRyLCBTdHJp
bmc6Om51bWJlcihpc2Zpbml0ZShkdXJhdGlvbikgPyBkdXJhdGlvbiA6IDApKTsKLSAgICB9Ci0g
ICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIobWVkaWFFbGVtZW50KCktPmN1cnJlbnRUaW1lKCkp
KTsKLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZSgpOworICAgIHNldFZhbHVl
KFN0cmluZzo6bnVtYmVyKGN1cnJlbnRUaW1lKSk7Cit9CisKK3ZvaWQgTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpzZXREdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3sKKyAgICBzZXRBdHRy
aWJ1dGUobWF4QXR0ciwgU3RyaW5nOjpudW1iZXIoaXNmaW5pdGUoZHVyYXRpb24pID8gZHVyYXRp
b24gOiAwKSk7CiB9CiAKKwogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xUaW1lbGlu
ZUVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSIp
KTsKQEAgLTg1OSw2ICs2OTYsOCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFRp
bWVsaW5lRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogaW5saW5lIE1lZGlhQ29udHJv
bFZvbHVtZVNsaWRlckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50KG1lZGlhRWxlbWVudCwgTWVkaWFWb2x1bWVTbGlkZXIpCiB7CisgICAgc2V0QXR0cmlidXRl
KHByZWNpc2lvbkF0dHIsICJmbG9hdCIpOworICAgIHNldEF0dHJpYnV0ZShtYXhBdHRyLCAiMSIp
OwogfQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ+IE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQpCkBAIC04OTMsMTIgKzczMiwxMCBAQCB2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNs
aWRlckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIH0KIH0K
IAotdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50Ojp1cGRhdGUoKQordm9pZCBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQog
ewotICAgIGZsb2F0IHZvbHVtZSA9IG1lZGlhRWxlbWVudCgpLT52b2x1bWUoKTsKICAgICBpZiAo
dmFsdWUoKS50b0Zsb2F0KCkgIT0gdm9sdW1lKQogICAgICAgICBzZXRWYWx1ZShTdHJpbmc6Om51
bWJlcih2b2x1bWUpKTsKLSAgICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZSgpOwog
fQogCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6
OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKQEAgLTk0MSw2ICs3NzgsNyBAQCBQYXNzUmVmUHRyPE1l
ZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
QnV0dG9uRWxlbQogewogICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxl
bWVudD4gYnV0dG9uID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25F
bGVtZW50KG1lZGlhRWxlbWVudCkpOwogICAgIGJ1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7Cisg
ICAgYnV0dG9uLT5oaWRlKCk7CiAgICAgcmV0dXJuIGJ1dHRvbi5yZWxlYXNlKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmgKaW5kZXgg
NzcxMTZlMzc3ZjVjMzFjZWNmMGE4NjE2MzkzZDQwYzY1OWJhNTYyZi4uMzdiN2VlNzc0ZTFlMDZi
YmYzMDI5ODVmNjViODQzZjJhYzUxM2ZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBFdmVudDsKIGNsYXNzIEZyYW1lOworY2xhc3MgTWVkaWFDb250cm9s
czsKIAogLy8gTXVzdCBtYXRjaCBXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaAogZW51bSBNZWRpYUNv
bnRyb2xFbGVtZW50VHlwZSB7CkBAIC03MSwyNCArNzIsMTMgQEAgZW51bSBNZWRpYUNvbnRyb2xF
bGVtZW50VHlwZSB7CiAKIEhUTUxNZWRpYUVsZW1lbnQqIHRvUGFyZW50TWVkaWFFbGVtZW50KFJl
bmRlck9iamVjdCopOwogCi1jbGFzcyBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudCA6IHB1
YmxpYyBIVE1MRGl2RWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVk
aWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIE1lZGlhQ29u
dHJvbFNoYWRvd1Jvb3RFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKLX07Ci0KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgTWVkaWFDb250cm9sRWxlbWVudCA6IHB1
YmxpYyBIVE1MRGl2RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgp
OwotICAgIHZvaWQgYXR0YWNoVG9QYXJlbnQoRWxlbWVudCopOwotICAgIHZvaWQgdXBkYXRlKCk7
Ci0gICAgdm9pZCB1cGRhdGVTdHlsZSgpOworICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUg
cGFydCBvZiBzb21lIElubGluZVN0eWxhYmxlRWxlbWVudC4KKyAgICB2b2lkIGhpZGUoKTsKKyAg
ICB2b2lkIHNob3coKTsKIAogICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlz
cGxheVR5cGUoKSBjb25zdCA9IDA7CiAKQEAgLTk3LDEwICs4Nyw2IEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICBNZWRpYUNvbnRyb2xFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKIAotICAg
IHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7Ci0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudCgpOwotCiBwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKQEAgLTExOSw3ICsxMDUsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogfTsKIAotCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29u
dGFpbmVyRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xFbGVtZW50IHsKQEAgLTEyOCw5ICsx
MTMsOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgTWVkaWFDb250cm9sVGltZWxpbmVDb250
YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgTWVkaWFDb250cm9sRWxl
bWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTEzOSwxOSArMTI0LDEyIEBAIGNsYXNzIE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckNvbnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29u
dGFpbmVyRWxlbWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqKTsKIAotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpOwotICAgIGJvb2wgaXNWaXNpYmxlKCkgeyByZXR1cm4gbV9pc1Zpc2libGU7
IH0KLSAgICBib29sIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsKLQogcHJpdmF0
ZToKICAgICBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KEhUTUxNZWRp
YUVsZW1lbnQqKTsKLQogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqKTsKICAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRp
c3BsYXlUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRv
d1BzZXVkb0lkKCkgY29uc3Q7Ci0KLSAgICBib29sIG1faXNWaXNpYmxlOwogfTsKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTY2LDcgKzE0NCw2IEBAIHByaXZhdGU6CiAg
ICAgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwog
CiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiAKICAg
ICBlbnVtIFN0YXRlQmVpbmdEaXNwbGF5ZWQgeyBOb3RoaW5nLCBMb2FkaW5nLCBMaXZlQnJvYWRj
YXN0IH07CkBAIC0xNzcsMTEgKzE1NCw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIE1lZGlhQ29udHJv
bElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICB2
b2lkIGF0dGFjaFRvUGFyZW50KEVsZW1lbnQqKTsKLSAgICB2b2lkIHVwZGF0ZSgpOwotICAgIHZv
aWQgdXBkYXRlU3R5bGUoKTsKLQotICAgIGJvb2wgaGl0VGVzdChjb25zdCBJbnRQb2ludCYgYWJz
UG9pbnQpOworICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcGFydCBvZiBzb21lIElubGlu
ZVN0eWxhYmxlRWxlbWVudC4KKyAgICB2b2lkIGhpZGUoKTsKKyAgICB2b2lkIHNob3coKTsKIAog
ICAgIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5VHlwZTsgfQogCkBAIC0xOTMsMTEgKzE2OCw2IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIHNldERpc3BsYXlUeXBlKE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsKIAogcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUqKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JFbGVtZW50KCk7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZURpc3BsYXlUeXBlKCkgeyB9CkBAIC0yMTAsMTAgKzE4MCwxMiBAQCBwcml2YXRlOgogCiBjbGFz
cyBNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50Kik7CisgICAgdm9pZCBjaGFuZ2VkTXV0ZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgTWVk
aWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCopOworCiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7
CkBAIC0yMjMsMTIgKzE5NSwxNSBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xQYW5l
bE11dGVCdXR0b25FbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVC
dXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVk
aWFFbGVtZW50KiwgTWVkaWFDb250cm9scyopOwogCiBwcml2YXRlOgotICAgIE1lZGlhQ29udHJv
bFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOworICAgIE1lZGlhQ29u
dHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJv
bHMqKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CisK
KyAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtMjUxLDExICsyMjYsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
KTsKKyAgICAvLyBGSVhNRTogUEVSSEFQUyBNQUtFIEVYUExJQ0lUIFBMQVkvUEFVU0UgQ0FMTFMu
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAKIHByaXZhdGU6CiAgICAg
TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogCi0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiB9OwogCkBAIC0zNDAsMTEgKzMxNiwx
MSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVG9nZ2xlQ2xv
c2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKIAogcHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xU
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwogCi0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiB9OyAgICAKIApAQCAtMzUyLDE1
ICszMjgsMTggQEAgcHJpdmF0ZToKIAogY2xhc3MgTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50
IDogcHVibGljIE1lZGlhQ29udHJvbElucHV0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxl
bWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotICAgIHZvaWQgdXBkYXRl
KGJvb2wgdXBkYXRlRHVyYXRpb24gPSB0cnVlKTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0
KTsKKyAgICB2b2lkIHNldER1cmF0aW9uKGZsb2F0KTsKIAogcHJpdmF0ZToKLSAgICBNZWRpYUNv
bnRyb2xUaW1lbGluZUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOworICAgIE1lZGlhQ29udHJv
bFRpbWVsaW5lRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiwgTWVkaWFDb250cm9scyopOwogCiAg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CisK
KyAgICBNZWRpYUNvbnRyb2xzKiBtX2NvbnRyb2xzOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtMzcwLDcgKzM0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlh
RWxlbWVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
KTsKLSAgICB2b2lkIHVwZGF0ZSgpOworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKIAogcHJv
dGVjdGVkOgogICAgIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQoSFRNTE1lZGlhRWxl
bWVudCopOwpAQCAtNDc0LDE1ICs0NTMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9v
dCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWVkaWFDb250cm9s
U2hhZG93Um9vdChFbGVtZW50KiBlKSA6IFJlbmRlckJsb2NrKGUpIHsgfQotICAgIHZvaWQgc2V0
UGFyZW50KFJlbmRlck9iamVjdCogcCkgeyBSZW5kZXJPYmplY3Q6OnNldFBhcmVudChwKTsgfQot
fTsKLSAgICAKKyAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogfSAvL25hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAppbmRl
eCA2OWQ3MWVjMjg2YmY5MmMxMDU1OGY3OTAxNDdmN2Y5NTVhM2FhMmVhLi44MjIwZjkwODVkMWNi
YTkxMzY5MzQwZDY0YTk2MzY3ZDJkNjJmNzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZWRpYS5jcHAKQEAgLTI5LDIyICsyOSwxOCBAQAogI2luY2x1ZGUgIlJlbmRlck1lZGlh
LmgiCiAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiTWVkaWFDb250
cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xzLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlck1lZGlhOjpSZW5kZXJN
ZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbykKICAgICA6IFJlbmRlckltYWdlKHZpZGVvKQot
ICAgICwgbV9jb250cm9scyhuZXcgTWVkaWFDb250cm9scyh2aWRlbykpCiB7CiAgICAgc2V0SW1h
Z2VSZXNvdXJjZShSZW5kZXJJbWFnZVJlc291cmNlOjpjcmVhdGUoKSk7CiB9CiAKIFJlbmRlck1l
ZGlhOjpSZW5kZXJNZWRpYShIVE1MTWVkaWFFbGVtZW50KiB2aWRlbywgY29uc3QgSW50U2l6ZSYg
aW50cmluc2ljU2l6ZSkKICAgICA6IFJlbmRlckltYWdlKHZpZGVvKQotICAgICwgbV9jb250cm9s
cyhuZXcgTWVkaWFDb250cm9scyh2aWRlbykpCiB7CiAgICAgc2V0SW1hZ2VSZXNvdXJjZShSZW5k
ZXJJbWFnZVJlc291cmNlOjpjcmVhdGUoKSk7CiAgICAgc2V0SW50cmluc2ljU2l6ZShpbnRyaW5z
aWNTaXplKTsKQEAgLTU0LDMyICs1MCwyMiBAQCBSZW5kZXJNZWRpYTo6flJlbmRlck1lZGlhKCkK
IHsKIH0KIAotdm9pZCBSZW5kZXJNZWRpYTo6ZGVzdHJveSgpCi17Ci0gICAgbV9jb250cm9scy0+
ZGVzdHJveSgpOwotICAgIFJlbmRlckltYWdlOjpkZXN0cm95KCk7Ci19Ci0KKy8vIEZJWE1FOiBN
b3ZlIHRvIFJlbmRlclZpZGVvCiBIVE1MTWVkaWFFbGVtZW50KiBSZW5kZXJNZWRpYTo6bWVkaWFF
bGVtZW50KCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1l
bnQqPihub2RlKCkpOyAKIH0KIAotdm9pZCBSZW5kZXJNZWRpYTo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBS
ZW5kZXJJbWFnZTo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotICAgIG1fY29udHJv
bHMtPnVwZGF0ZVN0eWxlKCk7Ci19Ci0KIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91dCgpCiB7CiAg
ICAgSW50U2l6ZSBvbGRTaXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAKICAgICBSZW5k
ZXJJbWFnZTo6bGF5b3V0KCk7CiAKLSAgICBSZW5kZXJCb3gqIGNvbnRyb2xzUmVuZGVyZXIgPSBt
X2NvbnRyb2xzLT5yZW5kZXJCb3goKTsKKyAgICBSZW5kZXJCb3gqIGNvbnRyb2xzUmVuZGVyZXIg
PSB0b1JlbmRlckJveChtX2NoaWxkcmVuLmZpcnN0Q2hpbGQoKSk7CiAgICAgaWYgKCFjb250cm9s
c1JlbmRlcmVyKQogICAgICAgICByZXR1cm47CisKICAgICBJbnRTaXplIG5ld1NpemUgPSBjb250
ZW50Qm94UmVjdCgpLnNpemUoKTsKICAgICBpZiAobmV3U2l6ZSA9PSBvbGRTaXplICYmICFjb250
cm9sc1JlbmRlcmVyLT5uZWVkc0xheW91dCgpKQogICAgICAgICByZXR1cm47CkBAIC05OSw5ICs4
NSw5IEBAIHZvaWQgUmVuZGVyTWVkaWE6OmxheW91dCgpCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7
CiB9CiAKLXZvaWQgUmVuZGVyTWVkaWE6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3ZvaWQgUmVuZGVy
TWVkaWE6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAg
ICBtX2NvbnRyb2xzLT51cGRhdGUoKTsKKyAgICBSZW5kZXJJbWFnZTo6cGFpbnQocGFpbnRJbmZv
LCB0eCwgdHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYS5oCmluZGV4IDc2NThlZjZjMTg0YzM5ODMyZTRjNWQ4MmY4Zjg3YTVi
NjUwYjUwMzEuLjU5NjRlYTRlNGM1ZGMxZDU2NDAzNWNhMThiOTc2YzYwMTBlYjkyMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCkBAIC0zMyw3ICszMyw2IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBNZWRpYUNv
bnRyb2xzOwogCiBjbGFzcyBSZW5kZXJNZWRpYSA6IHB1YmxpYyBSZW5kZXJJbWFnZSB7CiBwdWJs
aWM6CkBAIC00NSwyOSArNDQsMjEgQEAgcHVibGljOgogICAgIFJlbmRlck9iamVjdENoaWxkTGlz
dCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogCiAgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KCkgY29uc3Q7Ci0gICAgTWVkaWFDb250cm9scyogY29udHJvbHMo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcml2YXRlOgorICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCBS
ZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVu
KCk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENo
aWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKTsKLSAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyTWVkaWEiOyB9CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWEo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCi0KLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotCiAgICAgdmly
dHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIE93blB0cjxNZWRpYUNvbnRyb2xzPiBtX2NvbnRyb2xzOwog
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogfTsKIApAQCAtNzcsMTEgKzY4
LDYgQEAgaW5saW5lIFJlbmRlck1lZGlhKiB0b1JlbmRlck1lZGlhKFJlbmRlck9iamVjdCogb2Jq
ZWN0KQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZWRpYSo+KG9iamVjdCk7CiB9CiAK
LWlubGluZSBNZWRpYUNvbnRyb2xzKiBSZW5kZXJNZWRpYTo6Y29udHJvbHMoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2NvbnRyb2xzLmdldCgpOwotfQotCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55
b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvUmVuZGVyTWVkaWEoY29uc3Qg
UmVuZGVyTWVkaWEqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcAppbmRleCA3MWZjYTkxNGE5Nzg1Y2M4NjQ3
OWQ2NjhjZTM0MzQ1YjUzNjQ0YWZmLi40MGVlOWIwYWI4YTNhNjk4YWRjNDAxMjE2MTFkN2E2MjQw
YTA0NDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFD
b250cm9sc0Nocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWFDb250cm9sc0Nocm9taXVtLmNwcApAQCAtMjQyLDI4ICsyNDIsNiBAQCBzdGF0aWMgYm9v
bCBwYWludE1lZGlhVGltZWxpbmVDb250YWluZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRlck1lZGlhQ29u
dHJvbHNDaHJvbWl1bTo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBw
YXJ0LCBFbGVtZW50KiBlKQotewotICAgIFVOVVNFRF9QQVJBTShlKTsKLQotICAgIHN3aXRjaCAo
cGFydCkgewotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKLSAgICBjYXNlIE1lZGlhUGxh
eUJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBNZWRpYVNsaWRlclBhcnQ6Ci0gICAgY2FzZSBNZWRpYVNs
aWRlclRodW1iUGFydDoKLSAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyUGFydDoK
LSAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyUGFydDoKLSAgICBjYXNlIE1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWJQYXJ0OgotICAgIGNhc2UgTWVkaWFDb250cm9sc0JhY2tncm91bmRQYXJ0OgotICAg
IGNhc2UgTWVkaWFDdXJyZW50VGltZVBhcnQ6Ci0gICAgY2FzZSBNZWRpYVRpbWVSZW1haW5pbmdQ
YXJ0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICA7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21p
dW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFydCwg
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIHN3aXRjaCAocGFydCkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oCmluZGV4IDA2
MGE5ZDQ0YmRiN2JlNzU0MjVlYjhjMzg2OTYxMjRjYzMzZjY2MWQuLjg5NWFjNDM5YjAyZDk5MThi
MzUxYjg2MjBlMDIzY2U5MTFiMWQwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgKQEAgLTM2LDcgKzM2LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIFJlbmRl
ck1lZGlhQ29udHJvbHNDaHJvbWl1bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxk
UmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCopOwogICAgIHN0YXRp
YyBib29sIHBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICBzdGF0
aWMgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqKTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBkMjE4NmE3MmUxMzdi
ZTM3YTZhM2ZiYTI4NzBkYmFkOTMyOGE0MzFmLi44ZGUxODc4ZjhiMTJlYzYxMDEwYTU2MzU4OWM3
YzU3ZWI0YTBhNTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAK
QEAgLTQ4MSwzMyArNDgxLDYgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLAogfQogCiAjaWYgRU5B
QkxFKFZJREVPKQotYm9vbCBSZW5kZXJUaGVtZTo6aGl0VGVzdE1lZGlhQ29udHJvbFBhcnQoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRQb2ludCYgYWJzUG9pbnQpCi17Ci0gICAgaWYgKCFvLT5p
c0JveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2FsUG9p
bnQgPSBvLT5hYnNvbHV0ZVRvTG9jYWwoYWJzUG9pbnQsIGZhbHNlLCB0cnVlKTsgIC8vIHJlc3Bl
Y3QgdHJhbnNmb3JtcwotICAgIHJldHVybiB0b1JlbmRlckJveChvKS0+Ym9yZGVyQm94UmVjdCgp
LmNvbnRhaW5zKHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KSk7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWU6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQgcGFydCwgRWxl
bWVudCogZSkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4oZSk7Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2Fz
ZSBNZWRpYU11dGVCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5oYXNB
dWRpbygpOwotICAgIGNhc2UgTWVkaWFSZXdpbmRCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4g
bWVkaWFFbGVtZW50LT5tb3ZpZUxvYWRUeXBlKCkgIT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07
Ci0gICAgY2FzZSBNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b25QYXJ0OgotICAgICAgICByZXR1
cm4gbWVkaWFFbGVtZW50LT5tb3ZpZUxvYWRUeXBlKCkgPT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJl
YW07Ci0gICAgY2FzZSBNZWRpYUZ1bGxzY3JlZW5CdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4g
bWVkaWFFbGVtZW50LT5zdXBwb3J0c0Z1bGxzY3JlZW4oKTsKLSAgICBjYXNlIE1lZGlhVG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5o
YXNDbG9zZWRDYXB0aW9ucygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLX0KIAogU3RyaW5nIFJlbmRlclRoZW1lOjpmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShm
bG9hdCB0aW1lKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaApp
bmRleCAzNGEzMzE4ODgyZTZjYTNmNzEwNmVjNGU1MTJiYjE5ZDRjYWI4OWEwLi44Mzg0NjQ0NzNk
YjBjNmJlZTJiYjc5MjNmODg5NWQxOTI3N2M5NTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuaApAQCAtMTgxLDkgKzE4MSwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUo
VklERU8pCiAgICAgLy8gTWVkaWEgY29udHJvbHMKLSAgICB2aXJ0dWFsIGJvb2wgaGl0VGVzdE1l
ZGlhQ29udHJvbFBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFy
dCwgRWxlbWVudCopOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Nsb3NlZENhcHRpb25pbmco
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxl
ZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIHVzZXNNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5KCkgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFZvbHVtZVNsaWRlcigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBtZWRpYUNvbnRyb2xz
RmFkZUluRHVyYXRpb24oKSB7IHJldHVybiAwLjE7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBtZWRp
YUNvbnRyb2xzRmFkZU91dER1cmF0aW9uKCkgeyByZXR1cm4gMC4zOyB9CiAgICAgdmlydHVhbCBT
dHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoZmxvYXQgdGltZSkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaAppbmRleCAw
YzM0ZjZkNDg1N2ZiNDgxOTgyNGVmZGQ1OTA3OTdmYjFmOGYxMmRiLi5kY2IyM2RkZTUzYTZhYzdj
YWY5ZjE5MDRiOGY4NTM2NjVkZTk1MGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgKQEAgLTM4LDcgKzM4LDYgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBFbGVt
ZW50Kik7CiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgp
OwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYUZ1
bGxTY3JlZW5TdHlsZVNoZWV0KCk7CkBAIC01MCw3ICs0OSw3IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIEludFBvaW50IHZv
bHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IEludFNpemUm
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXko
KSB7IHJldHVybiBmYWxzZTsgfQotCisgICAgdmlydHVhbCBib29sIGhhc093bkRpc2FibGVkU3Rh
dGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMu
bW0KaW5kZXggMDM3MWYyNGRlNGM5M2EyYWY4ZmFiMjVkNGQ2MDIwZjE0MWYyMzlhNC4uZTRhMTBh
ZWE2M2Y4OTg5YzBjZDY0Y2E5MWMyYjY0NTAyZWI1MTIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KQEAgLTEwNSwxMSArMTA1
LDYgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RNZWRpYVNsaWRlclRodW1i
U2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9t
aXVtOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShvKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0IHBh
cnQsIEVsZW1lbnQqIGUpCi17Ci0gICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1
bTo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChwYXJ0LCBlKTsKLX0KLQogYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRy
b2xzUGFydChNZWRpYVBsYXlCdXR0b24sIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3Bw
CmluZGV4IDk2OTE4NzY2ZjIwYTg1MzhjNDRmNjdkOGRlZjA2ZDhhOTY3MTM4NjcuLmNhZmMzNGQz
MTJlMTI5MWU3NzZjOWU5YzNkMjEwNGFiZTQ4ZDlkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcApAQCAtNTAxLDEzICs1
MDEsNiBAQCBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29ucwogICAgIHJldHVybiBtZW51TGlzdEludGVy
bmFsUGFkZGluZyhzdHlsZSwgQm90dG9tUGFkZGluZyk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8p
Ci1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQ
YXJ0KENvbnRyb2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGUpCi17Ci0gICAgcmV0dXJuIFJlbmRlck1l
ZGlhQ29udHJvbHNDaHJvbWl1bTo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChwYXJ0LCBl
KTsKLX0KLSNlbmRpZgotCiAvLyBzdGF0aWMKIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9udFNpemUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCmluZGV4IGJmMGFmMzQxOTQw
OWU1MmQzZjZmMmM5NjdjZDJiZGE5OTQ4Y2E0NTAuLjJmYWYwNjQ0ZWMyNzNkZjIxZjczZmUyZjhj
Zjg1YTA2ZjBlODVhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5oCkBAIC0xMjMsNyArMTIzLDcgQEAgY2xhc3MgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWEgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewogCiAjaWYgRU5BQkxFKFZJREVP
KQogICAgICAgICAvLyBNZWRpYSBjb250cm9scwotICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCopOworICAgICAgICB2
aXJ0dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKIAogICAgICAgICAvLyBQcm92aWRlIGEgd2F5
IHRvIHBhc3MgdGhlIGRlZmF1bHQgZm9udCBzaXplIGZyb20gdGhlIFNldHRpbmdzIG9iamVjdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAppbmRleCA0MjQ3YTZjMDhh
NWM2YjIwZDI2OGYwYzQ4MGFhMTU2NDc1MTI2ODcyLi44YTE3YWNmODMzY2IwN2Q1ZmE4YjYxZDJh
YWE0YzZjMmE3MTg1NGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMuaApAQCAtMTY2LDggKzE2NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBTdHJpbmcg
ZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCopOworICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Nsb3NlZENhcHRpb25pbmcoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBib29sIGhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihD
b250cm9sUGFydCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHVzZXNNZWRpYUNvbnRyb2xTdGF0
dXNEaXNwbGF5KCk7CisgICAgdmlydHVhbCBib29sIHVzZXNNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUo
UmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCB2b2x1bWVTbGlkZXJP
ZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBk
YTFmNzFlYTQ5ZTU0YmFmYjQ0YjU5OTlkNDgzMDM0Y2MzZmU3ZjBiLi5hNmY5OTlhMDUwNDc4ZTRk
ODk0NWQyNjIzYjM1OGE0YTcwNzUxNDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCkBAIC0xOTcyLDM1ICsxOTcyLDEyIEBAIFN0cmluZyBSZW5kZXJUaGVt
ZU1hYzo6ZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgpCiB9CiAjZW5kaWYKIAotYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBwYXJ0
LCBFbGVtZW50KiBlbGVtZW50KQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6aGFzT3duRGlzYWJsZWRT
dGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CiB7Ci0gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KGVs
ZW1lbnQpOwotICAgIHN3aXRjaCAocGFydCkgewotICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJD
b250YWluZXJQYXJ0OgotICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgotICAgIGNhc2Ug
TWVkaWFWb2x1bWVTbGlkZXJNdXRlQnV0dG9uUGFydDoKLSAgICBjYXNlIE1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWJQYXJ0OiB7Ci0gICAgICAgIHJldHVybiBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09
IE1lZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1lICYmIG1lZGlhRWxlbWVudC0+aGFzQXVkaW8o
KTsKLSAgICB9Ci0gICAgY2FzZSBNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uUGFydDoK
LSAgICAgICAgLy8gV2UgcmVseSBvbiBRVEtpdCB0byByZW5kZXIgY2FwdGlvbnMgc28gZG9uJ3Qg
ZW5hYmxlIHRoZSBidXR0b24gdW5sZXNzIGl0IHdpbGwgYmUgYWJsZSB0byBkbyBzby4KLSAgICAg
ICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKHZpZGVvVGFnKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvblBhcnQ6
Ci0gICAgICAgIGlmIChtZWRpYUVsZW1lbnQtPmlzRnVsbHNjcmVlbigpKQotICAgICAgICAgICAg
cmV0dXJuIG1lZGlhRWxlbWVudC0+bW92aWVMb2FkVHlwZSgpID09IE1lZGlhUGxheWVyOjpMaXZl
U3RyZWFtIAotICAgICAgICAgICAgICAgIHx8IG1lZGlhRWxlbWVudC0+bW92aWVMb2FkVHlwZSgp
ID09IE1lZGlhUGxheWVyOjpTdG9yZWRTdHJlYW07Ci0gICAgY2FzZSBNZWRpYVNlZWtGb3J3YXJk
QnV0dG9uUGFydDoKLSAgICBjYXNlIE1lZGlhU2Vla0JhY2tCdXR0b25QYXJ0OgotICAgICAgICBp
ZiAobWVkaWFFbGVtZW50LT5pc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBtZWRp
YUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSAhPSBNZWRpYVBsYXllcjo6U3RvcmVkU3RyZWFtIAot
ICAgICAgICAgICAgICAgICYmIG1lZGlhRWxlbWVudC0+bW92aWVMb2FkVHlwZSgpICE9IE1lZGlh
UGxheWVyOjpMaXZlU3RyZWFtOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
KyAgICBpZiAocGFydCA9PSBNZWRpYU11dGVCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBh
cnQocGFydCwgZWxlbWVudCk7CisgICAgcmV0dXJuIG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0g
TWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjp1
c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgpCkBAIC0yMDA4LDYgKzE5ODUsMTEgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6dXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKQogICAgIHJl
dHVybiBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1lZGlhQ29udHJvbGxlclRoZW1lUXVpY2tU
aW1lOwogfQogCitib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBNZWRp
YUNvbnRyb2xsZXJUaGVtZVF1aWNrVGltZTsKK30KKwogSW50UG9pbnQgUmVuZGVyVGhlbWVNYWM6
OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJv
eCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyTWVkaWFD
b250cm9sczo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24obXV0ZUJ1dHRvbkJveCwg
c2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAppbmRl
eCBhZjEwMGI3MGU4ODE3Y2EyNWUzZmMzMDE5YWVmZjkxNDI3NGRhY2VkLi4xNWY2NGM1ZTRjNjRi
NjBjYTI1ZDg2NWNhZDRiMmJhZDNhMDk4MmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbi5jcHAKQEAgLTEwMjksMjIgKzEwMjksMTYgQEAgU3RyaW5nIFJlbmRl
clRoZW1lV2luOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKICAgICByZXR1cm4gU3Ry
aW5nKG1lZGlhQ29udHJvbHNRdWlja1RpbWVVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVk
aWFDb250cm9sc1F1aWNrVGltZVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZVdpbjo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBwYXJ0
LCBFbGVtZW50KiBlbGVtZW50KQorYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNDbG9zZWRD
YXB0aW9uaW5nKCkgY29uc3QKIHsKLSAgICBpZiAocGFydCA9PSBNZWRpYVRvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uUGFydCkgewogICAgICAgICAvLyBXZSByZWx5IG9uIFF1aWNrVGltZSB0byBy
ZW5kZXIgY2FwdGlvbnMgc28gb25seSBlbmFibGUgdGhlIGJ1dHRvbiBmb3IgYSB2aWRlbyBlbGVt
ZW50LgogI2lmIFNBRkFSSV9USEVNRV9WRVJTSU9OID49IDQKLSAgICAgICAgaWYgKCFlbGVtZW50
LT5oYXNUYWdOYW1lKHZpZGVvVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKICNlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZmFs
c2U7CiAjZW5kaWYKLSAgICB9Ci0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNob3VsZFJlbmRl
ck1lZGlhQ29udHJvbFBhcnQocGFydCwgZWxlbWVudCk7CiB9CiAKLQogYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICByZXR1cm4gUmVu
ZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUZ1bGxzY3JlZW5C
dXR0b24sIG8sIHBhaW50SW5mbywgcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVdpbi5oCmluZGV4IDdlMDIyM2E4ZmU3NmVjMmU1OGJkMThmY2ZkZDY0NjQ5NGQ2NGViN2Yu
LjcxZmZmMDVhNmUwMTcyMWQ5ZTQ1NzliYTAwNDA0M2M2MjIxYTMxMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGlj
OgogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250
cm9sc1N0eWxlU2hlZXQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVuZGVyTWVkaWFDb250
cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCopOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0Nsb3NlZENhcHRpb25pbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1
bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88888</attachid>
            <date>2011-04-08 15:50:43 -0700</date>
            <delta_ts>2011-04-08 15:56:46 -0700</delta_ts>
            <desc>Put your seats in the upright position.</desc>
            <filename>bug-53020-20110408155041.patch</filename>
            <type>text/plain</type>
            <size>95278</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMzMTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0NGZjMDVjNDU5YWJmYWE4
MTdiYThmMTkyZjAzNzU4ZGVjMWYzMGUzLi5lYTlmMzllZTBiYzFlNTQyNWMyZTU2YTNmMjdkYTli
Yjk2MjllNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDQtMDcgIERpbWl0
cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbTWV0YV0gQ29udmVydCBIVE1MTWVkaWFFbGVt
ZW50IHRvIHVzZSB0aGUgbmV3IHNoYWRvdyBET00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDIwCisKKyAgICAgICAgVGhpcyBjb252ZXJzaW9uIGlz
IG5vbi10cml2aWFsLCBmb3Igc2V2ZXJhbCByZWFzb25zOgorCisgICAgICAgIDEpIFNpbmNlIEhU
TUxNZWRpYUVsZW1lbnQgbm93IGhvc3RzIHRoZSBzaGFkb3cgRE9NIGZvciBjb250cm9scywgaGlk
aW5nCisgICAgICAgIGFuZCBzaG93aW5nIGNvbnRyb2xzIGRvZXMgbm90IHJlc3VsdCBpbiBkZXN0
cm95aW5nIGFuZCByZS1jcmVhdGluZyB0aGUKKyAgICAgICAgc2hhZG93IERPTSB0cmVlLiBJbnN0
ZWFkLCB0aGUgdHJlZSBpcyBjcmVhdGVkIGFzIG5lZWRlZCBhbmQgc2hvd24vaGlkZGVuCisgICAg
ICAgIHVzaW5nIGlubGluZSBzdHlsZXMuCisgICAgICAgIAorICAgICAgICAyKSBJbnN0ZWFkIG9m
IGRldGFjaGluZy9hdHRhY2hpbmcgb24gZWFjaCBzdHlsZSBjaGFuZ2UsIHRoZSBjb250cm9sIHBh
cnRzCisgICAgICAgIGFyZSBub3cgdXNpbmcgYSBzZXQgb2YgaGlnaGVyIGZpZGVsaXR5IGNhbGxi
YWNrcyB0aGF0IG5vdGlmeSBNZWRpYUNvbnRyb2xzCisgICAgICAgIGFib3V0IGNoYW5nZXMgdG8g
d2hpY2ggaXQgc2hvdWxkIHJlYWN0LiBFYWNoIHJlYWN0aW9uIHJlc3VsdHMgaW4gaGlkaW5nLAor
ICAgICAgICBzaG93aW5nLCBvciBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlIGNvbnRyb2wgcGFy
dHMgdXNpbmcgaW5saW5lIHN0eWxlcworICAgICAgICBhbmQgRE9NIEFQSXMuCisKKyAgICAgICAg
MykgSGlkaW5nIGFuZCBzaG93aW5nIGNvbnRyb2xzIGlzIGFjY29tcGxpc2hlZCB1c2luZyBpbmxp
bmUgc3R5bGVzLCByYXRoZXIKKyAgICAgICAgdGhhbiB3aXJpbmcgcmVuZGVyZXJJc05lZWRlZCwg
YmVjYXVzZSByZW5kZXJlcnMgYXJlIG5vdyByZS1jcmVhdGVkIGxlc3MKKyAgICAgICAgZnJlcXVl
bnRseS4KKworICAgICAgICA0KSBJbnN0ZWFkIG9mIGNvbnN0YW50bHkgcXVlcnlpbmcgUmVuZGVy
VGhlbWUgYWJvdXQgdmlzaWJpbGl0eSBvZiBhIHBhcnRpY3VsYXIKKyAgICAgICAgY29udHJvbCBw
YXJ0LCB3ZSBsZXQgdGhlIHRoZW1lIGRldGVybWluZSB3aGljaCBwYXJ0cyBhcmUgc3VwcG9ydGVk
IGFuZAorICAgICAgICB3aGljaCBwYXJ0cyBhcmUgdmlzaWJsZSBpbiBjZXJ0YWluIGNvbmRpdGlv
bnMuCisKKyAgICAgICAgNSkgQ3VzdG9tIGhpdC10ZXN0aW5nLCBldmVudCBmb3J3YXJkaW5nLCBh
bmQgc3R5bGUgdXBkYXRlcyBhcmUgY29tcGxldGVseQorICAgICAgICByZW1vdmVkLCBzaW5jZSB0
aGV5IGFyZSBub3cgdW5uZWNlc3NhcnkuCisKKyAgICAgICAgNikgRmFkaW5nIGNvbnRyb2xzIGlu
L291dCBpcyBub3cgZG9uZSBhcyBDU1MgYW5pbWF0aW9uLCBzaW5jZSBzaGFkb3cgRE9NCisgICAg
ICAgIHN1cHBvcnRzIGl0LgorCisgICAgICAgIFRlc3Q6IG1hbnVhbC10ZXN0cy9tZWRpYS1jb250
cm9scy5odG1sCisKIDIwMTEtMDQtMDIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzLmNzcyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9tZWRpYUNvbnRyb2xzLmNzcwppbmRleCA4NzRjYjEzMGQ1ZjEwOTRkOGRiOTFlMjYzZDQy
ZjBkZGFlNDNlY2ExLi42NDNkNGM4NjI4MTk1ZWY0ZGNmMmYyNDdiNjEzZjlhOTNjMTEwZGNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9scy5jc3MKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHMuY3NzCkBAIC0yOSw2ICsyOSwxMyBAQCBhdWRp
byB7CiAgICAgaGVpZ2h0OiAxNnB4OwogfQogCis6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMgewor
ICAgIHdpZHRoOiBpbmhlcml0OworICAgIGhlaWdodDogaW5oZXJpdDsKKyAgICBwb3NpdGlvbjog
cmVsYXRpdmU7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKIGF1ZGlvOjotd2Via2l0LW1lZGlh
LWNvbnRyb2xzLXBhbmVsLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CiAg
ICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9u
dGFsOwpAQCAtOTgsMTIgKzEwNSw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRp
bWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7CiAgICAgbWFy
Z2luOiBpbml0aWFsOwogfQogCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUt
c2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNs
aWRlci1jb250YWluZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KIGF1ZGlvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLXZvbHVtZS1zbGlkZXIgewotICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgYmFja2dyb3VuZC1j
b2xvcjogaW5pdGlhbDsKICAgICBib3JkZXI6IGluaXRpYWw7CiAgICAgY29sb3I6IGluaGVyaXQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAxYWJlMDI4NWYw
NjdjMTkwNzdmNDUyNGI0Y2JmYTcwMmI3ZWE2YzI4Li5lYzAxMTAxZDBkMjMzZmIzNDEzNTRhZjc3
ODllYWY1OGIyZWFhNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKQEAgLTU0LDEyICs1NCwxNCBAQAogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUg
Ik1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1
ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAj
aW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTYxLDYg
KzE2Myw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX3NlbmRQcm9ncmVzc0V2
ZW50cyh0cnVlKQogICAgICwgbV9pc0Z1bGxzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2Nsb3NlZENh
cHRpb25zVmlzaWJsZShmYWxzZSkKKyAgICAsIG1fbW91c2VPdmVyKGZhbHNlKQogI2lmIEVOQUJM
RShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRlKGZhbHNl
KQogI2VuZGlmCkBAIC0yMTgsMTIgKzIyMSwxNCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiAgICAg
fQogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGNvbnRyb2xzQXR0cikgewogI2lmICFFTkFCTEUo
UExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICAgICAgaWYgKCFpc1ZpZGVvKCkgJiYgYXR0YWNo
ZWQoKSAmJiAoY29udHJvbHMoKSAhPSAocmVuZGVyZXIoKSAhPSAwKSkpIHsKLSAgICAgICAgICAg
IGRldGFjaCgpOwotICAgICAgICAgICAgYXR0YWNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGhhc01lZGlhQ29udHJvbHMoKSkKLSAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQo
KTsKKyAgICAgICAgaWYgKGNvbnRyb2xzKCkpIHsKKyAgICAgICAgICAgIGlmICghaGFzTWVkaWFD
b250cm9scygpKSB7CisgICAgICAgICAgICAgICAgZW5zdXJlTWVkaWFDb250cm9scygpOworICAg
ICAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cmVzZXQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+c2hvdygpOworICAgICAgICB9IGVsc2UgaWYgKGhh
c01lZGlhQ29udHJvbHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+aGlkZSgpOwog
I2Vsc2UKICAgICAgICAgaWYgKG1fcGxheWVyKQogICAgICAgICAgICAgbV9wbGF5ZXItPnNldENv
bnRyb2xzKGNvbnRyb2xzKCkpOwpAQCAtODg5LDYgKzg5NCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3RhdGUpCiAg
ICAgICAgICAgICBub25lU3VwcG9ydGVkKCk7CiAKICAgICAgICAgdXBkYXRlRGlzcGxheVN0YXRl
KCk7CisgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgICAgICBtZWRpYUNv
bnRyb2xzKCktPnJlcG9ydGVkRXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
OTE4LDYgKzkyNSw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0YXRlKE1l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3RhdGUpCiAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TkVUV09SS19JRExFOwogICAgICAgICBtX2NvbXBsZXRlbHlMb2FkZWQgPSB0cnVlOwogICAgIH0K
KworICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCisgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+
Y2hhbmdlZE5ldHdvcmtTdGF0ZSgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyUmVhZHlTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQpAQCAtOTY3LDYgKzk3Nyw4IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSBzdGF0ZSkKICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfTUVUQURBVEEgJiYgb2xk
U3RhdGUgPCBIQVZFX01FVEFEQVRBKSB7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpOwogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFt
ZXMoKS5sb2FkZWRtZXRhZGF0YUV2ZW50KTsKKyAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMo
KSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRhdGEoKTsKICAgICAg
ICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxl
bWVudCgpOwogICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKQEAgLTE1OTQsOSArMTYwNiwxMSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrUHJvZ3Jlc3NUaW1lckZpcmVkKFRpbWVy
PEhUTUxNZWRpYUVsZW1lbnQ+KikKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2NoZWR1bGVUaW1l
dXBkYXRlRXZlbnQodHJ1ZSk7Ci0gICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkKKyAgICBpZiAo
aGFzTWVkaWFDb250cm9scygpKSB7CisgICAgICAgIGlmICghbV9tb3VzZU92ZXIgJiYgY29udHJv
bHMoKSkKKyAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bWFrZVRyYW5zcGFyZW50KCk7CiAg
ICAgICAgIG1lZGlhQ29udHJvbHMoKS0+cGxheWJhY2tQcm9ncmVzc2VkKCk7Ci0KKyAgICB9CiAg
ICAgLy8gRklYTUU6IGRlYWwgd2l0aCBjdWUgcmFuZ2VzIGhlcmUKIH0KIApAQCAtMjMxMiwxMCAr
MjMyNiwxOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogICAgIGlmICh3aWRnZXQpCiAgICAgICAgIHdpZGdldC0+aGFuZGxlRXZlbnQo
ZXZlbnQpOwogI2Vsc2UKLSAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQotICAgICAgICBtZWRp
YUNvbnRyb2xzKCktPmZvcndhcmRFdmVudChldmVudCk7Ci0gICAgaWYgKGV2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQo
KSkgeworICAgICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2ZW50KTsKKyAgICAgICAgaWYgKG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSAh
PSB0aGlzKSB7CisgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAgICAgICAgICBtX21vdXNlT3ZlciA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSAmJiBjb250cm9scygpICYmICFj
YW5QbGF5KCkpCisgICAgICAgICAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bWFrZU9wYXF1
ZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZW91dEV2ZW50KQorICAgICAgICAgICAgICAgIG1fbW91c2VPdmVyID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihl
dmVudCk7CiAjZW5kaWYKIH0KQEAgLTI0NTYsNiArMjQ3OCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKICNlbmRpZgogICAgIEFTU0VSVCghbV9pc0Z1bGxzY3Jl
ZW4pOwogICAgIG1faXNGdWxsc2NyZWVuID0gdHJ1ZTsKKyAgICBpZiAoaGFzTWVkaWFDb250cm9s
cygpKQorICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7CiAgICAg
aWYgKGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpKSB7CiAgICAgICAgIGRvY3VtZW50
KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKHRo
aXMpOwogICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRiZWdpbmZ1bGxz
Y3JlZW5FdmVudCk7CkBAIC0yNDc0LDYgKzI0OTgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmV4aXRGdWxsc2NyZWVuKCkKICNlbmRpZgogICAgIEFTU0VSVChtX2lzRnVsbHNjcmVlbik7CiAg
ICAgbV9pc0Z1bGxzY3JlZW4gPSBmYWxzZTsKKyAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQor
ICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmV4aXRlZEZ1bGxzY3JlZW4oKTsKICAgICBpZiAoZG9j
dW1lbnQoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCkpIHsKICAgICAgICAgaWYgKGRvY3VtZW50KCkt
PnBhZ2UoKS0+Y2hyb21lKCktPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkK
ICAgICAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKQEAgLTI2MDYsMTMgKzI2MzIsMjEgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpCiAKIE1l
ZGlhQ29udHJvbHMqIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhQ29udHJvbHMoKQogewotICAgIEFT
U0VSVChyZW5kZXJlcigpKTsKLSAgICByZXR1cm4gdG9SZW5kZXJNZWRpYShyZW5kZXJlcigpKS0+
Y29udHJvbHMoKTsKKyAgICByZXR1cm4gc2hhZG93Um9vdCgpID8gdG9NZWRpYUNvbnRyb2xzKHNo
YWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpKSA6IDA7CiB9CiAKLWJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6aGFzTWVkaWFDb250cm9scygpIGNvbnN0Citib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omhhc01l
ZGlhQ29udHJvbHMoKQogewotICAgIHJldHVybiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlz
TWVkaWEoKTsKKyAgICByZXR1cm4gc2hhZG93Um9vdCgpOworfQorCit2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmVuc3VyZU1lZGlhQ29udHJvbHMoKQoreworICAgIGlmIChoYXNNZWRpYUNvbnRyb2xz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgZW5zdXJl
U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChNZWRpYUNvbnRyb2xzOjpjcmVhdGUodGhpcyksIGVj
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBlYTk1
OGZhYTQzZmQ3N2ViMjU5OGQxODVlNmRiNjZmYzI5NjE0MThlLi4zNjk2MWRmY2E4NDNhNDQ1ODlk
N2EwYzNhZjE4MWU3ZjM4ZjkxZjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaApAQCAtMzIzLDcgKzMyMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2Fj
aGVkVGltZSgpOwogICAgIHZvaWQgcmVmcmVzaENhY2hlZFRpbWUoKSBjb25zdDsKIAotICAgIGJv
b2wgaGFzTWVkaWFDb250cm9scygpIGNvbnN0OworICAgIGJvb2wgaGFzTWVkaWFDb250cm9scygp
OworICAgIHZvaWQgZW5zdXJlTWVkaWFDb250cm9scygpOwogCiAgICAgVGltZXI8SFRNTE1lZGlh
RWxlbWVudD4gbV9sb2FkVGltZXI7CiAgICAgVGltZXI8SFRNTE1lZGlhRWxlbWVudD4gbV9hc3lu
Y0V2ZW50VGltZXI7CkBAIC00MDQsNiArNDA1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9p
c0Z1bGxzY3JlZW4gOiAxOwogICAgIGJvb2wgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgOiAxOwor
ICAgIGJvb2wgbV9tb3VzZU92ZXIgOiAxOwogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1Jf
VklERU8pCiAgICAgYm9vbCBtX25lZWRXaWRnZXRVcGRhdGUgOiAxOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAppbmRleCAzNDVmMzdiN2ExYmIzYTY2NTU2
MDlmYTBkYmQ4ZmFlODFhZjM5NTk2Li4xMWVkN2Q3Njg1MzFlNGVjZDI0ZDcwODE2ODVmOTU2OTg3
OTZjMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNw
cApAQCAtNDcsNDc2ICs0Nyw0MDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgY29uc3QgZG91YmxlIGNPcGFjaXR5QW5pbWF0aW9u
UmVwZWF0RGVsYXkgPSAwLjA1OwotCiBNZWRpYUNvbnRyb2xzOjpNZWRpYUNvbnRyb2xzKEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IG1fbWVkaWFFbGVtZW50KG1lZGlhRWxl
bWVudCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblRpbWVyKHRoaXMsICZNZWRpYUNvbnRyb2xz
OjpvcGFjaXR5QW5pbWF0aW9uVGltZXJGaXJlZCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblN0
YXJ0VGltZSgwKQotICAgICwgbV9vcGFjaXR5QW5pbWF0aW9uRHVyYXRpb24oMCkKLSAgICAsIG1f
b3BhY2l0eUFuaW1hdGlvbkZyb20oMCkKLSAgICAsIG1fb3BhY2l0eUFuaW1hdGlvblRvKDEuMGYp
Ci0gICAgLCBtX21vdXNlT3ZlcihmYWxzZSkKKyAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywg
bWVkaWFFbGVtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV9tZWRpYUVsZW1lbnQobWVkaWFFbGVt
ZW50KQorICAgICwgbV9yZXdpbmRCdXR0b24oMCkKKyAgICAsIG1fcGxheUJ1dHRvbigwKQorICAg
ICwgbV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uKDApCisgICAgLCBtX3N0YXR1c0Rpc3BsYXkoMCkK
KyAgICAsIG1fY3VycmVudFRpbWVEaXNwbGF5KDApCisgICAgLCBtX3RpbWVsaW5lKDApCisgICAg
LCBtX3RpbWVSZW1haW5pbmdEaXNwbGF5KDApCisgICAgLCBtX3RpbWVsaW5lQ29udGFpbmVyKDAp
CisgICAgLCBtX3NlZWtCYWNrQnV0dG9uKDApCisgICAgLCBtX3NlZWtGb3J3YXJkQnV0dG9uKDAp
CisgICAgLCBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKDApCisgICAgLCBtX3BhbmVsTXV0
ZUJ1dHRvbigwKQorICAgICwgbV92b2x1bWVTbGlkZXIoMCkKKyAgICAsIG1fdm9sdW1lU2xpZGVy
TXV0ZUJ1dHRvbigwKQorICAgICwgbV92b2x1bWVTbGlkZXJDb250YWluZXIoMCkKKyAgICAsIG1f
ZnVsbFNjcmVlbkJ1dHRvbigwKQorICAgICwgbV9mdWxsU2NyZWVuTWluVm9sdW1lQnV0dG9uKDAp
CisgICAgLCBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXIoMCkKKyAgICAsIG1fZnVsbFNjcmVlbk1h
eFZvbHVtZUJ1dHRvbigwKQorICAgICwgbV9wYW5lbCgwKQorICAgICwgbV9vcGFxdWUodHJ1ZSkK
IHsKIH0KIAotLy8gRklYTUU6IFRoaXMgd2lsbCB0dXJuIGludG8gdGhlIHN0YW5kYXJkIGVsZW1l
bnQgZmFjdG9yeSBtZXRob2Qgb25jZSBzaGFkb3cgRE9NIGNvbnZlcnNpb24gaXMgY29tcGxldGUu
Ci0vLyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzAyMCkK
LVBhc3NSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ+IE1lZGlhQ29udHJvbHM6
OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitQYXNzUmVmUHRyPE1lZGlh
Q29udHJvbHM+IE1lZGlhQ29udHJvbHM6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQpCiB7Ci0gICAgQVNTRVJUKCFtX3BhbmVsKTsKLSAgICBBU1NFUlQoIW1fbXV0ZUJ1dHRv
bik7Ci0gICAgQVNTRVJUKCFtX3BsYXlCdXR0b24pOwotICAgIEFTU0VSVCghbV9yZXR1cm5Ub1Jl
YWx0aW1lQnV0dG9uKTsKLSAgICBBU1NFUlQoIW1fc3RhdHVzRGlzcGxheSk7Ci0gICAgQVNTRVJU
KCFtX3RpbWVsaW5lQ29udGFpbmVyKTsKLSAgICBBU1NFUlQoIW1fY3VycmVudFRpbWVEaXNwbGF5
KTsKLSAgICBBU1NFUlQoIW1fdGltZWxpbmUpOwotICAgIEFTU0VSVCghbV90aW1lUmVtYWluaW5n
RGlzcGxheSk7Ci0gICAgQVNTRVJUKCFtX3NlZWtCYWNrQnV0dG9uKTsKLSAgICBBU1NFUlQoIW1f
c2Vla0ZvcndhcmRCdXR0b24pOwotICAgIEFTU0VSVCghbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbik7Ci0gICAgQVNTRVJUKCFtX2Z1bGxzY3JlZW5CdXR0b24pOwotICAgIEFTU0VSVCghbV9t
dXRlQnV0dG9uKTsKLSAgICBBU1NFUlQoIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVyKTsKLSAgICBB
U1NFUlQoIW1fdm9sdW1lU2xpZGVyKTsKLSAgICBBU1NFUlQoIW1fdm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbik7Ci0gICAgQVNTRVJUKCFtX2Z1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24pOwotICAgIEFT
U0VSVCghbV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uKTsKLSAgICBBU1NFUlQoIW1fZnVsbFNj
cmVlblZvbHVtZVNsaWRlcik7Ci0KLSAgICBSZWZQdHI8TWVkaWFDb250cm9sU2hhZG93Um9vdEVs
ZW1lbnQ+IGNvbnRyb2xzID0gTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmNyZWF0ZSht
ZWRpYUVsZW1lbnQpOwotCi0gICAgbV9wYW5lbCA9IE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6
Y3JlYXRlKG1lZGlhRWxlbWVudCk7Ci0KLSAgICBtX3Jld2luZEJ1dHRvbiA9IE1lZGlhQ29udHJv
bFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fcmV3aW5k
QnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLQotICAgIG1fcGxheUJ1dHRv
biA9IE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsK
LSAgICBtX3BsYXlCdXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotCi0gICAg
bV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uID0gTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fcmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci0KLSAgICBtX3N0YXR1c0Rp
c3BsYXkgPSBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxl
bWVudCk7Ci0gICAgbV9zdGF0dXNEaXNwbGF5LT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgp
KTsKLQotICAgIG1fdGltZWxpbmVDb250YWluZXIgPSBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRh
aW5lckVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotCi0gICAgbV9jdXJyZW50VGltZURp
c3BsYXkgPSBNZWRpYUNvbnRyb2xDdXJyZW50VGltZURpc3BsYXlFbGVtZW50OjpjcmVhdGUobWVk
aWFFbGVtZW50KTsKLSAgICBtX2N1cnJlbnRUaW1lRGlzcGxheS0+YXR0YWNoVG9QYXJlbnQobV90
aW1lbGluZUNvbnRhaW5lci5nZXQoKSk7Ci0KLSAgICBtX3RpbWVsaW5lID0gTWVkaWFDb250cm9s
VGltZWxpbmVFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLSAgICBtX3RpbWVsaW5lLT5h
dHRhY2hUb1BhcmVudChtX3RpbWVsaW5lQ29udGFpbmVyLmdldCgpKTsKLQotICAgIG1fdGltZVJl
bWFpbmluZ0Rpc3BsYXkgPSBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ6
OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPmF0dGFj
aFRvUGFyZW50KG1fdGltZWxpbmVDb250YWluZXIuZ2V0KCkpOwotCi0gICAgbV90aW1lbGluZUNv
bnRhaW5lci0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci0KLSAgICBtX3NlZWtCYWNr
QnV0dG9uID0gTWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50OjpjcmVhdGUobWVkaWFF
bGVtZW50KTsKLSAgICBtX3NlZWtCYWNrQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdl
dCgpKTsKLQotICAgIG1fc2Vla0ZvcndhcmRCdXR0b24gPSBNZWRpYUNvbnRyb2xTZWVrRm9yd2Fy
ZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fc2Vla0ZvcndhcmRC
dXR0b24tPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwotCi0gICAgbV90b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbiA9IE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7Ci0gICAgbV90b2dnbGVDbG9zZWRDYXB0aW9u
c0J1dHRvbi0+YXR0YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci0KLSAgICBtX2Z1bGxzY3Jl
ZW5CdXR0b24gPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1l
ZGlhRWxlbWVudCk7Ci0gICAgbV9mdWxsc2NyZWVuQnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3Bh
bmVsLmdldCgpKTsKLQotICAgIG1fbXV0ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fbXV0ZUJ1dHRvbi0+YXR0
YWNoVG9QYXJlbnQobV9wYW5lbC5nZXQoKSk7Ci0KLSAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5l
ciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShtZWRp
YUVsZW1lbnQpOwotCi0gICAgbV92b2x1bWVTbGlkZXIgPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKLSAgICBtX3ZvbHVtZVNsaWRlci0+YXR0
YWNoVG9QYXJlbnQobV92b2x1bWVTbGlkZXJDb250YWluZXIuZ2V0KCkpOwotCi0gICAgbV92b2x1
bWVTbGlkZXJNdXRlQnV0dG9uID0gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbkVs
ZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOwotICAgIG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRv
bi0+YXR0YWNoVG9QYXJlbnQobV92b2x1bWVTbGlkZXJDb250YWluZXIuZ2V0KCkpOwotCi0gICAg
bV92b2x1bWVTbGlkZXJDb250YWluZXItPmF0dGFjaFRvUGFyZW50KG1fcGFuZWwuZ2V0KCkpOwot
ICAgIAotICAgIC8vIEZJWE1FOiBUaGVzZSBjb250cm9scywgYW5kIG90aGVycywgc2hvdWxkIGJl
IGNyZWF0ZWQgZHluYW1pY2FsbHkgd2hlbiBuZWVkZWQsIGluc3RlYWQgb2YgCi0gICAgLy8gYWx3
YXlzIGNyZWF0ZWQuICA8aHR0cDovL3dlYmtpdC5vcmcvYi81NzE2Mz4KLSAgICBtX2Z1bGxTY3Jl
ZW5NaW5Wb2x1bWVCdXR0b24gPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9u
RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7Ci0gICAgbV9mdWxsU2NyZWVuTWluVm9sdW1l
QnV0dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLSAgICAKLSAgICBtX2Z1bGxT
Y3JlZW5Wb2x1bWVTbGlkZXIgPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7Ci0gICAgbV9mdWxsU2NyZWVuVm9sdW1lU2xpZGVy
LT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLSAgICAKLSAgICBtX2Z1bGxTY3JlZW5N
YXhWb2x1bWVCdXR0b24gPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWF4QnV0dG9uRWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7Ci0gICAgbV9mdWxsU2NyZWVuTWF4Vm9sdW1lQnV0
dG9uLT5hdHRhY2hUb1BhcmVudChtX3BhbmVsLmdldCgpKTsKLSAgICAKLSAgICBtX3BhbmVsLT5h
dHRhY2hUb1BhcmVudChjb250cm9scy5nZXQoKSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQtPmRv
Y3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVkaWFD
b250cm9scz4gY29udHJvbHMgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9scyhtZWRpYUVsZW1l
bnQpKTsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ+IHBhbmVsID0gTWVk
aWFDb250cm9sUGFuZWxFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKworICAgIC8vIEZJ
WE1FOiBXSEFUIFRPIERPIFdJVEggZWM/PyE/IT8hPyEKKyAgICBFeGNlcHRpb25Db2RlIGVjOwor
CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ+IHJld2luZEJ1dHRv
biA9IE1lZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQp
OworICAgIGNvbnRyb2xzLT5tX3Jld2luZEJ1dHRvbiA9IHJld2luZEJ1dHRvbi5nZXQoKTsKKyAg
ICBwYW5lbC0+YXBwZW5kQ2hpbGQocmV3aW5kQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOwor
ICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9s
UGxheUJ1dHRvbkVsZW1lbnQ+IHBsYXlCdXR0b24gPSBNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fcGxheUJ1dHRvbiA9
IHBsYXlCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHBsYXlCdXR0b24ucmVs
ZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudD4gcmV0dXJu
VG9SZWFsdGltZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFJldHVyblRvUmVhbHRpbWVCdXR0b25FbGVt
ZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250cm9scy0+bV9yZXR1cm5Ub1JlYWxU
aW1lQnV0dG9uID0gcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+YXBw
ZW5kQ2hpbGQocmV0dXJuVG9SZWFsdGltZUJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT51c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgp
KSB7CisgICAgICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudD4gc3Rh
dHVzRGlzcGxheSA9IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobWVk
aWFFbGVtZW50KTsKKyAgICAgICAgY29udHJvbHMtPm1fc3RhdHVzRGlzcGxheSA9IHN0YXR1c0Rp
c3BsYXkuZ2V0KCk7CisgICAgICAgIHBhbmVsLT5hcHBlbmRDaGlsZChzdGF0dXNEaXNwbGF5LnJl
bGVhc2UoKSwgZWMsIHRydWUpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVt
ZW50PiB0aW1lbGluZUNvbnRhaW5lciA9IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxl
bWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sQ3Vy
cmVudFRpbWVEaXNwbGF5RWxlbWVudD4gY3VycmVudFRpbWVEaXNwbGF5ID0gTWVkaWFDb250cm9s
Q3VycmVudFRpbWVEaXNwbGF5RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29u
dHJvbHMtPm1fY3VycmVudFRpbWVEaXNwbGF5ID0gY3VycmVudFRpbWVEaXNwbGF5LmdldCgpOwor
ICAgIHRpbWVsaW5lQ29udGFpbmVyLT5hcHBlbmRDaGlsZChjdXJyZW50VGltZURpc3BsYXkucmVs
ZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5lID0gTWVkaWFDb250
cm9sVGltZWxpbmVFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50LCBjb250cm9scy5nZXQoKSk7
CisgICAgY29udHJvbHMtPm1fdGltZWxpbmUgPSB0aW1lbGluZS5nZXQoKTsKKyAgICB0aW1lbGlu
ZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodGltZWxpbmUucmVsZWFzZSgpLCBlYywgdHJ1ZSk7Cisg
ICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xU
aW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQ+IHRpbWVSZW1haW5pbmdEaXNwbGF5ID0gTWVkaWFD
b250cm9sVGltZVJlbWFpbmluZ0Rpc3BsYXlFbGVtZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsK
KyAgICBjb250cm9scy0+bV90aW1lUmVtYWluaW5nRGlzcGxheSA9IHRpbWVSZW1haW5pbmdEaXNw
bGF5LmdldCgpOworICAgIHRpbWVsaW5lQ29udGFpbmVyLT5hcHBlbmRDaGlsZCh0aW1lUmVtYWlu
aW5nRGlzcGxheS5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgY29udHJvbHMtPm1fdGltZWxpbmVDb250YWluZXIgPSB0aW1lbGluZUNv
bnRhaW5lci5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQodGltZWxpbmVDb250YWluZXIu
cmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vIEZJWE1FOiBPbmx5IGNyZWF0ZSB3aGVuIG5lZWRlZCA8aHR0cDovL3dlYmtpdC5vcmcv
Yi81NzE2Mz4KKyAgICBSZWZQdHI8TWVkaWFDb250cm9sU2Vla0JhY2tCdXR0b25FbGVtZW50PiBz
ZWVrQmFja0J1dHRvbiA9IE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fc2Vla0JhY2tCdXR0b24gPSBzZWVrQmFj
a0J1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoc2Vla0JhY2tCdXR0b24ucmVs
ZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IC8vIEZJWE1FOiBPbmx5IGNyZWF0ZSB3aGVuIG5lZWRlZCA8aHR0cDovL3dlYmtpdC5vcmcvYi81
NzE2Mz4KKyAgICBSZWZQdHI8TWVkaWFDb250cm9sU2Vla0ZvcndhcmRCdXR0b25FbGVtZW50PiBz
ZWVrRm9yd2FyZEJ1dHRvbiA9IE1lZGlhQ29udHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1fc2Vla0ZvcndhcmRCdXR0b24g
PSBzZWVrRm9yd2FyZEJ1dHRvbi5nZXQoKTsKKyAgICBwYW5lbC0+YXBwZW5kQ2hpbGQoc2Vla0Zv
cndhcmRCdXR0b24ucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChtZWRpYUVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhl
bWUoKS0+c3VwcG9ydHNDbG9zZWRDYXB0aW9uaW5nKCkpIHsKKyAgICAgICAgUmVmUHRyPE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudD4gdG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b24gPSBNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgICAgICBjb250cm9scy0+bV90b2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbiA9IHRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLmdldCgpOworICAg
ICAgICBwYW5lbC0+YXBwZW5kQ2hpbGQodG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24ucmVsZWFz
ZSgpLCBlYywgdHJ1ZSk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmx5IGNyZWF0ZSB3aGVuIG5lZWRlZCA8aHR0cDovL3dl
YmtpdC5vcmcvYi81NzE2Mz4KKyAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRv
bkVsZW1lbnQ+IGZ1bGxTY3JlZW5CdXR0b24gPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9u
RWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCwgY29udHJvbHMuZ2V0KCkpOworICAgIGNvbnRy
b2xzLT5tX2Z1bGxTY3JlZW5CdXR0b24gPSBmdWxsU2NyZWVuQnV0dG9uLmdldCgpOworICAgIHBh
bmVsLT5hcHBlbmRDaGlsZChmdWxsU2NyZWVuQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOwor
CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IHBhbmVsTXV0
ZUJ1dHRvbiA9IE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRp
YUVsZW1lbnQsIGNvbnRyb2xzLmdldCgpKTsKKyAgICBjb250cm9scy0+bV9wYW5lbE11dGVCdXR0
b24gPSBwYW5lbE11dGVCdXR0b24uZ2V0KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKHBhbmVs
TXV0ZUJ1dHRvbi5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKG1lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVt
ZSgpLT51c2VzTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyKCkpIHsKKyAgICAgICAgUmVmUHRyPE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IHZvbHVtZVNsaWRlckNvbnRh
aW5lciA9IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZSht
ZWRpYUVsZW1lbnQpOworCisgICAgICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJF
bGVtZW50PiBzbGlkZXIgPSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpjcmVhdGUo
bWVkaWFFbGVtZW50KTsKKyAgICAgICAgY29udHJvbHMtPm1fdm9sdW1lU2xpZGVyID0gc2xpZGVy
LmdldCgpOworICAgICAgICB2b2x1bWVTbGlkZXJDb250YWluZXItPmFwcGVuZENoaWxkKHNsaWRl
ci5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0
b25FbGVtZW50PiB2b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0gTWVkaWFDb250cm9sVm9sdW1lU2xp
ZGVyTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShtZWRpYUVsZW1lbnQpOworICAgICAgICBjb250
cm9scy0+bV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uID0gdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi5n
ZXQoKTsKKyAgICAgICAgdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5hcHBlbmRDaGlsZCh2b2x1bWVT
bGlkZXJNdXRlQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgICAgICBpZiAoZWMpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBjb250cm9scy0+bV92b2x1bWVTbGlkZXJD
b250YWluZXIgPSB2b2x1bWVTbGlkZXJDb250YWluZXIuZ2V0KCk7CisgICAgICAgIHBhbmVsLT5h
cHBlbmRDaGlsZCh2b2x1bWVTbGlkZXJDb250YWluZXIucmVsZWFzZSgpLCBlYywgdHJ1ZSk7Cisg
ICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBPbmx5IGNyZWF0ZSB3aGVuIG5lZWRlZCA8aHR0cDovL3dlYmtpdC5vcmcvYi81NzE2Mz4K
KyAgICBSZWZQdHI8TWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1pbkJ1dHRvbkVsZW1lbnQ+
IGZ1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24gPSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1l
TWluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKG1lZGlhRWxlbWVudCk7CisgICAgY29udHJvbHMtPm1f
ZnVsbFNjcmVlbk1pblZvbHVtZUJ1dHRvbiA9IGZ1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24uZ2V0
KCk7CisgICAgcGFuZWwtPmFwcGVuZENoaWxkKGZ1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24ucmVs
ZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxlbWVudD4gZnVsbFNj
cmVlblZvbHVtZVNsaWRlciA9IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVt
ZW50OjpjcmVhdGUobWVkaWFFbGVtZW50KTsKKyAgICBjb250cm9scy0+bV9mdWxsU2NyZWVuVm9s
dW1lU2xpZGVyID0gZnVsbFNjcmVlblZvbHVtZVNsaWRlci5nZXQoKTsKKyAgICBwYW5lbC0+YXBw
ZW5kQ2hpbGQoZnVsbFNjcmVlblZvbHVtZVNsaWRlci5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1
bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50PiBmdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9u
ID0gTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSht
ZWRpYUVsZW1lbnQpOworICAgIGNvbnRyb2xzLT5tX2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0b24g
PSBmdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uLmdldCgpOworICAgIHBhbmVsLT5hcHBlbmRDaGls
ZChmdWxsU2NyZWVuTWF4Vm9sdW1lQnV0dG9uLnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb250cm9scy0+bV9wYW5lbCA9IHBhbmVs
LmdldCgpOworICAgIGNvbnRyb2xzLT5hcHBlbmRDaGlsZChwYW5lbC5yZWxlYXNlKCksIGVjLCB0
cnVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGNvbnRy
b2xzLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpyZXNldCgpCit2b2lkIE1l
ZGlhQ29udHJvbHM6OnNob3coKQogewotICAgIHVwZGF0ZSgpOworICAgIG1fcGFuZWwtPnNob3co
KTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpwbGF5YmFja1Byb2dyZXNzZWQoKQordm9pZCBN
ZWRpYUNvbnRyb2xzOjpoaWRlKCkKIHsKLSAgICBpZiAobV90aW1lbGluZSkKLSAgICAgICAgbV90
aW1lbGluZS0+dXBkYXRlKGZhbHNlKTsKLSAgICB1cGRhdGVUaW1lRGlzcGxheSgpOworICAgIG1f
cGFuZWwtPmhpZGUoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjpwbGF5YmFja1N0YXJ0ZWQo
KQorc3RhdGljIGNvbnN0IFN0cmluZyYgd2Via2l0VHJhbnNpdGlvblN0cmluZygpCiB7Ci0gICAg
cGxheWJhY2tQcm9ncmVzc2VkKCk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHMs
ICgiLXdlYmtpdC10cmFuc2l0aW9uIikpOworICAgIHJldHVybiBzOwogfQogCi12b2lkIE1lZGlh
Q29udHJvbHM6OnBsYXliYWNrU3RvcHBlZCgpCitzdGF0aWMgY29uc3QgU3RyaW5nJiBvcGFjaXR5
U3RyaW5nKCkKIHsKLSAgICBwbGF5YmFja1Byb2dyZXNzZWQoKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgcywgKCJvcGFjaXR5IikpOworICAgIHJldHVybiBzOwogfQogCi12b2lk
IE1lZGlhQ29udHJvbHM6OmNoYW5nZWRNdXRlKCkKK3ZvaWQgTWVkaWFDb250cm9sczo6bWFrZU9w
YXF1ZSgpCiB7Ci0gICAgdXBkYXRlKCk7Ci19CisgICAgaWYgKG1fb3BhcXVlKQorICAgICAgICBy
ZXR1cm47CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdlZFZvbHVtZSgpCi17Ci0gICAgdXBk
YXRlKCk7Ci19CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRyYW5zaXRpb25WYWx1
ZSwgKCkpOworICAgIGlmICh0cmFuc2l0aW9uVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHRyYW5z
aXRpb25WYWx1ZSA9IFN0cmluZzo6Zm9ybWF0KCJvcGFjaXR5ICUuMWdzIiwgZG9jdW1lbnQoKS0+
cGFnZSgpLT50aGVtZSgpLT5tZWRpYUNvbnRyb2xzRmFkZUluRHVyYXRpb24oKSk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG9wYWNpdHlWYWx1ZSwgKCIxIikpOwogCi12b2lkIE1l
ZGlhQ29udHJvbHM6OmNoYW5nZWRDbG9zZWRDYXB0aW9uc1Zpc2liaWxpdHkoKQotewotICAgIHVw
ZGF0ZSgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2UgbW9yZSBl
ZmZpY2llbnQgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxNTc+CisgICAgbV9wYW5lbC0+c3R5bGUo
KS0+c2V0UHJvcGVydHkod2Via2l0VHJhbnNpdGlvblN0cmluZygpLCB0cmFuc2l0aW9uVmFsdWUs
IGVjKTsKKyAgICBtX3BhbmVsLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShvcGFjaXR5U3RyaW5nKCks
IG9wYWNpdHlWYWx1ZSwgZWMpOworICAgIG1fb3BhcXVlID0gdHJ1ZTsKIH0KIAotdm9pZCBNZWRp
YUNvbnRyb2xzOjp1cGRhdGVTdHlsZSgpCit2b2lkIE1lZGlhQ29udHJvbHM6Om1ha2VUcmFuc3Bh
cmVudCgpCiB7Ci0gICAgaWYgKCFtX2NvbnRyb2xzU2hhZG93Um9vdCkKKyAgICBpZiAoIW1fb3Bh
cXVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wYW5lbCkKLSAgICAgICAgbV9wYW5l
bC0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9tdXRlQnV0dG9uKQotICAgICAgICBtX211dGVC
dXR0b24tPnVwZGF0ZVN0eWxlKCk7Ci0gICAgaWYgKG1fcGxheUJ1dHRvbikKLSAgICAgICAgbV9w
bGF5QnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3NlZWtCYWNrQnV0dG9uKQotICAg
ICAgICBtX3NlZWtCYWNrQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3NlZWtGb3J3
YXJkQnV0dG9uKQotICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT51cGRhdGVTdHlsZSgpOwot
ICAgIGlmIChtX3Jld2luZEJ1dHRvbikKLSAgICAgICAgbV9yZXdpbmRCdXR0b24tPnVwZGF0ZVN0
eWxlKCk7Ci0gICAgaWYgKG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbikKLSAgICAgICAgbV9yZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uLT51cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3RvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT51
cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3N0YXR1c0Rpc3BsYXkpCi0gICAgICAgIG1fc3RhdHVz
RGlzcGxheS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV90aW1lbGluZUNvbnRhaW5lcikKLSAg
ICAgICAgbV90aW1lbGluZUNvbnRhaW5lci0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV90aW1l
bGluZSkKLSAgICAgICAgbV90aW1lbGluZS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9mdWxs
c2NyZWVuQnV0dG9uKQotICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24tPnVwZGF0ZVN0eWxlKCk7
Ci0gICAgaWYgKG1fY3VycmVudFRpbWVEaXNwbGF5KQotICAgICAgICBtX2N1cnJlbnRUaW1lRGlz
cGxheS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV90aW1lUmVtYWluaW5nRGlzcGxheSkKLSAg
ICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV92
b2x1bWVTbGlkZXJDb250YWluZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT51
cGRhdGVTdHlsZSgpOwotICAgIGlmIChtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24pCi0gICAgICAg
IG1fdm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV92b2x1
bWVTbGlkZXIpCi0gICAgICAgIG1fdm9sdW1lU2xpZGVyLT51cGRhdGVTdHlsZSgpOwotICAgIGlm
IChtX2Z1bGxTY3JlZW5NaW5Wb2x1bWVCdXR0b24pCi0gICAgICAgIG1fZnVsbFNjcmVlbk1pblZv
bHVtZUJ1dHRvbi0+dXBkYXRlU3R5bGUoKTsKLSAgICBpZiAobV9mdWxsU2NyZWVuVm9sdW1lU2xp
ZGVyKQotICAgICAgICBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXItPnVwZGF0ZVN0eWxlKCk7Ci0g
ICAgaWYgKG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbikKLSAgICAgICAgbV9mdWxsU2NyZWVu
TWF4Vm9sdW1lQnV0dG9uLT51cGRhdGVTdHlsZSgpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCB0cmFuc2l0aW9uVmFsdWUsICgpKTsKKyAgICBpZiAodHJhbnNpdGlvblZhbHVlLmlz
TnVsbCgpKQorICAgICAgICB0cmFuc2l0aW9uVmFsdWUgPSBTdHJpbmc6OmZvcm1hdCgib3BhY2l0
eSAlLjFncyIsIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVP
dXREdXJhdGlvbigpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgb3BhY2l0eVZh
bHVlLCAoIjAiKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIC8vIEZJWE1FOiBNYWtl
IG1vcmUgZWZmaWNpZW50IDxodHRwOi8vd2Via2l0Lm9yZy9iLzU4MTU3PgorICAgIG1fcGFuZWwt
PnN0eWxlKCktPnNldFByb3BlcnR5KHdlYmtpdFRyYW5zaXRpb25TdHJpbmcoKSwgdHJhbnNpdGlv
blZhbHVlLCBlYyk7CisgICAgbV9wYW5lbC0+c3R5bGUoKS0+c2V0UHJvcGVydHkob3BhY2l0eVN0
cmluZygpLCBvcGFjaXR5VmFsdWUsIGVjKTsKKyAgICBtX29wYXF1ZSA9IGZhbHNlOwogfQogCi12
b2lkIE1lZGlhQ29udHJvbHM6OmRlc3Ryb3koKQordm9pZCBNZWRpYUNvbnRyb2xzOjpyZXNldCgp
CiB7Ci0gICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpKTsKKyAgICBQYWdlKiBw
YWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1fY29udHJvbHNTaGFkb3dSb290ICYmIG1fY29udHJvbHNTaGFkb3dSb290
LT5yZW5kZXJlcigpKSB7CisgICAgY2hhbmdlZE5ldHdvcmtTdGF0ZSgpOworICAgIGZsb2F0IGR1
cmF0aW9uID0gbV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CisgICAgaWYgKCFpc25hbihkdXJh
dGlvbikgfHwgcGFnZS0+dGhlbWUoKS0+aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1l
ZGlhU2xpZGVyUGFydCkpIHsKKyAgICAgICAgbV90aW1lbGluZS0+c2V0RHVyYXRpb24oZHVyYXRp
b24pOworICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5zaG93KCk7CisgICAgICAgIG1fdGlt
ZWxpbmUtPnNldFBvc2l0aW9uKG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpKTsKKyAgICAg
ICAgdXBkYXRlVGltZURpc3BsYXkoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV90aW1lbGluZUNv
bnRhaW5lci0+aGlkZSgpOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpIHx8
IHBhZ2UtPnRoZW1lKCktPmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihNZWRpYU11dGVC
dXR0b25QYXJ0KSkKKyAgICAgICAgbV9wYW5lbE11dGVCdXR0b24tPnNob3coKTsKKyAgICBlbHNl
CisgICAgICAgIG1fcGFuZWxNdXRlQnV0dG9uLT5oaWRlKCk7CiAKLSAgICAgICAgLy8gZGV0YWNo
IHRoZSBwYW5lbCBiZWZvcmUgcmVtb3ZpbmcgdGhlIHNoYWRvdyByZW5kZXJlciB0byBwcmV2ZW50
IGEgY3Jhc2ggaW4gbV9jb250cm9sc1NoYWRvd1Jvb3QtPmRldGFjaCgpIAotICAgICAgICAvLyAg
d2hlbiBkaXNwbGF5OiBzdHlsZSBjaGFuZ2VzCi0gICAgICAgIG1fcGFuZWwtPmRldGFjaCgpOwor
ICAgIGlmIChtX3ZvbHVtZVNsaWRlcikKKyAgICAgICAgbV92b2x1bWVTbGlkZXItPnNldFZvbHVt
ZShtX21lZGlhRWxlbWVudC0+dm9sdW1lKCkpOwogCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5y
ZW5kZXJlcigpLT5yZW1vdmVDaGlsZChtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyZXIoKSk7
Ci0gICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRhY2goKTsKLSAgICAgICAgbV9jb250
cm9sc1NoYWRvd1Jvb3QgPSAwOworICAgIGlmIChtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9u
KSB7CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudC0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKKyAg
ICAgICAgICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24tPnNob3coKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOwog
ICAgIH0KLX0KIAotdm9pZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGUoKQotewotICAgIEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhID0gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgaWYgKCFtZWRpYS0+Y29udHJv
bHMoKSB8fCAhbWVkaWEtPmluQWN0aXZlRG9jdW1lbnQoKSkgewotICAgICAgICBpZiAobV9jb250
cm9sc1NoYWRvd1Jvb3QpIHsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290LT5kZXRh
Y2goKTsKLSAgICAgICAgICAgIG1fcGFuZWwgPSAwOwotICAgICAgICAgICAgbV9tdXRlQnV0dG9u
ID0gMDsKLSAgICAgICAgICAgIG1fcGxheUJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3N0YXR1
c0Rpc3BsYXkgPSAwOwotICAgICAgICAgICAgbV90aW1lbGluZUNvbnRhaW5lciA9IDA7Ci0gICAg
ICAgICAgICBtX3RpbWVsaW5lID0gMDsKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24gPSAw
OwotICAgICAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3Jl
d2luZEJ1dHRvbiA9IDA7Ci0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24gPSAw
OwotICAgICAgICAgICAgbV9jdXJyZW50VGltZURpc3BsYXkgPSAwOwotICAgICAgICAgICAgbV90
aW1lUmVtYWluaW5nRGlzcGxheSA9IDA7Ci0gICAgICAgICAgICBtX2Z1bGxzY3JlZW5CdXR0b24g
PSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJDb250YWluZXIgPSAwOwotICAgICAgICAg
ICAgbV92b2x1bWVTbGlkZXIgPSAwOwotICAgICAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0
dG9uID0gMDsKLSAgICAgICAgICAgIG1fY29udHJvbHNTaGFkb3dSb290ID0gMDsKLSAgICAgICAg
ICAgIG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24gPSAwOwotICAgICAgICAgICAgbV9mdWxs
U2NyZWVuTWluVm9sdW1lQnV0dG9uID0gMDsKLSAgICAgICAgICAgIG1fZnVsbFNjcmVlblZvbHVt
ZVNsaWRlciA9IDA7Ci0gICAgICAgICAgICBtX2Z1bGxTY3JlZW5NYXhWb2x1bWVCdXR0b24gPSAw
OwotICAgICAgICB9Ci0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvblRvID0gMS4wZjsKLSAgICAg
ICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fbWVkaWFFbGVtZW50LT5tb3ZpZUxvYWRUeXBlKCkgIT0gTWVkaWFQbGF5ZXI6OkxpdmVT
dHJlYW0pIHsKKyAgICAgICAgbV9yZXR1cm5Ub1JlYWxUaW1lQnV0dG9uLT5oaWRlKCk7CisgICAg
ICAgIG1fcmV3aW5kQnV0dG9uLT5zaG93KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9yZXR1
cm5Ub1JlYWxUaW1lQnV0dG9uLT5zaG93KCk7CisgICAgICAgIG1fcmV3aW5kQnV0dG9uLT5oaWRl
KCk7CiAgICAgfQogCi0gICAgaWYgKCFtX2NvbnRyb2xzU2hhZG93Um9vdCkgewotICAgICAgICBt
X2NvbnRyb2xzU2hhZG93Um9vdCA9IGNyZWF0ZShtX21lZGlhRWxlbWVudCk7Ci0gICAgICAgIG1f
bWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5hZGRDaGlsZChtX2NvbnRyb2xzU2hhZG93Um9vdC0+
cmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fcGFuZWwtPmF0dGFjaCgpOwotICAgIH0KKyAgICBtYWtl
T3BhcXVlKCk7Cit9CiAKLSAgICBpZiAobV9wYW5lbCkgewotICAgICAgICAvLyB1cGRhdGUoKSBt
aWdodCBhbHRlciB0aGUgb3BhY2l0eSBvZiB0aGUgZWxlbWVudCwgZXNwZWNpYWxseSBpZiB3ZSBh
cmUgaW4gdGhlIG1pZGRsZQotICAgICAgICAvLyBvZiBhbiBhbmltYXRpb24uIFRoaXMgaXMgdGhl
IG9ubHkgZWxlbWVudCBjb25jZXJuZWQgYXMgd2UgYW5pbWF0ZSBvbmx5IHRoaXMgZWxlbWVudC4K
LSAgICAgICAgZmxvYXQgb3BhY2l0eUJlZm9yZUNoYW5naW5nU3R5bGUgPSBtX3BhbmVsLT5yZW5k
ZXJlcigpID8gbV9wYW5lbC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3BhY2l0eSgpIDogMDsKLSAg
ICAgICAgbV9wYW5lbC0+dXBkYXRlKCk7Ci0gICAgICAgIGNoYW5nZU9wYWNpdHkobV9wYW5lbC5n
ZXQoKSwgb3BhY2l0eUJlZm9yZUNoYW5naW5nU3R5bGUpOwotICAgIH0KLSAgICBpZiAobV9tdXRl
QnV0dG9uKQotICAgICAgICBtX211dGVCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3BsYXlC
dXR0b24pCi0gICAgICAgIG1fcGxheUJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdGltZWxp
bmVDb250YWluZXIpCi0gICAgICAgIG1fdGltZWxpbmVDb250YWluZXItPnVwZGF0ZSgpOwotICAg
IGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJDb250
YWluZXItPnVwZGF0ZSgpOwotICAgIGlmIChtX3RpbWVsaW5lKQotICAgICAgICBtX3RpbWVsaW5l
LT51cGRhdGUoKTsKLSAgICBpZiAobV9jdXJyZW50VGltZURpc3BsYXkpCi0gICAgICAgIG1fY3Vy
cmVudFRpbWVEaXNwbGF5LT51cGRhdGUoKTsKLSAgICBpZiAobV90aW1lUmVtYWluaW5nRGlzcGxh
eSkKLSAgICAgICAgbV90aW1lUmVtYWluaW5nRGlzcGxheS0+dXBkYXRlKCk7Ci0gICAgaWYgKG1f
c2Vla0JhY2tCdXR0b24pCi0gICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPnVwZGF0ZSgpOwotICAg
IGlmIChtX3NlZWtGb3J3YXJkQnV0dG9uKQotICAgICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLT51
cGRhdGUoKTsKLSAgICBpZiAobV9yZXdpbmRCdXR0b24pCi0gICAgICAgIG1fcmV3aW5kQnV0dG9u
LT51cGRhdGUoKTsKLSAgICBpZiAobV9yZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKQotICAgICAgICBt
X3JldHVyblRvUmVhbHRpbWVCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX3RvZ2dsZUNsb3Nl
ZENhcHRpb25zQnV0dG9uKQotICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT51
cGRhdGUoKTsKLSAgICBpZiAobV9zdGF0dXNEaXNwbGF5KQotICAgICAgICBtX3N0YXR1c0Rpc3Bs
YXktPnVwZGF0ZSgpOwotICAgIGlmIChtX2Z1bGxzY3JlZW5CdXR0b24pCi0gICAgICAgIG1fZnVs
bHNjcmVlbkJ1dHRvbi0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyKQotICAgICAg
ICBtX3ZvbHVtZVNsaWRlci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1fdm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvbikKLSAgICAgICAgbV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uLT51cGRhdGUoKTsKLSAgICBp
ZiAobV9mdWxsU2NyZWVuTWluVm9sdW1lQnV0dG9uKQotICAgICAgICBtX2Z1bGxTY3JlZW5NaW5W
b2x1bWVCdXR0b24tPnVwZGF0ZSgpOwotICAgIGlmIChtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXIp
Ci0gICAgICAgIG1fZnVsbFNjcmVlblZvbHVtZVNsaWRlci0+dXBkYXRlKCk7Ci0gICAgaWYgKG1f
ZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbikKLSAgICAgICAgbV9mdWxsU2NyZWVuTWF4Vm9sdW1l
QnV0dG9uLT51cGRhdGUoKTsKK3ZvaWQgTWVkaWFDb250cm9sczo6cGxheWJhY2tTdGFydGVkKCkK
K3sKKyAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7CisgICAgbV90aW1lbGlu
ZS0+c2V0UG9zaXRpb24obV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkpOwogICAgIHVwZGF0
ZVRpbWVEaXNwbGF5KCk7Ci0gICAgdXBkYXRlQ29udHJvbFZpc2liaWxpdHkoKTsKIH0KIAotdm9p
ZCBNZWRpYUNvbnRyb2xzOjp1cGRhdGVUaW1lRGlzcGxheSgpCit2b2lkIE1lZGlhQ29udHJvbHM6
OnBsYXliYWNrUHJvZ3Jlc3NlZCgpCiB7Ci0gICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50LT5yZW5k
ZXJlcigpKTsKKyAgICBtX3RpbWVsaW5lLT5zZXRQb3NpdGlvbihtX21lZGlhRWxlbWVudC0+Y3Vy
cmVudFRpbWUoKSk7CisgICAgdXBkYXRlVGltZURpc3BsYXkoKTsKK30KIAotICAgIGlmICghbV9j
dXJyZW50VGltZURpc3BsYXkgfHwgIW1fY3VycmVudFRpbWVEaXNwbGF5LT5yZW5kZXJlcigpIHx8
IG1fY3VycmVudFRpbWVEaXNwbGF5LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0g
Tk9ORSB8fCBtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ICE9IFZJU0lCTEUpCi0gICAgICAgIHJldHVybjsKK3ZvaWQgTWVkaWFDb250cm9sczo6cGxheWJh
Y2tTdG9wcGVkKCkKK3sKKyAgICBtX3BsYXlCdXR0b24tPnVwZGF0ZURpc3BsYXlUeXBlKCk7Cisg
ICAgbV90aW1lbGluZS0+c2V0UG9zaXRpb24obV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkp
OworICAgIHVwZGF0ZVRpbWVEaXNwbGF5KCk7CisgICAgbWFrZU9wYXF1ZSgpOworfQogCit2b2lk
IE1lZGlhQ29udHJvbHM6OnVwZGF0ZVRpbWVEaXNwbGF5KCkKK3sKICAgICBmbG9hdCBub3cgPSBt
X21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKTsKICAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVk
aWFFbGVtZW50LT5kdXJhdGlvbigpOwogCi0gICAgLy8gQWxsb3cgdGhlIHRoZW1lIHRvIGZvcm1h
dCB0aGUgdGltZQorICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CisgICAgaWYg
KCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBbGxvdyB0aGUgdGhlbWUgdG8gZm9y
bWF0IHRoZSB0aW1lLgogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgbV9jdXJyZW50VGltZURp
c3BsYXktPnNldElubmVyVGV4dChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+dGhlbWUoKS0+
Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKG5vdywgZHVyYXRpb24pLCBlYyk7CisgICAg
bV9jdXJyZW50VGltZURpc3BsYXktPnNldElubmVyVGV4dChwYWdlLT50aGVtZSgpLT5mb3JtYXRN
ZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUobm93LCBkdXJhdGlvbiksIGVjKTsKICAgICBtX2N1cnJl
bnRUaW1lRGlzcGxheS0+c2V0Q3VycmVudFZhbHVlKG5vdyk7Ci0gICAgbV90aW1lUmVtYWluaW5n
RGlzcGxheS0+c2V0SW5uZXJUZXh0KG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT50aGVtZSgp
LT5mb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShub3csIGR1cmF0aW9uKSwgZWMpOwor
ICAgIG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnNldElubmVyVGV4dChwYWdlLT50aGVtZSgpLT5m
b3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShub3csIGR1cmF0aW9uKSwgZWMpOwogICAg
IG1fdGltZVJlbWFpbmluZ0Rpc3BsYXktPnNldEN1cnJlbnRWYWx1ZShub3cgLSBkdXJhdGlvbik7
CiB9CiAKLVJlbmRlckJveCogTWVkaWFDb250cm9sczo6cmVuZGVyQm94KCkKLXsKLSAgICByZXR1
cm4gbV9jb250cm9sc1NoYWRvd1Jvb3QgPyBtX2NvbnRyb2xzU2hhZG93Um9vdC0+cmVuZGVyQm94
KCkgOiAwOwotfQotCi12b2lkIE1lZGlhQ29udHJvbHM6OnVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5
KCkKK3ZvaWQgTWVkaWFDb250cm9sczo6cmVwb3J0ZWRFcnJvcigpCiB7Ci0gICAgaWYgKCFtX3Bh
bmVsIHx8ICFtX3BhbmVsLT5yZW5kZXJlcigpKQorICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgp
LT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBEb24n
dCBmYWRlIGZvciBhdWRpbyBjb250cm9scy4KLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYSA9
IG1fbWVkaWFFbGVtZW50OwotICAgIGlmICghbWVkaWEtPmhhc1ZpZGVvKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXBhZ2UtPnRoZW1lKCktPmhhc093bkRpc2FibGVkU3RhdGVIYW5kbGlu
Z0ZvcihNZWRpYVNsaWRlclBhcnQpKQorICAgICAgICBtX3RpbWVsaW5lQ29udGFpbmVyLT5oaWRl
KCk7CiAKLSAgICBBU1NFUlQobWVkaWEtPnJlbmRlcmVyKCkpOworICAgIGlmICghcGFnZS0+dGhl
bWUoKS0+aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKE1lZGlhTXV0ZUJ1dHRvblBhcnQp
KQorICAgICAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+aGlkZSgpOwogCi0gICAgLy8gRG9uJ3QgZmFk
ZSBpZiB0aGUgbWVkaWEgZWxlbWVudCBpcyBub3QgdmlzaWJsZQotICAgIGlmIChtZWRpYS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBib29sIHNob3VsZEhpZGVDb250cm9sbGVyID0gIW1fbW91c2VPdmVyICYm
ICFtZWRpYS0+Y2FuUGxheSgpOworICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPmhpZGUoKTsKIAot
ICAgIC8vIERvIGZhZGluZyBtYW51YWxseSwgY3NzIGFuaW1hdGlvbnMgZG9uJ3Qgd29yayB3aXRo
IHNoYWRvdyB0cmVlcworICAgIGlmIChtX3ZvbHVtZVNsaWRlckNvbnRhaW5lcikKKyAgICAgICAg
bV92b2x1bWVTbGlkZXJDb250YWluZXItPmhpZGUoKTsKKyAgICBpZiAobV90b2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbiAmJiAhcGFnZS0+dGhlbWUoKS0+aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRs
aW5nRm9yKE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25QYXJ0KSkKKyAgICAgICAgbV90
b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGlkZSgpOworfQogCi0gICAgZmxvYXQgYW5pbWF0
ZUZyb20gPSBtX3BhbmVsLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vcGFjaXR5KCk7Ci0gICAgZmxv
YXQgYW5pbWF0ZVRvID0gc2hvdWxkSGlkZUNvbnRyb2xsZXIgPyAwLjBmIDogMS4wZjsKK3ZvaWQg
TWVkaWFDb250cm9sczo6Y2hhbmdlZE5ldHdvcmtTdGF0ZSgpCit7CisgICAgLy8gRklYTUU6IFdo
eSBhcmUgd2UgY2hhbmdpbmcgZnVsbHNjcmVlbiBidXR0b24gdmlzaWJpbGl0eSBoZXJlPyA8aHR0
cDovL3dlYmtpdC5vcmcvYi81ODE2Mz4KKyAgICBpZiAobV9tZWRpYUVsZW1lbnQtPnN1cHBvcnRz
RnVsbHNjcmVlbigpKQorICAgICAgICBtX2Z1bGxTY3JlZW5CdXR0b24tPnNob3coKTsKKyAgICBl
bHNlCisgICAgICAgIG1fZnVsbFNjcmVlbkJ1dHRvbi0+aGlkZSgpOwogCi0gICAgaWYgKGFuaW1h
dGVGcm9tID09IGFuaW1hdGVUbykKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3N0YXR1c0Rp
c3BsYXkpCisgICAgICAgIG1fc3RhdHVzRGlzcGxheS0+dXBkYXRlKCk7Cit9CiAKLSAgICBpZiAo
bV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBpZiAobV9vcGFj
aXR5QW5pbWF0aW9uVG8gPT0gYW5pbWF0ZVRvKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX29wYWNpdHlBbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgfQordm9pZCBNZWRpYUNvbnRy
b2xzOjpsb2FkZWRNZXRhZGF0YSgpCit7CisgICAgaWYgKG1fc3RhdHVzRGlzcGxheSkKKyAgICAg
ICAgbV9zdGF0dXNEaXNwbGF5LT5oaWRlKCk7CiAKLSAgICBpZiAoYW5pbWF0ZUZyb20gPCBhbmlt
YXRlVG8pCi0gICAgICAgIG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9uID0gbV9wYW5lbC0+cmVu
ZGVyZXIoKS0+dGhlbWUoKS0+bWVkaWFDb250cm9sc0ZhZGVJbkR1cmF0aW9uKCk7Ci0gICAgZWxz
ZQotICAgICAgICBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbiA9IG1fcGFuZWwtPnJlbmRlcmVy
KCktPnRoZW1lKCktPm1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRpb24oKTsKKyAgICByZXNldCgp
OworfQogCi0gICAgbV9vcGFjaXR5QW5pbWF0aW9uRnJvbSA9IGFuaW1hdGVGcm9tOwotICAgIG1f
b3BhY2l0eUFuaW1hdGlvblRvID0gYW5pbWF0ZVRvOwordm9pZCBNZWRpYUNvbnRyb2xzOjpjaGFu
Z2VkQ2xvc2VkQ2FwdGlvbnNWaXNpYmlsaXR5KCkKK3sKKyAgICBpZiAobV90b2dnbGVDbG9zZWRD
YXB0aW9uc0J1dHRvbikKKyAgICAgICAgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+dXBk
YXRlRGlzcGxheVR5cGUoKTsKK30KIAotICAgIG1fb3BhY2l0eUFuaW1hdGlvblN0YXJ0VGltZSA9
IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRp
bmcoY09wYWNpdHlBbmltYXRpb25SZXBlYXREZWxheSk7Cit2b2lkIE1lZGlhQ29udHJvbHM6OmNo
YW5nZWRNdXRlKCkKK3sKKyAgICBtX3BhbmVsTXV0ZUJ1dHRvbi0+Y2hhbmdlZE11dGUoKTsKKyAg
ICBpZiAobV92b2x1bWVTbGlkZXJNdXRlQnV0dG9uKQorICAgICAgICBtX3ZvbHVtZVNsaWRlck11
dGVCdXR0b24tPmNoYW5nZWRNdXRlKCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Y2hhbmdl
T3BhY2l0eShIVE1MRWxlbWVudCogZSwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQgTWVkaWFDb250cm9s
czo6Y2hhbmdlZFZvbHVtZSgpCiB7Ci0gICAgaWYgKCFlIHx8ICFlLT5yZW5kZXJlcigpIHx8ICFl
LT5yZW5kZXJlcigpLT5zdHlsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBzID0gUmVuZGVyU3R5bGU6OmNsb25lKGUtPnJlbmRlcmVyKCktPnN0eWxlKCkpOwot
ICAgIHMtPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgLy8gei1pbmRleCBjYW4ndCBiZSBhdXRv
IGlmIG9wYWNpdHkgaXMgdXNlZAotICAgIHMtPnNldFpJbmRleCgwKTsKLSAgICBlLT5yZW5kZXJl
cigpLT5zZXRTdHlsZShzLnJlbGVhc2UoKSk7CisgICAgaWYgKG1fdm9sdW1lU2xpZGVyKQorICAg
ICAgICBtX3ZvbHVtZVNsaWRlci0+c2V0Vm9sdW1lKG1fbWVkaWFFbGVtZW50LT52b2x1bWUoKSk7
CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6b3BhY2l0eUFuaW1hdGlvblRpbWVyRmlyZWQoVGlt
ZXI8TWVkaWFDb250cm9scz4qKQordm9pZCBNZWRpYUNvbnRyb2xzOjplbnRlcmVkRnVsbHNjcmVl
bigpCiB7Ci0gICAgZG91YmxlIHRpbWUgPSBjdXJyZW50VGltZSgpIC0gbV9vcGFjaXR5QW5pbWF0
aW9uU3RhcnRUaW1lOwotICAgIGlmICh0aW1lID49IG1fb3BhY2l0eUFuaW1hdGlvbkR1cmF0aW9u
KSB7Ci0gICAgICAgIHRpbWUgPSBtX29wYWNpdHlBbmltYXRpb25EdXJhdGlvbjsKLSAgICAgICAg
bV9vcGFjaXR5QW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgIH0KLSAgICBmbG9hdCBvcGFjaXR5
ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX29wYWNpdHlBbmltYXRpb25Gcm9tICsgKG1fb3Bh
Y2l0eUFuaW1hdGlvblRvIC0gbV9vcGFjaXR5QW5pbWF0aW9uRnJvbSkgKiB0aW1lIC8gbV9vcGFj
aXR5QW5pbWF0aW9uRHVyYXRpb24pOwotICAgIGNoYW5nZU9wYWNpdHkobV9wYW5lbC5nZXQoKSwg
b3BhY2l0eSk7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50LT5tb3ZpZUxvYWRUeXBlKCkgPT0gTWVk
aWFQbGF5ZXI6OkxpdmVTdHJlYW0gfHwgbV9tZWRpYUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSA9
PSBNZWRpYVBsYXllcjo6U3RvcmVkU3RyZWFtKSB7CisgICAgICAgIG1fc2Vla0JhY2tCdXR0b24t
PmhpZGUoKTsKKyAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+aGlkZSgpOworICAgIH0gZWxz
ZQorICAgICAgICBtX3Jld2luZEJ1dHRvbi0+aGlkZSgpOwogfQogCi12b2lkIE1lZGlhQ29udHJv
bHM6OnVwZGF0ZVZvbHVtZVNsaWRlckNvbnRhaW5lcihib29sIHZpc2libGUpCit2b2lkIE1lZGlh
Q29udHJvbHM6OmV4aXRlZEZ1bGxzY3JlZW4oKQogewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQt
Pmhhc0F1ZGlvKCkgfHwgIW1fdm9sdW1lU2xpZGVyQ29udGFpbmVyIHx8ICFtX3ZvbHVtZVNsaWRl
cikKKyAgICAvLyAic2hvdyIgYWN0dWFsbHkgbWVhbnMgcmVtb3ZhbCBvZiBkaXNwbGF5Om5vbmUg
c3R5bGUsIHNvIHdlIGFyZSBqdXN0IGNsZWFyaW5nIHN0eWxlcworICAgIC8vIHdoZW4gZXhpdGlu
ZyBmdWxsc2NyZWVuLgorICAgIC8vIEZJWE1FOiBDbGFyaWZ5IG5hbWluZyBvZiBzaG93L2hpZGUg
PGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxNTc+CisgICAgbV9yZXdpbmRCdXR0b24tPnNob3coKTsK
KyAgICBtX3NlZWtCYWNrQnV0dG9uLT5zaG93KCk7CisgICAgbV9zZWVrRm9yd2FyZEJ1dHRvbi0+
c2hvdygpOworfQorCit2b2lkIE1lZGlhQ29udHJvbHM6OnNob3dWb2x1bWVTbGlkZXIoKQorewor
ICAgIGlmICghbV9tZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmICh2aXNpYmxlICYmICFtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+aXNWaXNpYmxlKCkp
IHsKLSAgICAgICAgaWYgKCFtX211dGVCdXR0b24gfHwgIW1fbXV0ZUJ1dHRvbi0+cmVuZGVyZXIo
KSB8fCAhbV9tdXRlQnV0dG9uLT5yZW5kZXJCb3goKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHMgPSBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+
c3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zZXRW
aXNpYmxlKHRydWUpOwotICAgICAgICBtX3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+dXBkYXRlKCk7
Ci0gICAgICAgIG1fdm9sdW1lU2xpZGVyLT51cGRhdGUoKTsKLSAgICB9IGVsc2UgaWYgKCF2aXNp
YmxlICYmIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5pc1Zpc2libGUoKSkgewotICAgICAgICBt
X3ZvbHVtZVNsaWRlckNvbnRhaW5lci0+c2V0VmlzaWJsZShmYWxzZSk7Ci0gICAgICAgIG1fdm9s
dW1lU2xpZGVyQ29udGFpbmVyLT51cGRhdGVTdHlsZSgpOwotICAgIH0KKyAgICBpZiAobV92b2x1
bWVTbGlkZXJDb250YWluZXIpCisgICAgICAgIG1fdm9sdW1lU2xpZGVyQ29udGFpbmVyLT5zaG93
KCk7CiB9CiAKLXZvaWQgTWVkaWFDb250cm9sczo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkK
K2NvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFDb250cm9sczo6c2hhZG93UHNldWRvSWQoKSBjb25z
dAogewotICAgIEFTU0VSVChtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0KLSAgICBpZiAo
ZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIG1fY29udHJvbHNTaGFkb3dSb290KSB7Ci0gICAgICAg
IE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQp
OwotICAgICAgICBJbnRQb2ludCBwb2ludChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkp
OwotCi0gICAgICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1f
dm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbiAmJiBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPmhpdFRl
c3QocG9pbnQpKSB7Ci0gICAgICAgICAgICBtX3ZvbHVtZVNsaWRlck11dGVCdXR0b24tPmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICAgICAgZGVmYXVsdEhhbmRsZWQgPSBldmVu
dC0+ZGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvd1ZvbHVt
ZVNsaWRlciA9IGZhbHNlOwotICAgICAgICBpZiAoIWRlZmF1bHRIYW5kbGVkICYmIG1fbXV0ZUJ1
dHRvbiAmJiBtX211dGVCdXR0b24tPmhpdFRlc3QocG9pbnQpKSB7Ci0gICAgICAgICAgICBtX211
dGVCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICAgICAgaWYgKGV2
ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCi0gICAgICAgICAgICAg
ICAgc2hvd1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV92
b2x1bWVTbGlkZXJDb250YWluZXIgJiYgbV92b2x1bWVTbGlkZXJDb250YWluZXItPmhpdFRlc3Qo
cG9pbnQpKQotICAgICAgICAgICAgc2hvd1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKG1fdm9sdW1lU2xpZGVyICYmIG1fdm9sdW1lU2xpZGVyLT5oaXRUZXN0KHBvaW50KSkgewot
ICAgICAgICAgICAgbV92b2x1bWVTbGlkZXItPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwot
ICAgICAgICAgICAgc2hvd1ZvbHVtZVNsaWRlciA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICB1cGRhdGVWb2x1bWVTbGlkZXJDb250YWluZXIoc2hvd1ZvbHVtZVNsaWRlcik7Ci0KLSAgICAg
ICAgaWYgKG1fcGxheUJ1dHRvbiAmJiBtX3BsYXlCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAg
ICAgICAgICAgbV9wbGF5QnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAg
ICAgICBpZiAobV9zZWVrQmFja0J1dHRvbiAmJiBtX3NlZWtCYWNrQnV0dG9uLT5oaXRUZXN0KHBv
aW50KSkKLSAgICAgICAgICAgIG1fc2Vla0JhY2tCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwotCi0gICAgICAgIGlmIChtX3NlZWtGb3J3YXJkQnV0dG9uICYmIG1fc2Vla0Zvcndh
cmRCdXR0b24tPmhpdFRlc3QocG9pbnQpKQotICAgICAgICAgICAgbV9zZWVrRm9yd2FyZEJ1dHRv
bi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKG1fcmV3aW5kQnV0
dG9uICYmIG1fcmV3aW5kQnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fcmV3
aW5kQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV9y
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uICYmIG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbi0+aGl0VGVz
dChwb2ludCkpCi0gICAgICAgICAgICBtX3JldHVyblRvUmVhbHRpbWVCdXR0b24tPmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwotCi0gICAgICAgaWYgKG1fdG9nZ2xlQ2xvc2VkQ2FwdGlvbnNC
dXR0b24gJiYgbV90b2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbi0+aGl0VGVzdChwb2ludCkpCi0g
ICAgICAgICAgICBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKLQotICAgICAgICBpZiAobV90aW1lbGluZSAmJiBtX3RpbWVsaW5lLT5oaXRU
ZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fdGltZWxpbmUtPmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwotCi0gICAgICAgIGlmIChtX2Z1bGxzY3JlZW5CdXR0b24gJiYgbV9mdWxsc2NyZWVu
QnV0dG9uLT5oaXRUZXN0KHBvaW50KSkKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkJ1dHRvbi0+
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAgICAgICBtX21vdXNlT3Zl
ciA9IHRydWU7Ci0gICAgICAgICAgICB1cGRhdGVDb250cm9sVmlzaWJpbGl0eSgpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2
ZW50KSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBzY3JvbGxiYXIgdGh1bWIgY2FwdHVyZXMg
bW91c2UgZXZlbnRzLCB3ZSBzaG91bGQgdHJlYXQgdGhlIG1vdXNlIGFzIHN0aWxsIGJlaW5nIG92
ZXIgb3VyIHJlbmRlcmVyIGlmIHRoZSBuZXcgdGFyZ2V0IGlzIGEgZGVzY2VuZGFudAotICAgICAg
ICAgICAgTm9kZSogbW91c2VPdmVyTm9kZSA9IG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSA/
IG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKS0+dG9Ob2RlKCkgOiAwOwotICAgICAgICAgICAg
UmVuZGVyT2JqZWN0KiBtb3VzZU92ZXJSZW5kZXJlciA9IG1vdXNlT3Zlck5vZGUgPyBtb3VzZU92
ZXJOb2RlLT5yZW5kZXJlcigpIDogMDsKLSAgICAgICAgICAgIG1fbW91c2VPdmVyID0gbW91c2VP
dmVyUmVuZGVyZXIgJiYgbW91c2VPdmVyUmVuZGVyZXItPmlzRGVzY2VuZGFudE9mKG1fbWVkaWFF
bGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xWaXNpYmlsaXR5
KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIGlkLCAoIi13ZWJraXQtbWVkaWEtY29udHJvbHMiKSk7CisgICAgcmV0dXJuIGlkOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xz
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKaW5kZXggZWJm
N2VlZDMyZWFkMmM2MTk5NmUwOTE1MWNlOWIyNWIxNTkwM2RkNy4uMzUwNzZhN2Y2ODUyOTczNzRm
ZjNmZjFiZTY4MDhhMTFmYzhiYTAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9scy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbHMuaApAQCAtMjksNiArMjksNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKQogCisj
aW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtMzgsMzIgKzM5LDQ0IEBAIGNsYXNzIEhUTUxFbGVtZW50Owog
Y2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBF
dmVudDsKLWNsYXNzIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50OworY2xhc3MgTWVkaWFD
b250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFBsYXlCdXR0
b25FbGVtZW50OwogY2xhc3MgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ7Ci1jbGFzcyBN
ZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFJld2luZEJ1
dHRvbkVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxl
bWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVu
dDsKK2NsYXNzIE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQ7CiBjbGFzcyBN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ7CitjbGFzcyBNZWRpYUNvbnRyb2xUaW1lUmVtYWlu
aW5nRGlzcGxheUVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50
OwogY2xhc3MgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBNZWRp
YUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNw
bGF5RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDsK
K2NsYXNzIE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29u
dHJvbFNlZWtGb3J3YXJkQnV0dG9uRWxlbWVudDsKK2NsYXNzIE1lZGlhQ29udHJvbE11dGVCdXR0
b25FbGVtZW50OworY2xhc3MgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDsKK2NsYXNz
IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50OwogY2xhc3MgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDsKLWNsYXNzIE1lZGlhQ29udHJvbEVs
ZW1lbnQ7CiBjbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lTWluQnV0dG9uRWxlbWVu
dDsKIGNsYXNzIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50OwogY2xh
c3MgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVsZW1lbnQ7CitjbGFzcyBN
ZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ7CiBjbGFzcyBNZWRpYVBsYXllcjsKIAogY2xhc3MgUmVu
ZGVyQm94OwogY2xhc3MgUmVuZGVyTWVkaWE7CiAKLWNsYXNzIE1lZGlhQ29udHJvbHMgeworLy8g
RklYTUU6IFJlbmFtZSB0byBNZWRpYUNvbnRyb2xSb290RWxlbWVudC4KK2NsYXNzIE1lZGlhQ29u
dHJvbHMgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewogcHVibGljOgotICAgIE1lZGlhQ29udHJv
bHMoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJv
bHM+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CisKKyAgICB2b2lkIHNob3coKTsKKyAgICB2
b2lkIGhpZGUoKTsKKyAgICB2b2lkIG1ha2VPcGFxdWUoKTsKKyAgICB2b2lkIG1ha2VUcmFuc3Bh
cmVudCgpOwogCiAgICAgdm9pZCByZXNldCgpOwogCkBAIC03Myw2MSArODYsNTQgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBjaGFuZ2VkTXV0ZSgpOwogICAgIHZvaWQgY2hhbmdlZFZvbHVtZSgpOwor
CisgICAgdm9pZCBlbnRlcmVkRnVsbHNjcmVlbigpOworICAgIHZvaWQgZXhpdGVkRnVsbHNjcmVl
bigpOworCisgICAgdm9pZCByZXBvcnRlZEVycm9yKCk7CisgICAgdm9pZCBjaGFuZ2VkTmV0d29y
a1N0YXRlKCk7CisgICAgdm9pZCBsb2FkZWRNZXRhZGF0YSgpOwogICAgIHZvaWQgY2hhbmdlZENs
b3NlZENhcHRpb25zVmlzaWJpbGl0eSgpOwogCi0gICAgdm9pZCBkZXN0cm95KCk7Ci0gICAgdm9p
ZCB1cGRhdGUoKTsKLSAgICB2b2lkIHVwZGF0ZVN0eWxlKCk7Ci0gICAgdm9pZCBmb3J3YXJkRXZl
bnQoRXZlbnQqKTsKKyAgICB2b2lkIHNob3dWb2x1bWVTbGlkZXIoKTsKICAgICB2b2lkIHVwZGF0
ZVRpbWVEaXNwbGF5KCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxs
b3cgUmVuZGVyTWVkaWE6OmxheW91dCB0d2VhayB0aGUgcG9zaXRpb24gb2YgY29udHJvbHMuCi0g
ICAgLy8gT25jZSBzaGFkb3cgRE9NIHJlZmFjdG9yaW5nIGlzIGNvbXBsZXRlLCB0aGUgdHdlYWtp
bmcgd2lsbCBiZSBpbiBNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCBhbmQgdGhpcyBhY2Nlc3NvciB3
aWxsIG5vIGxvbmdlciBiZSBuZWNlc3NhcnkuCi0gICAgUmVuZGVyQm94KiByZW5kZXJCb3goKTsK
LQogcHJpdmF0ZToKLSAgICBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50
PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwotCi0gICAgdm9pZCB1cGRhdGVDb250cm9sVmlz
aWJpbGl0eSgpOwotICAgIHZvaWQgY2hhbmdlT3BhY2l0eShIVE1MRWxlbWVudCosIGZsb2F0IG9w
YWNpdHkpOwotICAgIHZvaWQgb3BhY2l0eUFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8TWVkaWFD
b250cm9scz4qKTsKKyAgICBNZWRpYUNvbnRyb2xzKEhUTUxNZWRpYUVsZW1lbnQqKTsKIAotICAg
IHZvaWQgdXBkYXRlVm9sdW1lU2xpZGVyQ29udGFpbmVyKGJvb2wgdmlzaWJsZSk7Ci0KLXByaXZh
dGU6Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBtX2NvbnRyb2xz
U2hhZG93Um9vdDsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sRWxlbWVudD4gbV9wYW5lbDsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ+IG1fbXV0ZUJ1dHRvbjsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQ+IG1fcGxheUJ1dHRvbjsKLSAg
ICBSZWZQdHI8TWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQ+IG1fc2Vla0JhY2tCdXR0b247
Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFNlZWtCdXR0b25FbGVtZW50PiBtX3NlZWtGb3J3YXJk
QnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xSZXdpbmRCdXR0b25FbGVtZW50PiBtX3Jl
d2luZEJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRv
bkVsZW1lbnQ+IG1fcmV0dXJuVG9SZWFsdGltZUJ1dHRvbjsKLSAgICBSZWZQdHI8TWVkaWFDb250
cm9sVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50PiBtX3RvZ2dsZUNsb3NlZENhcHRp
b25zQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IG1fdGlt
ZWxpbmU7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ+IG1fdm9s
dW1lU2xpZGVyOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudD4gbV92
b2x1bWVTbGlkZXJNdXRlQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
QnV0dG9uRWxlbWVudD4gbV9mdWxsc2NyZWVuQnV0dG9uOwotICAgIFJlZlB0cjxNZWRpYUNvbnRy
b2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ+IG1fdGltZWxpbmVDb250YWluZXI7Ci0gICAgUmVm
UHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IG1fdm9sdW1lU2xp
ZGVyQ29udGFpbmVyOwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lRGlzcGxheUVsZW1lbnQ+
IG1fY3VycmVudFRpbWVEaXNwbGF5OwotICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xUaW1lRGlzcGxh
eUVsZW1lbnQ+IG1fdGltZVJlbWFpbmluZ0Rpc3BsYXk7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXlFbGVtZW50PiBtX3N0YXR1c0Rpc3BsYXk7Ci0gICAgUmVmUHRyPE1lZGlh
Q29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25FbGVtZW50PiBtX2Z1bGxTY3JlZW5NaW5W
b2x1bWVCdXR0b247Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlk
ZXJFbGVtZW50PiBtX2Z1bGxTY3JlZW5Wb2x1bWVTbGlkZXI7Ci0gICAgUmVmUHRyPE1lZGlhQ29u
dHJvbEZ1bGxzY3JlZW5Wb2x1bWVNYXhCdXR0b25FbGVtZW50PiBtX2Z1bGxTY3JlZW5NYXhWb2x1
bWVCdXR0b247CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lk
KCkgY29uc3Q7CiAKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21lZGlhRWxlbWVudDsKLSAgICBU
aW1lcjxNZWRpYUNvbnRyb2xzPiBtX29wYWNpdHlBbmltYXRpb25UaW1lcjsKLQotICAgIGRvdWJs
ZSBtX29wYWNpdHlBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91YmxlIG1fb3BhY2l0eUFuaW1h
dGlvbkR1cmF0aW9uOwotICAgIGZsb2F0IG1fb3BhY2l0eUFuaW1hdGlvbkZyb207Ci0gICAgZmxv
YXQgbV9vcGFjaXR5QW5pbWF0aW9uVG87CiAKLSAgICBib29sIG1fbW91c2VPdmVyOworICAgIE1l
ZGlhQ29udHJvbFJld2luZEJ1dHRvbkVsZW1lbnQqIG1fcmV3aW5kQnV0dG9uOworICAgIE1lZGlh
Q29udHJvbFBsYXlCdXR0b25FbGVtZW50KiBtX3BsYXlCdXR0b247CisgICAgTWVkaWFDb250cm9s
UmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQqIG1fcmV0dXJuVG9SZWFsVGltZUJ1dHRvbjsK
KyAgICBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudCogbV9zdGF0dXNEaXNwbGF5Owor
ICAgIE1lZGlhQ29udHJvbEN1cnJlbnRUaW1lRGlzcGxheUVsZW1lbnQqIG1fY3VycmVudFRpbWVE
aXNwbGF5OworICAgIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudCogbV90aW1lbGluZTsKKyAg
ICBNZWRpYUNvbnRyb2xUaW1lUmVtYWluaW5nRGlzcGxheUVsZW1lbnQqIG1fdGltZVJlbWFpbmlu
Z0Rpc3BsYXk7CisgICAgTWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50KiBtX3Rp
bWVsaW5lQ29udGFpbmVyOworICAgIE1lZGlhQ29udHJvbFNlZWtCYWNrQnV0dG9uRWxlbWVudCog
bV9zZWVrQmFja0J1dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xTZWVrRm9yd2FyZEJ1dHRvbkVsZW1l
bnQqIG1fc2Vla0ZvcndhcmRCdXR0b247CisgICAgTWVkaWFDb250cm9sVG9nZ2xlQ2xvc2VkQ2Fw
dGlvbnNCdXR0b25FbGVtZW50KiBtX3RvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uOworICAgIE1l
ZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQqIG1fcGFuZWxNdXRlQnV0dG9uOworICAg
IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQqIG1fdm9sdW1lU2xpZGVyOworICAgIE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVCdXR0b25FbGVtZW50KiBtX3ZvbHVtZVNsaWRlck11
dGVCdXR0b247CisgICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudCog
bV92b2x1bWVTbGlkZXJDb250YWluZXI7CisgICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRv
bkVsZW1lbnQqIG1fZnVsbFNjcmVlbkJ1dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
Vm9sdW1lTWluQnV0dG9uRWxlbWVudCogbV9mdWxsU2NyZWVuTWluVm9sdW1lQnV0dG9uOworICAg
IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJFbGVtZW50KiBtX2Z1bGxTY3JlZW5W
b2x1bWVTbGlkZXI7CisgICAgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVtZU1heEJ1dHRvbkVs
ZW1lbnQqIG1fZnVsbFNjcmVlbk1heFZvbHVtZUJ1dHRvbjsKKyAgICBNZWRpYUNvbnRyb2xQYW5l
bEVsZW1lbnQqIG1fcGFuZWw7CisKKyAgICBib29sIG1fb3BhcXVlOwogfTsKIAoraW5saW5lIE1l
ZGlhQ29udHJvbHMqIHRvTWVkaWFDb250cm9scyhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChu
b2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNZWRpYUNvbnRy
b2xzKj4obm9kZSk7Cit9CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggYjhhZDNkMzg0MjA3MmZkMTNkYmY3ODNlNzg4
MjMwOWY3MWQ2MDgwMi4uZjQxMjI5MTA1ZWUyNDRkZDViMTYxNjY4YzQ2YWE5OGIyYjhiMWFkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwCkBAIC02NywxMjggKzY3LDMzIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBjU2Vla1JlcGVhdERl
bGF5ID0gMC4xZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBjU3RlcFRpbWUgPSAwLjA3ZjsKIHN0YXRp
YyBjb25zdCBmbG9hdCBjU2Vla1RpbWUgPSAwLjJmOwogCi1pbmxpbmUgTWVkaWFDb250cm9sU2hh
ZG93Um9vdEVsZW1lbnQ6Ok1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWxlbWVudCkKLSAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgbWVkaWFF
bGVtZW50LT5kb2N1bWVudCgpKQotewotICAgIHNldFNoYWRvd0hvc3QobWVkaWFFbGVtZW50KTsK
LX0KLQotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudD4gTWVkaWFDb250
cm9sU2hhZG93Um9vdEVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQpCi17Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50PiBlbGVtZW50
ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50KG1lZGlhRWxlbWVu
dCkpOwotCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiByb290U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7Ci0gICAgcm9vdFN0eWxlLT5pbmhlcml0RnJvbShtZWRpYUVsZW1lbnQtPnJlbmRl
cmVyKCktPnN0eWxlKCkpOwotICAgIHJvb3RTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAg
cm9vdFN0eWxlLT5zZXRQb3NpdGlvbihSZWxhdGl2ZVBvc2l0aW9uKTsKLQotICAgIFJlbmRlck1l
ZGlhQ29udHJvbFNoYWRvd1Jvb3QqIHJlbmRlcmVyID0gbmV3IChtZWRpYUVsZW1lbnQtPnJlbmRl
cmVyKCktPnJlbmRlckFyZW5hKCkpIFJlbmRlck1lZGlhQ29udHJvbFNoYWRvd1Jvb3QoZWxlbWVu
dC5nZXQoKSk7Ci0gICAgcmVuZGVyZXItPnNldFN0eWxlKHJvb3RTdHlsZS5yZWxlYXNlKCkpOwot
Ci0gICAgZWxlbWVudC0+c2V0UmVuZGVyZXIocmVuZGVyZXIpOwotICAgIGVsZW1lbnQtPnNldEF0
dGFjaGVkKCk7Ci0gICAgZWxlbWVudC0+c2V0SW5Eb2N1bWVudCgpOwotCi0gICAgcmV0dXJuIGVs
ZW1lbnQucmVsZWFzZSgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50
OjpkZXRhY2goKQotewotICAgIEhUTUxEaXZFbGVtZW50OjpkZXRhY2goKTsKLSAgICAvLyBGSVhN
RTogUmVtb3ZlIG9uY2Ugc2hhZG93IERPTSB1c2VzIEVsZW1lbnQ6OnNldFNoYWRvd1Jvb3QoKS4K
LSAgICBzZXRTaGFkb3dIb3N0KDApOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIE1lZGlhQ29udHJvbEVsZW1lbnQ6Ok1lZGlhQ29udHJvbEVsZW1lbnQoSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50KQogICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBtZWRp
YUVsZW1lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQp
CiB7Ci0gICAgc2V0SW5Eb2N1bWVudCgpOwotfQotCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6
OmF0dGFjaFRvUGFyZW50KEVsZW1lbnQqIHBhcmVudCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJlIHdlIG1hZ2ljYWxseSBhZGRpbmcgfHRoaXN8
IHRvIHRoZSBET00gaGVyZT8KLSAgICAvLyAgICAgICAgV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcg
cGFyc2VyIEFQSSBtZXRob2RzIG91dHNpZGUgb2YgdGhlIHBhcnNlciEKLSAgICBwYXJlbnQtPnBh
cnNlckFkZENoaWxkKHRoaXMpOwogfQogCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0
ZSgpCitzdGF0aWMgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nKCkKIHsKLSAgICBpZiAocmVu
ZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB1
cGRhdGVTdHlsZSgpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzLCAoImRpc3Bs
YXkiKSk7CisgICAgcmV0dXJuIHM7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IE1lZGlh
Q29udHJvbEVsZW1lbnQ6OnN0eWxlRm9yRWxlbWVudCgpCi17Ci0gICAgQVNTRVJUKG1fbWVkaWFF
bGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gZG9j
dW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhpcywgbV9tZWRpYUVs
ZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCksIHRydWUpOwotICAgIGlmICghc3R5bGUpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIHRleHQtZGVjb3JhdGlvbiBjYW4ndCBiZSBvdmVy
cmlkZWQgZnJvbSBDU1MuIFNvIHdlIGRvIGl0IGhlcmUuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzAxNQotICAgIHN0eWxlLT5zZXRUZXh0RGVj
b3JhdGlvbihURE5PTkUpOwotICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChU
RE5PTkUpOwotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi1ib29sIE1lZGlhQ29udHJvbEVsZW1l
bnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIEFTU0VSVChk
b2N1bWVudCgpLT5wYWdlKCkpOwotCi0gICAgcmV0dXJuIEhUTUxEaXZFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKHN0eWxlKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJl
cigpCi0gICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBkb2N1bWVudCgpLT5w
YWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoc3R5bGUtPmFwcGVh
cmFuY2UoKSwgbV9tZWRpYUVsZW1lbnQpKTsKLX0KLSAgICAKLXZvaWQgTWVkaWFDb250cm9sRWxl
bWVudDo6YXR0YWNoKCkKK3ZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6c2hvdygpCiB7Ci0gICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwotICAgIGlmICgh
c3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIG5lZWRzUmVuZGVyZXIgPSByZW5kZXJl
cklzTmVlZGVkKHN0eWxlLmdldCgpKTsKLSAgICBpZiAoIW5lZWRzUmVuZGVyZXIpCi0gICAgICAg
IHJldHVybjsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIobV9t
ZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnJlbmRlckFyZW5hKCksIHN0eWxlLmdldCgpKTsKLSAg
ICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyZXItPnNldFN0eWxl
KHN0eWxlLmdldCgpKTsKLSAgICBzZXRSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgaWYgKHBhcmVu
dE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgLy8gRmluZCBu
ZXh0IHNpYmxpbmcgd2l0aCBhIHJlbmRlcmVyIHRvIGRldGVybWluZSB3aGVyZSB0byBpbnNlcnQu
Ci0gICAgICAgIE5vZGUqIHNpYmxpbmcgPSBuZXh0U2libGluZygpOwotICAgICAgICB3aGlsZSAo
c2libGluZyAmJiAhc2libGluZy0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHNpYmxpbmcgPSBz
aWJsaW5nLT5uZXh0U2libGluZygpOwotICAgICAgICBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkt
PmFkZENoaWxkKHJlbmRlcmVyLCBzaWJsaW5nID8gc2libGluZy0+cmVuZGVyZXIoKSA6IDApOwot
ICAgIH0KLSAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
OworICAgIC8vIEZJWE1FOiBNYWtlIG1vcmUgZWZmaWNpZW50IDxodHRwOi8vd2Via2l0Lm9yZy9i
LzU4MTU3PgorICAgIHN0eWxlKCktPnJlbW92ZVByb3BlcnR5KGRpc3BsYXlTdHJpbmcoKSwgZWMp
OwogfQogCi12b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVN0eWxlKCkKK3ZvaWQgTWVk
aWFDb250cm9sRWxlbWVudDo6aGlkZSgpCiB7Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAh
bV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKTsKLSAgICBpZiAoIXN0eWxl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIG5lZWRzUmVuZGVyZXIgPSByZW5kZXJlcklz
TmVlZGVkKHN0eWxlLmdldCgpKSAmJiBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5k
ZXJlcigpOwotICAgIGlmIChyZW5kZXJlcigpICYmICFuZWVkc1JlbmRlcmVyKQotICAgICAgICBk
ZXRhY2goKTsKLSAgICBlbHNlIGlmICghcmVuZGVyZXIoKSAmJiBuZWVkc1JlbmRlcmVyKQotICAg
ICAgICBhdHRhY2goKTsKLSAgICBlbHNlIGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgIHJlbmRl
cmVyKCktPnNldFN0eWxlKHN0eWxlLmdldCgpKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBpZiB0aGVyZSBpcyBhbnkgaW5uZXJUZXh0IHJlbmRlcmVyLCBpdCBpcyB1cGRhdGVkIGFzIHdl
bGwuCi0gICAgICAgIGlmIChmaXJzdENoaWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5yZW5kZXJlcigp
KQotICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5yZW5kZXJlcigpLT5zZXRTdHlsZShzdHlsZS5n
ZXQoKSk7Ci0gICAgfQorICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgLy8gRklYTUU6IE1ha2Ug
bW9yZSBlZmZpY2llbnQgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxNTc+CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIG5vbmUsICgibm9uZSIpKTsKKyAgICBzdHlsZSgpLT5zZXRQcm9w
ZXJ0eShkaXNwbGF5U3RyaW5nKCksIG5vbmUsIGVjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtMjIzLDIwICsxMjgsOSBAQCBpbmxpbmUgTWVkaWFDb250cm9sVGlt
ZWxpbmVDb250YWluZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1l
bgogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudD4gTWVk
aWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVtZW50OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9s
VGltZWxpbmVDb250YWluZXJFbGVtZW50KG1lZGlhRWxlbWVudCkpOwotfQotCi1ib29sIE1lZGlh
Q29udHJvbFRpbWVsaW5lQ29udGFpbmVyRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJT
dHlsZSogc3R5bGUpCi17Ci0gICAgaWYgKCFNZWRpYUNvbnRyb2xFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKHN0eWxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWx3YXlzIHNo
b3cgdGhlIHRpbWVsaW5lIGlmIHRoZSB0aGVtZSBkb2Vzbid0IHVzZSBzdGF0dXMgZGlzcGxheSAo
TWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBmb3IgaW5zdGFuY2UpLgotICAgIGlmICghZG9j
dW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT51c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVt
ZW50KCktPmR1cmF0aW9uKCk7Ci0gICAgcmV0dXJuICFpc25hbihkdXJhdGlvbikgJiYgIWlzaW5m
KGR1cmF0aW9uKTsKKyAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVDb250YWluZXJFbGVt
ZW50PiBlbGVtZW50ID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
RWxlbWVudChtZWRpYUVsZW1lbnQpKTsKKyAgICBlbGVtZW50LT5oaWRlKCk7CisgICAgcmV0dXJu
IGVsZW1lbnQucmVsZWFzZSgpOwogfQogCiBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBNZWRpYUNv
bnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkgY29uc3QKQEAgLTI4
NiwxMyArMTgwLDE0IEBAIHZvaWQgUmVuZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI6Omxh
eW91dCgpCiAKIGlubGluZSBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50
OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCkKICAgICA6IE1lZGlhQ29udHJvbEVsZW1lbnQobWVkaWFFbGVtZW50
KQotICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCiB7CiB9CiAKIFBhc3NSZWZQdHI8TWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVy
Q29udGFpbmVyRWxlbWVudDo6Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRh
aW5lckVsZW1lbnQobWVkaWFFbGVtZW50KSk7CisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVt
ZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ+IGVsZW1lbnQgPSBhZG9wdFJlZihuZXcgTWVkaWFDb250
cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChtZWRpYUVsZW1lbnQpKTsKKyAgICBlbGVt
ZW50LT5oaWRlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwogfQogCiBSZW5kZXJP
YmplY3QqIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQpAQCAtMzAwLDI5ICsxOTUs
MjMgQEAgUmVuZGVyT2JqZWN0KiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmUKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVu
ZGVyTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudCgpCit2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGUgPSBNZWRpYUNvbnRyb2xFbGVtZW50OjpzdHlsZUZvckVsZW1lbnQoKTsK
LSAgICBzdHlsZS0+c2V0UG9zaXRpb24oQWJzb2x1dGVQb3NpdGlvbik7Ci0gICAgc3R5bGUtPnNl
dERpc3BsYXkobV9pc1Zpc2libGUgPyBCTE9DSyA6IE5PTkUpOwotICAgIHJldHVybiBzdHlsZTsK
LX0KKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+dHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgICAgICByZXR1cm47CiAKLXZvaWQgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6c2V0VmlzaWJsZShib29sIHZpc2li
bGUpCi17Ci0gICAgaWYgKHZpc2libGUgPT0gbV9pc1Zpc2libGUpCisgICAgLy8gUG9vciBtYW4n
cyBtb3VzZWxlYXZlIGV2ZW50IGRldGVjdGlvbi4KKyAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50
ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKKyAgICBpZiAoIW1vdXNlRXZlbnQt
PnJlbGF0ZWRUYXJnZXQoKSB8fCAhbW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpLT50b05vZGUo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faXNWaXNpYmxlID0gdmlzaWJsZTsKLX0KIAotYm9v
bCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpoaXRUZXN0KGNvbnN0
IEludFBvaW50JiBhYnNQb2ludCkKLXsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlcigpLT50
aGVtZSgpLT5oaXRUZXN0TWVkaWFDb250cm9sUGFydChyZW5kZXJlcigpLCBhYnNQb2ludCk7Cisg
ICAgaWYgKHRoaXMtPmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93RE9NKG1vdXNlRXZlbnQtPnJlbGF0
ZWRUYXJnZXQoKS0+dG9Ob2RlKCkpKQorICAgICAgICByZXR1cm47CiAKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgaGlkZSgpOwogfQogCisKIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIE1lZGlhQ29u
dHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRpc3BsYXlUeXBlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXI7CkBAIC0zNDQsMTMgKzIzMywx
MyBAQCBpbmxpbmUgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6Ok1lZGlhQ29udHJv
bFN0YXR1c0Rpc3BsYXlFbGVtZW50KEhUTUxNZQogCiBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFN0
YXR1c0Rpc3BsYXlFbGVtZW50PiBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudDo6Y3Jl
YXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KG1lZGlhRWxlbWVudCkpOwor
ICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudD4gZWxlbWVudCA9IGFk
b3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5RWxlbWVudChtZWRpYUVsZW1lbnQp
KTsKKyAgICBlbGVtZW50LT5oaWRlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwog
fQogCiB2b2lkIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50Ojp1cGRhdGUoKQogewot
ICAgIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZSgpOwotCiAgICAgLy8gR2V0IHRoZSBuZXcg
c3RhdGUgdGhhdCB3ZSdsbCBoYXZlIHRvIGRpc3BsYXkuCiAgICAgU3RhdGVCZWluZ0Rpc3BsYXll
ZCBuZXdTdGF0ZVRvRGlzcGxheSA9IE5vdGhpbmc7CiAKQEAgLTM1OSwxMiArMjQ4LDE4IEBAIHZv
aWQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnVwZGF0ZSgpCiAgICAgZWxzZSBp
ZiAobWVkaWFFbGVtZW50KCktPm1vdmllTG9hZFR5cGUoKSA9PSBNZWRpYVBsYXllcjo6TGl2ZVN0
cmVhbSkKICAgICAgICAgbmV3U3RhdGVUb0Rpc3BsYXkgPSBMaXZlQnJvYWRjYXN0OwogCi0gICAg
Ly8gUHJvcGFnYXRlIG9ubHkgaWYgbmVlZGVkLgogICAgIGlmIChuZXdTdGF0ZVRvRGlzcGxheSA9
PSBtX3N0YXRlQmVpbmdEaXNwbGF5ZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3N0YXRlQmVp
bmdEaXNwbGF5ZWQgPSBuZXdTdGF0ZVRvRGlzcGxheTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZTsK
KworICAgIGlmIChtX3N0YXRlQmVpbmdEaXNwbGF5ZWQgPT0gTm90aGluZykKKyAgICAgICAgc2hv
dygpOworICAgIGVsc2UgaWYgKG5ld1N0YXRlVG9EaXNwbGF5ID09IE5vdGhpbmcpCisgICAgICAg
IGhpZGUoKTsKKworICAgIG1fc3RhdGVCZWluZ0Rpc3BsYXllZCA9IG5ld1N0YXRlVG9EaXNwbGF5
OworCiAgICAgc3dpdGNoIChtX3N0YXRlQmVpbmdEaXNwbGF5ZWQpIHsKICAgICBjYXNlIE5vdGhp
bmc6CiAgICAgICAgIHNldElubmVyVGV4dCgiIiwgZSk7CkBAIC0zNzgsMTQgKzI3Myw2IEBAIHZv
aWQgTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheUVsZW1lbnQ6OnVwZGF0ZSgpCiAgICAgfQogfQog
Ci1ib29sIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBpZiAoIU1lZGlhQ29udHJvbEVsZW1lbnQ6OnJl
bmRlcmVySXNOZWVkZWQoc3R5bGUpIHx8ICFkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnVz
ZXNNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBmbG9hdCBkdXJhdGlvbiA9IG1lZGlhRWxlbWVudCgpLT5kdXJhdGlvbigpOwotICAgIHJldHVy
biAoaXNuYW4oZHVyYXRpb24pIHx8IGlzaW5mKGR1cmF0aW9uKSk7Ci19Ci0KIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlIE1lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50OjpkaXNwbGF5VHlw
ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIE1lZGlhU3RhdHVzRGlzcGxheTsKQEAgLTQwNiw5NiAr
MjkzLDE5IEBAIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVuCiB7CiB9CiAKLXZvaWQgTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50OjphdHRhY2hUb1BhcmVudChFbGVtZW50KiBwYXJlbnQpCit2b2lkIE1l
ZGlhQ29udHJvbElucHV0RWxlbWVudDo6c2hvdygpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgY29k
ZSBzZWVtcyB2ZXJ5IHdyb25nLiAgV2h5IGFyZSB3ZSBtYWdpY2FsbHkgYWRkaW5nIHx0aGlzfCB0
byB0aGUgRE9NIGhlcmU/Ci0gICAgLy8gICAgICAgIFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIHBh
cnNlciBBUEkgbWV0aG9kcyBvdXRzaWRlIG9mIHRoZSBwYXJzZXIhCi0gICAgcGFyZW50LT5wYXJz
ZXJBZGRDaGlsZCh0aGlzKTsKLX0KLQotdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVw
ZGF0ZSgpCi17Ci0gICAgdXBkYXRlRGlzcGxheVR5cGUoKTsKLSAgICBpZiAocmVuZGVyZXIoKSkK
LSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB1cGRhdGVTdHls
ZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQ6OnN0eWxlRm9yRWxlbWVudCgpCi17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIDAsIHRydWUpOwotfQotCi1ib29sIE1lZGlh
Q29udHJvbElucHV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUp
Ci17Ci0gICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7Ci0KLSAgICByZXR1cm4gSFRNTElu
cHV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSkgJiYgcGFyZW50Tm9kZSgpICYmIHBh
cmVudE5vZGUoKS0+cmVuZGVyZXIoKQotICAgICAgICAmJiAoIXN0eWxlLT5oYXNBcHBlYXJhbmNl
KCkgfHwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRpYUNvbnRy
b2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1lZGlhRWxlbWVudCgpKSk7CisgICAgRXhjZXB0
aW9uQ29kZSBlYzsKKyAgICBzdHlsZSgpLT5yZW1vdmVQcm9wZXJ0eShkaXNwbGF5U3RyaW5nKCks
IGVjKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmF0dGFjaCgpCit2b2lk
IE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6aGlkZSgpCiB7Ci0gICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBzdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBib29sIG5lZWRzUmVuZGVyZXIgPSByZW5kZXJlcklzTmVlZGVk
KHN0eWxlLmdldCgpKTsKLSAgICBpZiAoIW5lZWRzUmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIobWVkaWFFbGVtZW50
KCktPnJlbmRlcmVyKCktPnJlbmRlckFyZW5hKCksIHN0eWxlLmdldCgpKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyZXItPnNldFN0eWxlKHN0eWxlLmdl
dCgpKTsKLSAgICBzZXRSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgaWYgKHBhcmVudE5vZGUoKSAm
JiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgLy8gRmluZCBuZXh0IHNpYmxp
bmcgd2l0aCBhIHJlbmRlcmVyIHRvIGRldGVybWluZSB3aGVyZSB0byBpbnNlcnQuCi0gICAgICAg
IE5vZGUqIHNpYmxpbmcgPSBuZXh0U2libGluZygpOwotICAgICAgICB3aGlsZSAoc2libGluZyAm
JiAhc2libGluZy0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLT5u
ZXh0U2libGluZygpOwotICAgICAgICBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCktPmFkZENoaWxk
KHJlbmRlcmVyLCBzaWJsaW5nID8gc2libGluZy0+cmVuZGVyZXIoKSA6IDApOwotICAgIH0gIAot
ICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIE1l
ZGlhQ29udHJvbElucHV0IGNpcmN1bXZlbnRzIHRoZSBub3JtYWwgYXR0YWNobWVudAotICAgIC8v
IGFuZCBzdHlsZSByZWNhbGMgY3ljbGUgYW5kIHRodXMgd2UgbmVlZCB0byBhZGQgZXh0cmEgbG9n
aWMgdG8gYmUgYXdhcmUgb2YKLSAgICAvLyB0aGUgc2hhZG93IERPTS4gUmVtb3ZlIHRoaXMgb25j
ZSBhbGwgbWVkaWEgY29udHJvbHMgYXJlIHRyYW5zaXRpb25lZCB0byB1c2UgdGhlIHJlZ3VsYXIK
LSAgICAvLyBzdHlsZSBjYWxjdWxhdGlvbi4KLSAgICBpZiAoTm9kZSogc2hhZG93Tm9kZSA9IHNo
YWRvd1Jvb3QoKSkKLSAgICAgICAgc2hhZG93Tm9kZS0+YXR0YWNoKCk7Ci19Ci0KLXZvaWQgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50Ojp1cGRhdGVTdHlsZSgpCi17Ci0gICAgaWYgKCFtZWRpYUVs
ZW1lbnQoKSB8fCAhbWVkaWFFbGVtZW50KCktPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCk7
Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgbmVlZHNS
ZW5kZXJlciA9IHJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpICYmIHBhcmVudE5vZGUoKSAm
JiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYgIW5lZWRz
UmVuZGVyZXIpCi0gICAgICAgIGRldGFjaCgpOwotICAgIGVsc2UgaWYgKCFyZW5kZXJlcigpICYm
IG5lZWRzUmVuZGVyZXIpCi0gICAgICAgIGF0dGFjaCgpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVy
KCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxlKHN0eWxlLmdldCgpKTsKLQotICAgIC8v
IEZJWE1FOiBDdXJyZW50bHksIE1lZGlhQ29udHJvbElucHV0IGNpcmN1bXZlbnRzIHRoZSBub3Jt
YWwgYXR0YWNobWVudAotICAgIC8vIGFuZCBzdHlsZSByZWNhbGMgY3ljbGUgYW5kIHRodXMgd2Ug
bmVlZCB0byBhZGQgZXh0cmEgbG9naWMgdG8gYmUgYXdhcmUgb2YKLSAgICAvLyB0aGUgc2hhZG93
IERPTS4gUmVtb3ZlIHRoaXMgb25jZSBhbGwgbWVkaWEgY29udHJvbHMgYXJlIHRyYW5zaXRpb25l
ZCB0byB1c2UKLSAgICAvLyB0aGUgbmV3IHNoYWRvdyBET00uCi0gICAgaWYgKE5vZGUqIHNoYWRv
d05vZGUgPSBzaGFkb3dSb290KCkpCi0gICAgICAgIHNoYWRvd05vZGUtPnJlY2FsY1N0eWxlKE5v
ZGU6OkZvcmNlKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBub25lLCAoIm5vbmUiKSk7CisgICAgc3R5bGUoKS0+c2V0UHJvcGVydHkoZGlz
cGxheVN0cmluZygpLCBub25lLCBlYyk7CiB9CiAKLWJvb2wgTWVkaWFDb250cm9sSW5wdXRFbGVt
ZW50OjpoaXRUZXN0KGNvbnN0IEludFBvaW50JiBhYnNQb2ludCkKLXsKLSAgICBpZiAocmVuZGVy
ZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHJl
dHVybiByZW5kZXJlcigpLT50aGVtZSgpLT5oaXRUZXN0TWVkaWFDb250cm9sUGFydChyZW5kZXJl
cigpLCBhYnNQb2ludCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19CiAKIHZvaWQgTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50OjpzZXREaXNwbGF5VHlwZShNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBk
aXNwbGF5VHlwZSkKIHsKQEAgLTUyMCw5ICszMzAsMTUgQEAgdm9pZCBNZWRpYUNvbnRyb2xNdXRl
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAg
IG1lZGlhRWxlbWVudCgpLT5zZXRNdXRlZCghbWVkaWFFbGVtZW50KCktPm11dGVkKCkpOwogICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CisKICAgICBIVE1MSW5wdXRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIH0KIAordm9pZCBNZWRpYUNvbnRy
b2xNdXRlQnV0dG9uRWxlbWVudDo6Y2hhbmdlZE11dGUoKQoreworICAgIHVwZGF0ZURpc3BsYXlU
eXBlKCk7Cit9CisKIHZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVwZGF0ZURp
c3BsYXlUeXBlKCkKIHsKICAgICBzZXREaXNwbGF5VHlwZShtZWRpYUVsZW1lbnQoKS0+bXV0ZWQo
KSA/IE1lZGlhVW5NdXRlQnV0dG9uIDogTWVkaWFNdXRlQnV0dG9uKTsKQEAgLTUzMCwxOCArMzQ2
LDI5IEBAIHZvaWQgTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OnVwZGF0ZURpc3BsYXlU
eXBlKCkKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgTWVkaWFD
b250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9u
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitpbmxpbmUgTWVkaWFDb250
cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudDo6TWVkaWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxl
bWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRy
b2xzKQogICAgIDogTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQobWVkaWFFbGVtZW50LCBN
ZWRpYU11dGVCdXR0b24pCisgICAgLCBtX2NvbnRyb2xzKGNvbnRyb2xzKQogewogfQogCi1QYXNz
UmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IE1lZGlhQ29udHJvbFBh
bmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQpCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IE1lZGlh
Q29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQsIE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQogewotICAgIFJlZlB0cjxNZWRp
YUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZihuZXcgTWVk
aWFDb250cm9sUGFuZWxNdXRlQnV0dG9uRWxlbWVudChtZWRpYUVsZW1lbnQpKTsKKyAgICBBU1NF
UlQoY29udHJvbHMpOworCisgICAgUmVmUHRyPE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVs
ZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25F
bGVtZW50KG1lZGlhRWxlbWVudCwgY29udHJvbHMpKTsKICAgICBidXR0b24tPnNldFR5cGUoImJ1
dHRvbiIpOwogICAgIHJldHVybiBidXR0b24ucmVsZWFzZSgpOwogfQogCit2b2lkIE1lZGlhQ29u
dHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJF
dmVudCkKKyAgICAgICAgbV9jb250cm9scy0+c2hvd1ZvbHVtZVNsaWRlcigpOworCisgICAgTWVk
aWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwor
fQorCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1l
bnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0
b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiIpKTsK
QEAgLTU1MSw3ICszNzgsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhQ29udHJvbFBhbmVs
TXV0ZUJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogaW5saW5lIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlck11dGVC
dXR0b25FbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJNdXRlQnV0dG9uRWxlbWVudChI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBNZWRpYUNvbnRyb2xNdXRlQnV0
dG9uRWxlbWVudChtZWRpYUVsZW1lbnQsIE1lZGlhVm9sdW1lU2xpZGVyTXV0ZUJ1dHRvbikKKyAg
ICA6IE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFNdXRl
QnV0dG9uKQogewogfQogCkBAIC01ODYsNiArNDEzLDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xQbGF5
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAg
bWVkaWFFbGVtZW50KCktPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICB1cGRhdGVEaXNwbGF5
VHlwZSgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAg
SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CkBAIC03MzksNiAr
NTY3LDcgQEAgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxl
bWVudD4gTWVkaWFDb250cm9sUmV0dXJuVG9SZWFsdGkKIHsKICAgICBSZWZQdHI8TWVkaWFDb250
cm9sUmV0dXJuVG9SZWFsdGltZUJ1dHRvbkVsZW1lbnQ+IGJ1dHRvbiA9IGFkb3B0UmVmKG5ldyBN
ZWRpYUNvbnRyb2xSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uRWxlbWVudChtZWRpYUVsZW1lbnQpKTsK
ICAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOworICAgIGJ1dHRvbi0+aGlkZSgpOwogICAg
IHJldHVybiBidXR0b24ucmVsZWFzZSgpOwogfQogCkBAIC03NjgsNiArNTk3LDcgQEAgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ+IE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3MKIHsKICAgICBSZWZQdHI8TWVkaWFDb250cm9sVG9nZ2xlQ2xvc2Vk
Q2FwdGlvbnNCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9s
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCkpOwogICAgIGJ1
dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7CisgICAgYnV0dG9uLT5oaWRlKCk7CiAgICAgcmV0dXJu
IGJ1dHRvbi5yZWxlYXNlKCk7CiB9CiAKQEAgLTc3Niw4ICs2MDYsMTAgQEAgdm9pZCBNZWRpYUNv
bnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGUKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tF
dmVudCkgewogICAgICAgICBtZWRpYUVsZW1lbnQoKS0+c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxl
KCFtZWRpYUVsZW1lbnQoKS0+Y2xvc2VkQ2FwdGlvbnNWaXNpYmxlKCkpOwogICAgICAgICBzZXRD
aGVja2VkKG1lZGlhRWxlbWVudCgpLT5jbG9zZWRDYXB0aW9uc1Zpc2libGUoKSk7CisgICAgICAg
IHVwZGF0ZURpc3BsYXlUeXBlKCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OwogICAgIH0KKwogICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOwogfQogCkBAIC03OTQsMTQgKzYyNiwxNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlh
Q29udHJvbFRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudDo6TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKK01lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6TWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250cm9s
cyogY29udHJvbHMpCiAgICAgOiBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQobWVkaWFFbGVtZW50
LCBNZWRpYVNsaWRlcikKKyAgICAsIG1fY29udHJvbHMoY29udHJvbHMpCiB7CiB9CiAKLVBhc3NS
ZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBNZWRpYUNvbnRyb2xUaW1lbGluZUVs
ZW1lbnQ6OmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitQYXNzUmVmUHRy
PE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50
OjpjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50LCBNZWRpYUNvbnRyb2xzKiBj
b250cm9scykKIHsKLSAgICBSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiB0aW1l
bGluZSA9IGFkb3B0UmVmKG5ldyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQobWVkaWFFbGVt
ZW50KSk7CisgICAgQVNTRVJUKGNvbnRyb2xzKTsKKworICAgIFJlZlB0cjxNZWRpYUNvbnRyb2xU
aW1lbGluZUVsZW1lbnQ+IHRpbWVsaW5lID0gYWRvcHRSZWYobmV3IE1lZGlhQ29udHJvbFRpbWVs
aW5lRWxlbWVudChtZWRpYUVsZW1lbnQsIGNvbnRyb2xzKSk7CiAgICAgdGltZWxpbmUtPnNldFR5
cGUoInJhbmdlIik7CiAgICAgdGltZWxpbmUtPnNldEF0dHJpYnV0ZShwcmVjaXNpb25BdHRyLCAi
ZmxvYXQiKTsKICAgICByZXR1cm4gdGltZWxpbmUucmVsZWFzZSgpOwpAQCAtODI2LDI4ICs2NjEs
MzAgQEAgdm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogCiAgICAgZmxvYXQgdGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQodmFsdWUoKS50b0RvdWJsZSgpKTsKICAgICBpZiAodGltZSAhPSBtZWRpYUVsZW1lbnQoKS0+
Y3VycmVudFRpbWUoKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBmaXJlZCAzIHRpbWVz
IG9uIGV2ZXJ5IGNsaWNrLiBXZSBzaG91bGQgbm90IGJlIGRvaW5nIHRoYXQgPGh0dHA6L3dlYmtp
dC5vcmcvYi81ODE2MD4uCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIG1lZGlh
RWxlbWVudCgpLT5zZXRDdXJyZW50VGltZSh0aW1lLCBlYyk7CiAgICAgfQogCiAgICAgUmVuZGVy
U2xpZGVyKiBzbGlkZXIgPSB0b1JlbmRlclNsaWRlcihyZW5kZXJlcigpKTsKICAgICBpZiAoc2xp
ZGVyICYmIHNsaWRlci0+aW5EcmFnTW9kZSgpKQotICAgICAgICB0b1JlbmRlck1lZGlhKG1lZGlh
RWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Y29udHJvbHMoKS0+dXBkYXRlVGltZURpc3BsYXkoKTsK
KyAgICAgICAgbV9jb250cm9scy0+dXBkYXRlVGltZURpc3BsYXkoKTsKIAogICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCiAgICAgICAgIG1lZGlhRWxl
bWVudCgpLT5lbmRTY3J1YmJpbmcoKTsKIH0KIAotdm9pZCBNZWRpYUNvbnRyb2xUaW1lbGluZUVs
ZW1lbnQ6OnVwZGF0ZShib29sIHVwZGF0ZUR1cmF0aW9uKSAKK3ZvaWQgTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpzZXRQb3NpdGlvbihmbG9hdCBjdXJyZW50VGltZSkgCiB7Ci0gICAgaWYg
KHVwZGF0ZUR1cmF0aW9uKSB7Ci0gICAgICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50
KCktPmR1cmF0aW9uKCk7Ci0gICAgICAgIHNldEF0dHJpYnV0ZShtYXhBdHRyLCBTdHJpbmc6Om51
bWJlcihpc2Zpbml0ZShkdXJhdGlvbikgPyBkdXJhdGlvbiA6IDApKTsKLSAgICB9Ci0gICAgc2V0
VmFsdWUoU3RyaW5nOjpudW1iZXIobWVkaWFFbGVtZW50KCktPmN1cnJlbnRUaW1lKCkpKTsKLSAg
ICBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnVwZGF0ZSgpOworICAgIHNldFZhbHVlKFN0cmlu
Zzo6bnVtYmVyKGN1cnJlbnRUaW1lKSk7CiB9CiAKK3ZvaWQgTWVkaWFDb250cm9sVGltZWxpbmVF
bGVtZW50OjpzZXREdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3sKKyAgICBzZXRBdHRyaWJ1dGUo
bWF4QXR0ciwgU3RyaW5nOjpudW1iZXIoaXNmaW5pdGUoZHVyYXRpb24pID8gZHVyYXRpb24gOiAw
KSk7Cit9CisKKwogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1l
bnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0
b21pY1N0cmluZywgaWQsICgiLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSIpKTsKQEAg
LTg5MywxMiArNzMwLDEwIEBAIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgfQogfQogCi12b2lkIE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6OnVwZGF0ZSgpCit2b2lkIE1lZGlhQ29udHJvbFZv
bHVtZVNsaWRlckVsZW1lbnQ6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCiB7Ci0gICAgZmxvYXQg
dm9sdW1lID0gbWVkaWFFbGVtZW50KCktPnZvbHVtZSgpOwogICAgIGlmICh2YWx1ZSgpLnRvRmxv
YXQoKSAhPSB2b2x1bWUpCiAgICAgICAgIHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZvbHVtZSkp
OwotICAgIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6dXBkYXRlKCk7CiB9CiAKIGNvbnN0IEF0
b21pY1N0cmluZyYgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2hhZG93UHNldWRv
SWQoKSBjb25zdApAQCAtOTEwLDcgKzc0NSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBpbmxpbmUgTWVkaWFDb250cm9sRnVsbHNjcmVl
blZvbHVtZVNsaWRlckVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVTbGlkZXJF
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLTogTWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyRWxlbWVudChtZWRpYUVsZW1lbnQpCisgICAgOiBNZWRpYUNvbnRyb2xWb2x1bWVT
bGlkZXJFbGVtZW50KG1lZGlhRWxlbWVudCkKIHsKIH0KIApAQCAtOTMyLDE1ICs3NjcsMTkgQEAg
Y29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuVm9sdW1lU2xpZGVyRWxl
bWVudDo6c2hhZG93UHNldWRvSWQoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLWlubGluZSBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6TWVkaWFDb250
cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
KQoraW5saW5lIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpNZWRpYUNvbnRy
b2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQs
IE1lZGlhQ29udHJvbHMqIGNvbnRyb2xzKQogICAgIDogTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
KG1lZGlhRWxlbWVudCwgTWVkaWFGdWxsc2NyZWVuQnV0dG9uKQorICAgICwgbV9jb250cm9scyhj
b250cm9scykKIHsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9u
RWxlbWVudD4gTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCitQYXNzUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxz
Y3JlZW5CdXR0b25FbGVtZW50PiBNZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudDo6
Y3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgTWVkaWFDb250cm9scyogY29u
dHJvbHMpCiB7Ci0gICAgUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50
PiBidXR0b24gPSBhZG9wdFJlZihuZXcgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRvbkVsZW1l
bnQobWVkaWFFbGVtZW50KSk7CisgICAgQVNTRVJUKGNvbnRyb2xzKTsKKworICAgIFJlZlB0cjxN
ZWRpYUNvbnRyb2xGdWxsc2NyZWVuQnV0dG9uRWxlbWVudD4gYnV0dG9uID0gYWRvcHRSZWYobmV3
IE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50KG1lZGlhRWxlbWVudCwgY29udHJv
bHMpKTsKICAgICBidXR0b24tPnNldFR5cGUoImJ1dHRvbiIpOworICAgIGJ1dHRvbi0+aGlkZSgp
OwogICAgIHJldHVybiBidXR0b24ucmVsZWFzZSgpOwogfQogCkBAIC05NTQsMTAgKzc5MywxMyBA
QCB2b2lkIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgLy8gdmlkZW8gaW1wbGVtZW50YXRpb24gd2l0
aG91dCByZXF1aXJpbmcgdGhlbSB0byBpbXBsZW1lbnQgdGhlaXIgb3duIGZ1bGwgCiAgICAgICAg
IC8vIHNjcmVlbiBiZWhhdmlvci4KICAgICAgICAgaWYgKGRvY3VtZW50KCktPnNldHRpbmdzKCkg
JiYgZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+ZnVsbFNjcmVlbkVuYWJsZWQoKSkgewotICAgICAg
ICAgICAgaWYgKGRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpICYmIGRvY3VtZW50KCkt
PndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09IG1lZGlhRWxlbWVudCgpKQorICAg
ICAgICAgICAgaWYgKGRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpICYmIGRvY3VtZW50
KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09IG1lZGlhRWxlbWVudCgpKSB7
CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+d2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOwot
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fY29udHJvbHMtPmV4aXRlZEZ1bGxz
Y3JlZW4oKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbWVkaWFFbGVt
ZW50KCktPndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKDApOworICAgICAgICAgICAgICAgIG1fY29u
dHJvbHMtPmVudGVyZWRGdWxsc2NyZWVuKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZQogI2VuZGlmCiAgICAgICAgICAgICBtZWRpYUVsZW1lbnQoKS0+ZW50ZXJGdWxsc2NyZWVuKCk7
CkBAIC05NzUsNyArODE3LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYUNvbnRyb2xGdWxs
c2NyZWVuQnV0dG9uRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBpbmxpbmUgTWVkaWFDb250cm9sRnVsbHNjcmVlblZvbHVt
ZU1pbkJ1dHRvbkVsZW1lbnQ6Ok1lZGlhQ29udHJvbEZ1bGxzY3JlZW5Wb2x1bWVNaW5CdXR0b25F
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLTogTWVkaWFDb250cm9sSW5w
dXRFbGVtZW50KG1lZGlhRWxlbWVudCwgTWVkaWFVbk11dGVCdXR0b24pCisgICAgOiBNZWRpYUNv
bnRyb2xJbnB1dEVsZW1lbnQobWVkaWFFbGVtZW50LCBNZWRpYVVuTXV0ZUJ1dHRvbikKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1l
bnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaApp
bmRleCA3NzExNmUzNzdmNWMzMWNlY2YwYTg2MTYzOTNkNDBjNjU5YmE1NjJmLi4xMWZmZjRhZDMw
ZTgxNTc5NDBmNDdjYjdmOTg2YjIwMGJhMmMyMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OwogY2xhc3MgRnJhbWU7CitjbGFzcyBNZWRpYUNv
bnRyb2xzOwogCiAvLyBNdXN0IG1hdGNoIFdlYktpdFN5c3RlbUludGVyZmFjZS5oCiBlbnVtIE1l
ZGlhQ29udHJvbEVsZW1lbnRUeXBlIHsKQEAgLTcxLDI0ICs3MiwxMiBAQCBlbnVtIE1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlIHsKIAogSFRNTE1lZGlhRWxlbWVudCogdG9QYXJlbnRNZWRpYUVsZW1l
bnQoUmVuZGVyT2JqZWN0Kik7CiAKLWNsYXNzIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50
IDogcHVibGljIEhUTUxEaXZFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudD4gY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQq
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgTWVk
aWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOwotfTsKLQogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBNZWRpYUNvbnRyb2xFbGVtZW50
IDogcHVibGljIEhUTUxEaXZFbGVtZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoKCk7Ci0gICAgdm9pZCBhdHRhY2hUb1BhcmVudChFbGVtZW50Kik7Ci0gICAgdm9pZCB1cGRh
dGUoKTsKLSAgICB2b2lkIHVwZGF0ZVN0eWxlKCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9p
ZCBzaG93KCk7CiAKICAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIGRpc3BsYXlU
eXBlKCkgY29uc3QgPSAwOwogCkBAIC05NywxMCArODYsNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6
CiAgICAgTWVkaWFDb250cm9sRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwotCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoKTsKLQogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCkBAIC0xMTksNyArMTA0LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07CiAKLQogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5l
ckVsZW1lbnQgOiBwdWJsaWMgTWVkaWFDb250cm9sRWxlbWVudCB7CkBAIC0xMjgsOSArMTEyLDkg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbFRpbWVsaW5lQ29udGFpbmVy
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVt
ZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNo
YWRvd1BzZXVkb0lkKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIE1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlIGRpc3BsYXlUeXBlKCkgY29uc3Q7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC0xMzksMTkgKzEyMywxMiBAQCBjbGFzcyBNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJDb250YWluZXJFbGVtZW50IDogcHVibGljIE1lZGlhQ29udHJvbEVsZW1lbnQgewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5l
ckVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CiAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudCgpOwotICAgIHZvaWQgc2V0VmlzaWJs
ZShib29sKTsKLSAgICBib29sIGlzVmlzaWJsZSgpIHsgcmV0dXJuIG1faXNWaXNpYmxlOyB9Ci0g
ICAgYm9vbCBoaXRUZXN0KGNvbnN0IEludFBvaW50JiBhYnNQb2ludCk7Ci0KIHByaXZhdGU6CiAg
ICAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50Kik7Ci0KICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVy
QXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7CiAgICAgdmlydHVhbCBNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5
VHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1
ZG9JZCgpIGNvbnN0OwotCi0gICAgYm9vbCBtX2lzVmlzaWJsZTsKIH07CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2Niw3ICsxNDMsNiBAQCBwcml2YXRlOgogICAgIE1l
ZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXlFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKIAogICAg
IHZpcnR1YWwgTWVkaWFDb250cm9sRWxlbWVudFR5cGUgZGlzcGxheVR5cGUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogCiAgICAgZW51
bSBTdGF0ZUJlaW5nRGlzcGxheWVkIHsgTm90aGluZywgTG9hZGluZywgTGl2ZUJyb2FkY2FzdCB9
OwpAQCAtMTc3LDExICsxNTMsOCBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xJbnB1
dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdm9pZCBh
dHRhY2hUb1BhcmVudChFbGVtZW50Kik7Ci0gICAgdm9pZCB1cGRhdGUoKTsKLSAgICB2b2lkIHVw
ZGF0ZVN0eWxlKCk7Ci0KLSAgICBib29sIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmIGFic1BvaW50
KTsKKyAgICB2b2lkIGhpZGUoKTsKKyAgICB2b2lkIHNob3coKTsKIAogICAgIE1lZGlhQ29udHJv
bEVsZW1lbnRUeXBlIGRpc3BsYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5VHlwZTsg
fQogCkBAIC0xOTMsMTEgKzE2Niw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldERpc3BsYXlU
eXBlKE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUqKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVt
ZW50KCk7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCkg
eyB9CkBAIC0yMTAsMTAgKzE3OCwxMiBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xN
dXRlQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewogcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAg
dm9pZCBjaGFuZ2VkTXV0ZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFDb250cm9sTXV0ZUJ1
dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCiAKIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUeXBlKCk7CkBAIC0yMjMsMTIgKzE5
MywxNSBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVt
ZW50IDogcHVibGljIE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xQYW5lbE11dGVCdXR0b25FbGVtZW50PiBj
cmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29u
dHJvbFBhbmVsTXV0ZUJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50KiwgTWVk
aWFDb250cm9scyopOwogCiBwcml2YXRlOgotICAgIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1dHRv
bkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOworICAgIE1lZGlhQ29udHJvbFBhbmVsTXV0ZUJ1
dHRvbkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJvbHMqKTsKIAorICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CisKKyAgICBNZWRpYUNvbnRy
b2xzKiBtX2NvbnRyb2xzOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMjUxLDExICsyMjQsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
Q29udHJvbFBsYXlCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKIAogcHJpdmF0ZToKICAgICBNZWRpYUNvbnRyb2xQ
bGF5QnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hh
ZG93UHNldWRvSWQoKSBjb25zdDsKIH07CiAKQEAgLTM0MCwxMSArMzEzLDExIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUb2dnbGVDbG9zZWRDYXB0aW9uc0J1
dHRvbkVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVE
aXNwbGF5VHlwZSgpOwogCiBwcml2YXRlOgogICAgIE1lZGlhQ29udHJvbFRvZ2dsZUNsb3NlZENh
cHRpb25zQnV0dG9uRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRGlzcGxheVR5cGUoKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
c2hhZG93UHNldWRvSWQoKSBjb25zdDsKIH07ICAgIAogCkBAIC0zNTIsMTUgKzMyNSwxOCBAQCBw
cml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQgOiBwdWJsaWMgTWVk
aWFDb250cm9sSW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50PiBjcmVhdGUo
SFRNTE1lZGlhRWxlbWVudCosIE1lZGlhQ29udHJvbHMqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0gICAgdm9pZCB1cGRhdGUoYm9vbCB1cGRhdGVE
dXJhdGlvbiA9IHRydWUpOworICAgIHZvaWQgc2V0UG9zaXRpb24oZmxvYXQpOworICAgIHZvaWQg
c2V0RHVyYXRpb24oZmxvYXQpOwogCiBwcml2YXRlOgotICAgIE1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgTWVkaWFDb250cm9sVGltZWxpbmVFbGVt
ZW50KEhUTUxNZWRpYUVsZW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7CiAKICAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKKworICAgIE1lZGlhQ29u
dHJvbHMqIG1fY29udHJvbHM7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0zNzAsNyArMzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ+IGNyZWF0ZShIVE1MTWVkaWFFbGVtZW50Kik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotICAgIHZvaWQg
dXBkYXRlKCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CkBAIC0z
ODMsMTQgKzM1OSwxNiBAQCBwcml2YXRlOgogCiBjbGFzcyBNZWRpYUNvbnRyb2xGdWxsc2NyZWVu
QnV0dG9uRWxlbWVudCA6IHB1YmxpYyBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVt
ZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhQ29udHJvbEZ1bGxzY3JlZW5CdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTE1lZGlhRWxlbWVu
dCosIE1lZGlhQ29udHJvbHMqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFDb250cm9sRnVsbHNjcmVlbkJ1dHRv
bkVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCopOworICAgIE1lZGlhQ29udHJvbEZ1bGxzY3JlZW5C
dXR0b25FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqLCBNZWRpYUNvbnRyb2xzKik7CiAKICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKKworICAg
IE1lZGlhQ29udHJvbHMqIG1fY29udHJvbHM7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC00NzQsMTUgKzQ1Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSBkaXNwbGF5VHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJNZWRpYUNvbnRyb2xTaGFkb3dS
b290IDogcHVibGljIFJlbmRlckJsb2NrIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJNZWRpYUNvbnRy
b2xTaGFkb3dSb290KEVsZW1lbnQqIGUpIDogUmVuZGVyQmxvY2soZSkgeyB9Ci0gICAgdm9pZCBz
ZXRQYXJlbnQoUmVuZGVyT2JqZWN0KiBwKSB7IFJlbmRlck9iamVjdDo6c2V0UGFyZW50KHApOyB9
Ci19OwotICAgIAorIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB9IC8vbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZWRpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCmlu
ZGV4IDY5ZDcxZWMyODZiZjkyYzEwNTU4Zjc5MDE0N2Y3Zjk1NWEzYWEyZWEuLjNmNTY4NjVjNGIz
YWQ3ZjFlMGEzMGRmYTQ5N2JhMzg1ZWYzZmM0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhLmNwcApAQCAtMjksMjIgKzI5LDE4IEBACiAjaW5jbHVkZSAiUmVuZGVyTWVk
aWEuaCIKIAogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUNv
bnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbHMuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyTWVkaWE6OlJlbmRl
ck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvKQogICAgIDogUmVuZGVySW1hZ2UodmlkZW8p
Ci0gICAgLCBtX2NvbnRyb2xzKG5ldyBNZWRpYUNvbnRyb2xzKHZpZGVvKSkKIHsKICAgICBzZXRJ
bWFnZVJlc291cmNlKFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsKIH0KIAogUmVuZGVy
TWVkaWE6OlJlbmRlck1lZGlhKEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvLCBjb25zdCBJbnRTaXpl
JiBpbnRyaW5zaWNTaXplKQogICAgIDogUmVuZGVySW1hZ2UodmlkZW8pCi0gICAgLCBtX2NvbnRy
b2xzKG5ldyBNZWRpYUNvbnRyb2xzKHZpZGVvKSkKIHsKICAgICBzZXRJbWFnZVJlc291cmNlKFJl
bmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKTsKICAgICBzZXRJbnRyaW5zaWNTaXplKGludHJp
bnNpY1NpemUpOwpAQCAtNTQsMzIgKzUwLDIxIEBAIFJlbmRlck1lZGlhOjp+UmVuZGVyTWVkaWEo
KQogewogfQogCi12b2lkIFJlbmRlck1lZGlhOjpkZXN0cm95KCkKLXsKLSAgICBtX2NvbnRyb2xz
LT5kZXN0cm95KCk7Ci0gICAgUmVuZGVySW1hZ2U6OmRlc3Ryb3koKTsKLX0KLQogSFRNTE1lZGlh
RWxlbWVudCogUmVuZGVyTWVkaWE6Om1lZGlhRWxlbWVudCgpIGNvbnN0CiB7IAogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obm9kZSgpKTsgCiB9CiAKLXZvaWQgUmVu
ZGVyTWVkaWE6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVySW1hZ2U6OnN0eWxlRGlkQ2hhbmdlKGRp
ZmYsIG9sZFN0eWxlKTsKLSAgICBtX2NvbnRyb2xzLT51cGRhdGVTdHlsZSgpOwotfQotCiB2b2lk
IFJlbmRlck1lZGlhOjpsYXlvdXQoKQogewogICAgIEludFNpemUgb2xkU2l6ZSA9IGNvbnRlbnRC
b3hSZWN0KCkuc2l6ZSgpOwogCiAgICAgUmVuZGVySW1hZ2U6OmxheW91dCgpOwogCi0gICAgUmVu
ZGVyQm94KiBjb250cm9sc1JlbmRlcmVyID0gbV9jb250cm9scy0+cmVuZGVyQm94KCk7CisgICAg
UmVuZGVyQm94KiBjb250cm9sc1JlbmRlcmVyID0gdG9SZW5kZXJCb3gobV9jaGlsZHJlbi5maXJz
dENoaWxkKCkpOwogICAgIGlmICghY29udHJvbHNSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwor
CiAgICAgSW50U2l6ZSBuZXdTaXplID0gY29udGVudEJveFJlY3QoKS5zaXplKCk7CiAgICAgaWYg
KG5ld1NpemUgPT0gb2xkU2l6ZSAmJiAhY29udHJvbHNSZW5kZXJlci0+bmVlZHNMYXlvdXQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtOTksMTEgKzg0LDYgQEAgdm9pZCBSZW5kZXJNZWRpYTo6bGF5
b3V0KCkKICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKIH0KIAotdm9pZCBSZW5kZXJNZWRpYTo6dXBk
YXRlRnJvbUVsZW1lbnQoKQotewotICAgIG1fY29udHJvbHMtPnVwZGF0ZSgpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lZGlhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWEuaAppbmRleCA3NjU4ZWY2YzE4NGMzOTgzMmU0YzVkODJmOGY4N2E1YjY1MGI1MDMxLi43
OGUzNmM0Y2ViYzkyMzliYTU3NGZkMzUzZDA4NDVhY2RkZGI1ODg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWEuaApAQCAtMzMsNyArMzMsNiBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwotY2xhc3MgTWVkaWFDb250cm9sczsKIAog
Y2xhc3MgUmVuZGVyTWVkaWEgOiBwdWJsaWMgUmVuZGVySW1hZ2UgewogcHVibGljOgpAQCAtNDUs
OSArNDQsNiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigp
IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQoKSBjb25zdDsKLSAgICBNZWRpYUNvbnRyb2xzKiBjb250cm9scygpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CkBAIC01NiwxOCArNTIsMTIgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4g
Y2hpbGRyZW4oKTsgfQogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2
aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJNZWRpYSI7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNNZWRpYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLQotICAgIHZpcnR1YWwgdm9pZCBzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0K
ICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGb3JjZWRTdHlsZVJlY2FsY1Byb3BhZ2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgT3duUHRyPE1lZGlhQ29udHJvbHM+IG1fY29u
dHJvbHM7CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiB9OwogCkBAIC03
NywxMSArNjcsNiBAQCBpbmxpbmUgUmVuZGVyTWVkaWEqIHRvUmVuZGVyTWVkaWEoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlck1lZGlhKj4ob2JqZWN0
KTsKIH0KIAotaW5saW5lIE1lZGlhQ29udHJvbHMqIFJlbmRlck1lZGlhOjpjb250cm9scygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udHJvbHMuZ2V0KCk7Ci19Ci0KIC8vIFRoaXMgd2lsbCBj
YXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KIHZvaWQgdG9SZW5kZXJNZWRp
YShjb25zdCBSZW5kZXJNZWRpYSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwCmluZGV4IDcxZmNhOTE0YTk3
ODVjYzg2NDc5ZDY2OGNlMzQzNDViNTM2NDRhZmYuLjQwZWU5YjBhYjhhM2E2OThhZGM0MDEyMTYx
MWQ3YTYyNDBhMDQ0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwCkBAIC0yNDIsMjggKzI0Miw2IEBAIHN0
YXRpYyBib29sIHBhaW50TWVkaWFUaW1lbGluZUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVy
TWVkaWFDb250cm9sc0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRy
b2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGUpOwotCi0gICAg
c3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBNZWRpYU11dGVCdXR0b25QYXJ0OgotICAgIGNhc2Ug
TWVkaWFQbGF5QnV0dG9uUGFydDoKLSAgICBjYXNlIE1lZGlhU2xpZGVyUGFydDoKLSAgICBjYXNl
IE1lZGlhU2xpZGVyVGh1bWJQYXJ0OgotICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJDb250YWlu
ZXJQYXJ0OgotICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgotICAgIGNhc2UgTWVkaWFW
b2x1bWVTbGlkZXJUaHVtYlBhcnQ6Ci0gICAgY2FzZSBNZWRpYUNvbnRyb2xzQmFja2dyb3VuZFBh
cnQ6Ci0gICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1lUGFydDoKLSAgICBjYXNlIE1lZGlhVGltZVJl
bWFpbmluZ1BhcnQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IDsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIFJlbmRlck1lZGlhQ29udHJv
bHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlw
ZSBwYXJ0LCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgK
aW5kZXggMDYwYTlkNDRiZGI3YmU3NTQyNWViOGMzODY5NjEyNGNjMzNmNjYxZC4uODk1YWM0Mzli
MDJkOTkxOGIzNTFiODYyMGUwMjNjZTkxMWIxZDA1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaApAQCAtMzYsNyAr
MzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwogY2xh
c3MgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgYm9v
bCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBFbGVtZW50Kik7CiAg
ICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
ICAgIHN0YXRpYyB2b2lkIGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCop
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4IGQyMTg2
YTcyZTEzN2JlMzdhNmEzZmJhMjg3MGRiYWQ5MzI4YTQzMWYuLjhkZTE4NzhmOGIxMmVjNjEwMTBh
NTYzNTg5YzdjNTdlYjRhMGE1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcApAQCAtNDgxLDMzICs0ODEsNiBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludERlY29y
YXRpb25zKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiB9CiAK
ICNpZiBFTkFCTEUoVklERU8pCi1ib29sIFJlbmRlclRoZW1lOjpoaXRUZXN0TWVkaWFDb250cm9s
UGFydChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFBvaW50JiBhYnNQb2ludCkKLXsKLSAgICBp
ZiAoIW8tPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQg
bG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2NhbChhYnNQb2ludCwgZmFsc2UsIHRydWUpOyAg
Ly8gcmVzcGVjdCB0cmFuc2Zvcm1zCi0gICAgcmV0dXJuIHRvUmVuZGVyQm94KG8pLT5ib3JkZXJC
b3hSZWN0KCkuY29udGFpbnMocm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZTo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBw
YXJ0LCBFbGVtZW50KiBlKQotewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihlKTsKLSAgICBzd2l0Y2ggKHBhcnQpIHsK
LSAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRpYUVsZW1l
bnQtPmhhc0F1ZGlvKCk7Ci0gICAgY2FzZSBNZWRpYVJld2luZEJ1dHRvblBhcnQ6Ci0gICAgICAg
IHJldHVybiBtZWRpYUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSAhPSBNZWRpYVBsYXllcjo6TGl2
ZVN0cmVhbTsKLSAgICBjYXNlIE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvblBhcnQ6Ci0gICAg
ICAgIHJldHVybiBtZWRpYUVsZW1lbnQtPm1vdmllTG9hZFR5cGUoKSA9PSBNZWRpYVBsYXllcjo6
TGl2ZVN0cmVhbTsKLSAgICBjYXNlIE1lZGlhRnVsbHNjcmVlbkJ1dHRvblBhcnQ6Ci0gICAgICAg
IHJldHVybiBtZWRpYUVsZW1lbnQtPnN1cHBvcnRzRnVsbHNjcmVlbigpOwotICAgIGNhc2UgTWVk
aWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBtZWRpYUVs
ZW1lbnQtPmhhc0Nsb3NlZENhcHRpb25zKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotfQogCiBTdHJpbmcgUmVuZGVyVGhlbWU6OmZvcm1hdE1lZGlhQ29udHJv
bHNUaW1lKGZsb2F0IHRpbWUpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5oCmluZGV4IDM0YTMzMTg4ODJlNmNhM2Y3MTA2ZWM0ZTUxMmJiMTlkNGNhYjg5YTAuLjgz
ODQ2NDQ3M2RiMGM2YmVlMmJiNzkyM2Y4ODk1ZDE5Mjc3Yzk1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCkBAIC0xODEsOSArMTgxLDEwIEBAIHB1YmxpYzoKIAogI2lm
IEVOQUJMRShWSURFTykKICAgICAvLyBNZWRpYSBjb250cm9scwotICAgIHZpcnR1YWwgYm9vbCBo
aXRUZXN0TWVkaWFDb250cm9sUGFydChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQb2ludCYgYWJz
UG9pbnQpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENv
bnRyb2xQYXJ0LCBFbGVtZW50Kik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ2xvc2VkQ2Fw
dGlvbmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhc093
bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFN0YXR1c0Rpc3BsYXkoKSB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB1c2VzTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgZG91YmxlIG1lZGlh
Q29udHJvbHNGYWRlSW5EdXJhdGlvbigpIHsgcmV0dXJuIDAuMTsgfQogICAgIHZpcnR1YWwgZG91
YmxlIG1lZGlhQ29udHJvbHNGYWRlT3V0RHVyYXRpb24oKSB7IHJldHVybiAwLjM7IH0KICAgICB2
aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShmbG9hdCB0aW1lKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
TWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5o
CmluZGV4IDBjMzRmNmQ0ODU3ZmI0ODE5ODI0ZWZkZDU5MDc5N2ZiMWY4ZjEyZGIuLmRjYjIzZGRl
NTNhNmFjN2NhZjlmMTkwNGI4Zjg1MzY2NWRlOTUwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaApAQCAtMzgsNyArMzgsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzQmFj
a2dyb3VuZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBh
cnQsIEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KCk7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHZpcnR1YWwgU3RyaW5n
IGV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKQEAgLTUwLDcgKzQ5LDcgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgSW50
UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3Qg
SW50U2l6ZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCB1c2VzTWVkaWFDb250cm9sU3RhdHVz
RGlzcGxheSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzT3duRGlz
YWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCB1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy5tbQppbmRleCAwMzcxZjI0ZGU0YzkzYTJhZjhmYWIyNWQ0ZDYwMjBmMTQxZjIzOWE0
Li5lNGExMGFlYTYzZjg5ODljMGNkNjRjYTkxYzJiNjQ1MDJlYjUxMjBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQpAQCAtMTA1
LDExICsxMDUsNiBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdE1lZGlhU2xp
ZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW06OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKG8pOwogfQogCi1ib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJv
bFBhcnQgcGFydCwgRWxlbWVudCogZSkKLXsKLSAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9s
c0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHBhcnQsIGUpOwotfQotCiBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1l
ZGlhQ29udHJvbHNQYXJ0KE1lZGlhUGxheUJ1dHRvbiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
U2tpYS5jcHAKaW5kZXggOTY5MTg3NjZmMjBhODUzOGM0NGY2N2Q4ZGVmMDZkOGE5NjcxMzg2Ny4u
Y2FmYzM0ZDMxMmUxMjkxZTc3NmM5ZTljM2QyMTA0YWJlNDhkOWRlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCkBAIC01
MDEsMTMgKzUwMSw2IEBAIGludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zCiAgICAgcmV0dXJuIG1lbnVM
aXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBCb3R0b21QYWRkaW5nKTsKIH0KIAotI2lmIEVOQUJM
RShWSURFTykKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNob3VsZFJlbmRlck1lZGlh
Q29udHJvbFBhcnQoQ29udHJvbFBhcnQgcGFydCwgRWxlbWVudCogZSkKLXsKLSAgICByZXR1cm4g
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0
KHBhcnQsIGUpOwotfQotI2VuZGlmCi0KIC8vIHN0YXRpYwogdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250U2l6ZSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgKaW5kZXggYmYw
YWYzNDE5NDA5ZTUyZDNmNmYyYzk2N2NkMmJkYTk5NDhjYTQ1MC4uMmZhZjA2NDRlYzI3M2RmMjFm
NzNmZTJmOGNmODVhMDZmMGU4NWFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgKQEAgLTEyMyw3ICsxMjMsNyBAQCBjbGFzcyBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYSA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CiAKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgICAgIC8vIE1lZGlhIGNvbnRyb2xzCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBFbGVtZW50Kik7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJv
bFBhcnQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCiAgICAgICAgIC8vIFByb3Zp
ZGUgYSB3YXkgdG8gcGFzcyB0aGUgZGVmYXVsdCBmb250IHNpemUgZnJvbSB0aGUgU2V0dGluZ3Mg
b2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCmluZGV4IDQy
NDdhNmMwOGE1YzZiMjBkMjY4ZjBjNDgwYWExNTY0NzUxMjY4NzIuLjhhMTdhY2Y4MzNjYjA3ZDVm
YThiNjFkMmFhYTRjNmMyYTcxODU0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5oCkBAIC0xNjYsOCArMTY2LDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IFN0cmluZyBleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7CiAjZW5kaWYKIAotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBFbGVtZW50
Kik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ2xvc2VkQ2FwdGlvbmluZygpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRs
aW5nRm9yKENvbnRyb2xQYXJ0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29u
dHJvbFN0YXR1c0Rpc3BsYXkoKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFZv
bHVtZVNsaWRlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRo
dW1iU2l6ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IHZvbHVt
ZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IEludFNpemUmKSBj
b25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CmluZGV4IGRhMWY3MWVhNDllNTRiYWZiNDRiNTk5OWQ0ODMwMzRjYzNmZTdmMGIuLmE2Zjk5OWEw
NTA0NzhlNGQ4OTQ1ZDI2MjNiMzU4YTRhNzA3NTE0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTE5NzIsMzUgKzE5NzIsMTIgQEAgU3RyaW5nIFJl
bmRlclRoZW1lTWFjOjpleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKIH0KICNlbmRpZgogCi1i
b29sIFJlbmRlclRoZW1lTWFjOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQ
YXJ0IHBhcnQsIEVsZW1lbnQqIGVsZW1lbnQpCitib29sIFJlbmRlclRoZW1lTWFjOjpoYXNPd25E
aXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQgcGFydCkgY29uc3QKIHsKLSAgICBI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVt
ZW50Kj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBNZWRpYVZvbHVt
ZVNsaWRlckNvbnRhaW5lclBhcnQ6Ci0gICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ6Ci0g
ICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlck11dGVCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVkaWFW
b2x1bWVTbGlkZXJUaHVtYlBhcnQ6IHsKLSAgICAgICAgcmV0dXJuIG1lZGlhQ29udHJvbGxlclRo
ZW1lKCkgPT0gTWVkaWFDb250cm9sbGVyVGhlbWVRdWlja1RpbWUgJiYgbWVkaWFFbGVtZW50LT5o
YXNBdWRpbygpOwotICAgIH0KLSAgICBjYXNlIE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0
b25QYXJ0OgotICAgICAgICAvLyBXZSByZWx5IG9uIFFUS2l0IHRvIHJlbmRlciBjYXB0aW9ucyBz
byBkb24ndCBlbmFibGUgdGhlIGJ1dHRvbiB1bmxlc3MgaXQgd2lsbCBiZSBhYmxlIHRvIGRvIHNv
LgotICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9UYWcpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lZGlhUmV3aW5kQnV0
dG9uUGFydDoKLSAgICAgICAgaWYgKG1lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5tb3ZpZUxvYWRUeXBlKCkgPT0gTWVkaWFQbGF5
ZXI6OkxpdmVTdHJlYW0gCi0gICAgICAgICAgICAgICAgfHwgbWVkaWFFbGVtZW50LT5tb3ZpZUxv
YWRUeXBlKCkgPT0gTWVkaWFQbGF5ZXI6OlN0b3JlZFN0cmVhbTsKLSAgICBjYXNlIE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVkaWFTZWVrQmFja0J1dHRvblBhcnQ6Ci0g
ICAgICAgIGlmIChtZWRpYUVsZW1lbnQtPmlzRnVsbHNjcmVlbigpKQotICAgICAgICAgICAgcmV0
dXJuIG1lZGlhRWxlbWVudC0+bW92aWVMb2FkVHlwZSgpICE9IE1lZGlhUGxheWVyOjpTdG9yZWRT
dHJlYW0gCi0gICAgICAgICAgICAgICAgJiYgbWVkaWFFbGVtZW50LT5tb3ZpZUxvYWRUeXBlKCkg
IT0gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQorICAgIGlmIChwYXJ0ID09IE1lZGlhTXV0ZUJ1dHRvblBhcnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2hvdWxkUmVuZGVyTWVkaWFD
b250cm9sUGFydChwYXJ0LCBlbGVtZW50KTsKKyAgICByZXR1cm4gbWVkaWFDb250cm9sbGVyVGhl
bWUoKSA9PSBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWM7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnVzZXNNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5KCkKQEAgLTIwMDgsNiArMTk4NSwx
MSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzTWVkaWFDb250cm9sU3RhdHVzRGlzcGxheSgp
CiAgICAgcmV0dXJuIG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0gTWVkaWFDb250cm9sbGVyVGhl
bWVRdWlja1RpbWU7CiB9CiAKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnVzZXNNZWRpYUNvbnRyb2xW
b2x1bWVTbGlkZXIoKSBjb25zdAoreworICAgIHJldHVybiBtZWRpYUNvbnRyb2xsZXJUaGVtZSgp
ID09IE1lZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1lOworfQorCiBJbnRQb2ludCBSZW5kZXJU
aGVtZU1hYzo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiBtdXRl
QnV0dG9uQm94LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewogICAgIHJldHVybiBSZW5k
ZXJNZWRpYUNvbnRyb2xzOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihtdXRlQnV0
dG9uQm94LCBzaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
Y3BwCmluZGV4IGFmMTAwYjcwZTg4MTdjYTI1ZTNmYzMwMTlhZWZmOTE0Mjc0ZGFjZWQuLjE1ZjY0
YzVlNGM2NGI2MGNhMjVkODY1Y2FkNGIyYmFkM2EwOTgyZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcApAQCAtMTAyOSwyMiArMTAyOSwxNiBAQCBTdHJp
bmcgUmVuZGVyVGhlbWVXaW46OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogICAgIHJl
dHVybiBTdHJpbmcobWVkaWFDb250cm9sc1F1aWNrVGltZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZihtZWRpYUNvbnRyb2xzUXVpY2tUaW1lVXNlckFnZW50U3R5bGVTaGVldCkpOwogfQogCi1i
b29sIFJlbmRlclRoZW1lV2luOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQ
YXJ0IHBhcnQsIEVsZW1lbnQqIGVsZW1lbnQpCitib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0
c0Nsb3NlZENhcHRpb25pbmcoKSBjb25zdAogewotICAgIGlmIChwYXJ0ID09IE1lZGlhVG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b25QYXJ0KSB7CiAgICAgICAgIC8vIFdlIHJlbHkgb24gUXVpY2tU
aW1lIHRvIHJlbmRlciBjYXB0aW9ucyBzbyBvbmx5IGVuYWJsZSB0aGUgYnV0dG9uIGZvciBhIHZp
ZGVvIGVsZW1lbnQuCiAjaWYgU0FGQVJJX1RIRU1FX1ZFUlNJT04gPj0gNAotICAgICAgICBpZiAo
IWVsZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9UYWcpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBmYWxzZTsKICNlbmRpZgotICAgIH0KLQotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2hv
dWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChwYXJ0LCBlbGVtZW50KTsKIH0KIAotCiBib29sIFJl
bmRlclRoZW1lV2luOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIHJl
dHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhRnVs
bHNjcmVlbkJ1dHRvbiwgbywgcGFpbnRJbmZvLCByKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lV2luLmgKaW5kZXggN2UwMjIzYThmZTc2ZWMyZTU4YmQxOGZjZmRkNjQ2NDk0
ZDY0ZWI3Zi4uN2U4YTQ5MTUyODJlZGY3MTk5ZTkwNWU2MTZiMDM1ZjRlZWM3M2FiZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgKQEAgLTEyNCw3ICsxMjQsNyBA
QCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFN
ZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZW5kZXJN
ZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBFbGVtZW50Kik7CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQ2xvc2VkQ2FwdGlvbmluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5C
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cg==
</data>
<flag name="review"
          id="81480"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>