<?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>146789</bug_id>
          
          <creation_ts>2015-07-09 09:36:27 -0700</creation_ts>
          <short_desc>Upload MediaStream Engine to codebase</short_desc>
          <delta_ts>2015-07-13 11:00:32 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>146788</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Matthew Daiter">mdaiter</reporter>
          <assigned_to name="Matthew Daiter">mdaiter</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jonlee</cc>
    
    <cc>mdaiter</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1108215</commentid>
    <comment_count>0</comment_count>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 09:36:27 -0700</bug_when>
    <thetext>Uploading the source to the codebase is the first step for solving the dependent bug. Not going to link now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108216</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-07-09 09:37:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/21747025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108348</commentid>
    <comment_count>2</comment_count>
      <attachid>256513</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 13:59:12 -0700</bug_when>
    <thetext>Created attachment 256513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108351</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-09 14:01:21 -0700</bug_when>
    <thetext>Attachment 256513 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:141:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:165:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:581:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:611:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108353</commentid>
    <comment_count>4</comment_count>
      <attachid>256514</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 14:03:09 -0700</bug_when>
    <thetext>Created attachment 256514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108355</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-09 14:06:31 -0700</bug_when>
    <thetext>Attachment 256514 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:141:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:165:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:581:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:611:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108380</commentid>
    <comment_count>6</comment_count>
      <attachid>256514</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-09 14:38:36 -0700</bug_when>
    <thetext>Comment on attachment 256514
Patch

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

Looks good. A few things to correct, and we should get Eric&apos;s feedback, too.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:93
&gt; +    virtual void cancelLoad() override;

Don&apos;t use &quot;virtual&quot; when you use &quot;override&quot;. This comment applies for the whole file.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:2
&gt; + * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.

This file is new -- it should only be 2015.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:133
&gt; +    , m_playing(0)

Please use the new C++ initializers in the header file: 
... m_rate { 1 };
... m_seeking { false };
... etc.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:177
&gt; +    &amp;&amp; class_getInstanceMethod(getAVSampleBufferAudioRendererClass(), @selector(setMuted:));

This block of &quot;&amp;&amp;&quot;s should be indented one more level.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:180
&gt; +static HashSet&lt;String&gt; mimeTypeCache()

This should be returning a const HashSet&lt;String&gt;&amp;.

I know you were following the code in MediaPlayerPrivateMediaSourceAVFObjc.mm, but the code is wrong there, too.

I&apos;ll fix the other case under Bug 146809, but please correct this here.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:182
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(HashSet&lt;String&gt;, cache, ());

This should be:

static NeverDestroyed&lt;HashSet&lt;String&gt;&gt; cache();

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:212
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::load(MediaStreamPrivate* client)

If client can never be null, we should be passing this by reference.  If it can be null, you need to check it.

Judging by our other media code, this is trusted to not be null. But we should require this to be a reference. I filed Bug 146811 to track this.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:248
&gt; +        AVVideoCaptureSource* capture = (AVVideoCaptureSource*)track-&gt;source();

Please use a C++-style cast.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:275
&gt; +    

Get rid of this blank line, please.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:307
&gt; +    for (auto it = m_sampleBufferAudioRenderers.begin(), end = m_sampleBufferAudioRenderers.end(); it != end; ++it)

Just use a C++ loop:

for (auto audioRenderer : m_sampleBufferAudioRenderers)
    [*audioRenderer setVolume:volume];

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:319
&gt; +        [*it setMuted:muted];

Ditto the C++ loop comment from above.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:329
&gt; +        AVVideoCaptureSource* source = (AVVideoCaptureSource*)track-&gt;source();

C++ cast, please.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:340
&gt; +    return m_MediaStreamPrivate-&gt;client()-&gt;getVideoTracks().size();

If m_MediaStreamPrivate can never be null, we should store it as a reference. If it can be null, you need to be checking it.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:381
&gt; +    return false;

If it&apos;s unseekable, is it really scannable? We say it&apos;s scannable above.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:408
&gt; +    return std::make_unique&lt;PlatformTimeRanges&gt;(minMediaTimeSeekable(), maxMediaTimeSeekable());

If it&apos;s not seekable, why do we return seemingly-valid times here?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:435
&gt; +    // No-op.

Why is this a no-op? Is this another &quot;// FIXME(125157): Implement painting&quot; case?

If so, you should use &quot;notImplemented();&quot; as well.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:440
&gt; +    // FIXME(125157): Implement painting.

Add &quot;notImplemented();&quot;

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:445
&gt; +    // FIXME(125157): Implement painting.

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm:50
&gt; +    return mediaStreamPrivate;

Just &quot;return adoptRef(...&quot;

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm:55
&gt; +    , m_client(client)

If these can&apos;t be null, they should be references.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108388</commentid>
    <comment_count>7</comment_count>
      <attachid>256514</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-07-09 14:51:21 -0700</bug_when>
    <thetext>Comment on attachment 256514
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:490
&gt; +    return 0;

The memory cost is clearly not 0. This deserves a FIXME and a bug number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108410</commentid>
    <comment_count>8</comment_count>
      <attachid>256514</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 15:10:22 -0700</bug_when>
    <thetext>Comment on attachment 256514
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:93
&gt;&gt; +    virtual void cancelLoad() override;
&gt; 
&gt; Don&apos;t use &quot;virtual&quot; when you use &quot;override&quot;. This comment applies for the whole file.

Sounds good. My bad. Thought the MediaStream class should coordinate with MediaSource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108415</commentid>
    <comment_count>9</comment_count>
      <attachid>256514</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 15:16:49 -0700</bug_when>
    <thetext>Comment on attachment 256514
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:93
&gt;&gt;&gt; +    virtual void cancelLoad() override;
&gt;&gt; 
&gt;&gt; Don&apos;t use &quot;virtual&quot; when you use &quot;override&quot;. This comment applies for the whole file.
&gt; 
&gt; Sounds good. My bad. Thought the MediaStream class should coordinate with MediaSource.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108439</commentid>
    <comment_count>10</comment_count>
      <attachid>256514</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 16:05:00 -0700</bug_when>
    <thetext>Comment on attachment 256514
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:133
&gt;&gt; +    , m_playing(0)
&gt; 
&gt; Please use the new C++ initializers in the header file: 
&gt; ... m_rate { 1 };
&gt; ... m_seeking { false };
&gt; ... etc.

Fixed, only for compile-known values

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:177
&gt;&gt; +    &amp;&amp; class_getInstanceMethod(getAVSampleBufferAudioRendererClass(), @selector(setMuted:));
&gt; 
&gt; This block of &quot;&amp;&amp;&quot;s should be indented one more level.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:180
&gt;&gt; +static HashSet&lt;String&gt; mimeTypeCache()
&gt; 
&gt; This should be returning a const HashSet&lt;String&gt;&amp;.
&gt; 
&gt; I know you were following the code in MediaPlayerPrivateMediaSourceAVFObjc.mm, but the code is wrong there, too.
&gt; 
&gt; I&apos;ll fix the other case under Bug 146809, but please correct this here.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:182
&gt;&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(HashSet&lt;String&gt;, cache, ());
&gt; 
&gt; This should be:
&gt; 
&gt; static NeverDestroyed&lt;HashSet&lt;String&gt;&gt; cache();

Can&apos;t do this inside of this function block. Can&apos;t have a function declared in block scope and not in the class have a static storage associated to it

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:212
&gt;&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::load(MediaStreamPrivate* client)
&gt; 
&gt; If client can never be null, we should be passing this by reference.  If it can be null, you need to check it.
&gt; 
&gt; Judging by our other media code, this is trusted to not be null. But we should require this to be a reference. I filed Bug 146811 to track this.

Fixing now. Although this is an override method of MediaPlayerPrivateInterface, which has a LOT of classes inherit it. Do we really want to be modifying all of those base classes?

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:248
&gt;&gt; +        AVVideoCaptureSource* capture = (AVVideoCaptureSource*)track-&gt;source();
&gt; 
&gt; Please use a C++-style cast.

Sure.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:275
&gt;&gt; +    
&gt; 
&gt; Get rid of this blank line, please.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:307
&gt;&gt; +    for (auto it = m_sampleBufferAudioRenderers.begin(), end = m_sampleBufferAudioRenderers.end(); it != end; ++it)
&gt; 
&gt; Just use a C++ loop:
&gt; 
&gt; for (auto audioRenderer : m_sampleBufferAudioRenderers)
&gt;     [*audioRenderer setVolume:volume];

Done

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:319
&gt;&gt; +        [*it setMuted:muted];
&gt; 
&gt; Ditto the C++ loop comment from above.

Done

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:329
&gt;&gt; +        AVVideoCaptureSource* source = (AVVideoCaptureSource*)track-&gt;source();
&gt; 
&gt; C++ cast, please.

Done

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:340
&gt;&gt; +    return m_MediaStreamPrivate-&gt;client()-&gt;getVideoTracks().size();
&gt; 
&gt; If m_MediaStreamPrivate can never be null, we should store it as a reference. If it can be null, you need to be checking it.

Just was trying to follow the other class&apos;s conventions to make sure we were properly storing. Will change now. Although shouldn&apos;t we be storing as a Ref instead then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108440</commentid>
    <comment_count>11</comment_count>
      <attachid>256514</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 16:08:12 -0700</bug_when>
    <thetext>Comment on attachment 256514
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:340
&gt;&gt; +    return m_MediaStreamPrivate-&gt;client()-&gt;getVideoTracks().size();
&gt; 
&gt; If m_MediaStreamPrivate can never be null, we should store it as a reference. If it can be null, you need to be checking it.

Can be null. Will check now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108461</commentid>
    <comment_count>12</comment_count>
      <attachid>256514</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 17:02:16 -0700</bug_when>
    <thetext>Comment on attachment 256514
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:381
&gt;&gt; +    return false;
&gt; 
&gt; If it&apos;s unseekable, is it really scannable? We say it&apos;s scannable above.

Forgot to change, you are correct. Not scannable.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:435
&gt;&gt; +    // No-op.
&gt; 
&gt; Why is this a no-op? Is this another &quot;// FIXME(125157): Implement painting&quot; case?
&gt; 
&gt; If so, you should use &quot;notImplemented();&quot; as well.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:440
&gt;&gt; +    // FIXME(125157): Implement painting.
&gt; 
&gt; Add &quot;notImplemented();&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:445
&gt;&gt; +    // FIXME(125157): Implement painting.
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:490
&gt;&gt; +    return 0;
&gt; 
&gt; The memory cost is clearly not 0. This deserves a FIXME and a bug number.

MediaSource was doing this as well...but I&apos;ll do that.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm:50
&gt;&gt; +    return mediaStreamPrivate;
&gt; 
&gt; Just &quot;return adoptRef(...&quot;

Was debugging, my bad.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm:55
&gt;&gt; +    , m_client(client)
&gt; 
&gt; If these can&apos;t be null, they should be references.

MediaSource is doing it. Still change it? Fixed if you want it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108465</commentid>
    <comment_count>13</comment_count>
      <attachid>256543</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 17:06:48 -0700</bug_when>
    <thetext>Created attachment 256543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108467</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-09 17:08:47 -0700</bug_when>
    <thetext>Attachment 256543 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/MediaStreamPrivate.h:66:  Too many spaces inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:134:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:158:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:320:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:529:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:575:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:605:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 7 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108472</commentid>
    <comment_count>15</comment_count>
      <attachid>256543</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 17:14:29 -0700</bug_when>
    <thetext>Comment on attachment 256543
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:175
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(HashSet&lt;String&gt;, cache, ());

I would have changed this to a NeverDestroyed, but you can&apos;t do that inside of a non-class function according to the compiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108473</commentid>
    <comment_count>16</comment_count>
      <attachid>256543</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 17:20:57 -0700</bug_when>
    <thetext>Comment on attachment 256543
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:175
&gt;&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(HashSet&lt;String&gt;, cache, ());
&gt; 
&gt; I would have changed this to a NeverDestroyed, but you can&apos;t do that inside of a non-class function according to the compiler.

Wait...my bad. Yes you can. Compiler was giving me strange errors before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108476</commentid>
    <comment_count>17</comment_count>
      <attachid>256544</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 17:24:51 -0700</bug_when>
    <thetext>Created attachment 256544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108478</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-09 17:28:10 -0700</bug_when>
    <thetext>Attachment 256544 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:134:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:158:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:320:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:529:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:575:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:605:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108487</commentid>
    <comment_count>19</comment_count>
      <attachid>256544</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-09 17:59:25 -0700</bug_when>
    <thetext>Comment on attachment 256544
Patch

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

Just a couple of small things!

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:336
&gt; +        return 0;

return false;

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:337
&gt; +    return m_MediaStreamPrivate-&gt;client()-&gt;getVideoTracks().size();

s/size/isEmpty/

!isEmpty

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:343
&gt; +        return 0;

return false!

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:344
&gt; +    return m_MediaStreamPrivate-&gt;client()-&gt;getAudioTracks().size();

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaStreamPrivate.h:63
&gt; +    MediaStreamPrivate() { }

Make this private so that it&apos;s a compile error if you don&apos;t pass the parent/client to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108511</commentid>
    <comment_count>20</comment_count>
      <attachid>256559</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-09 19:25:25 -0700</bug_when>
    <thetext>Created attachment 256559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108514</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-09 19:28:46 -0700</bug_when>
    <thetext>Attachment 256559 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:134:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:158:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:320:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:529:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:575:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:605:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108615</commentid>
    <comment_count>22</comment_count>
      <attachid>256559</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-07-10 08:11:15 -0700</bug_when>
    <thetext>Comment on attachment 256559
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:77
&gt; +    void seekInternal();
&gt; +    void waitForSeekCompleted();
&gt; +    void seekCompleted();
&gt; +    void setLoadingProgresssed(bool flag) { m_loadingProgressed = flag; }
&gt; +    void setHasAvailableVideoFrame(bool flag) { m_hasAvailableVideoFrame = flag; }
&gt; +    void durationChanged();

These aren&apos;t used.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:79
&gt; +    void sizeChanged();

This is unimplemented. Is it needed?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:85
&gt; +        // MediaPlayerPrivateInterface

This class still needs to override a bunch of stuff in HTMLMediaElement, see http://www.w3.org/TR/mediacapture-streams/#media-element-attributes-when-playing-a-mediastream. Please file a bug and add a FIXME to the class somewhere.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:148
&gt; +    // called when the rendering system flips the into or out of accelerated rendering mode.

Typo: &quot;flips the into&quot;

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:164
&gt; +    unsigned long totalVideoFrames() override;
&gt; +    unsigned long droppedVideoFrames() override;
&gt; +    unsigned long corruptedVideoFrames() override;
&gt; +    MediaTime totalFrameDelay() override;

These are only defined in MediaPlayerPrivateInterface for ENABLE(MEDIA_SOURCE)

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:190
&gt; +    bool m_hasAvailableVideoFrame;

This needs to be initialized.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:87
&gt; +@interface AVSampleBufferDisplayLayer (WebCoreAVSampleBufferDisplayLayerPrivate)
&gt; +- (AVVideoPerformanceMetrics *)videoPerformanceMetrics;
&gt; +@end

N

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:96
&gt; +@interface AVSampleBufferAudioRenderer : NSObject
&gt; +- (void)setVolume:(float)volume;
&gt; +- (void)setMuted:(BOOL)muted;
&gt; +@property (nonatomic, copy) NSString *audioTimePitchAlgorithm;
&gt; +@end

Necessary?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:112
&gt; +#pragma mark -
&gt; +#pragma mark AVSampleBufferRenderSynchronizer
&gt; +
&gt; +@interface AVSampleBufferRenderSynchronizer : NSObject
&gt; +- (CMTimebaseRef)timebase;
&gt; +- (float)rate;
&gt; +- (void)setRate:(float)rate;
&gt; +- (void)setRate:(float)rate time:(CMTime)time;
&gt; +- (NSArray *)renderers;
&gt; +- (void)addRenderer:(id)renderer;
&gt; +- (void)removeRenderer:(id)renderer atTime:(CMTime)time withCompletionHandler:(void (^)(BOOL didRemoveRenderer))completionHandler;
&gt; +- (id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block;
&gt; +- (id)addBoundaryTimeObserverForTimes:(NSArray *)times queue:(dispatch_queue_t)queue usingBlock:(void (^)(void))block;
&gt; +- (void)removeTimeObserver:(id)observer;
&gt; +@end

Necessary?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:129
&gt; +    , m_synchronizer(adoptNS([allocAVSampleBufferRenderSynchronizerInstance() init]))

This is unused.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:170
&gt; +        &amp;&amp; getAVStreamDataParserClass()
&gt; +        &amp;&amp; getAVSampleBufferAudioRendererClass()
&gt; +        &amp;&amp; getAVSampleBufferRenderSynchronizerClass()
&gt; +        &amp;&amp; class_getInstanceMethod(getAVSampleBufferAudioRendererClass(), @selector(setMuted:));

Are these actually necessary?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:216
&gt; +    for (auto track : m_MediaStreamPrivate-&gt;client()-&gt;getVideoTracks()) {
&gt; +        track-&gt;source()-&gt;startProducingData();
&gt; +        track-&gt;setEnabled(true);
&gt; +    }
&gt; +    for (auto track : m_MediaStreamPrivate-&gt;client()-&gt;getAudioTracks()) {
&gt; +        track-&gt;source()-&gt;startProducingData();
&gt; +        track-&gt;setEnabled(true);
&gt; +    }
&gt; +    m_player-&gt;client().mediaPlayerRenderingModeChanged(m_player);

The spec says you also need to create audio and video tracks:

For each MediaStreamTrack in the MediaStream , including those that are added after the User Agent enters the media element load algorithm, the User Agent must create a corresponding AudioTrack or VideoTrack as defined in [HTML5].

Please file a bug and add a FIXME for this.

It also says that only MediaStreamTracks with a readyState of &apos;live&apos; should be enabled:

Let the media resource, represented by the MediaStream object, indicate to the media element load algorithm that all audio tracks and all live video tracks (represented by a MediaStreamTrack with the readyState attribute set to live) should be enabled. This allows the media element load algorithm to set AudioTrack.enabled, VideoTrack.selected and VideoTrackList.selectedIndex accordingly.

http://www.w3.org/TR/mediacapture-streams/#loading-and-playing-a-mediastream-in-a-media-element

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:223
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::prepareToPlay()

Nit: This isn&apos;t pure virtual in MediaPlayerPrivateInterface so you don&apos;t need to override.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:240
&gt; +        // Just grab the first webcam for now, we can manage more later

Please add a FIXME and bug number.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:295
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::pause()
&gt; +{
&gt; +    auto weakThis = createWeakPtr();
&gt; +    callOnMainThread([weakThis] {
&gt; +        if (!weakThis)
&gt; +            return;
&gt; +        weakThis.get()-&gt;pauseInternal();
&gt; +    });
&gt; +}
&gt; +
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::pauseInternal()
&gt; +{
&gt; +    m_playing = false;
&gt; +    [m_synchronizer setRate:0];
&gt; +    if (m_MediaStreamPrivate) {
&gt; +        for (auto track : m_MediaStreamPrivate-&gt;client()-&gt;getVideoTracks())
&gt; +            track-&gt;source()-&gt;stopProducingData();
&gt; +        for (auto track : m_MediaStreamPrivate-&gt;client()-&gt;getAudioTracks())
&gt; +            track-&gt;source()-&gt;stopProducingData();
&gt; +    }
&gt; +}
&gt; +
&gt; +bool MediaPlayerPrivateMediaStreamAVFObjC::paused() const
&gt; +{
&gt; +    return ![m_synchronizer rate];
&gt; +}

Shouldn&apos;t &quot;paused&quot; be passed through to the MediaStream?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:301
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::setVolume(float volume)
&gt; +{
&gt; +    for (auto audioRenderer : m_sampleBufferAudioRenderers)
&gt; +        [audioRenderer setVolume:volume];
&gt; +}

You don&apos;t use an audio renderer (yet?). Please remove until it is needed.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:311
&gt; +    for (auto audioRenderer : m_sampleBufferAudioRenderers)
&gt; +        [audioRenderer setMuted:muted];

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:327
&gt; +            if (source-&gt;width() &gt; floatSize.width())
&gt; +                floatSize.setWidth(source-&gt;width());
&gt; +            if (source-&gt;height() &gt; floatSize.height())
&gt; +                floatSize.setHeight(source-&gt;height());

If a track isn&apos;t visible/enabled, does it still return its intrinsic width &amp; height? If so, you should skip non-visible tracks.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:363
&gt; +    if (synchronizerTime &lt; m_lastSeekTime)
&gt; +        return m_lastSeekTime;

Seeking isn&apos;t possible.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:375
&gt; +MediaTime MediaPlayerPrivateMediaStreamAVFObjC::startTime() const
&gt; +{
&gt; +    return MediaTime::zeroTime();
&gt; +}
&gt; +
&gt; +MediaTime MediaPlayerPrivateMediaStreamAVFObjC::initialTime() const
&gt; +{
&gt; +    return MediaTime::zeroTime();
&gt; +}

No need to override, MediaPlayerPrivate returns zeroTime.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:393
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::setPreservesPitch(bool preservesPitch)
&gt; +{
&gt; +    NSString *algorithm = preservesPitch ? AVAudioTimePitchAlgorithmSpectral : AVAudioTimePitchAlgorithmVarispeed;
&gt; +    for (auto&amp; renderer : m_sampleBufferAudioRenderers)
&gt; +        [renderer setAudioTimePitchAlgorithm:algorithm];
&gt; +}

A MediaStream is not seekable, so &quot;preservesPitch&quot; doesn&apos;t make sense. This can be removed.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:505
&gt; +unsigned long MediaPlayerPrivateMediaStreamAVFObjC::totalVideoFrames()
&gt; +{
&gt; +    return [[m_sampleBufferDisplayLayer videoPerformanceMetrics] totalNumberOfVideoFrames];
&gt; +}
&gt; +
&gt; +unsigned long MediaPlayerPrivateMediaStreamAVFObjC::droppedVideoFrames()
&gt; +{
&gt; +    return [[m_sampleBufferDisplayLayer videoPerformanceMetrics] numberOfDroppedVideoFrames];
&gt; +}
&gt; +
&gt; +unsigned long MediaPlayerPrivateMediaStreamAVFObjC::corruptedVideoFrames()
&gt; +{
&gt; +    return [[m_sampleBufferDisplayLayer videoPerformanceMetrics] numberOfCorruptedVideoFrames];
&gt; +}
&gt; +
&gt; +MediaTime MediaPlayerPrivateMediaStreamAVFObjC::totalFrameDelay()
&gt; +{
&gt; +    return MediaTime::createWithDouble([[m_sampleBufferDisplayLayer videoPerformanceMetrics] totalFrameDelay]);
&gt; +}

Not useful until there is a sampleBufferDisplayLayer.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:518
&gt; +    if (m_sampleBufferDisplayLayer)
&gt; +        return;
&gt; +
&gt; +    m_sampleBufferDisplayLayer = adoptNS([allocAVSampleBufferDisplayLayerInstance() init]);
&gt; +#ifndef NDEBUG
&gt; +    [m_sampleBufferDisplayLayer setName:@&quot;MediaPlayerPrivateMediaStream AVSampleBufferDisplayLayer&quot;];
&gt; +#endif

platformLayer() returns a AVCaptureVideoPreviewLayer. Is this necessary?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:532
&gt; +    if (!m_sampleBufferDisplayLayer)
&gt; +        return;
&gt; +
&gt; +    CMTime currentTime = CMTimebaseGetTime([m_synchronizer timebase]);
&gt; +    [m_synchronizer removeRenderer:m_sampleBufferDisplayLayer.get() atTime:currentTime withCompletionHandler:^(BOOL) {
&gt; +        // No-op.
&gt; +    }];
&gt; +    m_sampleBufferDisplayLayer = nullptr;

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:555
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::addDisplayLayer(AVSampleBufferDisplayLayer* displayLayer)

It doesn&apos;t look like this is used (yet?). If it isn&apos;t, you should remove it until it is actually needed.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:569
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::removeDisplayLayer(AVSampleBufferDisplayLayer* displayLayer)

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:583
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::addAudioRenderer(AVSampleBufferAudioRenderer* audioRenderer)

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:598
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::removeAudioRenderer(AVSampleBufferAudioRenderer* audioRenderer)

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:613
&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged()

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108687</commentid>
    <comment_count>23</comment_count>
      <attachid>256559</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-10 11:16:52 -0700</bug_when>
    <thetext>Comment on attachment 256559
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:77
&gt;&gt; +    void durationChanged();
&gt; 
&gt; These aren&apos;t used.

Sure. Removed and fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:79
&gt;&gt; +    void sizeChanged();
&gt; 
&gt; This is unimplemented. Is it needed?

Yep! Fixed. Sent callback to sizeChanged inside of m_player.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:85
&gt;&gt; +        // MediaPlayerPrivateInterface
&gt; 
&gt; This class still needs to override a bunch of stuff in HTMLMediaElement, see http://www.w3.org/TR/mediacapture-streams/#media-element-attributes-when-playing-a-mediastream. Please file a bug and add a FIXME to the class somewhere.

Which class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108741</commentid>
    <comment_count>24</comment_count>
      <attachid>256559</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-10 13:46:20 -0700</bug_when>
    <thetext>Comment on attachment 256559
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:85
&gt;&gt;&gt; +        // MediaPlayerPrivateInterface
&gt;&gt; 
&gt;&gt; This class still needs to override a bunch of stuff in HTMLMediaElement, see http://www.w3.org/TR/mediacapture-streams/#media-element-attributes-when-playing-a-mediastream. Please file a bug and add a FIXME to the class somewhere.
&gt; 
&gt; Which class?

Oh! Got it. Fixed, have it in another bug.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:148
&gt;&gt; +    // called when the rendering system flips the into or out of accelerated rendering mode.
&gt; 
&gt; Typo: &quot;flips the into&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:164
&gt;&gt; +    MediaTime totalFrameDelay() override;
&gt; 
&gt; These are only defined in MediaPlayerPrivateInterface for ENABLE(MEDIA_SOURCE)

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:190
&gt;&gt; +    bool m_hasAvailableVideoFrame;
&gt; 
&gt; This needs to be initialized.

Doesn&apos;t seem to be used. Removing.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:87
&gt;&gt; +@end
&gt; 
&gt; N

Left these in due to planning ahead, in case we have to make a video and audio renderer and synchronizer for WebRTC. In the case that we don&apos;t want this code lying around before that happens, I can remove this.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:96
&gt;&gt; +@end
&gt; 
&gt; Necessary?

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:112
&gt;&gt; +@end
&gt; 
&gt; Necessary?

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:129
&gt;&gt; +    , m_synchronizer(adoptNS([allocAVSampleBufferRenderSynchronizerInstance() init]))
&gt; 
&gt; This is unused.

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:170
&gt;&gt; +        &amp;&amp; class_getInstanceMethod(getAVSampleBufferAudioRendererClass(), @selector(setMuted:));
&gt; 
&gt; Are these actually necessary?

Ditto. And CoreMedia is certainly used! Need it for the AVVideoCapturePreviewLayer interpretation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108799</commentid>
    <comment_count>25</comment_count>
      <attachid>256623</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-10 16:30:10 -0700</bug_when>
    <thetext>Created attachment 256623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108804</commentid>
    <comment_count>26</comment_count>
      <attachid>256559</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-10 16:32:44 -0700</bug_when>
    <thetext>Comment on attachment 256559
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:216
&gt;&gt; +    m_player-&gt;client().mediaPlayerRenderingModeChanged(m_player);
&gt; 
&gt; The spec says you also need to create audio and video tracks:
&gt; 
&gt; For each MediaStreamTrack in the MediaStream , including those that are added after the User Agent enters the media element load algorithm, the User Agent must create a corresponding AudioTrack or VideoTrack as defined in [HTML5].
&gt; 
&gt; Please file a bug and add a FIXME for this.
&gt; 
&gt; It also says that only MediaStreamTracks with a readyState of &apos;live&apos; should be enabled:
&gt; 
&gt; Let the media resource, represented by the MediaStream object, indicate to the media element load algorithm that all audio tracks and all live video tracks (represented by a MediaStreamTrack with the readyState attribute set to live) should be enabled. This allows the media element load algorithm to set AudioTrack.enabled, VideoTrack.selected and VideoTrackList.selectedIndex accordingly.
&gt; 
&gt; http://www.w3.org/TR/mediacapture-streams/#loading-and-playing-a-mediastream-in-a-media-element

Done!

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:223
&gt;&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::prepareToPlay()
&gt; 
&gt; Nit: This isn&apos;t pure virtual in MediaPlayerPrivateInterface so you don&apos;t need to override.

Compiler is throwing errors about not overriding

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:240
&gt;&gt; +        // Just grab the first webcam for now, we can manage more later
&gt; 
&gt; Please add a FIXME and bug number.

Done!

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:301
&gt;&gt; +}
&gt; 
&gt; You don&apos;t use an audio renderer (yet?). Please remove until it is needed.

Fixed

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:311
&gt;&gt; +        [audioRenderer setMuted:muted];
&gt; 
&gt; Ditto.

Fixed

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:327
&gt;&gt; +                floatSize.setHeight(source-&gt;height());
&gt; 
&gt; If a track isn&apos;t visible/enabled, does it still return its intrinsic width &amp; height? If so, you should skip non-visible tracks.

Fixed

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:375
&gt;&gt; +}
&gt; 
&gt; No need to override, MediaPlayerPrivate returns zeroTime.

Fixed

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:393
&gt;&gt; +}
&gt; 
&gt; A MediaStream is not seekable, so &quot;preservesPitch&quot; doesn&apos;t make sense. This can be removed.

Fixed

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:518
&gt;&gt; +#endif
&gt; 
&gt; platformLayer() returns a AVCaptureVideoPreviewLayer. Is this necessary?

Fixed

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:532
&gt;&gt; +    m_sampleBufferDisplayLayer = nullptr;
&gt; 
&gt; Ditto.

Fixed

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:555
&gt;&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::addDisplayLayer(AVSampleBufferDisplayLayer* displayLayer)
&gt; 
&gt; It doesn&apos;t look like this is used (yet?). If it isn&apos;t, you should remove it until it is actually needed.

Fixed

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:569
&gt;&gt; +void MediaPlayerPrivateMediaStreamAVFObjC::removeDisplayLayer(AVSampleBufferDisplayLayer* displayLayer)
&gt; 
&gt; Ditto.

Fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108806</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-10 16:34:41 -0700</bug_when>
    <thetext>Attachment 256623 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:92:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108807</commentid>
    <comment_count>28</comment_count>
      <attachid>256623</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-10 16:37:16 -0700</bug_when>
    <thetext>Comment on attachment 256623
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:265
&gt; +    return m_MediaStreamPrivate-&gt;client()-&gt;getVideoTracks().size();

I think these should use &quot;return !m_MediaStreamPrivate... getVideoTracks().isEmpty();&quot;

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:270
&gt; +    return m_MediaStreamPrivate-&gt;client()-&gt;getAudioTracks().size();

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm:59
&gt; +

Please get rid of this blank line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108810</commentid>
    <comment_count>29</comment_count>
      <attachid>256627</attachid>
    <who name="Matthew Daiter">mdaiter</who>
    <bug_when>2015-07-10 16:49:57 -0700</bug_when>
    <thetext>Created attachment 256627
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108812</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-10 16:52:01 -0700</bug_when>
    <thetext>Attachment 256627 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:92:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109123</commentid>
    <comment_count>31</comment_count>
      <attachid>256627</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-13 10:10:39 -0700</bug_when>
    <thetext>Comment on attachment 256627
Patch

r=me. Nice work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109139</commentid>
    <comment_count>32</comment_count>
      <attachid>256627</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-13 11:00:27 -0700</bug_when>
    <thetext>Comment on attachment 256627
Patch

Clearing flags on attachment: 256627

Committed r186766: &lt;http://trac.webkit.org/changeset/186766&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109140</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-13 11:00:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256513</attachid>
            <date>2015-07-09 13:59:12 -0700</date>
            <delta_ts>2015-07-09 14:03:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146789-20150709135813.patch</filename>
            <type>text/plain</type>
            <size>42443</size>
            <attacher name="Matthew Daiter">mdaiter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZhOGE3Y2MxMDdlMGY3
MWIyMDYxYTI4MjZkMDVmZWNkMGI4M2JkNi4uYWYyMTBlNWNiNzRjMWJlYTM2ODc1MGNkZjU3NDlh
MjIwM2ViYTA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkzIEBACiAyMDE1LTA3LTA5ICBNYXR0
aGV3IERhaXRlciAgPG1kYWl0ZXJAYXBwbGUuY29tPgogCisgICAgICAgIEFkZGluZyBNZWRpYVN0
cmVhbSBFbmdpbmUgYnVpbGRpbmcgYmxvY2tzIHRvIHRoZSBjb2RlIHJlcG8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc4OQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjE3NDcwMjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldExvYWRpbmdQcm9n
cmVzc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjcmVhdGVXZWFrUHRyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Om1p
bWVUeXBlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpj
YW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2VJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om5hdHVyYWxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkdXJhdGlvbk1lZGlhVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmN1
cnJlbnRNZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjppbml0aWFsVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWtpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRS
YXRlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpyZWFkeVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6c2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjptYXhNZWRpYVRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1pbk1lZGlhVGltZVNlZWthYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0
c0FjY2VsZXJhdGVkUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Ojptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZXh0cmFNZW1vcnlDb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dG90YWxW
aWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OmRyb3BwZWRWaWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmNvcnJ1cHRlZFZpZGVvRnJhbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
dG90YWxGcmFtZURlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkZXN0cm95TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzaG91bGRCZVBs
YXlpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxheUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6YWRkQXVkaW9SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlbW92ZUF1ZGlvUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjaGFyYWN0ZXJp
c3RpY3NDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMu
bW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Ok1l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6fk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6YnVmZmVyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc0F1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKToKKwor
MjAxNS0wNy0wOSAgTWF0dGhldyBEYWl0ZXIgIDxtZGFpdGVyQGFwcGxlLmNvbT4KKwogICAgICAg
ICBFeHBvc2VkIEFWVmlkZW9DYXB0dXJlU291cmNlJ3MgYm91bmRzCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY3NjAKICAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzIxNzM2NzcyPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWEx
ODEwMjE4MDVkYTI5MDM5YmI3NTIwNTg2NWM0MTk2MzgxZjQyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQ19oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQ19oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBy
aXZhdGVDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZBc3Nl
dDsKK09CSkNfQ0xBU1MgQVZDYXB0dXJlVmlkZW9QcmV2aWV3TGF5ZXI7CitPQkpDX0NMQVNTIEFW
U2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXI7CitPQkpDX0NMQVNTIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25pemVyOwor
T0JKQ19DTEFTUyBBVlN0cmVhbVNlc3Npb247CisKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUNNVGlt
ZWJhc2UqIENNVGltZWJhc2VSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDKE1lZGlhUGxheWVyKik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKworICAgIC8vIE1lZGlhUGxheWVy
IEZhY3RvcnkgTWV0aG9kcworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisgICAgc3Rh
dGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7CisgICAg
c3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlh
RW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKKworICAgIHZvaWQgYWRkRGlzcGxheUxheWVyKEFW
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKik7CisgICAgdm9pZCByZW1vdmVEaXNwbGF5TGF5ZXIo
QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqKTsKKworICAgIHZvaWQgYWRkQXVkaW9SZW5kZXJl
cihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqKTsKKyAgICB2b2lkIHJlbW92ZUF1ZGlvUmVu
ZGVyZXIoQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKik7CisKKyAgICB2aXJ0dWFsIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKKyAg
ICB2b2lkIHNldE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlKTsKKworICAg
IHZvaWQgc2Vla0ludGVybmFsKCk7CisgICAgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOwor
ICAgIHZvaWQgc2Vla0NvbXBsZXRlZCgpOworICAgIHZvaWQgc2V0TG9hZGluZ1Byb2dyZXNzc2Vk
KGJvb2wgZmxhZykgeyBtX2xvYWRpbmdQcm9ncmVzc2VkID0gZmxhZzsgfQorICAgIHZvaWQgc2V0
SGFzQXZhaWxhYmxlVmlkZW9GcmFtZShib29sIGZsYWcpIHsgbV9oYXNBdmFpbGFibGVWaWRlb0Zy
YW1lID0gZmxhZzsgfQorICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CisKKyAgICB2b2lkIHNp
emVDaGFuZ2VkKCk7CisgICAgdm9pZCBjaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisKKyAgICBX
ZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQz4gY3JlYXRlV2Vha1B0
cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisKK3ByaXZh
dGU6CisgICAgICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZQorICAgIHZvaWQgbG9h
ZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IH07CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkK
KyAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kikg
b3ZlcnJpZGUgeyB9OworI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICB2b2lk
IGxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlKikgb3ZlcnJpZGU7CisjZW5kaWYKKyAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsTG9hZCgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVU
b1BsYXkoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRp
YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNj
cmVlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBwbGF5KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF5SW50ZXJuYWwoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGF1c2VJbnRlcm5hbCgpOworCisg
ICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2
b2lkIHNldFZvbHVtZShmbG9hdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
TXV0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRNdXRlZChib29sKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1Nj
YW5uaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBuYXR1cmFs
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgTWVkaWFUaW1lIHN0YXJ0VGltZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgTWVkaWFUaW1lIGluaXRpYWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2Vla1dpdGhUb2xlcmFuY2UoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1l
JiwgY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGUgeyB9OworICAgIHZpcnR1YWwgYm9vbCBzZWVr
aW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhdGVEb3VibGUoZG91
YmxlKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IHNl
ZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBNZWRpYVRpbWUgbWF4TWVkaWFU
aW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE1lZGlhVGltZSBtaW5N
ZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKworICAg
IHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZTsK
KyAgICAvLyBjYWxsZWQgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlwcyB0aGUgaW50byBv
ciBvdXQgb2YgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGFj
Y2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yUmVuZGVyaW5nKCkgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdmlydHVhbCBTdHJpbmcgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHNpemVfdCBleHRyYU1lbW9yeUNvc3QoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyB0b3RhbFZpZGVvRnJhbWVzKCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGRyb3BwZWRWaWRlb0ZyYW1lcygp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBjb3JydXB0ZWRWaWRlb0ZyYW1l
cygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgTWVkaWFUaW1lIHRvdGFsRnJhbWVEZWxheSgpIG92
ZXJyaWRlOworCisgICAgdm9pZCBlbnN1cmVMYXllcigpOworICAgIHZvaWQgZGVzdHJveUxheWVy
KCk7CisgICAgYm9vbCBzaG91bGRCZVBsYXlpbmcoKSBjb25zdDsKKworICAgIGZyaWVuZCBjbGFz
cyBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVy
OworICAgIFdlYWtQdHJGYWN0b3J5PE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qz4gbV93ZWFrUHRyRmFjdG9yeTsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2Jq
Qz4gbV9NZWRpYVN0cmVhbVByaXZhdGU7CisgICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7
CisgICAgUmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllcjsKKyAgICBWZWN0b3I8UmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyQXVkaW9S
ZW5kZXJlcj4+IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnM7CisgICAgUmV0YWluUHRyPEFW
U2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25pemVyPiBtX3N5bmNocm9uaXplcjsKKyAgICBSZXRh
aW5QdHI8aWQ+IG1fdGltZUp1bXBlZE9ic2VydmVyOworICAgIFJldGFpblB0cjxpZD4gbV9kdXJh
dGlvbk9ic2VydmVyOworICAgIFJldGFpblB0cjxBVlN0cmVhbVNlc3Npb24+IG1fc3RyZWFtU2Vz
c2lvbjsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAg
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICBNZWRpYVRpbWUgbV9s
YXN0U2Vla1RpbWU7CisgICAgZG91YmxlIG1fcmF0ZTsKKyAgICBib29sIG1fcGxheWluZzsKKyAg
ICBib29sIG1fc2Vla2luZzsKKyAgICBib29sIG1fc2Vla0NvbXBsZXRlZDsKKyAgICBtdXRhYmxl
IGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZDsKKyAgICBib29sIG1faGFzQXZhaWxhYmxlVmlkZW9G
cmFtZTsKK307CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQorCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTEwNWQ5
YjA3NDE3ZTFkOGM2ZDAwMTczM2Q4YmUwZWJjZTg1M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0wLDAgKzEsNjI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaCIK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBv
cnQgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgiCisjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCisjaW1w
b3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQg
Ik1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMuaCIKKyNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRh
dGlvbi5oIgorI2ltcG9ydCAiUGxhdGZvcm1DbG9ja0NNLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldC5oPgorI2ltcG9y
dCA8QVZGb3VuZGF0aW9uL0FWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyLmg+CisjaW1wb3J0IDxB
VkZvdW5kYXRpb24vQVZUaW1lLmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KKyNp
bXBvcnQgPG9iamNfcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBv
cnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjcHJhZ21hIG1hcmsgLSBTb2Z0IExpbmtpbmcK
KworI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19P
UFRJT05BTChBVkZvdW5kYXRpb24pCisKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5k
YXRpb24sIEFWQXNzZXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBB
VkNhcHR1cmVWaWRlb1ByZXZpZXdMYXllcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZv
dW5kYXRpb24sIEFWVVJMQXNzZXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0
aW9uLCBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9O
QUwoQVZGb3VuZGF0aW9uLCBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcikKK1NPRlRfTElOS19D
TEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25p
emVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1EYXRh
UGFyc2VyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1T
ZXNzaW9uKTsKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWVmlkZW9Q
ZXJmb3JtYW5jZU1ldHJpY3MpCisKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFW
QXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1TcGVjdHJhbCwgTlNTdHJpbmcqKQorU09GVF9MSU5LX0NP
TlNUQU5UKEFWRm91bmRhdGlvbiwgQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVZhcmlzcGVlZCwg
TlNTdHJpbmcqKQorCisjZGVmaW5lIEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1TcGVjdHJhbCBn
ZXRBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtU3BlY3RyYWwoKQorI2RlZmluZSBBVkF1ZGlvVGlt
ZVBpdGNoQWxnb3JpdGhtVmFyaXNwZWVkIGdldEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1WYXJp
c3BlZWQoKQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyCisKK0BpbnRlcmZhY2UgQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgOiBDQUxh
eWVyCitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgQVZWaWRlb1BlcmZvcm1h
bmNlTWV0cmljcworCitAaW50ZXJmYWNlIEFWVmlkZW9QZXJmb3JtYW5jZU1ldHJpY3MgOiBOU09i
amVjdAorLSAodW5zaWduZWQgbG9uZyl0b3RhbE51bWJlck9mVmlkZW9GcmFtZXM7CistICh1bnNp
Z25lZCBsb25nKW51bWJlck9mRHJvcHBlZFZpZGVvRnJhbWVzOworLSAodW5zaWduZWQgbG9uZylu
dW1iZXJPZkNvcnJ1cHRlZFZpZGVvRnJhbWVzOworLSAoZG91YmxlKXRvdGFsRnJhbWVEZWxheTsK
K0BlbmQKKworQGludGVyZmFjZSBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciAoV2ViQ29yZUFW
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyUHJpdmF0ZSkKKy0gKEFWVmlkZW9QZXJmb3JtYW5jZU1l
dHJpY3MgKil2aWRlb1BlcmZvcm1hbmNlTWV0cmljczsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0K
KyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIKKworQGludGVyZmFjZSBB
VlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIgOiBOU09iamVjdAorLSAodm9pZClzZXRWb2x1bWU6
KGZsb2F0KXZvbHVtZTsKKy0gKHZvaWQpc2V0TXV0ZWQ6KEJPT0wpbXV0ZWQ7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtOworQGVu
ZAorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3lu
Y2hyb25pemVyCisKK0BpbnRlcmZhY2UgQVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXIg
OiBOU09iamVjdAorLSAoQ01UaW1lYmFzZVJlZil0aW1lYmFzZTsKKy0gKGZsb2F0KXJhdGU7Cist
ICh2b2lkKXNldFJhdGU6KGZsb2F0KXJhdGU7CistICh2b2lkKXNldFJhdGU6KGZsb2F0KXJhdGUg
dGltZTooQ01UaW1lKXRpbWU7CistIChOU0FycmF5ICopcmVuZGVyZXJzOworLSAodm9pZClhZGRS
ZW5kZXJlcjooaWQpcmVuZGVyZXI7CistICh2b2lkKXJlbW92ZVJlbmRlcmVyOihpZClyZW5kZXJl
ciBhdFRpbWU6KENNVGltZSl0aW1lIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9P
TCBkaWRSZW1vdmVSZW5kZXJlcikpY29tcGxldGlvbkhhbmRsZXI7CistIChpZClhZGRQZXJpb2Rp
Y1RpbWVPYnNlcnZlckZvckludGVydmFsOihDTVRpbWUpaW50ZXJ2YWwgcXVldWU6KGRpc3BhdGNo
X3F1ZXVlX3QpcXVldWUgdXNpbmdCbG9jazoodm9pZCAoXikoQ01UaW1lIHRpbWUpKWJsb2NrOwor
LSAoaWQpYWRkQm91bmRhcnlUaW1lT2JzZXJ2ZXJGb3JUaW1lczooTlNBcnJheSAqKXRpbWVzIHF1
ZXVlOihkaXNwYXRjaF9xdWV1ZV90KXF1ZXVlIHVzaW5nQmxvY2s6KHZvaWQgKF4pKHZvaWQpKWJs
b2NrOworLSAodm9pZClyZW1vdmVUaW1lT2JzZXJ2ZXI6KGlkKW9ic2VydmVyOworQGVuZAorCisj
cHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU3RyZWFtU2Vzc2lvbgorCitAaW50ZXJmYWNl
IEFWU3RyZWFtU2Vzc2lvbiA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTdG9y
YWdlRGlyZWN0b3J5QXRVUkw6KE5TVVJMICopc3RvcmFnZURpcmVjdG9yeTsKK0BlbmQKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQworCitNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyhNZWRpYVBs
YXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAgICwgbV93ZWFrUHRyRmFj
dG9yeSh0aGlzKQorICAgICwgbV9zeW5jaHJvbml6ZXIoYWRvcHROUyhbYWxsb2NBVlNhbXBsZUJ1
ZmZlclJlbmRlclN5bmNocm9uaXplckluc3RhbmNlKCkgaW5pdF0pKQorICAgICwgbV9uZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6OklkbGUpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6
OkhhdmVOb3RoaW5nKQorICAgICwgbV9yYXRlKDEpCisgICAgLCBtX3BsYXlpbmcoMCkKKyAgICAs
IG1fc2Vla2luZyhmYWxzZSkKKyAgICAsIG1fc2Vla0NvbXBsZXRlZCh0cnVlKQorICAgICwgbV9s
b2FkaW5nUHJvZ3Jlc3NlZChmYWxzZSkKK3sKKyAgICAvLyBhZGRQZXJpb2RpY1RpbWVPYnNlcnZl
ckZvckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEgbm9uLW51bWVy
aWMgQ01UaW1lLCBzbyBqdXN0IHVzZQorICAgIC8vIGFuIGFyYml0cmFyaWx5IGxhcmdlIHRpbWUg
dmFsdWUgb2Ygb25jZSBhbiBob3VyOgorICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhpcyA9IGNyZWF0
ZVdlYWtQdHIoKTsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNocm9uaXplciBh
ZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlhVGltZTo6Y3Jl
YXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2lu
Z0Jsb2NrOl4oQ01UaW1lIHRpbWUpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworICAg
ICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xNTc5
ODA1MD4gaXMgZml4ZWQuCisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHNob3VsZEJlUGxheWluZygpKQorICAgICAgICAgICAgW21fc3lu
Y2hyb25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICB9XTsKK30KKworTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDKCkKK3sKKyAgICBpZiAobV90aW1lSnVtcGVkT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNo
cm9uaXplciByZW1vdmVUaW1lT2JzZXJ2ZXI6bV90aW1lSnVtcGVkT2JzZXJ2ZXIuZ2V0KCldOwor
ICAgIGlmIChtX2R1cmF0aW9uT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNocm9uaXplciByZW1v
dmVUaW1lT2JzZXJ2ZXI6bV9kdXJhdGlvbk9ic2VydmVyLmdldCgpXTsKK30KKworI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
TWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgp
KQorICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+KHBsYXll
cik7IH0sIGdldFN1cHBvcnRlZFR5cGVzLAorICAgICAgICAgICAgc3VwcG9ydHNUeXBlLCAwLCAw
LCAwLCAwKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpCisgICAg
JiYgaXNDb3JlTWVkaWFGcmFtZXdvcmtBdmFpbGFibGUoKQorICAgICYmIGdldEFWU3RyZWFtRGF0
YVBhcnNlckNsYXNzKCkKKyAgICAmJiBnZXRBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJDbGFz
cygpCisgICAgJiYgZ2V0QVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXJDbGFzcygpCisg
ICAgJiYgY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoZ2V0QVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRl
cmVyQ2xhc3MoKSwgQHNlbGVjdG9yKHNldE11dGVkOikpOworfQorCitzdGF0aWMgSGFzaFNldDxT
dHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQoreworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7CisgICAgc3RhdGljIGJvb2wgdHlwZUxp
c3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKHR5cGVMaXN0SW5pdGlhbGl6ZWQpCisg
ICAgICAgIHJldHVybiBjYWNoZTsKKyAgICB0eXBlTGlzdEluaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIE5TQXJyYXkgKnR5cGVzID0gW2dldEFWVVJMQXNzZXRDbGFzcygpIGF1ZGlvdmlzdWFsTUlN
RVR5cGVzXTsKKyAgICBmb3IgKE5TU3RyaW5nICptaW1lVHlwZSBpbiB0eXBlcykKKyAgICAgICAg
Y2FjaGUuYWRkKG1pbWVUeXBlKTsKKworICAgIHJldHVybiBjYWNoZTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hT
ZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9CisK
K01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYg
cGFyYW1ldGVycykKK3sKKyAgICAvLyBUaGlzIGVuZ2luZSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1t
ZWRpYS1zdHJlYW0gc291cmNlcy4KKyAgICBpZiAocGFyYW1ldGVycy5pc01lZGlhU3RyZWFtKQor
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOworICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1h
cmsgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIE92ZXJyaWRlcworCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUqIGNs
aWVudCkKK3sKKyAgICBtX01lZGlhU3RyZWFtUHJpdmF0ZSA9IE1lZGlhU3RyZWFtUHJpdmF0ZUFW
Rk9iakM6OmNyZWF0ZSh0aGlzLCBjbGllbnQtPmNsaWVudCgpKTsKKyAgICBmb3IgKGF1dG8gdHJh
Y2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpIHsK
KyAgICAgICAgdHJhY2stPnNvdXJjZSgpLT5zdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICAgICAg
dHJhY2stPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgfQorICAgIGZvciAoYXV0byB0cmFjayA6IG1f
TWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVkaW9UcmFja3MoKSkgeworICAgICAg
ICB0cmFjay0+c291cmNlKCktPnN0YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgICAgICB0cmFjay0+
c2V0RW5hYmxlZCh0cnVlKTsKKyAgICB9CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxh
eWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6Y2FuY2VsTG9hZCgpCit7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwcmVwYXJlVG9QbGF5KCkKK3sKK30K
KworUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBs
YXRmb3JtTWVkaWEoKSBjb25zdAoreworICAgIFBsYXRmb3JtTWVkaWEgcG07CisgICAgcG0udHlw
ZSA9IFBsYXRmb3JtTWVkaWE6OkFWRm91bmRhdGlvbkFzc2V0VHlwZTsKKyAgICBwbS5tZWRpYS5h
dmZBc3NldCA9IG1fYXNzZXQuZ2V0KCk7CisgICAgcmV0dXJuIHBtOworfQorCitQbGF0Zm9ybUxh
eWVyKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAoreworICAgIGlmICghbV9NZWRpYVN0cmVhbVByaXZhdGUpCisgICAgICAgIHJldHVy
biBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBmb3Ig
KGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJh
Y2tzKCkpIHsKKyAgICAgICAgLy8gSnVzdCBncmFiIHRoZSBmaXJzdCB3ZWJjYW0gZm9yIG5vdywg
d2UgY2FuIG1hbmFnZSBtb3JlIGxhdGVyCisgICAgICAgIEFWVmlkZW9DYXB0dXJlU291cmNlKiBj
YXB0dXJlID0gKEFWVmlkZW9DYXB0dXJlU291cmNlKil0cmFjay0+c291cmNlKCk7CisgICAgICAg
IHJldHVybiAoUGxhdGZvcm1MYXllciopW2dldEFWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyQ2xh
c3MoKSBsYXllcldpdGhTZXNzaW9uOmNhcHR1cmUtPnNlc3Npb24oKV07CisgICAgfQorICAgIHJl
dHVybiBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnBsYXRmb3JtTGF5ZXIoKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXkoKQoreworICAg
IGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChb
d2Vha1RoaXNdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgd2Vha1RoaXMuZ2V0KCktPnBsYXlJbnRlcm5hbCgpOworICAgIH0pOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGxheUludGVybmFsKCkK
K3sKKyAgICBtX3BsYXlpbmcgPSB0cnVlOworICAgIGlmIChzaG91bGRCZVBsYXlpbmcoKSkKKyAg
ICAgICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6bV9yYXRlXTsKKworICAgIGZvciAoYXV0byB0
cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkK
KyAgICAgICAgdHJhY2stPnNvdXJjZSgpLT5zdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICAKKyAg
ICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldEF1
ZGlvVHJhY2tzKCkpCisgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRh
KCk7CisgICAgCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpwYXVzZSgpCit7CisgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpc10geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy5nZXQoKS0+cGF1c2VJbnRlcm5hbCgp
OworICAgIH0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGF1c2VJbnRlcm5hbCgpCit7CisgICAgbV9wbGF5aW5nID0gZmFsc2U7CisgICAgW21fc3lu
Y2hyb25pemVyIHNldFJhdGU6MF07CisKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3Ry
ZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpCisgICAgICAgIHRyYWNrLT5z
b3VyY2UoKS0+c3RvcFByb2R1Y2luZ0RhdGEoKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gdHJhY2sg
OiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldEF1ZGlvVHJhY2tzKCkpCisgICAg
ICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RvcFByb2R1Y2luZ0RhdGEoKTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFbbV9zeW5jaHJvbml6ZXIgcmF0ZV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQoreworICAgIGZv
ciAoYXV0byBpdCA9IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMuYmVnaW4oKSwgZW5kID0g
bV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICBbKml0IHNldFZvbHVtZTp2b2x1bWVdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c3VwcG9ydHNTY2FubmluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpzZXRNdXRlZChib29sIG11dGVkKQoreworICAgIGZvciAoYXV0byBpdCA9IG1fc2FtcGxlQnVm
ZmVyQXVkaW9SZW5kZXJlcnMuYmVnaW4oKSwgZW5kID0gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRl
cmVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBbKml0IHNldE11dGVkOm11dGVk
XTsKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCkt
PmdldEF1ZGlvVHJhY2tzKCkpCisgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c2V0TXV0ZWQobXV0
ZWQpOworICAgIAorfQorCitGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGZsb2F0U2l6ZTsK
KyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdl
dFZpZGVvVHJhY2tzKCkpIHsKKyAgICAgICAgQVZWaWRlb0NhcHR1cmVTb3VyY2UqIHNvdXJjZSA9
IChBVlZpZGVvQ2FwdHVyZVNvdXJjZSopdHJhY2stPnNvdXJjZSgpOworICAgICAgICBpZiAoc291
cmNlLT53aWR0aCgpID4gZmxvYXRTaXplLndpZHRoKCkpCisgICAgICAgICAgICBmbG9hdFNpemUu
c2V0V2lkdGgoc291cmNlLT53aWR0aCgpKTsKKyAgICAgICAgaWYgKHNvdXJjZS0+aGVpZ2h0KCkg
PiBmbG9hdFNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBmbG9hdFNpemUuc2V0SGVpZ2h0KHNv
dXJjZS0+aGVpZ2h0KCkpOworICAgIH0KKyAgICByZXR1cm4gZmxvYXRTaXplOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6aGFzVmlkZW8oKSBjb25zdAor
eworICAgIHJldHVybiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJh
Y2tzKCkuc2l6ZSgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIHJldHVybiBtX01lZGlhU3RyZWFtUHJpdmF0
ZS0+Y2xpZW50KCktPmdldEF1ZGlvVHJhY2tzKCkuc2l6ZSgpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0VmlzaWJsZShib29sKQoreworICAgIC8v
IE5vLW9wLgorfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1lZGlhVGltZTo6
cG9zaXRpdmVJbmZpbml0ZVRpbWUoKTsKK30KKworTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQzo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0Cit7CisgICAgTWVk
aWFUaW1lIHN5bmNocm9uaXplclRpbWUgPSB0b01lZGlhVGltZShDTVRpbWViYXNlR2V0VGltZShb
bV9zeW5jaHJvbml6ZXIgdGltZWJhc2VdKSk7CisgICAgaWYgKHN5bmNocm9uaXplclRpbWUgPCBN
ZWRpYVRpbWU6Onplcm9UaW1lKCkpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1l
KCk7CisgICAgaWYgKHN5bmNocm9uaXplclRpbWUgPCBtX2xhc3RTZWVrVGltZSkKKyAgICAgICAg
cmV0dXJuIG1fbGFzdFNlZWtUaW1lOworICAgIHJldHVybiBzeW5jaHJvbml6ZXJUaW1lOworfQor
CitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdGFydFRp
bWUoKSBjb25zdAoreworICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Cit9CisKK01l
ZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmluaXRpYWxUaW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2Vla2luZygpIGNvbnN0Cit7
CisgICAgLy8gTWVkaWFTdHJlYW0gaXMgdW5zZWVrYWJsZQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFJhdGVEb3Vi
bGUoZG91YmxlKQoreworICAgIC8vIE1lZGlhU3RyZWFtIGlzIHVuc2Vla2FibGU7IHRoZXJlZm9y
ZSwgY2Fubm90IHNldCByYXRlCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQoreworICAg
IE5TU3RyaW5nICphbGdvcml0aG0gPSBwcmVzZXJ2ZXNQaXRjaCA/IEFWQXVkaW9UaW1lUGl0Y2hB
bGdvcml0aG1TcGVjdHJhbCA6IEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1WYXJpc3BlZWQ7Cisg
ICAgZm9yIChhdXRvJiByZW5kZXJlciA6IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMpCisg
ICAgICAgIFtyZW5kZXJlciBzZXRBdWRpb1RpbWVQaXRjaEFsZ29yaXRobTphbGdvcml0aG1dOwor
fQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3Jr
U3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVh
ZHlTdGF0ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZWVrYWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPihtaW5NZWRpYVRpbWVT
ZWVrYWJsZSgpLCBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpKTsKK30KKworTWVkaWFUaW1lIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBj
b25zdAoreworICAgIHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgpOworfQorCitNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjptaW5NZWRpYVRpbWVTZWVrYWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXJ0VGltZSgpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0
Zm9ybVRpbWVSYW5nZXM+KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGJvb2wgbG9hZGlu
Z1Byb2dyZXNzZWQgPSBtX2xvYWRpbmdQcm9ncmVzc2VkOworICAgIG1fbG9hZGluZ1Byb2dyZXNz
ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gbG9hZGluZ1Byb2dyZXNzZWQ7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKGNvbnN0IEludFNpemUm
KQoreworICAgIC8vIE5vLW9wLgorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikKK3sK
KyAgICAvLyBGSVhNRSgxMjUxNTcpOiBJbXBsZW1lbnQgcGFpbnRpbmcuCit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWludEN1cnJlbnRGcmFtZUluQ29u
dGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIC8vIEZJWE1F
KDEyNTE1Nyk6IEltcGxlbWVudCBwYWludGluZy4KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5n
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkK
K3sKKyAgICBpZiAobV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyUmVuZGVyaW5nQ2FuQmVB
Y2NlbGVyYXRlZChtX3BsYXllcikpCisgICAgICAgIGVuc3VyZUxheWVyKCk7CisgICAgZWxzZQor
ICAgICAgICBkZXN0cm95TGF5ZXIoKTsKK30KKworTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjptb3ZpZUxvYWRUeXBlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkK
K3sKKyAgICAvLyBOby1vcC4KK30KKworU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6ZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IGRlc2NyaXB0aW9uKEFTQ0lJTGl0ZXJhbCgiQVZGb3VuZGF0aW9u
IE1lZGlhU3RyZWFtIEVuZ2luZSIpKTsKKyAgICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKK1N0
cmluZyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omxhbmd1YWdlT2ZQcmlt
YXJ5QXVkaW9UcmFjaygpIGNvbnN0Cit7CisgICAgLy8gRklYTUUoMTI1MTU4KTogaW1wbGVtZW50
IGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpCisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Cit9CisKK3NpemVfdCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmV4dHJh
TWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp0b3RhbFZpZGVvRnJhbWVzKCkK
K3sKKyAgICByZXR1cm4gW1ttX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciB2aWRlb1BlcmZvcm1h
bmNlTWV0cmljc10gdG90YWxOdW1iZXJPZlZpZGVvRnJhbWVzXTsKK30KKwordW5zaWduZWQgbG9u
ZyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmRyb3BwZWRWaWRlb0ZyYW1l
cygpCit7CisgICAgcmV0dXJuIFtbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgdmlkZW9QZXJm
b3JtYW5jZU1ldHJpY3NdIG51bWJlck9mRHJvcHBlZFZpZGVvRnJhbWVzXTsKK30KKwordW5zaWdu
ZWQgbG9uZyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmNvcnJ1cHRlZFZp
ZGVvRnJhbWVzKCkKK3sKKyAgICByZXR1cm4gW1ttX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciB2
aWRlb1BlcmZvcm1hbmNlTWV0cmljc10gbnVtYmVyT2ZDb3JydXB0ZWRWaWRlb0ZyYW1lc107Cit9
CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnRvdGFs
RnJhbWVEZWxheSgpCit7CisgICAgcmV0dXJuIE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShb
W21fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIHZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzXSB0b3Rh
bEZyYW1lRGVsYXldKTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBVdGlsaXR5
IE1ldGhvZHMKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVu
c3VyZUxheWVyKCkKK3sKKyAgICBpZiAobV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID0gYWRvcHROUyhb
YWxsb2NBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllckluc3RhbmNlKCkgaW5pdF0pOworI2lmbmRl
ZiBOREVCVUcKKyAgICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgc2V0TmFtZTpAIk1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIl07Cisj
ZW5kaWYKKworICAgIFttX3N5bmNocm9uaXplciBhZGRSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllci5nZXQoKV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpkZXN0cm95TGF5ZXIoKQoreworICAgIGlmICghbV9zYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIENNVGltZSBjdXJyZW50VGltZSA9IENN
VGltZWJhc2VHZXRUaW1lKFttX3N5bmNocm9uaXplciB0aW1lYmFzZV0pOworICAgIFttX3N5bmNo
cm9uaXplciByZW1vdmVSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5nZXQoKSBh
dFRpbWU6Y3VycmVudFRpbWUgd2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCkgeworICAgICAg
ICAvLyBOby1vcC4KKyAgICB9XTsKKyAgICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IG51
bGxwdHI7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpz
aG91bGRCZVBsYXlpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXlpbmcgJiYgbV9yZWFk
eVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IHJlYWR5
U3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7
CisKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCisgICAgICAgIFttX3N5bmNocm9uaXplciBz
ZXRSYXRlOm1fcmF0ZV07CisgICAgZWxzZQorICAgICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0
ZTowXTsKKworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxheUxheWVyKEFWU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyKiBkaXNwbGF5TGF5ZXIpCit7CisgICAgQVNTRVJUKGRpc3Bs
YXlMYXllcik7CisgICAgaWYgKGRpc3BsYXlMYXllciA9PSBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIg
PSBkaXNwbGF5TGF5ZXI7CisgICAgW21fc3luY2hyb25pemVyIGFkZFJlbmRlcmVyOm1fc2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyLmdldCgpXTsKKyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQ
bGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7CisgICAgCisgICAgLy8gRklYTUU6
IG1vdmUgdGhpcyBzb21ld2hlcmUgYXBwcm9wcmlhdGU6CisgICAgbV9wbGF5ZXItPmZpcnN0Vmlk
ZW9GcmFtZUF2YWlsYWJsZSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxheWVyKEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
KiBkaXNwbGF5TGF5ZXIpCit7CisgICAgaWYgKGRpc3BsYXlMYXllciAhPSBtX3NhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENNVGltZSBjdXJyZW50
VGltZSA9IENNVGltZWJhc2VHZXRUaW1lKFttX3N5bmNocm9uaXplciB0aW1lYmFzZV0pOworICAg
IFttX3N5bmNocm9uaXplciByZW1vdmVSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ci5nZXQoKSBhdFRpbWU6Y3VycmVudFRpbWUgd2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCkg
eworICAgICAgICAvLyBOby1vcC4KKyAgICB9XTsKKyAgICAKKyAgICBtX3NhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllciA9IG51bGxwdHI7CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVy
UmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkQXVkaW9SZW5kZXJlcihBVlNhbXBsZUJ1ZmZlckF1
ZGlvUmVuZGVyZXIqIGF1ZGlvUmVuZGVyZXIpCit7CisgICAgaWYgKG1fc2FtcGxlQnVmZmVyQXVk
aW9SZW5kZXJlcnMuY29udGFpbnMoYXVkaW9SZW5kZXJlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJzLmFwcGVuZChhdWRpb1JlbmRlcmVy
KTsKKyAgICAKKyAgICBbYXVkaW9SZW5kZXJlciBzZXRNdXRlZDptX3BsYXllci0+bXV0ZWQoKV07
CisgICAgW2F1ZGlvUmVuZGVyZXIgc2V0Vm9sdW1lOm1fcGxheWVyLT52b2x1bWUoKV07CisgICAg
W2F1ZGlvUmVuZGVyZXIgc2V0QXVkaW9UaW1lUGl0Y2hBbGdvcml0aG06KG1fcGxheWVyLT5wcmVz
ZXJ2ZXNQaXRjaCgpID8gQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVNwZWN0cmFsIDogQVZBdWRp
b1RpbWVQaXRjaEFsZ29yaXRobVZhcmlzcGVlZCldOworICAgIAorICAgIFttX3N5bmNocm9uaXpl
ciBhZGRSZW5kZXJlcjphdWRpb1JlbmRlcmVyXTsKKyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVk
aWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpyZW1vdmVBdWRpb1JlbmRlcmVyKEFWU2Ft
cGxlQnVmZmVyQXVkaW9SZW5kZXJlciogYXVkaW9SZW5kZXJlcikKK3sKKyAgICBzaXplX3QgcG9z
ID0gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5maW5kKGF1ZGlvUmVuZGVyZXIpOworICAg
IGlmIChwb3MgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDTVRpbWUg
Y3VycmVudFRpbWUgPSBDTVRpbWViYXNlR2V0VGltZShbbV9zeW5jaHJvbml6ZXIgdGltZWJhc2Vd
KTsKKyAgICBbbV9zeW5jaHJvbml6ZXIgcmVtb3ZlUmVuZGVyZXI6YXVkaW9SZW5kZXJlciBhdFRp
bWU6Y3VycmVudFRpbWUgd2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCkgeworICAgICAgICAv
LyBOby1vcC4KKyAgICB9XTsKKyAgICAKKyAgICBtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJz
LnJlbW92ZShwb3MpOworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmlu
Z01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6OmNoYXJhY3RlcmlzdGljc0NoYW5nZWQoKQoreworICAgIG1fcGxheWVy
LT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0
cmVhbVByaXZhdGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTk3OThjOWNlMjQxYTRjMDZkNzcyNzM2OWU2ODI0NDNlMTcyNzc0OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVN0cmVhbVByaXZh
dGVBVkZPYmpDX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQ19oCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW5jbHVkZSAiTWVk
aWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NZWRp
YVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworT0JKQ19DTEFTUyBBVkFzc2V0OworT0JK
Q19DTEFTUyBBVlN0cmVhbURhdGFQYXJzZXI7CitPQkpDX0NMQVNTIE5TRXJyb3I7CitPQkpDX0NM
QVNTIE5TT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2Ft
cGxlQnVmZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENETVNlc3Npb247
CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM7CitjbGFzcyBNZWRp
YVN0cmVhbVByaXZhdGU7CitjbGFzcyBNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQ7CitjbGFzcyBQ
bGF0Zm9ybVRpbWVSYW5nZXM7CitjbGFzcyBUaW1lUmFuZ2VzOworCitjbGFzcyBNZWRpYVN0cmVh
bVByaXZhdGVBVkZPYmpDIGZpbmFsIDogcHVibGljIE1lZGlhU3RyZWFtUHJpdmF0ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDPiBjcmVhdGUo
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiwgTWVkaWFTdHJlYW1Qcml2YXRl
Q2xpZW50Kik7CisgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQygpOworCisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiBwbGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3BsYXllcjsgfQorCisgICAgdmlydHVhbCBNZWRpYVN0cmVhbVByaXZhdGVDbGll
bnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldENsaWVudChNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQqIGNsaWVudCkgeyBtX2Ns
aWVudCA9IGNsaWVudDsgfQorCisgICAgTWVkaWFUaW1lIGR1cmF0aW9uKCk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKTsKKworICAgIGJvb2wgaGFz
QXVkaW8oKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOworICAgIEZsb2F0U2l6ZSBuYXR1
cmFsU2l6ZSgpIGNvbnN0OworCisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMoTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiwgTWVkaWFTdHJlYW1Qcml2YXRlQ2xp
ZW50Kik7CisKKyAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMqIG1fcGxh
eWVyOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQ+IG1fY2xpZW50OworfTsK
KyAgICAKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5E
QVRJT04pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3Ry
ZWFtUHJpdmF0ZUFWRk9iakMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU1ZTdlOGViNzlhMjg3N2UzMzliYWE5
MTgyZDQwZjYxNzgwZDYyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMu
bW0KQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2
YXRlQVZGT2JqQy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRB
VElPTikKKworI2ltcG9ydCAiQ29udGVudFR5cGUuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5oIgorI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQgIlNvZnRMaW5r
aW5nLmgiCisjaW1wb3J0ICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9ydCA8
b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbXBv
cnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
cHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMKKwor
UmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9i
akM6OmNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMqIHBhcmVudCwg
TWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQpCit7CisgICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtUHJpdmF0ZUFWRk9iakM+IG1lZGlhU3RyZWFtUHJpdmF0ZSA9IGFkb3B0UmVmKG5ldyBNZWRp
YVN0cmVhbVByaXZhdGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7CisgICAgCisgICAgcmV0dXJu
IG1lZGlhU3RyZWFtUHJpdmF0ZTsKK30KKworTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6TWVk
aWFTdHJlYW1Qcml2YXRlQVZGT2JqQyhNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akMqIHBhcmVudCwgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3Bs
YXllcihwYXJlbnQpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK01lZGlhU3RyZWFt
UHJpdmF0ZUFWRk9iakM6On5NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKCkKK3sKKworfQorCitN
ZWRpYVRpbWUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24oKQoreworICAgIHJl
dHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OmJ1ZmZl
cmVkKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4o
KTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2Jq
Qzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVyLT5yZWFkeVN0YXRl
KCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQoreworICAgIG1fcGxheWVyLT5zZXRS
ZWFkeVN0YXRlKHJlYWR5U3RhdGUpOworfQorCitib29sIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9i
akM6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPmhhc0F1ZGlvKCk7
Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6aGFzVmlkZW8oKSBjb25zdAor
eworICAgIHJldHVybiBtX3BsYXllci0+aGFzVmlkZW8oKTsKK30KKworRmxvYXRTaXplIE1lZGlh
U3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbGF5ZXItPm5hdHVyYWxTaXplKCk7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256514</attachid>
            <date>2015-07-09 14:03:09 -0700</date>
            <delta_ts>2015-07-09 17:06:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146789-20150709140210.patch</filename>
            <type>text/plain</type>
            <size>42443</size>
            <attacher name="Matthew Daiter">mdaiter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZhOGE3Y2MxMDdlMGY3
MWIyMDYxYTI4MjZkMDVmZWNkMGI4M2JkNi4uYWYyMTBlNWNiNzRjMWJlYTM2ODc1MGNkZjU3NDlh
MjIwM2ViYTA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkzIEBACiAyMDE1LTA3LTA5ICBNYXR0
aGV3IERhaXRlciAgPG1kYWl0ZXJAYXBwbGUuY29tPgogCisgICAgICAgIEFkZGluZyBNZWRpYVN0
cmVhbSBFbmdpbmUgYnVpbGRpbmcgYmxvY2tzIHRvIHRoZSBjb2RlIHJlcG8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc4OQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjE3NDcwMjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldExvYWRpbmdQcm9n
cmVzc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjcmVhdGVXZWFrUHRyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Om1p
bWVUeXBlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpj
YW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2VJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om5hdHVyYWxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkdXJhdGlvbk1lZGlhVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmN1
cnJlbnRNZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjppbml0aWFsVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWtpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRS
YXRlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpyZWFkeVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6c2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjptYXhNZWRpYVRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1pbk1lZGlhVGltZVNlZWthYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0
c0FjY2VsZXJhdGVkUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Ojptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZXh0cmFNZW1vcnlDb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dG90YWxW
aWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OmRyb3BwZWRWaWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmNvcnJ1cHRlZFZpZGVvRnJhbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
dG90YWxGcmFtZURlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkZXN0cm95TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzaG91bGRCZVBs
YXlpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxheUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6YWRkQXVkaW9SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlbW92ZUF1ZGlvUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjaGFyYWN0ZXJp
c3RpY3NDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMu
bW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Ok1l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6fk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6YnVmZmVyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc0F1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKToKKwor
MjAxNS0wNy0wOSAgTWF0dGhldyBEYWl0ZXIgIDxtZGFpdGVyQGFwcGxlLmNvbT4KKwogICAgICAg
ICBFeHBvc2VkIEFWVmlkZW9DYXB0dXJlU291cmNlJ3MgYm91bmRzCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY3NjAKICAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzIxNzM2NzcyPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWEx
ODEwMjE4MDVkYTI5MDM5YmI3NTIwNTg2NWM0MTk2MzgxZjQyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQ19oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQ19oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBy
aXZhdGVDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK09CSkNfQ0xBU1MgQVZBc3Nl
dDsKK09CSkNfQ0xBU1MgQVZDYXB0dXJlVmlkZW9QcmV2aWV3TGF5ZXI7CitPQkpDX0NMQVNTIEFW
U2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXI7CitPQkpDX0NMQVNTIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25pemVyOwor
T0JKQ19DTEFTUyBBVlN0cmVhbVNlc3Npb247CisKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUNNVGlt
ZWJhc2UqIENNVGltZWJhc2VSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDKE1lZGlhUGxheWVyKik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKworICAgIC8vIE1lZGlhUGxheWVy
IEZhY3RvcnkgTWV0aG9kcworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisgICAgc3Rh
dGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7CisgICAg
c3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlh
RW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKKworICAgIHZvaWQgYWRkRGlzcGxheUxheWVyKEFW
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKik7CisgICAgdm9pZCByZW1vdmVEaXNwbGF5TGF5ZXIo
QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqKTsKKworICAgIHZvaWQgYWRkQXVkaW9SZW5kZXJl
cihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqKTsKKyAgICB2b2lkIHJlbW92ZUF1ZGlvUmVu
ZGVyZXIoQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKik7CisKKyAgICB2aXJ0dWFsIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKKyAg
ICB2b2lkIHNldE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlKTsKKworICAg
IHZvaWQgc2Vla0ludGVybmFsKCk7CisgICAgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOwor
ICAgIHZvaWQgc2Vla0NvbXBsZXRlZCgpOworICAgIHZvaWQgc2V0TG9hZGluZ1Byb2dyZXNzc2Vk
KGJvb2wgZmxhZykgeyBtX2xvYWRpbmdQcm9ncmVzc2VkID0gZmxhZzsgfQorICAgIHZvaWQgc2V0
SGFzQXZhaWxhYmxlVmlkZW9GcmFtZShib29sIGZsYWcpIHsgbV9oYXNBdmFpbGFibGVWaWRlb0Zy
YW1lID0gZmxhZzsgfQorICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CisKKyAgICB2b2lkIHNp
emVDaGFuZ2VkKCk7CisgICAgdm9pZCBjaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisKKyAgICBX
ZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQz4gY3JlYXRlV2Vha1B0
cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisKK3ByaXZh
dGU6CisgICAgICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZQorICAgIHZvaWQgbG9h
ZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IH07CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkK
KyAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kikg
b3ZlcnJpZGUgeyB9OworI2VuZGlmCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICB2b2lk
IGxvYWQoTWVkaWFTdHJlYW1Qcml2YXRlKikgb3ZlcnJpZGU7CisjZW5kaWYKKyAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsTG9hZCgpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVU
b1BsYXkoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRp
YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNj
cmVlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBwbGF5KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF5SW50ZXJuYWwoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGF1c2VJbnRlcm5hbCgpOworCisg
ICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2
b2lkIHNldFZvbHVtZShmbG9hdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
TXV0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRNdXRlZChib29sKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1Nj
YW5uaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBuYXR1cmFs
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgTWVkaWFUaW1lIHN0YXJ0VGltZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgTWVkaWFUaW1lIGluaXRpYWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2Vla1dpdGhUb2xlcmFuY2UoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1l
JiwgY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGUgeyB9OworICAgIHZpcnR1YWwgYm9vbCBzZWVr
aW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhdGVEb3VibGUoZG91
YmxlKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IHNl
ZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBNZWRpYVRpbWUgbWF4TWVkaWFU
aW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE1lZGlhVGltZSBtaW5N
ZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKworICAg
IHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZTsK
KyAgICAvLyBjYWxsZWQgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlwcyB0aGUgaW50byBv
ciBvdXQgb2YgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIG1vZGUuCisgICAgdmlydHVhbCB2b2lkIGFj
Y2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yUmVuZGVyaW5nKCkgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdmlydHVhbCBTdHJpbmcgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHNpemVfdCBleHRyYU1lbW9yeUNvc3QoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyB0b3RhbFZpZGVvRnJhbWVzKCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGRyb3BwZWRWaWRlb0ZyYW1lcygp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBjb3JydXB0ZWRWaWRlb0ZyYW1l
cygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgTWVkaWFUaW1lIHRvdGFsRnJhbWVEZWxheSgpIG92
ZXJyaWRlOworCisgICAgdm9pZCBlbnN1cmVMYXllcigpOworICAgIHZvaWQgZGVzdHJveUxheWVy
KCk7CisgICAgYm9vbCBzaG91bGRCZVBsYXlpbmcoKSBjb25zdDsKKworICAgIGZyaWVuZCBjbGFz
cyBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVy
OworICAgIFdlYWtQdHJGYWN0b3J5PE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qz4gbV93ZWFrUHRyRmFjdG9yeTsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2Jq
Qz4gbV9NZWRpYVN0cmVhbVByaXZhdGU7CisgICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7
CisgICAgUmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllcjsKKyAgICBWZWN0b3I8UmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyQXVkaW9S
ZW5kZXJlcj4+IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnM7CisgICAgUmV0YWluUHRyPEFW
U2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25pemVyPiBtX3N5bmNocm9uaXplcjsKKyAgICBSZXRh
aW5QdHI8aWQ+IG1fdGltZUp1bXBlZE9ic2VydmVyOworICAgIFJldGFpblB0cjxpZD4gbV9kdXJh
dGlvbk9ic2VydmVyOworICAgIFJldGFpblB0cjxBVlN0cmVhbVNlc3Npb24+IG1fc3RyZWFtU2Vz
c2lvbjsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAg
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICBNZWRpYVRpbWUgbV9s
YXN0U2Vla1RpbWU7CisgICAgZG91YmxlIG1fcmF0ZTsKKyAgICBib29sIG1fcGxheWluZzsKKyAg
ICBib29sIG1fc2Vla2luZzsKKyAgICBib29sIG1fc2Vla0NvbXBsZXRlZDsKKyAgICBtdXRhYmxl
IGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZDsKKyAgICBib29sIG1faGFzQXZhaWxhYmxlVmlkZW9G
cmFtZTsKK307CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQorCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTEwNWQ5
YjA3NDE3ZTFkOGM2ZDAwMTczM2Q4YmUwZWJjZTg1M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0wLDAgKzEsNjI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaCIK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBv
cnQgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgiCisjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCisjaW1w
b3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQg
Ik1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMuaCIKKyNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRh
dGlvbi5oIgorI2ltcG9ydCAiUGxhdGZvcm1DbG9ja0NNLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldC5oPgorI2ltcG9y
dCA8QVZGb3VuZGF0aW9uL0FWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyLmg+CisjaW1wb3J0IDxB
VkZvdW5kYXRpb24vQVZUaW1lLmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KKyNp
bXBvcnQgPG9iamNfcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBv
cnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjcHJhZ21hIG1hcmsgLSBTb2Z0IExpbmtpbmcK
KworI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19P
UFRJT05BTChBVkZvdW5kYXRpb24pCisKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5k
YXRpb24sIEFWQXNzZXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBB
VkNhcHR1cmVWaWRlb1ByZXZpZXdMYXllcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZv
dW5kYXRpb24sIEFWVVJMQXNzZXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0
aW9uLCBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9O
QUwoQVZGb3VuZGF0aW9uLCBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcikKK1NPRlRfTElOS19D
TEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25p
emVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1EYXRh
UGFyc2VyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1T
ZXNzaW9uKTsKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWVmlkZW9Q
ZXJmb3JtYW5jZU1ldHJpY3MpCisKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24sIEFW
QXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1TcGVjdHJhbCwgTlNTdHJpbmcqKQorU09GVF9MSU5LX0NP
TlNUQU5UKEFWRm91bmRhdGlvbiwgQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVZhcmlzcGVlZCwg
TlNTdHJpbmcqKQorCisjZGVmaW5lIEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1TcGVjdHJhbCBn
ZXRBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtU3BlY3RyYWwoKQorI2RlZmluZSBBVkF1ZGlvVGlt
ZVBpdGNoQWxnb3JpdGhtVmFyaXNwZWVkIGdldEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1WYXJp
c3BlZWQoKQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyCisKK0BpbnRlcmZhY2UgQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgOiBDQUxh
eWVyCitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgQVZWaWRlb1BlcmZvcm1h
bmNlTWV0cmljcworCitAaW50ZXJmYWNlIEFWVmlkZW9QZXJmb3JtYW5jZU1ldHJpY3MgOiBOU09i
amVjdAorLSAodW5zaWduZWQgbG9uZyl0b3RhbE51bWJlck9mVmlkZW9GcmFtZXM7CistICh1bnNp
Z25lZCBsb25nKW51bWJlck9mRHJvcHBlZFZpZGVvRnJhbWVzOworLSAodW5zaWduZWQgbG9uZylu
dW1iZXJPZkNvcnJ1cHRlZFZpZGVvRnJhbWVzOworLSAoZG91YmxlKXRvdGFsRnJhbWVEZWxheTsK
K0BlbmQKKworQGludGVyZmFjZSBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciAoV2ViQ29yZUFW
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyUHJpdmF0ZSkKKy0gKEFWVmlkZW9QZXJmb3JtYW5jZU1l
dHJpY3MgKil2aWRlb1BlcmZvcm1hbmNlTWV0cmljczsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0K
KyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIKKworQGludGVyZmFjZSBB
VlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIgOiBOU09iamVjdAorLSAodm9pZClzZXRWb2x1bWU6
KGZsb2F0KXZvbHVtZTsKKy0gKHZvaWQpc2V0TXV0ZWQ6KEJPT0wpbXV0ZWQ7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtOworQGVu
ZAorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3lu
Y2hyb25pemVyCisKK0BpbnRlcmZhY2UgQVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXIg
OiBOU09iamVjdAorLSAoQ01UaW1lYmFzZVJlZil0aW1lYmFzZTsKKy0gKGZsb2F0KXJhdGU7Cist
ICh2b2lkKXNldFJhdGU6KGZsb2F0KXJhdGU7CistICh2b2lkKXNldFJhdGU6KGZsb2F0KXJhdGUg
dGltZTooQ01UaW1lKXRpbWU7CistIChOU0FycmF5ICopcmVuZGVyZXJzOworLSAodm9pZClhZGRS
ZW5kZXJlcjooaWQpcmVuZGVyZXI7CistICh2b2lkKXJlbW92ZVJlbmRlcmVyOihpZClyZW5kZXJl
ciBhdFRpbWU6KENNVGltZSl0aW1lIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9P
TCBkaWRSZW1vdmVSZW5kZXJlcikpY29tcGxldGlvbkhhbmRsZXI7CistIChpZClhZGRQZXJpb2Rp
Y1RpbWVPYnNlcnZlckZvckludGVydmFsOihDTVRpbWUpaW50ZXJ2YWwgcXVldWU6KGRpc3BhdGNo
X3F1ZXVlX3QpcXVldWUgdXNpbmdCbG9jazoodm9pZCAoXikoQ01UaW1lIHRpbWUpKWJsb2NrOwor
LSAoaWQpYWRkQm91bmRhcnlUaW1lT2JzZXJ2ZXJGb3JUaW1lczooTlNBcnJheSAqKXRpbWVzIHF1
ZXVlOihkaXNwYXRjaF9xdWV1ZV90KXF1ZXVlIHVzaW5nQmxvY2s6KHZvaWQgKF4pKHZvaWQpKWJs
b2NrOworLSAodm9pZClyZW1vdmVUaW1lT2JzZXJ2ZXI6KGlkKW9ic2VydmVyOworQGVuZAorCisj
cHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU3RyZWFtU2Vzc2lvbgorCitAaW50ZXJmYWNl
IEFWU3RyZWFtU2Vzc2lvbiA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTdG9y
YWdlRGlyZWN0b3J5QXRVUkw6KE5TVVJMICopc3RvcmFnZURpcmVjdG9yeTsKK0BlbmQKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQworCitNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyhNZWRpYVBs
YXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAgICwgbV93ZWFrUHRyRmFj
dG9yeSh0aGlzKQorICAgICwgbV9zeW5jaHJvbml6ZXIoYWRvcHROUyhbYWxsb2NBVlNhbXBsZUJ1
ZmZlclJlbmRlclN5bmNocm9uaXplckluc3RhbmNlKCkgaW5pdF0pKQorICAgICwgbV9uZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6OklkbGUpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6
OkhhdmVOb3RoaW5nKQorICAgICwgbV9yYXRlKDEpCisgICAgLCBtX3BsYXlpbmcoMCkKKyAgICAs
IG1fc2Vla2luZyhmYWxzZSkKKyAgICAsIG1fc2Vla0NvbXBsZXRlZCh0cnVlKQorICAgICwgbV9s
b2FkaW5nUHJvZ3Jlc3NlZChmYWxzZSkKK3sKKyAgICAvLyBhZGRQZXJpb2RpY1RpbWVPYnNlcnZl
ckZvckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEgbm9uLW51bWVy
aWMgQ01UaW1lLCBzbyBqdXN0IHVzZQorICAgIC8vIGFuIGFyYml0cmFyaWx5IGxhcmdlIHRpbWUg
dmFsdWUgb2Ygb25jZSBhbiBob3VyOgorICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhpcyA9IGNyZWF0
ZVdlYWtQdHIoKTsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNocm9uaXplciBh
ZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlhVGltZTo6Y3Jl
YXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2lu
Z0Jsb2NrOl4oQ01UaW1lIHRpbWUpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworICAg
ICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xNTc5
ODA1MD4gaXMgZml4ZWQuCisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHNob3VsZEJlUGxheWluZygpKQorICAgICAgICAgICAgW21fc3lu
Y2hyb25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICB9XTsKK30KKworTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDKCkKK3sKKyAgICBpZiAobV90aW1lSnVtcGVkT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNo
cm9uaXplciByZW1vdmVUaW1lT2JzZXJ2ZXI6bV90aW1lSnVtcGVkT2JzZXJ2ZXIuZ2V0KCldOwor
ICAgIGlmIChtX2R1cmF0aW9uT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNocm9uaXplciByZW1v
dmVUaW1lT2JzZXJ2ZXI6bV9kdXJhdGlvbk9ic2VydmVyLmdldCgpXTsKK30KKworI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUo
TWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgp
KQorICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+KHBsYXll
cik7IH0sIGdldFN1cHBvcnRlZFR5cGVzLAorICAgICAgICAgICAgc3VwcG9ydHNUeXBlLCAwLCAw
LCAwLCAwKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpCisgICAg
JiYgaXNDb3JlTWVkaWFGcmFtZXdvcmtBdmFpbGFibGUoKQorICAgICYmIGdldEFWU3RyZWFtRGF0
YVBhcnNlckNsYXNzKCkKKyAgICAmJiBnZXRBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJDbGFz
cygpCisgICAgJiYgZ2V0QVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXJDbGFzcygpCisg
ICAgJiYgY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoZ2V0QVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRl
cmVyQ2xhc3MoKSwgQHNlbGVjdG9yKHNldE11dGVkOikpOworfQorCitzdGF0aWMgSGFzaFNldDxT
dHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQoreworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7CisgICAgc3RhdGljIGJvb2wgdHlwZUxp
c3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKHR5cGVMaXN0SW5pdGlhbGl6ZWQpCisg
ICAgICAgIHJldHVybiBjYWNoZTsKKyAgICB0eXBlTGlzdEluaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIE5TQXJyYXkgKnR5cGVzID0gW2dldEFWVVJMQXNzZXRDbGFzcygpIGF1ZGlvdmlzdWFsTUlN
RVR5cGVzXTsKKyAgICBmb3IgKE5TU3RyaW5nICptaW1lVHlwZSBpbiB0eXBlcykKKyAgICAgICAg
Y2FjaGUuYWRkKG1pbWVUeXBlKTsKKworICAgIHJldHVybiBjYWNoZTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hT
ZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9CisK
K01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYg
cGFyYW1ldGVycykKK3sKKyAgICAvLyBUaGlzIGVuZ2luZSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1t
ZWRpYS1zdHJlYW0gc291cmNlcy4KKyAgICBpZiAocGFyYW1ldGVycy5pc01lZGlhU3RyZWFtKQor
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOworICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1h
cmsgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIE92ZXJyaWRlcworCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bG9hZChNZWRpYVN0cmVhbVByaXZhdGUqIGNs
aWVudCkKK3sKKyAgICBtX01lZGlhU3RyZWFtUHJpdmF0ZSA9IE1lZGlhU3RyZWFtUHJpdmF0ZUFW
Rk9iakM6OmNyZWF0ZSh0aGlzLCBjbGllbnQtPmNsaWVudCgpKTsKKyAgICBmb3IgKGF1dG8gdHJh
Y2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpIHsK
KyAgICAgICAgdHJhY2stPnNvdXJjZSgpLT5zdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICAgICAg
dHJhY2stPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgfQorICAgIGZvciAoYXV0byB0cmFjayA6IG1f
TWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVkaW9UcmFja3MoKSkgeworICAgICAg
ICB0cmFjay0+c291cmNlKCktPnN0YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgICAgICB0cmFjay0+
c2V0RW5hYmxlZCh0cnVlKTsKKyAgICB9CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxh
eWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6Y2FuY2VsTG9hZCgpCit7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwcmVwYXJlVG9QbGF5KCkKK3sKK30K
KworUGxhdGZvcm1NZWRpYSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBs
YXRmb3JtTWVkaWEoKSBjb25zdAoreworICAgIFBsYXRmb3JtTWVkaWEgcG07CisgICAgcG0udHlw
ZSA9IFBsYXRmb3JtTWVkaWE6OkFWRm91bmRhdGlvbkFzc2V0VHlwZTsKKyAgICBwbS5tZWRpYS5h
dmZBc3NldCA9IG1fYXNzZXQuZ2V0KCk7CisgICAgcmV0dXJuIHBtOworfQorCitQbGF0Zm9ybUxh
eWVyKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAoreworICAgIGlmICghbV9NZWRpYVN0cmVhbVByaXZhdGUpCisgICAgICAgIHJldHVy
biBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBmb3Ig
KGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJh
Y2tzKCkpIHsKKyAgICAgICAgLy8gSnVzdCBncmFiIHRoZSBmaXJzdCB3ZWJjYW0gZm9yIG5vdywg
d2UgY2FuIG1hbmFnZSBtb3JlIGxhdGVyCisgICAgICAgIEFWVmlkZW9DYXB0dXJlU291cmNlKiBj
YXB0dXJlID0gKEFWVmlkZW9DYXB0dXJlU291cmNlKil0cmFjay0+c291cmNlKCk7CisgICAgICAg
IHJldHVybiAoUGxhdGZvcm1MYXllciopW2dldEFWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyQ2xh
c3MoKSBsYXllcldpdGhTZXNzaW9uOmNhcHR1cmUtPnNlc3Npb24oKV07CisgICAgfQorICAgIHJl
dHVybiBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnBsYXRmb3JtTGF5ZXIoKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXkoKQoreworICAg
IGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChb
d2Vha1RoaXNdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgd2Vha1RoaXMuZ2V0KCktPnBsYXlJbnRlcm5hbCgpOworICAgIH0pOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGxheUludGVybmFsKCkK
K3sKKyAgICBtX3BsYXlpbmcgPSB0cnVlOworICAgIGlmIChzaG91bGRCZVBsYXlpbmcoKSkKKyAg
ICAgICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6bV9yYXRlXTsKKworICAgIGZvciAoYXV0byB0
cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkK
KyAgICAgICAgdHJhY2stPnNvdXJjZSgpLT5zdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICAKKyAg
ICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldEF1
ZGlvVHJhY2tzKCkpCisgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRh
KCk7CisgICAgCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpwYXVzZSgpCit7CisgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpc10geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy5nZXQoKS0+cGF1c2VJbnRlcm5hbCgp
OworICAgIH0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGF1c2VJbnRlcm5hbCgpCit7CisgICAgbV9wbGF5aW5nID0gZmFsc2U7CisgICAgW21fc3lu
Y2hyb25pemVyIHNldFJhdGU6MF07CisKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3Ry
ZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpCisgICAgICAgIHRyYWNrLT5z
b3VyY2UoKS0+c3RvcFByb2R1Y2luZ0RhdGEoKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gdHJhY2sg
OiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldEF1ZGlvVHJhY2tzKCkpCisgICAg
ICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RvcFByb2R1Y2luZ0RhdGEoKTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFbbV9zeW5jaHJvbml6ZXIgcmF0ZV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQoreworICAgIGZv
ciAoYXV0byBpdCA9IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMuYmVnaW4oKSwgZW5kID0g
bV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICBbKml0IHNldFZvbHVtZTp2b2x1bWVdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c3VwcG9ydHNTY2FubmluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpzZXRNdXRlZChib29sIG11dGVkKQoreworICAgIGZvciAoYXV0byBpdCA9IG1fc2FtcGxlQnVm
ZmVyQXVkaW9SZW5kZXJlcnMuYmVnaW4oKSwgZW5kID0gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRl
cmVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBbKml0IHNldE11dGVkOm11dGVk
XTsKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCkt
PmdldEF1ZGlvVHJhY2tzKCkpCisgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c2V0TXV0ZWQobXV0
ZWQpOworICAgIAorfQorCitGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGZsb2F0U2l6ZTsK
KyAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdl
dFZpZGVvVHJhY2tzKCkpIHsKKyAgICAgICAgQVZWaWRlb0NhcHR1cmVTb3VyY2UqIHNvdXJjZSA9
IChBVlZpZGVvQ2FwdHVyZVNvdXJjZSopdHJhY2stPnNvdXJjZSgpOworICAgICAgICBpZiAoc291
cmNlLT53aWR0aCgpID4gZmxvYXRTaXplLndpZHRoKCkpCisgICAgICAgICAgICBmbG9hdFNpemUu
c2V0V2lkdGgoc291cmNlLT53aWR0aCgpKTsKKyAgICAgICAgaWYgKHNvdXJjZS0+aGVpZ2h0KCkg
PiBmbG9hdFNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBmbG9hdFNpemUuc2V0SGVpZ2h0KHNv
dXJjZS0+aGVpZ2h0KCkpOworICAgIH0KKyAgICByZXR1cm4gZmxvYXRTaXplOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6aGFzVmlkZW8oKSBjb25zdAor
eworICAgIHJldHVybiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJh
Y2tzKCkuc2l6ZSgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIHJldHVybiBtX01lZGlhU3RyZWFtUHJpdmF0
ZS0+Y2xpZW50KCktPmdldEF1ZGlvVHJhY2tzKCkuc2l6ZSgpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0VmlzaWJsZShib29sKQoreworICAgIC8v
IE5vLW9wLgorfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1lZGlhVGltZTo6
cG9zaXRpdmVJbmZpbml0ZVRpbWUoKTsKK30KKworTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQzo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0Cit7CisgICAgTWVk
aWFUaW1lIHN5bmNocm9uaXplclRpbWUgPSB0b01lZGlhVGltZShDTVRpbWViYXNlR2V0VGltZShb
bV9zeW5jaHJvbml6ZXIgdGltZWJhc2VdKSk7CisgICAgaWYgKHN5bmNocm9uaXplclRpbWUgPCBN
ZWRpYVRpbWU6Onplcm9UaW1lKCkpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1l
KCk7CisgICAgaWYgKHN5bmNocm9uaXplclRpbWUgPCBtX2xhc3RTZWVrVGltZSkKKyAgICAgICAg
cmV0dXJuIG1fbGFzdFNlZWtUaW1lOworICAgIHJldHVybiBzeW5jaHJvbml6ZXJUaW1lOworfQor
CitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdGFydFRp
bWUoKSBjb25zdAoreworICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Cit9CisKK01l
ZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmluaXRpYWxUaW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2Vla2luZygpIGNvbnN0Cit7
CisgICAgLy8gTWVkaWFTdHJlYW0gaXMgdW5zZWVrYWJsZQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFJhdGVEb3Vi
bGUoZG91YmxlKQoreworICAgIC8vIE1lZGlhU3RyZWFtIGlzIHVuc2Vla2FibGU7IHRoZXJlZm9y
ZSwgY2Fubm90IHNldCByYXRlCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQoreworICAg
IE5TU3RyaW5nICphbGdvcml0aG0gPSBwcmVzZXJ2ZXNQaXRjaCA/IEFWQXVkaW9UaW1lUGl0Y2hB
bGdvcml0aG1TcGVjdHJhbCA6IEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1WYXJpc3BlZWQ7Cisg
ICAgZm9yIChhdXRvJiByZW5kZXJlciA6IG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMpCisg
ICAgICAgIFtyZW5kZXJlciBzZXRBdWRpb1RpbWVQaXRjaEFsZ29yaXRobTphbGdvcml0aG1dOwor
fQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3Jr
U3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVh
ZHlTdGF0ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZWVrYWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPihtaW5NZWRpYVRpbWVT
ZWVrYWJsZSgpLCBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpKTsKK30KKworTWVkaWFUaW1lIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBj
b25zdAoreworICAgIHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgpOworfQorCitNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjptaW5NZWRpYVRpbWVTZWVrYWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXJ0VGltZSgpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0
Zm9ybVRpbWVSYW5nZXM+KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGJvb2wgbG9hZGlu
Z1Byb2dyZXNzZWQgPSBtX2xvYWRpbmdQcm9ncmVzc2VkOworICAgIG1fbG9hZGluZ1Byb2dyZXNz
ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gbG9hZGluZ1Byb2dyZXNzZWQ7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKGNvbnN0IEludFNpemUm
KQoreworICAgIC8vIE5vLW9wLgorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikKK3sK
KyAgICAvLyBGSVhNRSgxMjUxNTcpOiBJbXBsZW1lbnQgcGFpbnRpbmcuCit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWludEN1cnJlbnRGcmFtZUluQ29u
dGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIC8vIEZJWE1F
KDEyNTE1Nyk6IEltcGxlbWVudCBwYWludGluZy4KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5n
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkK
K3sKKyAgICBpZiAobV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyUmVuZGVyaW5nQ2FuQmVB
Y2NlbGVyYXRlZChtX3BsYXllcikpCisgICAgICAgIGVuc3VyZUxheWVyKCk7CisgICAgZWxzZQor
ICAgICAgICBkZXN0cm95TGF5ZXIoKTsKK30KKworTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjptb3ZpZUxvYWRUeXBlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwcmVwYXJlRm9yUmVuZGVyaW5nKCkK
K3sKKyAgICAvLyBOby1vcC4KK30KKworU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6ZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IGRlc2NyaXB0aW9uKEFTQ0lJTGl0ZXJhbCgiQVZGb3VuZGF0aW9u
IE1lZGlhU3RyZWFtIEVuZ2luZSIpKTsKKyAgICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKK1N0
cmluZyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omxhbmd1YWdlT2ZQcmlt
YXJ5QXVkaW9UcmFjaygpIGNvbnN0Cit7CisgICAgLy8gRklYTUUoMTI1MTU4KTogaW1wbGVtZW50
IGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpCisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Cit9CisKK3NpemVfdCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmV4dHJh
TWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp0b3RhbFZpZGVvRnJhbWVzKCkK
K3sKKyAgICByZXR1cm4gW1ttX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciB2aWRlb1BlcmZvcm1h
bmNlTWV0cmljc10gdG90YWxOdW1iZXJPZlZpZGVvRnJhbWVzXTsKK30KKwordW5zaWduZWQgbG9u
ZyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmRyb3BwZWRWaWRlb0ZyYW1l
cygpCit7CisgICAgcmV0dXJuIFtbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgdmlkZW9QZXJm
b3JtYW5jZU1ldHJpY3NdIG51bWJlck9mRHJvcHBlZFZpZGVvRnJhbWVzXTsKK30KKwordW5zaWdu
ZWQgbG9uZyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmNvcnJ1cHRlZFZp
ZGVvRnJhbWVzKCkKK3sKKyAgICByZXR1cm4gW1ttX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciB2
aWRlb1BlcmZvcm1hbmNlTWV0cmljc10gbnVtYmVyT2ZDb3JydXB0ZWRWaWRlb0ZyYW1lc107Cit9
CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnRvdGFs
RnJhbWVEZWxheSgpCit7CisgICAgcmV0dXJuIE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShb
W21fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIHZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzXSB0b3Rh
bEZyYW1lRGVsYXldKTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBVdGlsaXR5
IE1ldGhvZHMKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVu
c3VyZUxheWVyKCkKK3sKKyAgICBpZiAobV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID0gYWRvcHROUyhb
YWxsb2NBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllckluc3RhbmNlKCkgaW5pdF0pOworI2lmbmRl
ZiBOREVCVUcKKyAgICBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgc2V0TmFtZTpAIk1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIl07Cisj
ZW5kaWYKKworICAgIFttX3N5bmNocm9uaXplciBhZGRSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllci5nZXQoKV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpkZXN0cm95TGF5ZXIoKQoreworICAgIGlmICghbV9zYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIENNVGltZSBjdXJyZW50VGltZSA9IENN
VGltZWJhc2VHZXRUaW1lKFttX3N5bmNocm9uaXplciB0aW1lYmFzZV0pOworICAgIFttX3N5bmNo
cm9uaXplciByZW1vdmVSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5nZXQoKSBh
dFRpbWU6Y3VycmVudFRpbWUgd2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCkgeworICAgICAg
ICAvLyBOby1vcC4KKyAgICB9XTsKKyAgICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IG51
bGxwdHI7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpz
aG91bGRCZVBsYXlpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXlpbmcgJiYgbV9yZWFk
eVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IHJlYWR5
U3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7
CisKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCisgICAgICAgIFttX3N5bmNocm9uaXplciBz
ZXRSYXRlOm1fcmF0ZV07CisgICAgZWxzZQorICAgICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0
ZTowXTsKKworICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxheUxheWVyKEFWU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyKiBkaXNwbGF5TGF5ZXIpCit7CisgICAgQVNTRVJUKGRpc3Bs
YXlMYXllcik7CisgICAgaWYgKGRpc3BsYXlMYXllciA9PSBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIg
PSBkaXNwbGF5TGF5ZXI7CisgICAgW21fc3luY2hyb25pemVyIGFkZFJlbmRlcmVyOm1fc2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyLmdldCgpXTsKKyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQ
bGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7CisgICAgCisgICAgLy8gRklYTUU6
IG1vdmUgdGhpcyBzb21ld2hlcmUgYXBwcm9wcmlhdGU6CisgICAgbV9wbGF5ZXItPmZpcnN0Vmlk
ZW9GcmFtZUF2YWlsYWJsZSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxheWVyKEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
KiBkaXNwbGF5TGF5ZXIpCit7CisgICAgaWYgKGRpc3BsYXlMYXllciAhPSBtX3NhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENNVGltZSBjdXJyZW50
VGltZSA9IENNVGltZWJhc2VHZXRUaW1lKFttX3N5bmNocm9uaXplciB0aW1lYmFzZV0pOworICAg
IFttX3N5bmNocm9uaXplciByZW1vdmVSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ci5nZXQoKSBhdFRpbWU6Y3VycmVudFRpbWUgd2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCkg
eworICAgICAgICAvLyBOby1vcC4KKyAgICB9XTsKKyAgICAKKyAgICBtX3NhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllciA9IG51bGxwdHI7CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVy
UmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkQXVkaW9SZW5kZXJlcihBVlNhbXBsZUJ1ZmZlckF1
ZGlvUmVuZGVyZXIqIGF1ZGlvUmVuZGVyZXIpCit7CisgICAgaWYgKG1fc2FtcGxlQnVmZmVyQXVk
aW9SZW5kZXJlcnMuY29udGFpbnMoYXVkaW9SZW5kZXJlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJzLmFwcGVuZChhdWRpb1JlbmRlcmVy
KTsKKyAgICAKKyAgICBbYXVkaW9SZW5kZXJlciBzZXRNdXRlZDptX3BsYXllci0+bXV0ZWQoKV07
CisgICAgW2F1ZGlvUmVuZGVyZXIgc2V0Vm9sdW1lOm1fcGxheWVyLT52b2x1bWUoKV07CisgICAg
W2F1ZGlvUmVuZGVyZXIgc2V0QXVkaW9UaW1lUGl0Y2hBbGdvcml0aG06KG1fcGxheWVyLT5wcmVz
ZXJ2ZXNQaXRjaCgpID8gQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVNwZWN0cmFsIDogQVZBdWRp
b1RpbWVQaXRjaEFsZ29yaXRobVZhcmlzcGVlZCldOworICAgIAorICAgIFttX3N5bmNocm9uaXpl
ciBhZGRSZW5kZXJlcjphdWRpb1JlbmRlcmVyXTsKKyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVk
aWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpyZW1vdmVBdWRpb1JlbmRlcmVyKEFWU2Ft
cGxlQnVmZmVyQXVkaW9SZW5kZXJlciogYXVkaW9SZW5kZXJlcikKK3sKKyAgICBzaXplX3QgcG9z
ID0gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5maW5kKGF1ZGlvUmVuZGVyZXIpOworICAg
IGlmIChwb3MgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDTVRpbWUg
Y3VycmVudFRpbWUgPSBDTVRpbWViYXNlR2V0VGltZShbbV9zeW5jaHJvbml6ZXIgdGltZWJhc2Vd
KTsKKyAgICBbbV9zeW5jaHJvbml6ZXIgcmVtb3ZlUmVuZGVyZXI6YXVkaW9SZW5kZXJlciBhdFRp
bWU6Y3VycmVudFRpbWUgd2l0aENvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCkgeworICAgICAgICAv
LyBOby1vcC4KKyAgICB9XTsKKyAgICAKKyAgICBtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJz
LnJlbW92ZShwb3MpOworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmlu
Z01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6OmNoYXJhY3RlcmlzdGljc0NoYW5nZWQoKQoreworICAgIG1fcGxheWVy
LT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0
cmVhbVByaXZhdGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2FmM2YwMjU0YTg3MGJkNzBjNzE1ZTljN2FhNzM3MWU1ZmQ4OGMyMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVN0cmVhbVByaXZh
dGVBVkZPYmpDX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQ19oCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW5jbHVkZSAiTWVk
aWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NZWRp
YVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworT0JKQ19DTEFTUyBBVkFzc2V0OworT0JK
Q19DTEFTUyBBVlN0cmVhbURhdGFQYXJzZXI7CitPQkpDX0NMQVNTIE5TRXJyb3I7CitPQkpDX0NM
QVNTIE5TT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2Ft
cGxlQnVmZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENETVNlc3Npb247
CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM7CitjbGFzcyBNZWRp
YVN0cmVhbVByaXZhdGU7CitjbGFzcyBNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQ7CitjbGFzcyBQ
bGF0Zm9ybVRpbWVSYW5nZXM7CitjbGFzcyBUaW1lUmFuZ2VzOworCitjbGFzcyBNZWRpYVN0cmVh
bVByaXZhdGVBVkZPYmpDIGZpbmFsIDogcHVibGljIE1lZGlhU3RyZWFtUHJpdmF0ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDPiBjcmVhdGUo
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiwgTWVkaWFTdHJlYW1Qcml2YXRl
Q2xpZW50Kik7CisgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQygpOworCisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiBwbGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3BsYXllcjsgfQorCisgICAgdmlydHVhbCBNZWRpYVN0cmVhbVByaXZhdGVDbGll
bnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldENsaWVudChNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQqIGNsaWVudCkgeyBtX2Ns
aWVudCA9IGNsaWVudDsgfQorCisgICAgTWVkaWFUaW1lIGR1cmF0aW9uKCk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKTsKKworICAgIGJvb2wgaGFz
QXVkaW8oKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOworICAgIEZsb2F0U2l6ZSBuYXR1
cmFsU2l6ZSgpIGNvbnN0OworCisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMoTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiwgTWVkaWFTdHJlYW1Qcml2YXRlQ2xp
ZW50Kik7CisKKyAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMqIG1fcGxh
eWVyOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQ+IG1fY2xpZW50OworfTsK
KyAgICAKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5E
QVRJT04pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3Ry
ZWFtUHJpdmF0ZUFWRk9iakMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFlMmQyZjcwNTA3ZDZhZDE0Y2MzMmE1
YzFkMTljNDU1MGI4ZjE5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMu
bW0KQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2
YXRlQVZGT2JqQy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRB
VElPTikKKworI2ltcG9ydCAiQ29udGVudFR5cGUuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5oIgorI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQgIlNvZnRMaW5r
aW5nLmgiCisjaW1wb3J0ICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9ydCA8
b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbXBv
cnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
cHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMKKwor
UmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9i
akM6OmNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMqIHBhcmVudCwg
TWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQpCit7CisgICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtUHJpdmF0ZUFWRk9iakM+IG1lZGlhU3RyZWFtUHJpdmF0ZSA9IGFkb3B0UmVmKG5ldyBNZWRp
YVN0cmVhbVByaXZhdGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7CisgICAgCisgICAgcmV0dXJu
IG1lZGlhU3RyZWFtUHJpdmF0ZTsKK30KKworTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6TWVk
aWFTdHJlYW1Qcml2YXRlQVZGT2JqQyhNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akMqIHBhcmVudCwgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3Bs
YXllcihwYXJlbnQpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK01lZGlhU3RyZWFt
UHJpdmF0ZUFWRk9iakM6On5NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKCkKK3sKKworfQorCitN
ZWRpYVRpbWUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24oKQoreworICAgIHJl
dHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OmJ1ZmZl
cmVkKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4o
KTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2Jq
Qzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVyLT5yZWFkeVN0YXRl
KCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQoreworICAgIG1fcGxheWVyLT5zZXRS
ZWFkeVN0YXRlKHJlYWR5U3RhdGUpOworfQorCitib29sIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9i
akM6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPmhhc0F1ZGlvKCk7
Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6aGFzVmlkZW8oKSBjb25zdAor
eworICAgIHJldHVybiBtX3BsYXllci0+aGFzVmlkZW8oKTsKK30KKworRmxvYXRTaXplIE1lZGlh
U3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbGF5ZXItPm5hdHVyYWxTaXplKCk7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256543</attachid>
            <date>2015-07-09 17:06:48 -0700</date>
            <delta_ts>2015-07-09 17:24:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146789-20150709170548.patch</filename>
            <type>text/plain</type>
            <size>42995</size>
            <attacher name="Matthew Daiter">mdaiter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZhOGE3Y2MxMDdlMGY3
MWIyMDYxYTI4MjZkMDVmZWNkMGI4M2JkNi4uY2Y0MGIzMjg4OGVmMDIzMTdhYTFlYTExY2FmNWQ0
NWIxYTQ3MDNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk1IEBACiAyMDE1LTA3LTA5ICBNYXR0
aGV3IERhaXRlciAgPG1kYWl0ZXJAYXBwbGUuY29tPgogCisgICAgICAgIEFkZGluZyBNZWRpYVN0
cmVhbSBFbmdpbmUgYnVpbGRpbmcgYmxvY2tzIHRvIHRoZSBjb2RlIHJlcG8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc4OQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjE3NDcwMjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldExvYWRpbmdQcm9n
cmVzc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjcmVhdGVXZWFrUHRyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Om1p
bWVUeXBlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpj
YW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2VJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om5hdHVyYWxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkdXJhdGlvbk1lZGlhVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmN1
cnJlbnRNZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjppbml0aWFsVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWtpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRS
YXRlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpyZWFkeVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6c2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjptYXhNZWRpYVRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1pbk1lZGlhVGltZVNlZWthYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0
c0FjY2VsZXJhdGVkUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Ojptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZXh0cmFNZW1vcnlDb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dG90YWxW
aWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OmRyb3BwZWRWaWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmNvcnJ1cHRlZFZpZGVvRnJhbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
dG90YWxGcmFtZURlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkZXN0cm95TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzaG91bGRCZVBs
YXlpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxheUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6YWRkQXVkaW9SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlbW92ZUF1ZGlvUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjaGFyYWN0ZXJp
c3RpY3NDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMu
bW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Ok1l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6fk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6YnVmZmVyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc0F1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaDogCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGU6Ok1lZGlhU3RyZWFtUHJpdmF0ZSk6IEFk
ZGVkIGNvbnN0cnVjdG9yLgorCisyMDE1LTA3LTA5ICBNYXR0aGV3IERhaXRlciAgPG1kYWl0ZXJA
YXBwbGUuY29tPgorCiAgICAgICAgIEV4cG9zZWQgQVZWaWRlb0NhcHR1cmVTb3VyY2UncyBib3Vu
ZHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc2
MAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjE3MzY3NzI+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3NjRlNDZkNjYyMmFiNmJiNTRkMWJhYzRlY2I1N2UyNGQzY2NkNWIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApAQCAt
MCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDX2gKKyNkZWZp
bmUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDX2gKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KworT0JKQ19DTEFTUyBBVkFzc2V0OworT0JKQ19DTEFTUyBBVkNhcHR1cmVWaWRlb1ByZXZpZXdM
YXllcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyOworT0JKQ19DTEFT
UyBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJS
ZW5kZXJTeW5jaHJvbml6ZXI7CitPQkpDX0NMQVNTIEFWU3RyZWFtU2Vzc2lvbjsKKwordHlwZWRl
ZiBzdHJ1Y3QgT3BhcXVlQ01UaW1lYmFzZSogQ01UaW1lYmFzZVJlZjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMgOiBw
dWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoTWVkaWFQbGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoKTsKKworICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwor
CisgICAgLy8gTWVkaWFQbGF5ZXIgRmFjdG9yeSBNZXRob2RzCisgICAgc3RhdGljIGJvb2wgaXNB
dmFpbGFibGUoKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOworCisgICAgdm9p
ZCBhZGREaXNwbGF5TGF5ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqKTsKKyAgICB2b2lk
IHJlbW92ZURpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciopOworCisgICAg
dm9pZCBhZGRBdWRpb1JlbmRlcmVyKEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciopOworICAg
IHZvaWQgcmVtb3ZlQXVkaW9SZW5kZXJlcihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqKTsK
KworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7
CisgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CisK
KyAgICB2b2lkIHNlZWtJbnRlcm5hbCgpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQo
KTsKKyAgICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNldExvYWRpbmdQcm9ncmVz
c3NlZChib29sIGZsYWcpIHsgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KKyAgICB2b2lk
IHNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxhYmxlVmlk
ZW9GcmFtZSA9IGZsYWc7IH0KKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOworCisgICAgdm9p
ZCBzaXplQ2hhbmdlZCgpOworICAgIHZvaWQgY2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpOworCisg
ICAgV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+IGNyZWF0ZVdl
YWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQorCitw
cml2YXRlOgorICAgICAgICAvLyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UKKyAgICB2b2lk
IGxvYWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9OworI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCopIG92ZXJyaWRlIHsgfTsKKyNlbmRpZgorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAg
dm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSopIG92ZXJyaWRlOworI2VuZGlmCisgICAgdm9p
ZCBjYW5jZWxMb2FkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHByZXBhcmVUb1BsYXkoKSBvdmVy
cmlkZTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxheUludGVybmFsKCk7
CisKKyAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYXVzZUludGVybmFsKCk7
CisKKyAgICBib29sIHBhdXNlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpIG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNNdXRpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBzZXRNdXRlZChib29sKSBvdmVycmlkZTsK
KworICAgIGJvb2wgc3VwcG9ydHNTY2FubmluZygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxv
YXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGhhc1ZpZGVv
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRlOworCisgICAgTWVkaWFUaW1lIGR1
cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIGN1cnJlbnRN
ZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBNZWRpYVRpbWUgc3RhcnRUaW1lKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIGluaXRpYWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1l
ZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlIHsgfTsKKyAgICBib29sIHNlZWtp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJhdGVEb3VibGUoZG91YmxlKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgb3ZlcnJpZGU7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBzZWVrYWJsZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIE1lZGlhVGltZSBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIE1lZGlhVGltZSBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKworICAg
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKworICAgIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9G
cmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVu
ZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHJlbmRlcmlu
ZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBt
b2RlLgorICAgIHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlk
ZTsKKworICAgIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIHZvaWQgcHJlcGFyZUZvclJlbmRlcmluZygpIG92ZXJyaWRlOwor
CisgICAgU3RyaW5nIGVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBT
dHJpbmcgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB1bnNpZ25l
ZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBsb25nIGRy
b3BwZWRWaWRlb0ZyYW1lcygpIG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGxvbmcgY29ycnVwdGVk
VmlkZW9GcmFtZXMoKSBvdmVycmlkZTsKKyAgICBNZWRpYVRpbWUgdG90YWxGcmFtZURlbGF5KCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGVuc3VyZUxheWVyKCk7CisgICAgdm9pZCBkZXN0cm95TGF5
ZXIoKTsKKyAgICBib29sIHNob3VsZEJlUGxheWluZygpIGNvbnN0OworCisgICAgZnJpZW5kIGNs
YXNzIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM7CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5
ZXI7CisgICAgV2Vha1B0ckZhY3Rvcnk8TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDPiBtX3dlYWtQdHJGYWN0b3J5OworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVBVkZP
YmpDPiBtX01lZGlhU3RyZWFtUHJpdmF0ZTsKKyAgICBSZXRhaW5QdHI8QVZBc3NldD4gbV9hc3Nl
dDsKKyAgICBSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI+IG1fc2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyOworICAgIFZlY3RvcjxSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJBdWRp
b1JlbmRlcmVyPj4gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyczsKKyAgICBSZXRhaW5QdHI8
QVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXI+IG1fc3luY2hyb25pemVyOworICAgIFJl
dGFpblB0cjxpZD4gbV90aW1lSnVtcGVkT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPGlkPiBtX2R1
cmF0aW9uT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPEFWU3RyZWFtU2Vzc2lvbj4gbV9zdHJlYW1T
ZXNzaW9uOworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGUgeyBN
ZWRpYVBsYXllcjo6SWRsZSB9OworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZSB7IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZyB9OworICAgIE1lZGlhVGltZSBtX2xhc3RT
ZWVrVGltZTsKKyAgICBkb3VibGUgbV9yYXRlIHsgMSB9OworICAgIGJvb2wgbV9wbGF5aW5nIHsg
MCB9OworICAgIGJvb2wgbV9zZWVraW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2Vla0NvbXBs
ZXRlZCB7IHRydWUgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWU7Cit9OworICAgIAorfQor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQ19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTBjMzM2NDQ2YjRjMTRhY2Y3NjI5ZjVkNGEw
OWFjNWEyOWFmNTllMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFt
QVZGT2JqQy5tbQpAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJBVlZpZGVvQ2FwdHVyZVNv
dXJjZS5oIgorI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2lt
cG9ydCAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGVB
VkZPYmpDLmgiCisjaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlBs
YXRmb3JtQ2xvY2tDTS5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCA8QVZGb3VuZGF0aW9uL0FWQXNzZXQuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkNh
cHR1cmVWaWRlb1ByZXZpZXdMYXllci5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5o
PgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQUxheWVyLmg+CisjaW1wb3J0IDxvYmpjX3J1bnRpbWUu
aD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKworI3ByYWdtYSBtYXJrIC0gU29mdCBMaW5raW5nCisKKyNpbXBvcnQgIkNvcmVNZWRp
YVNvZnRMaW5rLmgiCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9u
KQorCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVkFzc2V0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlVmlkZW9QcmV2aWV3
TGF5ZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlVSTEFzc2V0
KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTYW1wbGVCdWZmZXJB
dWRpb1JlbmRlcmVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZT
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3Vu
ZGF0aW9uLCBBVlNhbXBsZUJ1ZmZlclJlbmRlclN5bmNocm9uaXplcikKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtRGF0YVBhcnNlcikKK1NPRlRfTElOS19D
TEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtU2Vzc2lvbik7CitTT0ZUX0xJTktf
Q0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzKQor
CitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvVGltZVBpdGNoQWxnb3Jp
dGhtU3BlY3RyYWwsIE5TU3RyaW5nKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24s
IEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1WYXJpc3BlZWQsIE5TU3RyaW5nKikKKworI2RlZmlu
ZSBBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtU3BlY3RyYWwgZ2V0QVZBdWRpb1RpbWVQaXRjaEFs
Z29yaXRobVNwZWN0cmFsKCkKKyNkZWZpbmUgQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVZhcmlz
cGVlZCBnZXRBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtVmFyaXNwZWVkKCkKKworI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcgorCitAaW50ZXJm
YWNlIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIDogQ0FMYXllcgorQGVuZAorCisjcHJhZ21h
IG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWVmlkZW9QZXJmb3JtYW5jZU1ldHJpY3MKKworQGludGVy
ZmFjZSBBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzIDogTlNPYmplY3QKKy0gKHVuc2lnbmVkIGxv
bmcpdG90YWxOdW1iZXJPZlZpZGVvRnJhbWVzOworLSAodW5zaWduZWQgbG9uZyludW1iZXJPZkRy
b3BwZWRWaWRlb0ZyYW1lczsKKy0gKHVuc2lnbmVkIGxvbmcpbnVtYmVyT2ZDb3JydXB0ZWRWaWRl
b0ZyYW1lczsKKy0gKGRvdWJsZSl0b3RhbEZyYW1lRGVsYXk7CitAZW5kCisKK0BpbnRlcmZhY2Ug
QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgKFdlYkNvcmVBVlNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllclByaXZhdGUpCistIChBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzICopdmlkZW9QZXJmb3Jt
YW5jZU1ldHJpY3M7CitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgQVZTYW1w
bGVCdWZmZXJBdWRpb1JlbmRlcmVyCisKK0BpbnRlcmZhY2UgQVZTYW1wbGVCdWZmZXJBdWRpb1Jl
bmRlcmVyIDogTlNPYmplY3QKKy0gKHZvaWQpc2V0Vm9sdW1lOihmbG9hdCl2b2x1bWU7CistICh2
b2lkKXNldE11dGVkOihCT09MKW11dGVkOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICphdWRpb1RpbWVQaXRjaEFsZ29yaXRobTsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0K
KyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlclJlbmRlclN5bmNocm9uaXplcgorCitAaW50ZXJm
YWNlIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25pemVyIDogTlNPYmplY3QKKy0gKENNVGlt
ZWJhc2VSZWYpdGltZWJhc2U7CistIChmbG9hdClyYXRlOworLSAodm9pZClzZXRSYXRlOihmbG9h
dClyYXRlOworLSAodm9pZClzZXRSYXRlOihmbG9hdClyYXRlIHRpbWU6KENNVGltZSl0aW1lOwor
LSAoTlNBcnJheSAqKXJlbmRlcmVyczsKKy0gKHZvaWQpYWRkUmVuZGVyZXI6KGlkKXJlbmRlcmVy
OworLSAodm9pZClyZW1vdmVSZW5kZXJlcjooaWQpcmVuZGVyZXIgYXRUaW1lOihDTVRpbWUpdGlt
ZSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgZGlkUmVtb3ZlUmVuZGVyZXIp
KWNvbXBsZXRpb25IYW5kbGVyOworLSAoaWQpYWRkUGVyaW9kaWNUaW1lT2JzZXJ2ZXJGb3JJbnRl
cnZhbDooQ01UaW1lKWludGVydmFsIHF1ZXVlOihkaXNwYXRjaF9xdWV1ZV90KXF1ZXVlIHVzaW5n
QmxvY2s6KHZvaWQgKF4pKENNVGltZSB0aW1lKSlibG9jazsKKy0gKGlkKWFkZEJvdW5kYXJ5VGlt
ZU9ic2VydmVyRm9yVGltZXM6KE5TQXJyYXkgKil0aW1lcyBxdWV1ZTooZGlzcGF0Y2hfcXVldWVf
dClxdWV1ZSB1c2luZ0Jsb2NrOih2b2lkICheKSh2b2lkKSlibG9jazsKKy0gKHZvaWQpcmVtb3Zl
VGltZU9ic2VydmVyOihpZClvYnNlcnZlcjsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFn
bWEgbWFyayBBVlN0cmVhbVNlc3Npb24KKworQGludGVyZmFjZSBBVlN0cmVhbVNlc3Npb24gOiBO
U09iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RvcmFnZURpcmVjdG9yeUF0VVJMOihO
U1VSTCAqKXN0b3JhZ2VEaXJlY3Rvcnk7CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakMKKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoTWVkaWFQbGF5ZXIqIHBsYXllcikKKyAgICA6
IG1fcGxheWVyKHBsYXllcikKKyAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykKKyAgICAsIG1f
c3luY2hyb25pemVyKGFkb3B0TlMoW2FsbG9jQVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6
ZXJJbnN0YW5jZSgpIGluaXRdKSkKK3sKKyAgICAvLyBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZv
ckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEgbm9uLW51bWVyaWMg
Q01UaW1lLCBzbyBqdXN0IHVzZQorICAgIC8vIGFuIGFyYml0cmFyaWx5IGxhcmdlIHRpbWUgdmFs
dWUgb2Ygb25jZSBhbiBob3VyOgorICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdl
YWtQdHIoKTsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNocm9uaXplciBhZGRQ
ZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlhVGltZTo6Y3JlYXRl
V2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2luZ0Js
b2NrOl4oQ01UaW1lIHRpbWUpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xNTc5ODA1
MD4gaXMgZml4ZWQuCisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHNob3VsZEJlUGxheWluZygpKQorICAgICAgICAgICAgW21fc3luY2hy
b25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICB9XTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
KCkKK3sKKyAgICBpZiAobV90aW1lSnVtcGVkT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNocm9u
aXplciByZW1vdmVUaW1lT2JzZXJ2ZXI6bV90aW1lSnVtcGVkT2JzZXJ2ZXIuZ2V0KCldOworICAg
IGlmIChtX2R1cmF0aW9uT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNocm9uaXplciByZW1vdmVU
aW1lT2JzZXJ2ZXI6bV9kdXJhdGlvbk9ic2VydmVyLmdldCgpXTsKK30KKworI3ByYWdtYSBtYXJr
IC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVk
aWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKQor
ICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+KHBsYXllcik7
IH0sIGdldFN1cHBvcnRlZFR5cGVzLAorICAgICAgICAgICAgc3VwcG9ydHNUeXBlLCAwLCAwLCAw
LCAwKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omlz
QXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpCisgICAgICAg
ICYmIGlzQ29yZU1lZGlhRnJhbWV3b3JrQXZhaWxhYmxlKCkKKyAgICAgICAgJiYgZ2V0QVZTdHJl
YW1EYXRhUGFyc2VyQ2xhc3MoKQorICAgICAgICAmJiBnZXRBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVu
ZGVyZXJDbGFzcygpCisgICAgICAgICYmIGdldEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25p
emVyQ2xhc3MoKQorICAgICAgICAmJiBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChnZXRBVlNhbXBs
ZUJ1ZmZlckF1ZGlvUmVuZGVyZXJDbGFzcygpLCBAc2VsZWN0b3Ioc2V0TXV0ZWQ6KSk7Cit9CisK
K3N0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIG1pbWVUeXBlQ2FjaGUoKQoreworICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7
CisgICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYg
KHR5cGVMaXN0SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBjYWNoZTsKKyAgICB0eXBlTGlz
dEluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIE5TQXJyYXkgKnR5cGVzID0gW2dldEFWVVJMQXNz
ZXRDbGFzcygpIGF1ZGlvdmlzdWFsTUlNRVR5cGVzXTsKKyAgICBmb3IgKE5TU3RyaW5nICptaW1l
VHlwZSBpbiB0eXBlcykKKyAgICAgICAgY2FjaGUuYWRkKG1pbWVUeXBlKTsKKworICAgIHJldHVy
biBjYWNoZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMg
PSBtaW1lVHlwZUNhY2hlKCk7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFF
bmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBUaGlzIGVuZ2lu
ZSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1tZWRpYS1zdHJlYW0gc291cmNlcy4KKyAgICBpZiAocGFy
YW1ldGVycy5pc01lZGlhU3RyZWFtKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzU3Vw
cG9ydGVkOworICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKKyNw
cmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIE92
ZXJyaWRlcworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bG9h
ZChNZWRpYVN0cmVhbVByaXZhdGUqIGNsaWVudCkKK3sKKyAgICBtX01lZGlhU3RyZWFtUHJpdmF0
ZSA9IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSgqdGhpcywgKmNsaWVudC0+Y2xp
ZW50KCkpOworICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGll
bnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkgeworICAgICAgICB0cmFjay0+c291cmNlKCktPnN0YXJ0
UHJvZHVjaW5nRGF0YSgpOworICAgICAgICB0cmFjay0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICB9
CisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5n
ZXRBdWRpb1RyYWNrcygpKSB7CisgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNp
bmdEYXRhKCk7CisgICAgICAgIHRyYWNrLT5zZXRFbmFibGVkKHRydWUpOworICAgIH0KKyAgICBt
X3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXll
cik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjYW5j
ZWxMb2FkKCkKK3sKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OnByZXBhcmVUb1BsYXkoKQoreworfQorCitQbGF0Zm9ybU1lZGlhIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Cit7CisgICAgUGxh
dGZvcm1NZWRpYSBwbTsKKyAgICBwbS50eXBlID0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9u
QXNzZXRUeXBlOworICAgIHBtLm1lZGlhLmF2ZkFzc2V0ID0gbV9hc3NldC5nZXQoKTsKKyAgICBy
ZXR1cm4gcG07Cit9CisKK1BsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX01lZGlhU3Ry
ZWFtUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6
cGxhdGZvcm1MYXllcigpOworICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2
YXRlLT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkgeworICAgICAgICAvLyBKdXN0IGdyYWIg
dGhlIGZpcnN0IHdlYmNhbSBmb3Igbm93LCB3ZSBjYW4gbWFuYWdlIG1vcmUgbGF0ZXIKKyAgICAg
ICAgQVZWaWRlb0NhcHR1cmVTb3VyY2UqIGNhcHR1cmUgPSBzdGF0aWNfY2FzdDxBVlZpZGVvQ2Fw
dHVyZVNvdXJjZSo+KHRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQbGF0Zm9ybUxheWVyKj4oW2dldEFWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyQ2xhc3MoKSBs
YXllcldpdGhTZXNzaW9uOmNhcHR1cmUtPnNlc3Npb24oKV0pOworICAgIH0KKyAgICByZXR1cm4g
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpwbGF0Zm9ybUxheWVyKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF5KCkKK3sKKyAgICBhdXRv
IHdlYWtUaGlzID0gY3JlYXRlV2Vha1B0cigpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtU
aGlzXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHdlYWtUaGlzLmdldCgpLT5wbGF5SW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXlJbnRlcm5hbCgpCit7Cisg
ICAgbV9wbGF5aW5nID0gdHJ1ZTsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCisgICAgICAg
IFttX3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CisgICAgaWYgKG1fTWVkaWFTdHJlYW1Q
cml2YXRlKSB7CisgICAgICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRl
LT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkKKyAgICAgICAgICAgIHRyYWNrLT5zb3VyY2Uo
KS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7CisgICAgICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVk
aWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVkaW9UcmFja3MoKSkKKyAgICAgICAgICAg
IHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7CisgICAgfQorfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2UoKQoreworICAgIGF1
dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vh
a1RoaXNdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgd2Vha1RoaXMuZ2V0KCktPnBhdXNlSW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlSW50ZXJuYWwoKQor
eworICAgIG1fcGxheWluZyA9IGZhbHNlOworICAgIFttX3N5bmNocm9uaXplciBzZXRSYXRlOjBd
OworICAgIGlmIChtX01lZGlhU3RyZWFtUHJpdmF0ZSkgeworICAgICAgICBmb3IgKGF1dG8gdHJh
Y2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpCisg
ICAgICAgICAgICB0cmFjay0+c291cmNlKCktPnN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgICAg
IGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVk
aW9UcmFja3MoKSkKKyAgICAgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RvcFByb2R1Y2luZ0Rh
dGEoKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpwYXVzZWQoKSBjb25zdAoreworICAgIHJldHVybiAhW21fc3luY2hyb25pemVyIHJhdGVd
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0Vm9s
dW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBmb3IgKGF1dG8gYXVkaW9SZW5kZXJlciA6IG1fc2Ft
cGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMpCisgICAgICAgIFthdWRpb1JlbmRlcmVyIHNldFZvbHVt
ZTp2b2x1bWVdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6c3VwcG9ydHNTY2FubmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0TXV0ZWQoYm9vbCBt
dXRlZCkKK3sKKyAgICBmb3IgKGF1dG8gYXVkaW9SZW5kZXJlciA6IG1fc2FtcGxlQnVmZmVyQXVk
aW9SZW5kZXJlcnMpCisgICAgICAgIFthdWRpb1JlbmRlcmVyIHNldE11dGVkOm11dGVkXTsKKyAg
ICBpZiAobV9NZWRpYVN0cmVhbVByaXZhdGUpIHsKKyAgICAgICAgZm9yIChhdXRvIHRyYWNrIDog
bV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRBdWRpb1RyYWNrcygpKQorICAgICAg
ICAgICAgdHJhY2stPnNvdXJjZSgpLT5zZXRNdXRlZChtdXRlZCk7CisgICAgfQorfQorCitGbG9h
dFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuYXR1cmFsU2l6ZSgp
IGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGZsb2F0U2l6ZSgwLDApOworICAgIGlmIChtX01lZGlh
U3RyZWFtUHJpdmF0ZSkgeworICAgICAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFt
UHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpIHsKKyAgICAgICAgICAgIEFWVmlk
ZW9DYXB0dXJlU291cmNlKiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxBVlZpZGVvQ2FwdHVyZVNvdXJj
ZSo+KHRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgICAgICBpZiAoc291cmNlLT53aWR0aCgpID4g
ZmxvYXRTaXplLndpZHRoKCkpCisgICAgICAgICAgICAgICAgZmxvYXRTaXplLnNldFdpZHRoKHNv
dXJjZS0+d2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoc291cmNlLT5oZWlnaHQoKSA+IGZsb2F0
U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBmbG9hdFNpemUuc2V0SGVpZ2h0KHNvdXJj
ZS0+aGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmbG9hdFNpemU7Cit9
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpoYXNWaWRlbygp
IGNvbnN0Cit7CisgICAgaWYgKCFtX01lZGlhU3RyZWFtUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0VmlkZW9U
cmFja3MoKS5zaXplKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAgaWYgKCFtX01lZGlhU3RyZWFtUHJpdmF0
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5j
bGllbnQoKS0+Z2V0QXVkaW9UcmFja3MoKS5zaXplKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRWaXNpYmxlKGJvb2wpCit7CisgICAgLy8gTm8t
b3AuCit9CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWVkaWFUaW1lOjpwb3Np
dGl2ZUluZmluaXRlVGltZSgpOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKK3sKKyAgICBNZWRpYVRp
bWUgc3luY2hyb25pemVyVGltZSA9IHRvTWVkaWFUaW1lKENNVGltZWJhc2VHZXRUaW1lKFttX3N5
bmNocm9uaXplciB0aW1lYmFzZV0pKTsKKyAgICBpZiAoc3luY2hyb25pemVyVGltZSA8IE1lZGlh
VGltZTo6emVyb1RpbWUoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsK
KyAgICBpZiAoc3luY2hyb25pemVyVGltZSA8IG1fbGFzdFNlZWtUaW1lKQorICAgICAgICByZXR1
cm4gbV9sYXN0U2Vla1RpbWU7CisgICAgcmV0dXJuIHN5bmNocm9uaXplclRpbWU7Cit9CisKK01l
ZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN0YXJ0VGltZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKK30KKworTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6aW5pdGlhbFRpbWUoKSBj
b25zdAoreworICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Cit9CisKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZWVraW5nKCkgY29uc3QKK3sKKyAg
ICAvLyBNZWRpYVN0cmVhbSBpcyB1bnNlZWthYmxlCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0UmF0ZURvdWJsZShk
b3VibGUpCit7CisgICAgLy8gTWVkaWFTdHJlYW0gaXMgdW5zZWVrYWJsZTsgdGhlcmVmb3JlLCBj
YW5ub3Qgc2V0IHJhdGUKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakM6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit7CisgICAgTlNT
dHJpbmcgKmFsZ29yaXRobSA9IHByZXNlcnZlc1BpdGNoID8gQVZBdWRpb1RpbWVQaXRjaEFsZ29y
aXRobVNwZWN0cmFsIDogQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVZhcmlzcGVlZDsKKyAgICBm
b3IgKGF1dG8mIHJlbmRlcmVyIDogbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycykKKyAgICAg
ICAgW3JlbmRlcmVyIHNldEF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtOmFsZ29yaXRobV07Cit9CisK
K01lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpuZXR3b3JrU3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtTdGF0
ZTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0
YXRlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWthYmxlKCkgY29uc3QKK3sKKyAgICAvLyBN
YWtlIGl0IHNvIHRoYXQgdGhlIFBsYXRmb3JtVGltZVJhbmdlcyBuZXZlciBhZGRzIGFueSB0aW1l
cyB0byBpdHMgdmVjdG9yLCBmb3JjaW5nIGl0IHRvIHJldHVybiBhIGxlbmd0aCBvZiAwIHRvIEpT
CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVN0cmVhbUFWRk9iakM6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAorewor
ICAgIGJvb2wgbG9hZGluZ1Byb2dyZXNzZWQgPSBtX2xvYWRpbmdQcm9ncmVzc2VkOworICAgIG1f
bG9hZGluZ1Byb2dyZXNzZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gbG9hZGluZ1Byb2dyZXNzZWQ7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXpl
KGNvbnN0IEludFNpemUmKQoreworICAgIC8vIEZJWE1FKDEyNTE1Nyk6IEltcGxlbWVudCBwYWlu
dGluZy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JikKK3sKKyAgICAvLyBGSVhNRSgxMjUxNTcpOiBJbXBsZW1lbnQgcGFpbnRpbmcuCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYpCit7CisgICAgLy8gRklYTUUoMTI1MTU3KTogSW1wbGVtZW50IHBhaW50
aW5nLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9oYXNBdmFpbGFibGVWaWRlb0ZyYW1lOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7
CisgICAgaWYgKG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmluZ0NhbkJlQWNj
ZWxlcmF0ZWQobV9wbGF5ZXIpKQorICAgICAgICBlbnN1cmVMYXllcigpOworICAgIGVsc2UKKyAg
ICAgICAgZGVzdHJveUxheWVyKCk7Cit9CisKK01lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bW92aWVMb2FkVHlwZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZygpCit7
CisgICAgLy8gTm8tb3AuCit9CisKK1N0cmluZyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBkZXNjcmlwdGlvbihBU0NJSUxpdGVyYWwoIkFWRm91bmRhdGlvbiBN
ZWRpYVN0cmVhbSBFbmdpbmUiKSk7CisgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworfQorCitTdHJp
bmcgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpsYW5ndWFnZU9mUHJpbWFy
eUF1ZGlvVHJhY2soKSBjb25zdAoreworICAgIC8vIEZJWE1FKDEyNTE1OCk6IGltcGxlbWVudCBs
YW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKQorICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
fQorCitzaXplX3QgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpleHRyYU1l
bW9yeUNvc3QoKSBjb25zdAoreworICAgIC8vIEZJWE1FKDE0NjgxOCk6IEltcGxlbWVudCBleHRy
YU1lbW9yeUNvc3QoKSBpbiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit1bnNpZ25lZCBsb25nIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dG90YWxWaWRlb0ZyYW1lcygpCit7CisgICAgcmV0dXJuIFtb
bV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgdmlkZW9QZXJmb3JtYW5jZU1ldHJpY3NdIHRvdGFs
TnVtYmVyT2ZWaWRlb0ZyYW1lc107Cit9CisKK3Vuc2lnbmVkIGxvbmcgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkcm9wcGVkVmlkZW9GcmFtZXMoKQoreworICAgIHJldHVy
biBbW21fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIHZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzXSBu
dW1iZXJPZkRyb3BwZWRWaWRlb0ZyYW1lc107Cit9CisKK3Vuc2lnbmVkIGxvbmcgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjb3JydXB0ZWRWaWRlb0ZyYW1lcygpCit7Cisg
ICAgcmV0dXJuIFtbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgdmlkZW9QZXJmb3JtYW5jZU1l
dHJpY3NdIG51bWJlck9mQ29ycnVwdGVkVmlkZW9GcmFtZXNdOworfQorCitNZWRpYVRpbWUgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp0b3RhbEZyYW1lRGVsYXkoKQorewor
ICAgIHJldHVybiBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoW1ttX3NhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllciB2aWRlb1BlcmZvcm1hbmNlTWV0cmljc10gdG90YWxGcmFtZURlbGF5XSk7Cit9
CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVXRpbGl0eSBNZXRob2RzCisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjplbnN1cmVMYXllcigpCit7Cisg
ICAgaWYgKG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IGFkb3B0TlMoW2FsbG9jQVZTYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgW21f
c2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIHNldE5hbWU6QCJNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbSBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciJdOworI2VuZGlmCisKKyAgICBbbV9z
eW5jaHJvbml6ZXIgYWRkUmVuZGVyZXI6bV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCld
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZGVzdHJv
eUxheWVyKCkKK3sKKyAgICBpZiAoIW1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDTVRpbWUgY3VycmVudFRpbWUgPSBDTVRpbWViYXNlR2V0VGltZShb
bV9zeW5jaHJvbml6ZXIgdGltZWJhc2VdKTsKKyAgICBbbV9zeW5jaHJvbml6ZXIgcmVtb3ZlUmVu
ZGVyZXI6bV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCkgYXRUaW1lOmN1cnJlbnRUaW1l
IHdpdGhDb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wpIHsKKyAgICAgICAgLy8gTm8tb3AuCisgICAg
fV07CisgICAgbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgPSBudWxscHRyOworfQorCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2hvdWxkQmVQbGF5aW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5aW5nICYmIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBs
YXllcjo6SGF2ZUZ1dHVyZURhdGE7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUpCit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSByZWFkeVN0YXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOworCisgICAgaWYgKHNob3Vs
ZEJlUGxheWluZygpKQorICAgICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0ZTptX3JhdGVdOwor
ICAgIGVsc2UKKyAgICAgICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6MF07CisKKyAgICBtX3Bs
YXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVN0cmVhbUFWRk9iakM6OmFkZERpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllciogZGlzcGxheUxheWVyKQoreworICAgIEFTU0VSVChkaXNwbGF5TGF5ZXIpOworICAgIGlm
IChkaXNwbGF5TGF5ZXIgPT0gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID0gZGlzcGxheUxheWVyOwor
ICAgIFttX3N5bmNocm9uaXplciBhZGRSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ci5nZXQoKV07CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyUmVuZGVyaW5nTW9k
ZUNoYW5nZWQobV9wbGF5ZXIpOworICAgIAorICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgc29tZXdo
ZXJlIGFwcHJvcHJpYXRlOgorICAgIG1fcGxheWVyLT5maXJzdFZpZGVvRnJhbWVBdmFpbGFibGUo
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlbW92
ZURpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciogZGlzcGxheUxheWVyKQor
eworICAgIGlmIChkaXNwbGF5TGF5ZXIgIT0gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDTVRpbWUgY3VycmVudFRpbWUgPSBDTVRpbWViYXNl
R2V0VGltZShbbV9zeW5jaHJvbml6ZXIgdGltZWJhc2VdKTsKKyAgICBbbV9zeW5jaHJvbml6ZXIg
cmVtb3ZlUmVuZGVyZXI6bV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCkgYXRUaW1lOmN1
cnJlbnRUaW1lIHdpdGhDb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wpIHsKKyAgICAgICAgLy8gTm8t
b3AuCisgICAgfV07CisgICAgCisgICAgbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgPSBudWxs
cHRyOworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFu
Z2VkKG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakM6OmFkZEF1ZGlvUmVuZGVyZXIoQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKiBhdWRp
b1JlbmRlcmVyKQoreworICAgIGlmIChtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJzLmNvbnRh
aW5zKGF1ZGlvUmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zYW1wbGVC
dWZmZXJBdWRpb1JlbmRlcmVycy5hcHBlbmQoYXVkaW9SZW5kZXJlcik7CisgICAgCisgICAgW2F1
ZGlvUmVuZGVyZXIgc2V0TXV0ZWQ6bV9wbGF5ZXItPm11dGVkKCldOworICAgIFthdWRpb1JlbmRl
cmVyIHNldFZvbHVtZTptX3BsYXllci0+dm9sdW1lKCldOworICAgIFthdWRpb1JlbmRlcmVyIHNl
dEF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtOihtX3BsYXllci0+cHJlc2VydmVzUGl0Y2goKSA/IEFW
QXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1TcGVjdHJhbCA6IEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0
aG1WYXJpc3BlZWQpXTsKKyAgICAKKyAgICBbbV9zeW5jaHJvbml6ZXIgYWRkUmVuZGVyZXI6YXVk
aW9SZW5kZXJlcl07CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyUmVuZGVyaW5n
TW9kZUNoYW5nZWQobV9wbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6cmVtb3ZlQXVkaW9SZW5kZXJlcihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVu
ZGVyZXIqIGF1ZGlvUmVuZGVyZXIpCit7CisgICAgc2l6ZV90IHBvcyA9IG1fc2FtcGxlQnVmZmVy
QXVkaW9SZW5kZXJlcnMuZmluZChhdWRpb1JlbmRlcmVyKTsKKyAgICBpZiAocG9zID09IG5vdEZv
dW5kKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQ01UaW1lIGN1cnJlbnRUaW1lID0gQ01U
aW1lYmFzZUdldFRpbWUoW21fc3luY2hyb25pemVyIHRpbWViYXNlXSk7CisgICAgW21fc3luY2hy
b25pemVyIHJlbW92ZVJlbmRlcmVyOmF1ZGlvUmVuZGVyZXIgYXRUaW1lOmN1cnJlbnRUaW1lIHdp
dGhDb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wpIHsKKyAgICAgICAgLy8gTm8tb3AuCisgICAgfV07
CisgICAgCisgICAgbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5yZW1vdmUocG9zKTsKKyAg
ICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3Bs
YXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpj
aGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCkKK3sKKyAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWND
aGFuZ2VkKCk7Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2Jq
Qy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1MThlYzhjZWIzMmY2ZDM1
ZjgxNjA4OTYzMjQ3ZTUyNDZmZGQxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVB
VkZPYmpDLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQ19oCisjZGVm
aW5lIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakNfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK09CSkNfQ0xBU1MgQVZBc3NldDsKK09CSkNfQ0xBU1MgQVZTdHJlYW1E
YXRhUGFyc2VyOworT0JKQ19DTEFTUyBOU0Vycm9yOworT0JKQ19DTEFTUyBOU09iamVjdDsKK3R5
cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDRE1TZXNzaW9uOworY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOworY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlOwor
Y2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50OworY2xhc3MgUGxhdGZvcm1UaW1lUmFuZ2Vz
OworY2xhc3MgVGltZVJhbmdlczsKKworY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQyBm
aW5hbCA6IHB1YmxpYyBNZWRpYVN0cmVhbVByaXZhdGUgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQz4gY3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQyYsIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCYpOworICAgIHZp
cnR1YWwgfk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMoKTsKKworICAgIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyogcGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXI7
IH0KKworICAgIHZpcnR1YWwgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQoKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQo
TWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0K
KworICAgIE1lZGlhVGltZSBkdXJhdGlvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCk7CisKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OworCisgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlKTsKKyAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsK
KworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQyYsIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCYpOworCisgICAgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiBtX3BsYXllcjsKKyAgICBSZWZQdHI8
TWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50PiBtX2NsaWVudDsKK307CisgICAgCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpD
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU5Y2I3YjExZTdmMWExMzU0OTFmYjNlYjQyNDQ4NWIzNGY5MDQxMWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLm1tCkBAIC0wLDAgKzEsOTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5oIgorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2ltcG9ydCAi
Q29udGVudFR5cGUuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgorI2lt
cG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgiCisjaW1wb3J0ICJN
ZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjcHJhZ21hIG1hcmsgLQorI3By
YWdtYSBtYXJrIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMKKworUmVmUHRyPE1lZGlhU3RyZWFt
UHJpdmF0ZUFWRk9iakM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZShNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMmIHBhcmVudCwgTWVkaWFTdHJlYW1Qcml2YXRl
Q2xpZW50JiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVBy
aXZhdGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7Cit9CisKK01lZGlhU3RyZWFtUHJpdmF0ZUFW
Rk9iakM6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDJiBwYXJlbnQsIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCYgY2xpZW50KQor
ICAgIDogbV9wbGF5ZXIoJnBhcmVudCkKKyAgICAsIG1fY2xpZW50KCZjbGllbnQpCit7Cit9CisK
K01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6On5NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKCkK
K3sKKworfQorCitNZWRpYVRpbWUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24o
KQoreworICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFW
Rk9iakM6OmJ1ZmZlcmVkKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3Jt
VGltZVJhbmdlcz4oKTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVy
LT5yZWFkeVN0YXRlKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6c2V0
UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQoreworICAgIG1f
cGxheWVyLT5zZXRSZWFkeVN0YXRlKHJlYWR5U3RhdGUpOworfQorCitib29sIE1lZGlhU3RyZWFt
UHJpdmF0ZUFWRk9iakM6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXIt
Pmhhc0F1ZGlvKCk7Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6aGFzVmlk
ZW8oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllci0+aGFzVmlkZW8oKTsKK30KKworRmxv
YXRTaXplIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wbGF5ZXItPm5hdHVyYWxTaXplKCk7Cit9CisgICAgCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZh
dGUuaAppbmRleCAzZTYzZjRjYTQyNTA3MDUzZDgzYWRlYTVkZDBkZmI1N2JhMjM2OTIxLi4wMDU3
ZWU3YzNiMDEyYWMzZjI3ZWZmNjlhNjY5YjAzYWMwZjJjZjEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaApA
QCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxNZWRpYVN0cmVhbVBy
aXZhdGU+IGNyZWF0ZShjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
Pj4mKTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gY3JlYXRlKCk7CiAK
KyAgICBNZWRpYVN0cmVhbVByaXZhdGUoKSB7ICB9CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1Q
cml2YXRlKCkgeyB9CiAKICAgICBlbnVtIGNsYXNzIE5vdGlmeUNsaWVudE9wdGlvbiB7IE5vdGlm
eSwgRG9udE5vdGlmeSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256544</attachid>
            <date>2015-07-09 17:24:51 -0700</date>
            <delta_ts>2015-07-09 19:25:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146789-20150709172351.patch</filename>
            <type>text/plain</type>
            <size>42991</size>
            <attacher name="Matthew Daiter">mdaiter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZhOGE3Y2MxMDdlMGY3
MWIyMDYxYTI4MjZkMDVmZWNkMGI4M2JkNi4uY2Y0MGIzMjg4OGVmMDIzMTdhYTFlYTExY2FmNWQ0
NWIxYTQ3MDNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk1IEBACiAyMDE1LTA3LTA5ICBNYXR0
aGV3IERhaXRlciAgPG1kYWl0ZXJAYXBwbGUuY29tPgogCisgICAgICAgIEFkZGluZyBNZWRpYVN0
cmVhbSBFbmdpbmUgYnVpbGRpbmcgYmxvY2tzIHRvIHRoZSBjb2RlIHJlcG8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc4OQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjE3NDcwMjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldExvYWRpbmdQcm9n
cmVzc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjcmVhdGVXZWFrUHRyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Om1p
bWVUeXBlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpj
YW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2VJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om5hdHVyYWxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkdXJhdGlvbk1lZGlhVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmN1
cnJlbnRNZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjppbml0aWFsVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWtpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRS
YXRlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpyZWFkeVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6c2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjptYXhNZWRpYVRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1pbk1lZGlhVGltZVNlZWthYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0
c0FjY2VsZXJhdGVkUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Ojptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZXh0cmFNZW1vcnlDb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dG90YWxW
aWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OmRyb3BwZWRWaWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmNvcnJ1cHRlZFZpZGVvRnJhbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
dG90YWxGcmFtZURlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkZXN0cm95TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzaG91bGRCZVBs
YXlpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxheUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6YWRkQXVkaW9SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlbW92ZUF1ZGlvUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjaGFyYWN0ZXJp
c3RpY3NDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMu
bW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Ok1l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6fk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6YnVmZmVyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc0F1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaDogCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGU6Ok1lZGlhU3RyZWFtUHJpdmF0ZSk6IEFk
ZGVkIGNvbnN0cnVjdG9yLgorCisyMDE1LTA3LTA5ICBNYXR0aGV3IERhaXRlciAgPG1kYWl0ZXJA
YXBwbGUuY29tPgorCiAgICAgICAgIEV4cG9zZWQgQVZWaWRlb0NhcHR1cmVTb3VyY2UncyBib3Vu
ZHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc2
MAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjE3MzY3NzI+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3NjRlNDZkNjYyMmFiNmJiNTRkMWJhYzRlY2I1N2UyNGQzY2NkNWIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApAQCAt
MCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDX2gKKyNkZWZp
bmUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDX2gKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KworT0JKQ19DTEFTUyBBVkFzc2V0OworT0JKQ19DTEFTUyBBVkNhcHR1cmVWaWRlb1ByZXZpZXdM
YXllcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyOworT0JKQ19DTEFT
UyBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJS
ZW5kZXJTeW5jaHJvbml6ZXI7CitPQkpDX0NMQVNTIEFWU3RyZWFtU2Vzc2lvbjsKKwordHlwZWRl
ZiBzdHJ1Y3QgT3BhcXVlQ01UaW1lYmFzZSogQ01UaW1lYmFzZVJlZjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMgOiBw
dWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoTWVkaWFQbGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoKTsKKworICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwor
CisgICAgLy8gTWVkaWFQbGF5ZXIgRmFjdG9yeSBNZXRob2RzCisgICAgc3RhdGljIGJvb2wgaXNB
dmFpbGFibGUoKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOworCisgICAgdm9p
ZCBhZGREaXNwbGF5TGF5ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqKTsKKyAgICB2b2lk
IHJlbW92ZURpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciopOworCisgICAg
dm9pZCBhZGRBdWRpb1JlbmRlcmVyKEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciopOworICAg
IHZvaWQgcmVtb3ZlQXVkaW9SZW5kZXJlcihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqKTsK
KworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7
CisgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CisK
KyAgICB2b2lkIHNlZWtJbnRlcm5hbCgpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQo
KTsKKyAgICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNldExvYWRpbmdQcm9ncmVz
c3NlZChib29sIGZsYWcpIHsgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KKyAgICB2b2lk
IHNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxhYmxlVmlk
ZW9GcmFtZSA9IGZsYWc7IH0KKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOworCisgICAgdm9p
ZCBzaXplQ2hhbmdlZCgpOworICAgIHZvaWQgY2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpOworCisg
ICAgV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+IGNyZWF0ZVdl
YWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQorCitw
cml2YXRlOgorICAgICAgICAvLyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UKKyAgICB2b2lk
IGxvYWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9OworI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCopIG92ZXJyaWRlIHsgfTsKKyNlbmRpZgorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAg
dm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSopIG92ZXJyaWRlOworI2VuZGlmCisgICAgdm9p
ZCBjYW5jZWxMb2FkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHByZXBhcmVUb1BsYXkoKSBvdmVy
cmlkZTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxheUludGVybmFsKCk7
CisKKyAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYXVzZUludGVybmFsKCk7
CisKKyAgICBib29sIHBhdXNlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpIG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNNdXRpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBzZXRNdXRlZChib29sKSBvdmVycmlkZTsK
KworICAgIGJvb2wgc3VwcG9ydHNTY2FubmluZygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxv
YXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGhhc1ZpZGVv
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRlOworCisgICAgTWVkaWFUaW1lIGR1
cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIGN1cnJlbnRN
ZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBNZWRpYVRpbWUgc3RhcnRUaW1lKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIGluaXRpYWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1l
ZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlIHsgfTsKKyAgICBib29sIHNlZWtp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJhdGVEb3VibGUoZG91YmxlKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgb3ZlcnJpZGU7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBzZWVrYWJsZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIE1lZGlhVGltZSBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIE1lZGlhVGltZSBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKworICAg
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKworICAgIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9G
cmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVu
ZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHJlbmRlcmlu
ZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBt
b2RlLgorICAgIHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlk
ZTsKKworICAgIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIHZvaWQgcHJlcGFyZUZvclJlbmRlcmluZygpIG92ZXJyaWRlOwor
CisgICAgU3RyaW5nIGVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBT
dHJpbmcgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB1bnNpZ25l
ZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBsb25nIGRy
b3BwZWRWaWRlb0ZyYW1lcygpIG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGxvbmcgY29ycnVwdGVk
VmlkZW9GcmFtZXMoKSBvdmVycmlkZTsKKyAgICBNZWRpYVRpbWUgdG90YWxGcmFtZURlbGF5KCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGVuc3VyZUxheWVyKCk7CisgICAgdm9pZCBkZXN0cm95TGF5
ZXIoKTsKKyAgICBib29sIHNob3VsZEJlUGxheWluZygpIGNvbnN0OworCisgICAgZnJpZW5kIGNs
YXNzIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM7CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5
ZXI7CisgICAgV2Vha1B0ckZhY3Rvcnk8TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDPiBtX3dlYWtQdHJGYWN0b3J5OworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVBVkZP
YmpDPiBtX01lZGlhU3RyZWFtUHJpdmF0ZTsKKyAgICBSZXRhaW5QdHI8QVZBc3NldD4gbV9hc3Nl
dDsKKyAgICBSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI+IG1fc2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyOworICAgIFZlY3RvcjxSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJBdWRp
b1JlbmRlcmVyPj4gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyczsKKyAgICBSZXRhaW5QdHI8
QVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXI+IG1fc3luY2hyb25pemVyOworICAgIFJl
dGFpblB0cjxpZD4gbV90aW1lSnVtcGVkT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPGlkPiBtX2R1
cmF0aW9uT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPEFWU3RyZWFtU2Vzc2lvbj4gbV9zdHJlYW1T
ZXNzaW9uOworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGUgeyBN
ZWRpYVBsYXllcjo6SWRsZSB9OworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZSB7IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZyB9OworICAgIE1lZGlhVGltZSBtX2xhc3RT
ZWVrVGltZTsKKyAgICBkb3VibGUgbV9yYXRlIHsgMSB9OworICAgIGJvb2wgbV9wbGF5aW5nIHsg
MCB9OworICAgIGJvb2wgbV9zZWVraW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2Vla0NvbXBs
ZXRlZCB7IHRydWUgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWU7Cit9OworICAgIAorfQor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQ19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzMyMDA1NmEyZTg5YmE0NGE3YzE4ODIzODA5
NDZiMjIwOWE0ZjlkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFt
QVZGT2JqQy5tbQpAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJBVlZpZGVvQ2FwdHVyZVNv
dXJjZS5oIgorI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2lt
cG9ydCAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGVB
VkZPYmpDLmgiCisjaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlBs
YXRmb3JtQ2xvY2tDTS5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCA8QVZGb3VuZGF0aW9uL0FWQXNzZXQuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkNh
cHR1cmVWaWRlb1ByZXZpZXdMYXllci5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5o
PgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQUxheWVyLmg+CisjaW1wb3J0IDxvYmpjX3J1bnRpbWUu
aD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKworI3ByYWdtYSBtYXJrIC0gU29mdCBMaW5raW5nCisKKyNpbXBvcnQgIkNvcmVNZWRp
YVNvZnRMaW5rLmgiCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9u
KQorCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVkFzc2V0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlVmlkZW9QcmV2aWV3
TGF5ZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlVSTEFzc2V0
KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTYW1wbGVCdWZmZXJB
dWRpb1JlbmRlcmVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZT
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3Vu
ZGF0aW9uLCBBVlNhbXBsZUJ1ZmZlclJlbmRlclN5bmNocm9uaXplcikKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtRGF0YVBhcnNlcikKK1NPRlRfTElOS19D
TEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtU2Vzc2lvbik7CitTT0ZUX0xJTktf
Q0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzKQor
CitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvVGltZVBpdGNoQWxnb3Jp
dGhtU3BlY3RyYWwsIE5TU3RyaW5nKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24s
IEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1WYXJpc3BlZWQsIE5TU3RyaW5nKikKKworI2RlZmlu
ZSBBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtU3BlY3RyYWwgZ2V0QVZBdWRpb1RpbWVQaXRjaEFs
Z29yaXRobVNwZWN0cmFsKCkKKyNkZWZpbmUgQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVZhcmlz
cGVlZCBnZXRBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtVmFyaXNwZWVkKCkKKworI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcgorCitAaW50ZXJm
YWNlIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIDogQ0FMYXllcgorQGVuZAorCisjcHJhZ21h
IG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWVmlkZW9QZXJmb3JtYW5jZU1ldHJpY3MKKworQGludGVy
ZmFjZSBBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzIDogTlNPYmplY3QKKy0gKHVuc2lnbmVkIGxv
bmcpdG90YWxOdW1iZXJPZlZpZGVvRnJhbWVzOworLSAodW5zaWduZWQgbG9uZyludW1iZXJPZkRy
b3BwZWRWaWRlb0ZyYW1lczsKKy0gKHVuc2lnbmVkIGxvbmcpbnVtYmVyT2ZDb3JydXB0ZWRWaWRl
b0ZyYW1lczsKKy0gKGRvdWJsZSl0b3RhbEZyYW1lRGVsYXk7CitAZW5kCisKK0BpbnRlcmZhY2Ug
QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgKFdlYkNvcmVBVlNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllclByaXZhdGUpCistIChBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzICopdmlkZW9QZXJmb3Jt
YW5jZU1ldHJpY3M7CitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgQVZTYW1w
bGVCdWZmZXJBdWRpb1JlbmRlcmVyCisKK0BpbnRlcmZhY2UgQVZTYW1wbGVCdWZmZXJBdWRpb1Jl
bmRlcmVyIDogTlNPYmplY3QKKy0gKHZvaWQpc2V0Vm9sdW1lOihmbG9hdCl2b2x1bWU7CistICh2
b2lkKXNldE11dGVkOihCT09MKW11dGVkOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICphdWRpb1RpbWVQaXRjaEFsZ29yaXRobTsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0K
KyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlclJlbmRlclN5bmNocm9uaXplcgorCitAaW50ZXJm
YWNlIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25pemVyIDogTlNPYmplY3QKKy0gKENNVGlt
ZWJhc2VSZWYpdGltZWJhc2U7CistIChmbG9hdClyYXRlOworLSAodm9pZClzZXRSYXRlOihmbG9h
dClyYXRlOworLSAodm9pZClzZXRSYXRlOihmbG9hdClyYXRlIHRpbWU6KENNVGltZSl0aW1lOwor
LSAoTlNBcnJheSAqKXJlbmRlcmVyczsKKy0gKHZvaWQpYWRkUmVuZGVyZXI6KGlkKXJlbmRlcmVy
OworLSAodm9pZClyZW1vdmVSZW5kZXJlcjooaWQpcmVuZGVyZXIgYXRUaW1lOihDTVRpbWUpdGlt
ZSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgZGlkUmVtb3ZlUmVuZGVyZXIp
KWNvbXBsZXRpb25IYW5kbGVyOworLSAoaWQpYWRkUGVyaW9kaWNUaW1lT2JzZXJ2ZXJGb3JJbnRl
cnZhbDooQ01UaW1lKWludGVydmFsIHF1ZXVlOihkaXNwYXRjaF9xdWV1ZV90KXF1ZXVlIHVzaW5n
QmxvY2s6KHZvaWQgKF4pKENNVGltZSB0aW1lKSlibG9jazsKKy0gKGlkKWFkZEJvdW5kYXJ5VGlt
ZU9ic2VydmVyRm9yVGltZXM6KE5TQXJyYXkgKil0aW1lcyBxdWV1ZTooZGlzcGF0Y2hfcXVldWVf
dClxdWV1ZSB1c2luZ0Jsb2NrOih2b2lkICheKSh2b2lkKSlibG9jazsKKy0gKHZvaWQpcmVtb3Zl
VGltZU9ic2VydmVyOihpZClvYnNlcnZlcjsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFn
bWEgbWFyayBBVlN0cmVhbVNlc3Npb24KKworQGludGVyZmFjZSBBVlN0cmVhbVNlc3Npb24gOiBO
U09iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RvcmFnZURpcmVjdG9yeUF0VVJMOihO
U1VSTCAqKXN0b3JhZ2VEaXJlY3Rvcnk7CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakMKKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoTWVkaWFQbGF5ZXIqIHBsYXllcikKKyAgICA6
IG1fcGxheWVyKHBsYXllcikKKyAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykKKyAgICAsIG1f
c3luY2hyb25pemVyKGFkb3B0TlMoW2FsbG9jQVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6
ZXJJbnN0YW5jZSgpIGluaXRdKSkKK3sKKyAgICAvLyBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZv
ckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEgbm9uLW51bWVyaWMg
Q01UaW1lLCBzbyBqdXN0IHVzZQorICAgIC8vIGFuIGFyYml0cmFyaWx5IGxhcmdlIHRpbWUgdmFs
dWUgb2Ygb25jZSBhbiBob3VyOgorICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdl
YWtQdHIoKTsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNocm9uaXplciBhZGRQ
ZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlhVGltZTo6Y3JlYXRl
V2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2luZ0Js
b2NrOl4oQ01UaW1lIHRpbWUpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xNTc5ODA1
MD4gaXMgZml4ZWQuCisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHNob3VsZEJlUGxheWluZygpKQorICAgICAgICAgICAgW21fc3luY2hy
b25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICB9XTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
KCkKK3sKKyAgICBpZiAobV90aW1lSnVtcGVkT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNocm9u
aXplciByZW1vdmVUaW1lT2JzZXJ2ZXI6bV90aW1lSnVtcGVkT2JzZXJ2ZXIuZ2V0KCldOworICAg
IGlmIChtX2R1cmF0aW9uT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNocm9uaXplciByZW1vdmVU
aW1lT2JzZXJ2ZXI6bV9kdXJhdGlvbk9ic2VydmVyLmdldCgpXTsKK30KKworI3ByYWdtYSBtYXJr
IC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVk
aWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKQor
ICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+KHBsYXllcik7
IH0sIGdldFN1cHBvcnRlZFR5cGVzLAorICAgICAgICAgICAgc3VwcG9ydHNUeXBlLCAwLCAwLCAw
LCAwKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omlz
QXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpCisgICAgICAg
ICYmIGlzQ29yZU1lZGlhRnJhbWV3b3JrQXZhaWxhYmxlKCkKKyAgICAgICAgJiYgZ2V0QVZTdHJl
YW1EYXRhUGFyc2VyQ2xhc3MoKQorICAgICAgICAmJiBnZXRBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVu
ZGVyZXJDbGFzcygpCisgICAgICAgICYmIGdldEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25p
emVyQ2xhc3MoKQorICAgICAgICAmJiBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChnZXRBVlNhbXBs
ZUJ1ZmZlckF1ZGlvUmVuZGVyZXJDbGFzcygpLCBAc2VsZWN0b3Ioc2V0TXV0ZWQ6KSk7Cit9CisK
K3N0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIG1pbWVUeXBlQ2FjaGUoKQoreworICAgIHN0
YXRpYyBXVEY6Ok5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gY2FjaGU7CisgICAgc3Rh
dGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKHR5cGVMaXN0
SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBjYWNoZTsKKyAgICB0eXBlTGlzdEluaXRpYWxp
emVkID0gdHJ1ZTsKKworICAgIE5TQXJyYXkgKnR5cGVzID0gW2dldEFWVVJMQXNzZXRDbGFzcygp
IGF1ZGlvdmlzdWFsTUlNRVR5cGVzXTsKKyAgICBmb3IgKE5TU3RyaW5nICptaW1lVHlwZSBpbiB0
eXBlcykKKyAgICAgICAgY2FjaGUuZ2V0KCkuYWRkKG1pbWVUeXBlKTsKKworICAgIHJldHVybiBj
YWNoZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omdl
dFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBt
aW1lVHlwZUNhY2hlKCk7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdp
bmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBUaGlzIGVuZ2luZSBk
b2VzIG5vdCBzdXBwb3J0IG5vbi1tZWRpYS1zdHJlYW0gc291cmNlcy4KKyAgICBpZiAocGFyYW1l
dGVycy5pc01lZGlhU3RyZWFtKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzU3VwcG9y
dGVkOworICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKKyNwcmFn
bWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIE92ZXJy
aWRlcworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bG9hZChN
ZWRpYVN0cmVhbVByaXZhdGUqIGNsaWVudCkKK3sKKyAgICBtX01lZGlhU3RyZWFtUHJpdmF0ZSA9
IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSgqdGhpcywgKmNsaWVudC0+Y2xpZW50
KCkpOworICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQo
KS0+Z2V0VmlkZW9UcmFja3MoKSkgeworICAgICAgICB0cmFjay0+c291cmNlKCktPnN0YXJ0UHJv
ZHVjaW5nRGF0YSgpOworICAgICAgICB0cmFjay0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICB9Cisg
ICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRB
dWRpb1RyYWNrcygpKSB7CisgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdE
YXRhKCk7CisgICAgICAgIHRyYWNrLT5zZXRFbmFibGVkKHRydWUpOworICAgIH0KKyAgICBtX3Bs
YXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjYW5jZWxM
b2FkKCkKK3sKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnByZXBhcmVUb1BsYXkoKQoreworfQorCitQbGF0Zm9ybU1lZGlhIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Cit7CisgICAgUGxhdGZv
cm1NZWRpYSBwbTsKKyAgICBwbS50eXBlID0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uQXNz
ZXRUeXBlOworICAgIHBtLm1lZGlhLmF2ZkFzc2V0ID0gbV9hc3NldC5nZXQoKTsKKyAgICByZXR1
cm4gcG07Cit9CisKK1BsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFt
QVZGT2JqQzo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX01lZGlhU3RyZWFt
UHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6cGxh
dGZvcm1MYXllcigpOworICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRl
LT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkgeworICAgICAgICAvLyBKdXN0IGdyYWIgdGhl
IGZpcnN0IHdlYmNhbSBmb3Igbm93LCB3ZSBjYW4gbWFuYWdlIG1vcmUgbGF0ZXIKKyAgICAgICAg
QVZWaWRlb0NhcHR1cmVTb3VyY2UqIGNhcHR1cmUgPSBzdGF0aWNfY2FzdDxBVlZpZGVvQ2FwdHVy
ZVNvdXJjZSo+KHRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQ
bGF0Zm9ybUxheWVyKj4oW2dldEFWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyQ2xhc3MoKSBsYXll
cldpdGhTZXNzaW9uOmNhcHR1cmUtPnNlc3Npb24oKV0pOworICAgIH0KKyAgICByZXR1cm4gTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpwbGF0Zm9ybUxheWVyKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF5KCkKK3sKKyAgICBhdXRvIHdl
YWtUaGlzID0gY3JlYXRlV2Vha1B0cigpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlz
XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHdlYWtUaGlzLmdldCgpLT5wbGF5SW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXlJbnRlcm5hbCgpCit7CisgICAg
bV9wbGF5aW5nID0gdHJ1ZTsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCisgICAgICAgIFtt
X3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CisgICAgaWYgKG1fTWVkaWFTdHJlYW1Qcml2
YXRlKSB7CisgICAgICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5j
bGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkKKyAgICAgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+
c3RhcnRQcm9kdWNpbmdEYXRhKCk7CisgICAgICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFT
dHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVkaW9UcmFja3MoKSkKKyAgICAgICAgICAgIHRy
YWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7CisgICAgfQorfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2UoKQoreworICAgIGF1dG8g
d2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1Ro
aXNdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgd2Vha1RoaXMuZ2V0KCktPnBhdXNlSW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlSW50ZXJuYWwoKQorewor
ICAgIG1fcGxheWluZyA9IGZhbHNlOworICAgIFttX3N5bmNocm9uaXplciBzZXRSYXRlOjBdOwor
ICAgIGlmIChtX01lZGlhU3RyZWFtUHJpdmF0ZSkgeworICAgICAgICBmb3IgKGF1dG8gdHJhY2sg
OiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpCisgICAg
ICAgICAgICB0cmFjay0+c291cmNlKCktPnN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgICAgIGZv
ciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVkaW9U
cmFja3MoKSkKKyAgICAgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RvcFByb2R1Y2luZ0RhdGEo
KTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpwYXVzZWQoKSBjb25zdAoreworICAgIHJldHVybiAhW21fc3luY2hyb25pemVyIHJhdGVdOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0Vm9sdW1l
KGZsb2F0IHZvbHVtZSkKK3sKKyAgICBmb3IgKGF1dG8gYXVkaW9SZW5kZXJlciA6IG1fc2FtcGxl
QnVmZmVyQXVkaW9SZW5kZXJlcnMpCisgICAgICAgIFthdWRpb1JlbmRlcmVyIHNldFZvbHVtZTp2
b2x1bWVdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
c3VwcG9ydHNTY2FubmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0TXV0ZWQoYm9vbCBtdXRl
ZCkKK3sKKyAgICBmb3IgKGF1dG8gYXVkaW9SZW5kZXJlciA6IG1fc2FtcGxlQnVmZmVyQXVkaW9S
ZW5kZXJlcnMpCisgICAgICAgIFthdWRpb1JlbmRlcmVyIHNldE11dGVkOm11dGVkXTsKKyAgICBp
ZiAobV9NZWRpYVN0cmVhbVByaXZhdGUpIHsKKyAgICAgICAgZm9yIChhdXRvIHRyYWNrIDogbV9N
ZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRBdWRpb1RyYWNrcygpKQorICAgICAgICAg
ICAgdHJhY2stPnNvdXJjZSgpLT5zZXRNdXRlZChtdXRlZCk7CisgICAgfQorfQorCitGbG9hdFNp
emUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuYXR1cmFsU2l6ZSgpIGNv
bnN0Cit7CisgICAgRmxvYXRTaXplIGZsb2F0U2l6ZSgwLDApOworICAgIGlmIChtX01lZGlhU3Ry
ZWFtUHJpdmF0ZSkgeworICAgICAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJp
dmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpIHsKKyAgICAgICAgICAgIEFWVmlkZW9D
YXB0dXJlU291cmNlKiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxBVlZpZGVvQ2FwdHVyZVNvdXJjZSo+
KHRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgICAgICBpZiAoc291cmNlLT53aWR0aCgpID4gZmxv
YXRTaXplLndpZHRoKCkpCisgICAgICAgICAgICAgICAgZmxvYXRTaXplLnNldFdpZHRoKHNvdXJj
ZS0+d2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoc291cmNlLT5oZWlnaHQoKSA+IGZsb2F0U2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBmbG9hdFNpemUuc2V0SGVpZ2h0KHNvdXJjZS0+
aGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmbG9hdFNpemU7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpoYXNWaWRlbygpIGNv
bnN0Cit7CisgICAgaWYgKCFtX01lZGlhU3RyZWFtUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFj
a3MoKS5zaXplKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAgaWYgKCFtX01lZGlhU3RyZWFtUHJpdmF0ZSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGll
bnQoKS0+Z2V0QXVkaW9UcmFja3MoKS5zaXplKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRWaXNpYmxlKGJvb2wpCit7CisgICAgLy8gTm8tb3Au
Cit9CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmR1
cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWVkaWFUaW1lOjpwb3NpdGl2
ZUluZmluaXRlVGltZSgpOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKK3sKKyAgICBNZWRpYVRpbWUg
c3luY2hyb25pemVyVGltZSA9IHRvTWVkaWFUaW1lKENNVGltZWJhc2VHZXRUaW1lKFttX3N5bmNo
cm9uaXplciB0aW1lYmFzZV0pKTsKKyAgICBpZiAoc3luY2hyb25pemVyVGltZSA8IE1lZGlhVGlt
ZTo6emVyb1RpbWUoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKyAg
ICBpZiAoc3luY2hyb25pemVyVGltZSA8IG1fbGFzdFNlZWtUaW1lKQorICAgICAgICByZXR1cm4g
bV9sYXN0U2Vla1RpbWU7CisgICAgcmV0dXJuIHN5bmNocm9uaXplclRpbWU7Cit9CisKK01lZGlh
VGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN0YXJ0VGltZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKK30KKworTWVkaWFUaW1l
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6aW5pdGlhbFRpbWUoKSBjb25z
dAoreworICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Cit9CisKK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICAv
LyBNZWRpYVN0cmVhbSBpcyB1bnNlZWthYmxlCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0UmF0ZURvdWJsZShkb3Vi
bGUpCit7CisgICAgLy8gTWVkaWFTdHJlYW0gaXMgdW5zZWVrYWJsZTsgdGhlcmVmb3JlLCBjYW5u
b3Qgc2V0IHJhdGUKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCit7CisgICAgTlNTdHJp
bmcgKmFsZ29yaXRobSA9IHByZXNlcnZlc1BpdGNoID8gQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRo
bVNwZWN0cmFsIDogQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVZhcmlzcGVlZDsKKyAgICBmb3Ig
KGF1dG8mIHJlbmRlcmVyIDogbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycykKKyAgICAgICAg
W3JlbmRlcmVyIHNldEF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtOmFsZ29yaXRobV07Cit9CisKK01l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpuZXR3b3JrU3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsK
K30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRl
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWthYmxlKCkgY29uc3QKK3sKKyAgICAvLyBNYWtl
IGl0IHNvIHRoYXQgdGhlIFBsYXRmb3JtVGltZVJhbmdlcyBuZXZlciBhZGRzIGFueSB0aW1lcyB0
byBpdHMgdmVjdG9yLCBmb3JjaW5nIGl0IHRvIHJldHVybiBhIGxlbmd0aCBvZiAwIHRvIEpTCisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAoreworICAg
IGJvb2wgbG9hZGluZ1Byb2dyZXNzZWQgPSBtX2xvYWRpbmdQcm9ncmVzc2VkOworICAgIG1fbG9h
ZGluZ1Byb2dyZXNzZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gbG9hZGluZ1Byb2dyZXNzZWQ7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKGNv
bnN0IEludFNpemUmKQoreworICAgIC8vIEZJWE1FKDEyNTE1Nyk6IEltcGxlbWVudCBwYWludGlu
Zy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JikKK3sKKyAgICAvLyBGSVhNRSgxMjUxNTcpOiBJbXBsZW1lbnQgcGFpbnRpbmcuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakM6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYpCit7CisgICAgLy8gRklYTUUoMTI1MTU3KTogSW1wbGVtZW50IHBhaW50aW5n
LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9oYXNBdmFpbGFibGVWaWRlb0ZyYW1lOworfQorCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmluZ0NhbkJlQWNjZWxl
cmF0ZWQobV9wbGF5ZXIpKQorICAgICAgICBlbnN1cmVMYXllcigpOworICAgIGVsc2UKKyAgICAg
ICAgZGVzdHJveUxheWVyKCk7Cit9CisKK01lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bW92aWVMb2FkVHlwZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZygpCit7Cisg
ICAgLy8gTm8tb3AuCit9CisKK1N0cmluZyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakM6OmVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U3RyaW5nPiBkZXNjcmlwdGlvbihBU0NJSUxpdGVyYWwoIkFWRm91bmRhdGlvbiBNZWRp
YVN0cmVhbSBFbmdpbmUiKSk7CisgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworfQorCitTdHJpbmcg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpsYW5ndWFnZU9mUHJpbWFyeUF1
ZGlvVHJhY2soKSBjb25zdAoreworICAgIC8vIEZJWE1FKDEyNTE1OCk6IGltcGxlbWVudCBsYW5n
dWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKQorICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQor
CitzaXplX3QgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpleHRyYU1lbW9y
eUNvc3QoKSBjb25zdAoreworICAgIC8vIEZJWE1FKDE0NjgxOCk6IEltcGxlbWVudCBleHRyYU1l
bW9yeUNvc3QoKSBpbiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit1bnNpZ25lZCBsb25nIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6dG90YWxWaWRlb0ZyYW1lcygpCit7CisgICAgcmV0dXJuIFtbbV9z
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgdmlkZW9QZXJmb3JtYW5jZU1ldHJpY3NdIHRvdGFsTnVt
YmVyT2ZWaWRlb0ZyYW1lc107Cit9CisKK3Vuc2lnbmVkIGxvbmcgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjpkcm9wcGVkVmlkZW9GcmFtZXMoKQoreworICAgIHJldHVybiBb
W21fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIHZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzXSBudW1i
ZXJPZkRyb3BwZWRWaWRlb0ZyYW1lc107Cit9CisKK3Vuc2lnbmVkIGxvbmcgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjb3JydXB0ZWRWaWRlb0ZyYW1lcygpCit7CisgICAg
cmV0dXJuIFtbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgdmlkZW9QZXJmb3JtYW5jZU1ldHJp
Y3NdIG51bWJlck9mQ29ycnVwdGVkVmlkZW9GcmFtZXNdOworfQorCitNZWRpYVRpbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp0b3RhbEZyYW1lRGVsYXkoKQoreworICAg
IHJldHVybiBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoW1ttX3NhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllciB2aWRlb1BlcmZvcm1hbmNlTWV0cmljc10gdG90YWxGcmFtZURlbGF5XSk7Cit9CisK
KyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVXRpbGl0eSBNZXRob2RzCisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjplbnN1cmVMYXllcigpCit7CisgICAg
aWYgKG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9IGFkb3B0TlMoW2FsbG9jQVZTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJJbnN0YW5jZSgpIGluaXRdKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgW21fc2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyIHNldE5hbWU6QCJNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbSBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciJdOworI2VuZGlmCisKKyAgICBbbV9zeW5j
aHJvbml6ZXIgYWRkUmVuZGVyZXI6bV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCldOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZGVzdHJveUxh
eWVyKCkKK3sKKyAgICBpZiAoIW1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBDTVRpbWUgY3VycmVudFRpbWUgPSBDTVRpbWViYXNlR2V0VGltZShbbV9z
eW5jaHJvbml6ZXIgdGltZWJhc2VdKTsKKyAgICBbbV9zeW5jaHJvbml6ZXIgcmVtb3ZlUmVuZGVy
ZXI6bV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCkgYXRUaW1lOmN1cnJlbnRUaW1lIHdp
dGhDb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wpIHsKKyAgICAgICAgLy8gTm8tb3AuCisgICAgfV07
CisgICAgbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgPSBudWxscHRyOworfQorCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2hvdWxkQmVQbGF5aW5nKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wbGF5aW5nICYmIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXll
cjo6SGF2ZUZ1dHVyZURhdGE7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3Rh
dGUpCit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSByZWFkeVN0YXRlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOworCisgICAgaWYgKHNob3VsZEJl
UGxheWluZygpKQorICAgICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0ZTptX3JhdGVdOworICAg
IGVsc2UKKyAgICAgICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6MF07CisKKyAgICBtX3BsYXll
ci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6OmFkZERpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ciogZGlzcGxheUxheWVyKQoreworICAgIEFTU0VSVChkaXNwbGF5TGF5ZXIpOworICAgIGlmIChk
aXNwbGF5TGF5ZXIgPT0gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID0gZGlzcGxheUxheWVyOworICAg
IFttX3N5bmNocm9uaXplciBhZGRSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5n
ZXQoKV07CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNo
YW5nZWQobV9wbGF5ZXIpOworICAgIAorICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgc29tZXdoZXJl
IGFwcHJvcHJpYXRlOgorICAgIG1fcGxheWVyLT5maXJzdFZpZGVvRnJhbWVBdmFpbGFibGUoKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlbW92ZURp
c3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciogZGlzcGxheUxheWVyKQorewor
ICAgIGlmIChkaXNwbGF5TGF5ZXIgIT0gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBDTVRpbWUgY3VycmVudFRpbWUgPSBDTVRpbWViYXNlR2V0
VGltZShbbV9zeW5jaHJvbml6ZXIgdGltZWJhc2VdKTsKKyAgICBbbV9zeW5jaHJvbml6ZXIgcmVt
b3ZlUmVuZGVyZXI6bV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCkgYXRUaW1lOmN1cnJl
bnRUaW1lIHdpdGhDb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wpIHsKKyAgICAgICAgLy8gTm8tb3Au
CisgICAgfV07CisgICAgCisgICAgbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgPSBudWxscHRy
OworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2Vk
KG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OmFkZEF1ZGlvUmVuZGVyZXIoQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyKiBhdWRpb1Jl
bmRlcmVyKQoreworICAgIGlmIChtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJzLmNvbnRhaW5z
KGF1ZGlvUmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zYW1wbGVCdWZm
ZXJBdWRpb1JlbmRlcmVycy5hcHBlbmQoYXVkaW9SZW5kZXJlcik7CisgICAgCisgICAgW2F1ZGlv
UmVuZGVyZXIgc2V0TXV0ZWQ6bV9wbGF5ZXItPm11dGVkKCldOworICAgIFthdWRpb1JlbmRlcmVy
IHNldFZvbHVtZTptX3BsYXllci0+dm9sdW1lKCldOworICAgIFthdWRpb1JlbmRlcmVyIHNldEF1
ZGlvVGltZVBpdGNoQWxnb3JpdGhtOihtX3BsYXllci0+cHJlc2VydmVzUGl0Y2goKSA/IEFWQXVk
aW9UaW1lUGl0Y2hBbGdvcml0aG1TcGVjdHJhbCA6IEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1W
YXJpc3BlZWQpXTsKKyAgICAKKyAgICBbbV9zeW5jaHJvbml6ZXIgYWRkUmVuZGVyZXI6YXVkaW9S
ZW5kZXJlcl07CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyUmVuZGVyaW5nTW9k
ZUNoYW5nZWQobV9wbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cmVtb3ZlQXVkaW9SZW5kZXJlcihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVy
ZXIqIGF1ZGlvUmVuZGVyZXIpCit7CisgICAgc2l6ZV90IHBvcyA9IG1fc2FtcGxlQnVmZmVyQXVk
aW9SZW5kZXJlcnMuZmluZChhdWRpb1JlbmRlcmVyKTsKKyAgICBpZiAocG9zID09IG5vdEZvdW5k
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQ01UaW1lIGN1cnJlbnRUaW1lID0gQ01UaW1l
YmFzZUdldFRpbWUoW21fc3luY2hyb25pemVyIHRpbWViYXNlXSk7CisgICAgW21fc3luY2hyb25p
emVyIHJlbW92ZVJlbmRlcmVyOmF1ZGlvUmVuZGVyZXIgYXRUaW1lOmN1cnJlbnRUaW1lIHdpdGhD
b21wbGV0aW9uSGFuZGxlcjpeKEJPT0wpIHsKKyAgICAgICAgLy8gTm8tb3AuCisgICAgfV07Cisg
ICAgCisgICAgbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVycy5yZW1vdmUocG9zKTsKKyAgICBt
X3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXll
cik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjaGFy
YWN0ZXJpc3RpY3NDaGFuZ2VkKCkKK3sKKyAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFu
Z2VkKCk7Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1MThlYzhjZWIzMmY2ZDM1Zjgx
NjA4OTYzMjQ3ZTUyNDZmZGQxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZP
YmpDLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQ19oCisjZGVmaW5l
IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakNfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK09CSkNfQ0xBU1MgQVZBc3NldDsKK09CSkNfQ0xBU1MgQVZTdHJlYW1EYXRh
UGFyc2VyOworT0JKQ19DTEFTUyBOU0Vycm9yOworT0JKQ19DTEFTUyBOU09iamVjdDsKK3R5cGVk
ZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDRE1TZXNzaW9uOworY2xhc3MgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOworY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlOworY2xh
c3MgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50OworY2xhc3MgUGxhdGZvcm1UaW1lUmFuZ2VzOwor
Y2xhc3MgVGltZVJhbmdlczsKKworY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQyBmaW5h
bCA6IHB1YmxpYyBNZWRpYVN0cmVhbVByaXZhdGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQ
dHI8TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQz4gY3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQyYsIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCYpOworICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMoKTsKKworICAgIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQyogcGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXI7IH0K
KworICAgIHZpcnR1YWwgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoTWVk
aWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKwor
ICAgIE1lZGlhVGltZSBkdXJhdGlvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRp
bWVSYW5nZXM+IGJ1ZmZlcmVkKCk7CisKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CisgICAg
Ym9vbCBoYXNWaWRlbygpIGNvbnN0OworCisgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlKTsKKyAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKKwor
ICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQyYsIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCYpOworCisgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiBtX3BsYXllcjsKKyAgICBSZWZQdHI8TWVk
aWFTdHJlYW1Qcml2YXRlQ2xpZW50PiBtX2NsaWVudDsKK307CisgICAgCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU5Y2I3YjExZTdmMWExMzU0OTFmYjNlYjQyNDQ4NWIzNGY5MDQxMWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLm1tCkBAIC0wLDAgKzEsOTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5oIgorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2ltcG9ydCAiQ29u
dGVudFR5cGUuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgorI2ltcG9y
dCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgiCisjaW1wb3J0ICJNZWRp
YVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaW1w
b3J0IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjcHJhZ21hIG1hcmsgLQorI3ByYWdt
YSBtYXJrIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMKKworUmVmUHRyPE1lZGlhU3RyZWFtUHJp
dmF0ZUFWRk9iakM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZShNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMmIHBhcmVudCwgTWVkaWFTdHJlYW1Qcml2YXRlQ2xp
ZW50JiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVByaXZh
dGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7Cit9CisKK01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9i
akM6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDJiBwYXJlbnQsIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCYgY2xpZW50KQorICAg
IDogbV9wbGF5ZXIoJnBhcmVudCkKKyAgICAsIG1fY2xpZW50KCZjbGllbnQpCit7Cit9CisKK01l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6On5NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKCkKK3sK
KworfQorCitNZWRpYVRpbWUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24oKQor
eworICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9i
akM6OmJ1ZmZlcmVkKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGlt
ZVJhbmdlcz4oKTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFTdHJlYW1Qcml2
YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVyLT5y
ZWFkeVN0YXRlKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6c2V0UmVh
ZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQoreworICAgIG1fcGxh
eWVyLT5zZXRSZWFkeVN0YXRlKHJlYWR5U3RhdGUpOworfQorCitib29sIE1lZGlhU3RyZWFtUHJp
dmF0ZUFWRk9iakM6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPmhh
c0F1ZGlvKCk7Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6aGFzVmlkZW8o
KSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllci0+aGFzVmlkZW8oKTsKK30KKworRmxvYXRT
aXplIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wbGF5ZXItPm5hdHVyYWxTaXplKCk7Cit9CisgICAgCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUu
aAppbmRleCAzZTYzZjRjYTQyNTA3MDUzZDgzYWRlYTVkZDBkZmI1N2JhMjM2OTIxLi4wOWMyZDVk
ZWJiNGUzZmZkYmVkM2Y0YTI0NWU5OGU1YmJlNjYyNDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaApAQCAt
NjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZh
dGU+IGNyZWF0ZShjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4m
KTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gY3JlYXRlKCk7CiAKKyAg
ICBNZWRpYVN0cmVhbVByaXZhdGUoKSB7IH0KICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVByaXZh
dGUoKSB7IH0KIAogICAgIGVudW0gY2xhc3MgTm90aWZ5Q2xpZW50T3B0aW9uIHsgTm90aWZ5LCBE
b250Tm90aWZ5IH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256559</attachid>
            <date>2015-07-09 19:25:25 -0700</date>
            <delta_ts>2015-07-10 16:30:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146789-20150709192425.patch</filename>
            <type>text/plain</type>
            <size>42979</size>
            <attacher name="Matthew Daiter">mdaiter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZhOGE3Y2MxMDdlMGY3
MWIyMDYxYTI4MjZkMDVmZWNkMGI4M2JkNi4uY2Y0MGIzMjg4OGVmMDIzMTdhYTFlYTExY2FmNWQ0
NWIxYTQ3MDNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk1IEBACiAyMDE1LTA3LTA5ICBNYXR0
aGV3IERhaXRlciAgPG1kYWl0ZXJAYXBwbGUuY29tPgogCisgICAgICAgIEFkZGluZyBNZWRpYVN0
cmVhbSBFbmdpbmUgYnVpbGRpbmcgYmxvY2tzIHRvIHRoZSBjb2RlIHJlcG8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc4OQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjE3NDcwMjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldExvYWRpbmdQcm9n
cmVzc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjcmVhdGVXZWFrUHRyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Om1p
bWVUeXBlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpj
YW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2VJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om5hdHVyYWxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkdXJhdGlvbk1lZGlhVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmN1
cnJlbnRNZWRpYVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjppbml0aWFsVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWtpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRS
YXRlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpyZWFkeVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6c2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjptYXhNZWRpYVRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1pbk1lZGlhVGltZVNlZWthYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0
c0FjY2VsZXJhdGVkUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Ojptb3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZXh0cmFNZW1vcnlDb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dG90YWxW
aWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OmRyb3BwZWRWaWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmNvcnJ1cHRlZFZpZGVvRnJhbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
dG90YWxGcmFtZURlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkZXN0cm95TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzaG91bGRCZVBs
YXlpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxheUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6YWRkQXVkaW9SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlbW92ZUF1ZGlvUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjaGFyYWN0ZXJp
c3RpY3NDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMu
bW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Ok1l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6fk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6YnVmZmVyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc0F1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxTaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaDogCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGU6Ok1lZGlhU3RyZWFtUHJpdmF0ZSk6IEFk
ZGVkIGNvbnN0cnVjdG9yLgorCisyMDE1LTA3LTA5ICBNYXR0aGV3IERhaXRlciAgPG1kYWl0ZXJA
YXBwbGUuY29tPgorCiAgICAgICAgIEV4cG9zZWQgQVZWaWRlb0NhcHR1cmVTb3VyY2UncyBib3Vu
ZHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc2
MAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjE3MzY3NzI+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3NjRlNDZkNjYyMmFiNmJiNTRkMWJhYzRlY2I1N2UyNGQzY2NkNWIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApAQCAt
MCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDX2gKKyNkZWZp
bmUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDX2gKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KworT0JKQ19DTEFTUyBBVkFzc2V0OworT0JKQ19DTEFTUyBBVkNhcHR1cmVWaWRlb1ByZXZpZXdM
YXllcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyOworT0JKQ19DTEFT
UyBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJS
ZW5kZXJTeW5jaHJvbml6ZXI7CitPQkpDX0NMQVNTIEFWU3RyZWFtU2Vzc2lvbjsKKwordHlwZWRl
ZiBzdHJ1Y3QgT3BhcXVlQ01UaW1lYmFzZSogQ01UaW1lYmFzZVJlZjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMgOiBw
dWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoTWVkaWFQbGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoKTsKKworICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwor
CisgICAgLy8gTWVkaWFQbGF5ZXIgRmFjdG9yeSBNZXRob2RzCisgICAgc3RhdGljIGJvb2wgaXNB
dmFpbGFibGUoKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOworCisgICAgdm9p
ZCBhZGREaXNwbGF5TGF5ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIqKTsKKyAgICB2b2lk
IHJlbW92ZURpc3BsYXlMYXllcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciopOworCisgICAg
dm9pZCBhZGRBdWRpb1JlbmRlcmVyKEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciopOworICAg
IHZvaWQgcmVtb3ZlQXVkaW9SZW5kZXJlcihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqKTsK
KworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7
CisgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CisK
KyAgICB2b2lkIHNlZWtJbnRlcm5hbCgpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQo
KTsKKyAgICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNldExvYWRpbmdQcm9ncmVz
c3NlZChib29sIGZsYWcpIHsgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KKyAgICB2b2lk
IHNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxhYmxlVmlk
ZW9GcmFtZSA9IGZsYWc7IH0KKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOworCisgICAgdm9p
ZCBzaXplQ2hhbmdlZCgpOworICAgIHZvaWQgY2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpOworCisg
ICAgV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+IGNyZWF0ZVdl
YWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQorCitw
cml2YXRlOgorICAgICAgICAvLyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UKKyAgICB2b2lk
IGxvYWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9OworI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCopIG92ZXJyaWRlIHsgfTsKKyNlbmRpZgorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAg
dm9pZCBsb2FkKE1lZGlhU3RyZWFtUHJpdmF0ZSopIG92ZXJyaWRlOworI2VuZGlmCisgICAgdm9p
ZCBjYW5jZWxMb2FkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHByZXBhcmVUb1BsYXkoKSBvdmVy
cmlkZTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGxheUludGVybmFsKCk7
CisKKyAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYXVzZUludGVybmFsKCk7
CisKKyAgICBib29sIHBhdXNlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpIG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNNdXRpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBzZXRNdXRlZChib29sKSBvdmVycmlkZTsK
KworICAgIGJvb2wgc3VwcG9ydHNTY2FubmluZygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxv
YXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGhhc1ZpZGVv
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRlOworCisgICAgTWVkaWFUaW1lIGR1
cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIGN1cnJlbnRN
ZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBNZWRpYVRpbWUgc3RhcnRUaW1lKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIGluaXRpYWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1l
ZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlIHsgfTsKKyAgICBib29sIHNlZWtp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJhdGVEb3VibGUoZG91YmxlKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgb3ZlcnJpZGU7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBzZWVrYWJsZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIE1lZGlhVGltZSBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIE1lZGlhVGltZSBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKworICAg
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKworICAgIGJvb2wgaGFzQXZhaWxhYmxlVmlkZW9G
cmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVu
ZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHJlbmRlcmlu
ZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBt
b2RlLgorICAgIHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlk
ZTsKKworICAgIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIHZvaWQgcHJlcGFyZUZvclJlbmRlcmluZygpIG92ZXJyaWRlOwor
CisgICAgU3RyaW5nIGVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBT
dHJpbmcgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB1bnNpZ25l
ZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBsb25nIGRy
b3BwZWRWaWRlb0ZyYW1lcygpIG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGxvbmcgY29ycnVwdGVk
VmlkZW9GcmFtZXMoKSBvdmVycmlkZTsKKyAgICBNZWRpYVRpbWUgdG90YWxGcmFtZURlbGF5KCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGVuc3VyZUxheWVyKCk7CisgICAgdm9pZCBkZXN0cm95TGF5
ZXIoKTsKKyAgICBib29sIHNob3VsZEJlUGxheWluZygpIGNvbnN0OworCisgICAgZnJpZW5kIGNs
YXNzIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM7CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5
ZXI7CisgICAgV2Vha1B0ckZhY3Rvcnk8TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDPiBtX3dlYWtQdHJGYWN0b3J5OworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVBVkZP
YmpDPiBtX01lZGlhU3RyZWFtUHJpdmF0ZTsKKyAgICBSZXRhaW5QdHI8QVZBc3NldD4gbV9hc3Nl
dDsKKyAgICBSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI+IG1fc2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyOworICAgIFZlY3RvcjxSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJBdWRp
b1JlbmRlcmVyPj4gbV9zYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyczsKKyAgICBSZXRhaW5QdHI8
QVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXI+IG1fc3luY2hyb25pemVyOworICAgIFJl
dGFpblB0cjxpZD4gbV90aW1lSnVtcGVkT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPGlkPiBtX2R1
cmF0aW9uT2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPEFWU3RyZWFtU2Vzc2lvbj4gbV9zdHJlYW1T
ZXNzaW9uOworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGUgeyBN
ZWRpYVBsYXllcjo6SWRsZSB9OworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZSB7IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZyB9OworICAgIE1lZGlhVGltZSBtX2xhc3RT
ZWVrVGltZTsKKyAgICBkb3VibGUgbV9yYXRlIHsgMSB9OworICAgIGJvb2wgbV9wbGF5aW5nIHsg
MCB9OworICAgIGJvb2wgbV9zZWVraW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2Vla0NvbXBs
ZXRlZCB7IHRydWUgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWU7Cit9OworICAgIAorfQor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKwor
I2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQ19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDc0NzA5MDdiN2E0ZTI2MTg2OGExZjRlN2Q5
ZDZjYTNhODE1OGZjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFt
QVZGT2JqQy5tbQpAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJBVlZpZGVvQ2FwdHVyZVNv
dXJjZS5oIgorI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2lt
cG9ydCAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGVB
VkZPYmpDLmgiCisjaW1wb3J0ICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNpbXBvcnQgIlBs
YXRmb3JtQ2xvY2tDTS5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCA8QVZGb3VuZGF0aW9uL0FWQXNzZXQuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkNh
cHR1cmVWaWRlb1ByZXZpZXdMYXllci5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5o
PgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQUxheWVyLmg+CisjaW1wb3J0IDxvYmpjX3J1bnRpbWUu
aD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKworI3ByYWdtYSBtYXJrIC0gU29mdCBMaW5raW5nCisKKyNpbXBvcnQgIkNvcmVNZWRp
YVNvZnRMaW5rLmgiCisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9u
KQorCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVkFzc2V0KQorU09G
VF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlVmlkZW9QcmV2aWV3
TGF5ZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlVSTEFzc2V0
KQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTYW1wbGVCdWZmZXJB
dWRpb1JlbmRlcmVyKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZT
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3Vu
ZGF0aW9uLCBBVlNhbXBsZUJ1ZmZlclJlbmRlclN5bmNocm9uaXplcikKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtRGF0YVBhcnNlcikKK1NPRlRfTElOS19D
TEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtU2Vzc2lvbik7CitTT0ZUX0xJTktf
Q0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzKQor
CitTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVkF1ZGlvVGltZVBpdGNoQWxnb3Jp
dGhtU3BlY3RyYWwsIE5TU3RyaW5nKikKK1NPRlRfTElOS19DT05TVEFOVChBVkZvdW5kYXRpb24s
IEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1WYXJpc3BlZWQsIE5TU3RyaW5nKikKKworI2RlZmlu
ZSBBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtU3BlY3RyYWwgZ2V0QVZBdWRpb1RpbWVQaXRjaEFs
Z29yaXRobVNwZWN0cmFsKCkKKyNkZWZpbmUgQVZBdWRpb1RpbWVQaXRjaEFsZ29yaXRobVZhcmlz
cGVlZCBnZXRBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtVmFyaXNwZWVkKCkKKworI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcgorCitAaW50ZXJm
YWNlIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIDogQ0FMYXllcgorQGVuZAorCisjcHJhZ21h
IG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWVmlkZW9QZXJmb3JtYW5jZU1ldHJpY3MKKworQGludGVy
ZmFjZSBBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzIDogTlNPYmplY3QKKy0gKHVuc2lnbmVkIGxv
bmcpdG90YWxOdW1iZXJPZlZpZGVvRnJhbWVzOworLSAodW5zaWduZWQgbG9uZyludW1iZXJPZkRy
b3BwZWRWaWRlb0ZyYW1lczsKKy0gKHVuc2lnbmVkIGxvbmcpbnVtYmVyT2ZDb3JydXB0ZWRWaWRl
b0ZyYW1lczsKKy0gKGRvdWJsZSl0b3RhbEZyYW1lRGVsYXk7CitAZW5kCisKK0BpbnRlcmZhY2Ug
QVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgKFdlYkNvcmVBVlNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllclByaXZhdGUpCistIChBVlZpZGVvUGVyZm9ybWFuY2VNZXRyaWNzICopdmlkZW9QZXJmb3Jt
YW5jZU1ldHJpY3M7CitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgQVZTYW1w
bGVCdWZmZXJBdWRpb1JlbmRlcmVyCisKK0BpbnRlcmZhY2UgQVZTYW1wbGVCdWZmZXJBdWRpb1Jl
bmRlcmVyIDogTlNPYmplY3QKKy0gKHZvaWQpc2V0Vm9sdW1lOihmbG9hdCl2b2x1bWU7CistICh2
b2lkKXNldE11dGVkOihCT09MKW11dGVkOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICphdWRpb1RpbWVQaXRjaEFsZ29yaXRobTsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0K
KyNwcmFnbWEgbWFyayBBVlNhbXBsZUJ1ZmZlclJlbmRlclN5bmNocm9uaXplcgorCitAaW50ZXJm
YWNlIEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25pemVyIDogTlNPYmplY3QKKy0gKENNVGlt
ZWJhc2VSZWYpdGltZWJhc2U7CistIChmbG9hdClyYXRlOworLSAodm9pZClzZXRSYXRlOihmbG9h
dClyYXRlOworLSAodm9pZClzZXRSYXRlOihmbG9hdClyYXRlIHRpbWU6KENNVGltZSl0aW1lOwor
LSAoTlNBcnJheSAqKXJlbmRlcmVyczsKKy0gKHZvaWQpYWRkUmVuZGVyZXI6KGlkKXJlbmRlcmVy
OworLSAodm9pZClyZW1vdmVSZW5kZXJlcjooaWQpcmVuZGVyZXIgYXRUaW1lOihDTVRpbWUpdGlt
ZSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgZGlkUmVtb3ZlUmVuZGVyZXIp
KWNvbXBsZXRpb25IYW5kbGVyOworLSAoaWQpYWRkUGVyaW9kaWNUaW1lT2JzZXJ2ZXJGb3JJbnRl
cnZhbDooQ01UaW1lKWludGVydmFsIHF1ZXVlOihkaXNwYXRjaF9xdWV1ZV90KXF1ZXVlIHVzaW5n
QmxvY2s6KHZvaWQgKF4pKENNVGltZSB0aW1lKSlibG9jazsKKy0gKGlkKWFkZEJvdW5kYXJ5VGlt
ZU9ic2VydmVyRm9yVGltZXM6KE5TQXJyYXkgKil0aW1lcyBxdWV1ZTooZGlzcGF0Y2hfcXVldWVf
dClxdWV1ZSB1c2luZ0Jsb2NrOih2b2lkICheKSh2b2lkKSlibG9jazsKKy0gKHZvaWQpcmVtb3Zl
VGltZU9ic2VydmVyOihpZClvYnNlcnZlcjsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFn
bWEgbWFyayBBVlN0cmVhbVNlc3Npb24KKworQGludGVyZmFjZSBBVlN0cmVhbVNlc3Npb24gOiBO
U09iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RvcmFnZURpcmVjdG9yeUF0VVJMOihO
U1VSTCAqKXN0b3JhZ2VEaXJlY3Rvcnk7CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakMKKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoTWVkaWFQbGF5ZXIqIHBsYXllcikKKyAgICA6
IG1fcGxheWVyKHBsYXllcikKKyAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykKKyAgICAsIG1f
c3luY2hyb25pemVyKGFkb3B0TlMoW2FsbG9jQVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6
ZXJJbnN0YW5jZSgpIGluaXRdKSkKK3sKKyAgICAvLyBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZv
ckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEgbm9uLW51bWVyaWMg
Q01UaW1lLCBzbyBqdXN0IHVzZQorICAgIC8vIGFuIGFyYml0cmFyaWx5IGxhcmdlIHRpbWUgdmFs
dWUgb2Ygb25jZSBhbiBob3VyOgorICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdl
YWtQdHIoKTsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNocm9uaXplciBhZGRQ
ZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlhVGltZTo6Y3JlYXRl
V2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSB1c2luZ0Js
b2NrOl4oQ01UaW1lIHRpbWUpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xNTc5ODA1
MD4gaXMgZml4ZWQuCisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHNob3VsZEJlUGxheWluZygpKQorICAgICAgICAgICAgW21fc3luY2hy
b25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICB9XTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
KCkKK3sKKyAgICBpZiAobV90aW1lSnVtcGVkT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNocm9u
aXplciByZW1vdmVUaW1lT2JzZXJ2ZXI6bV90aW1lSnVtcGVkT2JzZXJ2ZXIuZ2V0KCldOworICAg
IGlmIChtX2R1cmF0aW9uT2JzZXJ2ZXIpCisgICAgICAgIFttX3N5bmNocm9uaXplciByZW1vdmVU
aW1lT2JzZXJ2ZXI6bV9kdXJhdGlvbk9ic2VydmVyLmdldCgpXTsKK30KKworI3ByYWdtYSBtYXJr
IC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVk
aWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKQor
ICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+KHBsYXllcik7
IH0sIGdldFN1cHBvcnRlZFR5cGVzLAorICAgICAgICAgICAgc3VwcG9ydHNUeXBlLCAwLCAwLCAw
LCAwKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Omlz
QXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpCisgICAgICAg
ICYmIGlzQ29yZU1lZGlhRnJhbWV3b3JrQXZhaWxhYmxlKCkKKyAgICAgICAgJiYgZ2V0QVZTdHJl
YW1EYXRhUGFyc2VyQ2xhc3MoKQorICAgICAgICAmJiBnZXRBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVu
ZGVyZXJDbGFzcygpCisgICAgICAgICYmIGdldEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25p
emVyQ2xhc3MoKQorICAgICAgICAmJiBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChnZXRBVlNhbXBs
ZUJ1ZmZlckF1ZGlvUmVuZGVyZXJDbGFzcygpLCBAc2VsZWN0b3Ioc2V0TXV0ZWQ6KSk7Cit9CisK
K3N0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIG1pbWVUeXBlQ2FjaGUoKQoreworICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7
CisgICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYg
KHR5cGVMaXN0SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBjYWNoZTsKKyAgICB0eXBlTGlz
dEluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIE5TQXJyYXkgKnR5cGVzID0gW2dldEFWVVJMQXNz
ZXRDbGFzcygpIGF1ZGlvdmlzdWFsTUlNRVR5cGVzXTsKKyAgICBmb3IgKE5TU3RyaW5nICptaW1l
VHlwZSBpbiB0eXBlcykKKyAgICAgICAgY2FjaGUuYWRkKG1pbWVUeXBlKTsKKworICAgIHJldHVy
biBjYWNoZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMg
PSBtaW1lVHlwZUNhY2hlKCk7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFF
bmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBUaGlzIGVuZ2lu
ZSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1tZWRpYS1zdHJlYW0gc291cmNlcy4KKyAgICBpZiAocGFy
YW1ldGVycy5pc01lZGlhU3RyZWFtKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzU3Vw
cG9ydGVkOworICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKKyNw
cmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIE92
ZXJyaWRlcworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bG9h
ZChNZWRpYVN0cmVhbVByaXZhdGUqIGNsaWVudCkKK3sKKyAgICBtX01lZGlhU3RyZWFtUHJpdmF0
ZSA9IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSgqdGhpcywgKmNsaWVudC0+Y2xp
ZW50KCkpOworICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGll
bnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkgeworICAgICAgICB0cmFjay0+c291cmNlKCktPnN0YXJ0
UHJvZHVjaW5nRGF0YSgpOworICAgICAgICB0cmFjay0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICB9
CisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5n
ZXRBdWRpb1RyYWNrcygpKSB7CisgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNp
bmdEYXRhKCk7CisgICAgICAgIHRyYWNrLT5zZXRFbmFibGVkKHRydWUpOworICAgIH0KKyAgICBt
X3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXll
cik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjYW5j
ZWxMb2FkKCkKK3sKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OnByZXBhcmVUb1BsYXkoKQoreworfQorCitQbGF0Zm9ybU1lZGlhIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Cit7CisgICAgUGxh
dGZvcm1NZWRpYSBwbTsKKyAgICBwbS50eXBlID0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9u
QXNzZXRUeXBlOworICAgIHBtLm1lZGlhLmF2ZkFzc2V0ID0gbV9hc3NldC5nZXQoKTsKKyAgICBy
ZXR1cm4gcG07Cit9CisKK1BsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX01lZGlhU3Ry
ZWFtUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6
cGxhdGZvcm1MYXllcigpOworICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2
YXRlLT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkgeworICAgICAgICAvLyBKdXN0IGdyYWIg
dGhlIGZpcnN0IHdlYmNhbSBmb3Igbm93LCB3ZSBjYW4gbWFuYWdlIG1vcmUgbGF0ZXIKKyAgICAg
ICAgQVZWaWRlb0NhcHR1cmVTb3VyY2UqIGNhcHR1cmUgPSBzdGF0aWNfY2FzdDxBVlZpZGVvQ2Fw
dHVyZVNvdXJjZSo+KHRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQbGF0Zm9ybUxheWVyKj4oW2dldEFWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyQ2xhc3MoKSBs
YXllcldpdGhTZXNzaW9uOmNhcHR1cmUtPnNlc3Npb24oKV0pOworICAgIH0KKyAgICByZXR1cm4g
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpwbGF0Zm9ybUxheWVyKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF5KCkKK3sKKyAgICBhdXRv
IHdlYWtUaGlzID0gY3JlYXRlV2Vha1B0cigpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtU
aGlzXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHdlYWtUaGlzLmdldCgpLT5wbGF5SW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXlJbnRlcm5hbCgpCit7Cisg
ICAgbV9wbGF5aW5nID0gdHJ1ZTsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCisgICAgICAg
IFttX3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CisgICAgaWYgKG1fTWVkaWFTdHJlYW1Q
cml2YXRlKSB7CisgICAgICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRl
LT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKSkKKyAgICAgICAgICAgIHRyYWNrLT5zb3VyY2Uo
KS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7CisgICAgICAgIGZvciAoYXV0byB0cmFjayA6IG1fTWVk
aWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVkaW9UcmFja3MoKSkKKyAgICAgICAgICAg
IHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7CisgICAgfQorfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2UoKQoreworICAgIGF1
dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vh
a1RoaXNdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgd2Vha1RoaXMuZ2V0KCktPnBhdXNlSW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlSW50ZXJuYWwoKQor
eworICAgIG1fcGxheWluZyA9IGZhbHNlOworICAgIFttX3N5bmNocm9uaXplciBzZXRSYXRlOjBd
OworICAgIGlmIChtX01lZGlhU3RyZWFtUHJpdmF0ZSkgeworICAgICAgICBmb3IgKGF1dG8gdHJh
Y2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpCisg
ICAgICAgICAgICB0cmFjay0+c291cmNlKCktPnN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgICAg
IGZvciAoYXV0byB0cmFjayA6IG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVk
aW9UcmFja3MoKSkKKyAgICAgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RvcFByb2R1Y2luZ0Rh
dGEoKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpwYXVzZWQoKSBjb25zdAoreworICAgIHJldHVybiAhW21fc3luY2hyb25pemVyIHJhdGVd
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0Vm9s
dW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBmb3IgKGF1dG8gYXVkaW9SZW5kZXJlciA6IG1fc2Ft
cGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMpCisgICAgICAgIFthdWRpb1JlbmRlcmVyIHNldFZvbHVt
ZTp2b2x1bWVdOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6c3VwcG9ydHNTY2FubmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0TXV0ZWQoYm9vbCBt
dXRlZCkKK3sKKyAgICBmb3IgKGF1dG8gYXVkaW9SZW5kZXJlciA6IG1fc2FtcGxlQnVmZmVyQXVk
aW9SZW5kZXJlcnMpCisgICAgICAgIFthdWRpb1JlbmRlcmVyIHNldE11dGVkOm11dGVkXTsKKyAg
ICBpZiAobV9NZWRpYVN0cmVhbVByaXZhdGUpIHsKKyAgICAgICAgZm9yIChhdXRvIHRyYWNrIDog
bV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRBdWRpb1RyYWNrcygpKQorICAgICAg
ICAgICAgdHJhY2stPnNvdXJjZSgpLT5zZXRNdXRlZChtdXRlZCk7CisgICAgfQorfQorCitGbG9h
dFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuYXR1cmFsU2l6ZSgp
IGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGZsb2F0U2l6ZSgwLDApOworICAgIGlmIChtX01lZGlh
U3RyZWFtUHJpdmF0ZSkgeworICAgICAgICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFt
UHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpIHsKKyAgICAgICAgICAgIEFWVmlk
ZW9DYXB0dXJlU291cmNlKiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxBVlZpZGVvQ2FwdHVyZVNvdXJj
ZSo+KHRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgICAgICBpZiAoc291cmNlLT53aWR0aCgpID4g
ZmxvYXRTaXplLndpZHRoKCkpCisgICAgICAgICAgICAgICAgZmxvYXRTaXplLnNldFdpZHRoKHNv
dXJjZS0+d2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoc291cmNlLT5oZWlnaHQoKSA+IGZsb2F0
U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBmbG9hdFNpemUuc2V0SGVpZ2h0KHNvdXJj
ZS0+aGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmbG9hdFNpemU7Cit9
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpoYXNWaWRlbygp
IGNvbnN0Cit7CisgICAgaWYgKCFtX01lZGlhU3RyZWFtUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiAhbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRW
aWRlb1RyYWNrcygpLmlzRW1wdHkoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fTWVkaWFTdHJl
YW1Qcml2YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFtX01lZGlhU3Ry
ZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldEF1ZGlvVHJhY2tzKCkuaXNFbXB0eSgpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0VmlzaWJsZShib29s
KQoreworICAgIC8vIE5vLW9wLgorfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKTsKK30KKworTWVkaWFUaW1lIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0
Cit7CisgICAgTWVkaWFUaW1lIHN5bmNocm9uaXplclRpbWUgPSB0b01lZGlhVGltZShDTVRpbWVi
YXNlR2V0VGltZShbbV9zeW5jaHJvbml6ZXIgdGltZWJhc2VdKSk7CisgICAgaWYgKHN5bmNocm9u
aXplclRpbWUgPCBNZWRpYVRpbWU6Onplcm9UaW1lKCkpCisgICAgICAgIHJldHVybiBNZWRpYVRp
bWU6Onplcm9UaW1lKCk7CisgICAgaWYgKHN5bmNocm9uaXplclRpbWUgPCBtX2xhc3RTZWVrVGlt
ZSkKKyAgICAgICAgcmV0dXJuIG1fbGFzdFNlZWtUaW1lOworICAgIHJldHVybiBzeW5jaHJvbml6
ZXJUaW1lOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpzdGFydFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1l
KCk7Cit9CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OmluaXRpYWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgp
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2Vla2lu
ZygpIGNvbnN0Cit7CisgICAgLy8gTWVkaWFTdHJlYW0gaXMgdW5zZWVrYWJsZQorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnNldFJhdGVEb3VibGUoZG91YmxlKQoreworICAgIC8vIE1lZGlhU3RyZWFtIGlzIHVuc2Vla2Fi
bGU7IHRoZXJlZm9yZSwgY2Fubm90IHNldCByYXRlCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1Bp
dGNoKQoreworICAgIE5TU3RyaW5nICphbGdvcml0aG0gPSBwcmVzZXJ2ZXNQaXRjaCA/IEFWQXVk
aW9UaW1lUGl0Y2hBbGdvcml0aG1TcGVjdHJhbCA6IEFWQXVkaW9UaW1lUGl0Y2hBbGdvcml0aG1W
YXJpc3BlZWQ7CisgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IG1fc2FtcGxlQnVmZmVyQXVkaW9S
ZW5kZXJlcnMpCisgICAgICAgIFtyZW5kZXJlciBzZXRBdWRpb1RpbWVQaXRjaEFsZ29yaXRobTph
bGdvcml0aG1dOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJh
bmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZWVrYWJsZSgpIGNv
bnN0Cit7CisgICAgLy8gTWFrZSBpdCBzbyB0aGF0IHRoZSBQbGF0Zm9ybVRpbWVSYW5nZXMgbmV2
ZXIgYWRkcyBhbnkgdGltZXMgdG8gaXRzIHZlY3RvciwgZm9yY2luZyBpdCB0byByZXR1cm4gYSBs
ZW5ndGggb2YgMCB0byBKUworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtVGlt
ZVJhbmdlcz4oKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpidWZmZXJlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOworfQorCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZGlkTG9hZGluZ1Byb2dy
ZXNzKCkgY29uc3QKK3sKKyAgICBib29sIGxvYWRpbmdQcm9ncmVzc2VkID0gbV9sb2FkaW5nUHJv
Z3Jlc3NlZDsKKyAgICBtX2xvYWRpbmdQcm9ncmVzc2VkID0gZmFsc2U7CisgICAgcmV0dXJuIGxv
YWRpbmdQcm9ncmVzc2VkOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFt
QVZGT2JqQzo6c2V0U2l6ZShjb25zdCBJbnRTaXplJikKK3sKKyAgICAvLyBGSVhNRSgxMjUxNTcp
OiBJbXBsZW1lbnQgcGFpbnRpbmcuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgLy8gRklYTUUoMTI1MTU3KTogSW1wbGVtZW50
IHBhaW50aW5nLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIC8vIEZJWE1FKDEyNTE1Nyk6
IEltcGxlbWVudCBwYWludGluZy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6aGFzQXZhaWxhYmxlVmlkZW9GcmFt
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGFzQXZhaWxhYmxlVmlkZW9GcmFtZTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzQWNjZWxl
cmF0ZWRSZW5kZXJpbmcoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdT
dGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJS
ZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKG1fcGxheWVyKSkKKyAgICAgICAgZW5zdXJlTGF5ZXIo
KTsKKyAgICBlbHNlCisgICAgICAgIGRlc3Ryb3lMYXllcigpOworfQorCitNZWRpYVBsYXllcjo6
TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1vdmll
TG9hZFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnByZXBhcmVG
b3JSZW5kZXJpbmcoKQoreworICAgIC8vIE5vLW9wLgorfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjplbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0Cit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZGVzY3JpcHRpb24oQVNDSUlMaXRlcmFs
KCJBVkZvdW5kYXRpb24gTWVkaWFTdHJlYW0gRW5naW5lIikpOworICAgIHJldHVybiBkZXNjcmlw
dGlvbjsKK30KKworU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRSgxMjUx
NTgpOiBpbXBsZW1lbnQgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkKKyAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKK30KKworc2l6ZV90IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFt
QVZGT2JqQzo6ZXh0cmFNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRSgxNDY4MTgp
OiBJbXBsZW1lbnQgZXh0cmFNZW1vcnlDb3N0KCkgaW4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordW5zaWduZWQgbG9uZyBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnRvdGFsVmlkZW9GcmFtZXMoKQor
eworICAgIHJldHVybiBbW21fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIHZpZGVvUGVyZm9ybWFu
Y2VNZXRyaWNzXSB0b3RhbE51bWJlck9mVmlkZW9GcmFtZXNdOworfQorCit1bnNpZ25lZCBsb25n
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZHJvcHBlZFZpZGVvRnJhbWVz
KCkKK3sKKyAgICByZXR1cm4gW1ttX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciB2aWRlb1BlcmZv
cm1hbmNlTWV0cmljc10gbnVtYmVyT2ZEcm9wcGVkVmlkZW9GcmFtZXNdOworfQorCit1bnNpZ25l
ZCBsb25nIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6Y29ycnVwdGVkVmlk
ZW9GcmFtZXMoKQoreworICAgIHJldHVybiBbW21fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIHZp
ZGVvUGVyZm9ybWFuY2VNZXRyaWNzXSBudW1iZXJPZkNvcnJ1cHRlZFZpZGVvRnJhbWVzXTsKK30K
KworTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dG90YWxG
cmFtZURlbGF5KCkKK3sKKyAgICByZXR1cm4gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKFtb
bV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgdmlkZW9QZXJmb3JtYW5jZU1ldHJpY3NdIHRvdGFs
RnJhbWVEZWxheV0pOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFV0aWxpdHkg
TWV0aG9kcworCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZW5z
dXJlTGF5ZXIoKQoreworICAgIGlmIChtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgPSBhZG9wdE5TKFth
bGxvY0FWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVySW5zdGFuY2UoKSBpbml0XSk7CisjaWZuZGVm
IE5ERUJVRworICAgIFttX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciBzZXROYW1lOkAiTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW0gQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIiXTsKKyNl
bmRpZgorCisgICAgW21fc3luY2hyb25pemVyIGFkZFJlbmRlcmVyOm1fc2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyLmdldCgpXTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OmRlc3Ryb3lMYXllcigpCit7CisgICAgaWYgKCFtX3NhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ01UaW1lIGN1cnJlbnRUaW1lID0gQ01U
aW1lYmFzZUdldFRpbWUoW21fc3luY2hyb25pemVyIHRpbWViYXNlXSk7CisgICAgW21fc3luY2hy
b25pemVyIHJlbW92ZVJlbmRlcmVyOm1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmdldCgpIGF0
VGltZTpjdXJyZW50VGltZSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6XihCT09MKSB7CisgICAgICAg
IC8vIE5vLW9wLgorICAgIH1dOworICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID0gbnVs
bHB0cjsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNo
b3VsZEJlUGxheWluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWluZyAmJiBtX3JlYWR5
U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQoreworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gcmVhZHlT
dGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsK
KworICAgIGlmIChzaG91bGRCZVBsYXlpbmcoKSkKKyAgICAgICAgW21fc3luY2hyb25pemVyIHNl
dFJhdGU6bV9yYXRlXTsKKyAgICBlbHNlCisgICAgICAgIFttX3N5bmNocm9uaXplciBzZXRSYXRl
OjBdOworCisgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjphZGREaXNwbGF5TGF5ZXIoQVZTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXIqIGRpc3BsYXlMYXllcikKK3sKKyAgICBBU1NFUlQoZGlzcGxh
eUxheWVyKTsKKyAgICBpZiAoZGlzcGxheUxheWVyID09IG1fc2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciA9
IGRpc3BsYXlMYXllcjsKKyAgICBbbV9zeW5jaHJvbml6ZXIgYWRkUmVuZGVyZXI6bV9zYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXIuZ2V0KCldOworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBs
YXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKKyAgICAKKyAgICAvLyBGSVhNRTog
bW92ZSB0aGlzIHNvbWV3aGVyZSBhcHByb3ByaWF0ZToKKyAgICBtX3BsYXllci0+Zmlyc3RWaWRl
b0ZyYW1lQXZhaWxhYmxlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpyZW1vdmVEaXNwbGF5TGF5ZXIoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIq
IGRpc3BsYXlMYXllcikKK3sKKyAgICBpZiAoZGlzcGxheUxheWVyICE9IG1fc2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQ01UaW1lIGN1cnJlbnRU
aW1lID0gQ01UaW1lYmFzZUdldFRpbWUoW21fc3luY2hyb25pemVyIHRpbWViYXNlXSk7CisgICAg
W21fc3luY2hyb25pemVyIHJlbW92ZVJlbmRlcmVyOm1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
LmdldCgpIGF0VGltZTpjdXJyZW50VGltZSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6XihCT09MKSB7
CisgICAgICAgIC8vIE5vLW9wLgorICAgIH1dOworICAgIAorICAgIG1fc2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyID0gbnVsbHB0cjsKKyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJS
ZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjphZGRBdWRpb1JlbmRlcmVyKEFWU2FtcGxlQnVmZmVyQXVk
aW9SZW5kZXJlciogYXVkaW9SZW5kZXJlcikKK3sKKyAgICBpZiAobV9zYW1wbGVCdWZmZXJBdWRp
b1JlbmRlcmVycy5jb250YWlucyhhdWRpb1JlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMuYXBwZW5kKGF1ZGlvUmVuZGVyZXIp
OworICAgIAorICAgIFthdWRpb1JlbmRlcmVyIHNldE11dGVkOm1fcGxheWVyLT5tdXRlZCgpXTsK
KyAgICBbYXVkaW9SZW5kZXJlciBzZXRWb2x1bWU6bV9wbGF5ZXItPnZvbHVtZSgpXTsKKyAgICBb
YXVkaW9SZW5kZXJlciBzZXRBdWRpb1RpbWVQaXRjaEFsZ29yaXRobToobV9wbGF5ZXItPnByZXNl
cnZlc1BpdGNoKCkgPyBBVkF1ZGlvVGltZVBpdGNoQWxnb3JpdGhtU3BlY3RyYWwgOiBBVkF1ZGlv
VGltZVBpdGNoQWxnb3JpdGhtVmFyaXNwZWVkKV07CisgICAgCisgICAgW21fc3luY2hyb25pemVy
IGFkZFJlbmRlcmVyOmF1ZGlvUmVuZGVyZXJdOworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRp
YVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2VkKG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlbW92ZUF1ZGlvUmVuZGVyZXIoQVZTYW1w
bGVCdWZmZXJBdWRpb1JlbmRlcmVyKiBhdWRpb1JlbmRlcmVyKQoreworICAgIHNpemVfdCBwb3Mg
PSBtX3NhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXJzLmZpbmQoYXVkaW9SZW5kZXJlcik7CisgICAg
aWYgKHBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENNVGltZSBj
dXJyZW50VGltZSA9IENNVGltZWJhc2VHZXRUaW1lKFttX3N5bmNocm9uaXplciB0aW1lYmFzZV0p
OworICAgIFttX3N5bmNocm9uaXplciByZW1vdmVSZW5kZXJlcjphdWRpb1JlbmRlcmVyIGF0VGlt
ZTpjdXJyZW50VGltZSB3aXRoQ29tcGxldGlvbkhhbmRsZXI6XihCT09MKSB7CisgICAgICAgIC8v
IE5vLW9wLgorICAgIH1dOworICAgIAorICAgIG1fc2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcnMu
cmVtb3ZlKHBvcyk7CisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyUmVuZGVyaW5n
TW9kZUNoYW5nZWQobV9wbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6Y2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpCit7CisgICAgbV9wbGF5ZXIt
PmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3Ry
ZWFtUHJpdmF0ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
NTE4ZWM4Y2ViMzJmNmQzNWY4MTYwODk2MzI0N2U1MjQ2ZmRkMTU5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhU3RyZWFtUHJpdmF0
ZUFWRk9iakNfaAorI2RlZmluZSBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDX2gKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01lZGlh
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitPQkpDX0NMQVNTIEFWQXNzZXQ7CitPQkpD
X0NMQVNTIEFWU3RyZWFtRGF0YVBhcnNlcjsKK09CSkNfQ0xBU1MgTlNFcnJvcjsKK09CSkNfQ0xB
U1MgTlNPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1w
bGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0RNU2Vzc2lvbjsK
K2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzsKK2NsYXNzIE1lZGlh
U3RyZWFtUHJpdmF0ZTsKK2NsYXNzIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudDsKK2NsYXNzIFBs
YXRmb3JtVGltZVJhbmdlczsKK2NsYXNzIFRpbWVSYW5nZXM7CisKK2NsYXNzIE1lZGlhU3RyZWFt
UHJpdmF0ZUFWRk9iakMgZmluYWwgOiBwdWJsaWMgTWVkaWFTdHJlYW1Qcml2YXRlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM+IGNyZWF0ZShN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMmLCBNZWRpYVN0cmVhbVByaXZhdGVD
bGllbnQmKTsKKyAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKCk7CisKKyAg
ICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMqIHBsYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fcGxheWVyOyB9CisKKyAgICB2aXJ0dWFsIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVu
dCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2xpZW50KE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCogY2xpZW50KSB7IG1fY2xp
ZW50ID0gY2xpZW50OyB9CisKKyAgICBNZWRpYVRpbWUgZHVyYXRpb24oKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpOworCisgICAgYm9vbCBoYXNB
dWRpbygpIGNvbnN0OworICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKKworICAgIHZvaWQgc2V0
UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisgICAgRmxvYXRTaXplIG5hdHVy
YWxTaXplKCkgY29uc3Q7CisKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRl
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQyhNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMmLCBNZWRpYVN0cmVhbVByaXZhdGVDbGll
bnQmKTsKKworICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyogbV9wbGF5
ZXI7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudD4gbV9jbGllbnQ7Cit9Owor
ICAgIAorfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRB
VElPTikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTdHJl
YW1Qcml2YXRlQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWNiN2IxMWU3ZjFhMTM1NDkxZmIzZWI0
MjQ0ODViMzRmOTA0MTFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5t
bQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtUHJpdmF0
ZUFWRk9iakMuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbXBvcnQgIkNvbnRlbnRUeXBlLmgiCisjaW1wb3J0ICJFeGNlcHRpb25Db2RlUGxh
Y2Vob2xkZXIuaCIKKyNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qy5oIgorI2ltcG9ydCAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW1wb3J0ICJTb2Z0TGlua2lu
Zy5oIgorI2ltcG9ydCAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCIKKyNpbXBvcnQgPG9i
amMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW1wb3J0
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI3By
YWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDCisKK1Jl
ZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDPiBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpD
OjpjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDJiBwYXJlbnQsIE1l
ZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCYgY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQyhwYXJlbnQsIGNsaWVudCkpOworfQorCitNZWRp
YVN0cmVhbVByaXZhdGVBVkZPYmpDOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKE1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyYgcGFyZW50LCBNZWRpYVN0cmVhbVByaXZhdGVD
bGllbnQmIGNsaWVudCkKKyAgICA6IG1fcGxheWVyKCZwYXJlbnQpCisgICAgLCBtX2NsaWVudCgm
Y2xpZW50KQoreworfQorCitNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjp+TWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQygpCit7CisKK30KKworTWVkaWFUaW1lIE1lZGlhU3RyZWFtUHJpdmF0ZUFW
Rk9iakM6OmR1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmlu
aXRlVGltZSgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRp
YVN0cmVhbVByaXZhdGVBVkZPYmpDOjpidWZmZXJlZCgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3BsYXllci0+cmVhZHlTdGF0ZSgpOworfQorCit2b2lkIE1lZGlhU3RyZWFtUHJp
dmF0ZUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSkKK3sKKyAgICBtX3BsYXllci0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRlKTsKK30KKwor
Ym9vbCBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGxheWVyLT5oYXNBdWRpbygpOworfQorCitib29sIE1lZGlhU3RyZWFtUHJpdmF0
ZUFWRk9iakM6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPmhhc1Zp
ZGVvKCk7Cit9CisKK0Zsb2F0U2l6ZSBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpuYXR1cmFs
U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWVyLT5uYXR1cmFsU2l6ZSgpOworfQor
ICAgIAorfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRB
VElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1Qcml2YXRlLmgKaW5kZXggM2U2M2Y0Y2E0MjUwNzA1M2Q4M2FkZWE1ZGQwZGZi
NTdiYTIzNjkyMS4uZWI1Njc4ZTMwNjFiM2E3OWY2NDAwZTI3ZDk1NTI3ZjUwN2QwZDFmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Q
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1Qcml2YXRlLmgKQEAgLTc4LDYgKzc4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3Zl
VHJhY2soTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBOb3RpZnlDbGllbnRPcHRpb24pOwogCiBw
cml2YXRlOgorICAgIE1lZGlhU3RyZWFtUHJpdmF0ZSgpIHsgfQogICAgIE1lZGlhU3RyZWFtUHJp
dmF0ZShjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlPj4mKTsKIAogICAgIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVudCogbV9jbGllbnQ7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256623</attachid>
            <date>2015-07-10 16:30:10 -0700</date>
            <delta_ts>2015-07-10 16:49:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146789-20150710162908.patch</filename>
            <type>text/plain</type>
            <size>32490</size>
            <attacher name="Matthew Daiter">mdaiter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZhOGE3Y2MxMDdlMGY3
MWIyMDYxYTI4MjZkMDVmZWNkMGI4M2JkNi4uMjcwYTQ0Y2U1M2Y0YzcwNWU2ODQxMmRjZjdjZjg3
MWU4NGQ3NTkyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE1LTA3LTEwICBNYXR0
aGV3IERhaXRlciAgPG1kYWl0ZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZGluZyBNZWRpYVN0
cmVhbSBFbmdpbmUgYnVpbGRpbmcgYmxvY2tzIHRvIHRoZSBjb2RlIHJlcG8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc4OQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjE3NDcwMjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldExvYWRpbmdQcm9n
cmVzc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjcmVhdGVXZWFrUHRyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Om1p
bWVUeXBlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpj
YW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2VJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om5hdHVyYWxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkdXJhdGlvbk1lZGlhVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNl
ZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzZXRSYXRlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuZXR3b3JrU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6c2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjptYXhNZWRpYVRpbWVTZWVrYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1pbk1lZGlh
VGltZVNlZWthYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpt
b3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2hvdWxkQmVQbGF5aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxh
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFt
QVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFt
UHJpdmF0ZUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJp
dmF0ZUFWRk9iakM6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6fk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6YnVmZmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpoYXNBdWRp
byk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpoYXNWaWRl
byk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpuYXR1cmFs
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRl
Lmg6IAorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlOjpNZWRpYVN0cmVhbVBy
aXZhdGUpOiBBZGRlZCBjb25zdHJ1Y3Rvci4KKwogMjAxNS0wNy0wOSAgTWF0dGhldyBEYWl0ZXIg
IDxtZGFpdGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHBvc2VkIEFWVmlkZW9DYXB0dXJlU291
cmNlJ3MgYm91bmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwYjg4MzVm
MGE0MDE5ODRmNmY2OTExZTlhNDliYjk4MmE5NDNlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZP
VU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJN
ZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0
ZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworT0JKQ19DTEFTUyBBVkFzc2V0Owor
T0JKQ19DTEFTUyBBVkNhcHR1cmVWaWRlb1ByZXZpZXdMYXllcjsKK09CSkNfQ0xBU1MgQVZTYW1w
bGVCdWZmZXJBdWRpb1JlbmRlcmVyOworT0JKQ19DTEFTUyBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXI7CitPQkpD
X0NMQVNTIEFWU3RyZWFtU2Vzc2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01UaW1lYmFz
ZSogQ01UaW1lYmFzZVJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRl
SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMoTWVkaWFQbGF5ZXIqKTsKKyAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVk
aWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworCisgICAgLy8gTWVkaWFQbGF5ZXIgRmFj
dG9yeSBNZXRob2RzCisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0
aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdp
bmVTdXBwb3J0UGFyYW1ldGVycyYpOworCisgICAgdm9pZCBhZGREaXNwbGF5TGF5ZXIoQVZTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXIqKTsKKyAgICB2b2lkIHJlbW92ZURpc3BsYXlMYXllcihBVlNh
bXBsZUJ1ZmZlckRpc3BsYXlMYXllciopOworCisgICAgdm9pZCBhZGRBdWRpb1JlbmRlcmVyKEFW
U2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciopOworICAgIHZvaWQgcmVtb3ZlQXVkaW9SZW5kZXJl
cihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqKTsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0UmVh
ZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisKKyAgICB2b2lkIHNpemVDaGFuZ2Vk
KCk7CisgICAgdm9pZCBjaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisKKyAgICBXZWFrUHRyPE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQz4gY3JlYXRlV2Vha1B0cigpIHsgcmV0
dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisKK3ByaXZhdGU6CisgICAg
ICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZQorICAgICAgICAvLyBGSVhNRSgxNDY4
NTMpOiBJbXBsZW1lbnQgbmVjZXNzYXJ5IGNvbmZvcm1hdGlvbnMgdG8gc3RhbmRhcmQgaW4gSFRN
TE1lZGlhRWxlbWVudCBmb3IgTWVkaWFTdHJlYW0gCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlIHsgfTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIHZvaWQgbG9h
ZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKSBvdmVycmlkZSB7IH07
CisjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHZvaWQgbG9hZChNZWRpYVN0
cmVhbVByaXZhdGUqKSBvdmVycmlkZTsKKyNlbmRpZgorICAgIHZvaWQgY2FuY2VsTG9hZCgpIG92
ZXJyaWRlOworCisgICAgdm9pZCBwcmVwYXJlVG9QbGF5KCkgb3ZlcnJpZGU7CisgICAgUGxhdGZv
cm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIHBs
YXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXlJbnRlcm5hbCgpOworCisgICAgdm9pZCBwYXVz
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGF1c2VJbnRlcm5hbCgpOworCisgICAgYm9vbCBwYXVz
ZWQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBvdmVycmlk
ZTsKKyAgICBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBib29sIHN1cHBv
cnRzU2Nhbm5pbmcoKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6
ZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Vmlz
aWJsZShib29sKSBvdmVycmlkZTsKKworICAgIE1lZGlhVGltZSBkdXJhdGlvbk1lZGlhVGltZSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1lZGlhVGltZSYs
IGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlIHsgfTsKKyAgICBi
b29sIHNlZWtpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJhdGVEb3VibGUoZG91
YmxlKSBvdmVycmlkZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+
IHNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIG1heE1lZGlhVGltZVNl
ZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIG1pbk1lZGlhVGltZVNlZWth
YmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJh
bmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgZGlkTG9hZGluZ1By
b2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6
ZSYpIG92ZXJyaWRlOworCisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgYm9v
bCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBN
ZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHByZXBhcmVGb3JSZW5kZXJpbmcoKSBvdmVycmlkZTsKKworICAgIFN0cmlu
ZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIGxhbmd1
YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc2l6ZV90IGV4
dHJhTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBzaG91bGRCZVBsYXlp
bmcoKSBjb25zdDsKKworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpD
OworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIFdlYWtQdHJGYWN0b3J5PE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQz4gbV93ZWFrUHRyRmFjdG9yeTsKKyAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQz4gbV9NZWRpYVN0cmVhbVByaXZhdGU7Cisg
ICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7CisgICAgUmV0YWluUHRyPEFWU2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKKyAgICBWZWN0b3I8
UmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcj4+IG1fc2FtcGxlQnVmZmVyQXVk
aW9SZW5kZXJlcnM7CisgICAgUmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25p
emVyPiBtX3N5bmNocm9uaXplcjsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fdGltZUp1bXBlZE9ic2Vy
dmVyOworICAgIFJldGFpblB0cjxpZD4gbV9kdXJhdGlvbk9ic2VydmVyOworICAgIFJldGFpblB0
cjxBVlN0cmVhbVNlc3Npb24+IG1fc3RyZWFtU2Vzc2lvbjsKKyAgICBNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1f
cmVhZHlTdGF0ZTsKKyAgICBNZWRpYVRpbWUgbV9sYXN0U2Vla1RpbWU7CisgICAgZG91YmxlIG1f
cmF0ZTsKKyAgICBib29sIG1fcGxheWluZzsKKyAgICBib29sIG1fc2Vla2luZzsKKyAgICBib29s
IG1fc2Vla0NvbXBsZXRlZDsKKyAgICBtdXRhYmxlIGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZDsK
K307CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZG
T1VOREFUSU9OKQorCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41N2QwMzZkYzQ1ZGQ1
YzFlYjU3ZDlhOWQ4ZDlkNWRmZDgxZjQ4YjBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0wLDAgKzEsNDA4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaCIKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBvcnQgIkFW
VmlkZW9DYXB0dXJlU291cmNlLmgiCisjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCisjaW1wb3J0ICJM
b2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQgIk1lZGlh
U3RyZWFtUHJpdmF0ZUFWRk9iakMuaCIKKyNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5o
IgorI2ltcG9ydCAiUGxhdGZvcm1DbG9ja0NNLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldC5oPgorI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZUaW1lLmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KKyNpbXBvcnQg
PG9iamNfcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjcHJhZ21hIG1hcmsgLSBTb2Z0IExpbmtpbmcKKworI2lt
cG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05B
TChBVkZvdW5kYXRpb24pCisKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24s
IEFWQXNzZXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVkNhcHR1
cmVWaWRlb1ByZXZpZXdMYXllcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRp
b24sIEFWVVJMQXNzZXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBB
VlN0cmVhbVNlc3Npb24pOworCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU3RyZWFt
U2Vzc2lvbgorCitAaW50ZXJmYWNlIEFWU3RyZWFtU2Vzc2lvbiA6IE5TT2JqZWN0CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhTdG9yYWdlRGlyZWN0b3J5QXRVUkw6KE5TVVJMICopc3RvcmFnZURp
cmVjdG9yeTsKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjcHJhZ21hIG1hcmsgLQor
I3ByYWdtYSBtYXJrIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQworCitNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQyhNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVy
KQorICAgICwgbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQorICAgICwgbV9uZXR3b3JrU3RhdGUoTWVk
aWFQbGF5ZXI6OklkbGUpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nKQorICAgICwgbV9yYXRlKDEpCisgICAgLCBtX3BsYXlpbmcoMCkKKyAgICAsIG1fc2Vla2lu
ZyhmYWxzZSkKKyAgICAsIG1fc2Vla0NvbXBsZXRlZCh0cnVlKQorICAgICwgbV9sb2FkaW5nUHJv
Z3Jlc3NlZChmYWxzZSkKK3sKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKCkKK3sKK30KKworI3By
YWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWls
YWJsZSgpKQorICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+
KHBsYXllcik7IH0sIGdldFN1cHBvcnRlZFR5cGVzLAorICAgICAgICAgICAgc3VwcG9ydHNUeXBl
LCAwLCAwLCAwLCAwKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakM6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgp
CisgICAgICAgICYmIGlzQ29yZU1lZGlhRnJhbWV3b3JrQXZhaWxhYmxlKCk7Cit9CisKK3N0YXRp
YyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIG1pbWVUeXBlQ2FjaGUoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGNhY2hlOworICAgIHN0YXRpYyBib29sIHR5
cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICh0eXBlTGlzdEluaXRpYWxpemVk
KQorICAgICAgICByZXR1cm4gY2FjaGU7CisgICAgdHlwZUxpc3RJbml0aWFsaXplZCA9IHRydWU7
CisKKyAgICBOU0FycmF5ICp0eXBlcyA9IFtnZXRBVlVSTEFzc2V0Q2xhc3MoKSBhdWRpb3Zpc3Vh
bE1JTUVUeXBlc107CisgICAgZm9yIChOU1N0cmluZyAqbWltZVR5cGUgaW4gdHlwZXMpCisgICAg
ICAgIGNhY2hlLmdldCgpLmFkZChtaW1lVHlwZSk7CisKKyAgICByZXR1cm4gY2FjaGU7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQoreworICAgIHR5cGVzID0gbWltZVR5cGVDYWNo
ZSgpOworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgLy8gVGhpcyBlbmdpbmUgZG9lcyBub3Qgc3Vw
cG9ydCBub24tbWVkaWEtc3RyZWFtIHNvdXJjZXMuCisgICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRp
YVN0cmVhbSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKKyAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCisjcHJhZ21hIG1hcmsgLQor
I3ByYWdtYSBtYXJrIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSBPdmVycmlkZXMKKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQoTWVkaWFTdHJlYW1Q
cml2YXRlKiBjbGllbnQpCit7CisgICAgbV9NZWRpYVN0cmVhbVByaXZhdGUgPSBNZWRpYVN0cmVh
bVByaXZhdGVBVkZPYmpDOjpjcmVhdGUodGhpcywgY2xpZW50LT5jbGllbnQoKSk7CisgICAgZm9y
IChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRWaWRlb1Ry
YWNrcygpKSB7CisgICAgICAgIGNsaWVudC0+YWRkVHJhY2soJnRyYWNrLT5wcml2YXRlVHJhY2so
KSwgTWVkaWFTdHJlYW1Qcml2YXRlOjpOb3RpZnlDbGllbnRPcHRpb246OkRvbnROb3RpZnkpOwor
ICAgICAgICBjbGllbnQtPmNsaWVudCgpLT5kaWRBZGRUcmFja1RvUHJpdmF0ZSh0cmFjay0+cHJp
dmF0ZVRyYWNrKCkpOworICAgICAgICBpZiAodHJhY2stPnJlYWR5U3RhdGUoKSA9PSAibGl2ZSIp
IHsKKyAgICAgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7Cisg
ICAgICAgICAgICB0cmFjay0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldEF1
ZGlvVHJhY2tzKCkpIHsKKyAgICAgICAgY2xpZW50LT5hZGRUcmFjaygmdHJhY2stPnByaXZhdGVU
cmFjaygpLCBNZWRpYVN0cmVhbVByaXZhdGU6Ok5vdGlmeUNsaWVudE9wdGlvbjo6RG9udE5vdGlm
eSk7CisgICAgICAgIGNsaWVudC0+Y2xpZW50KCktPmRpZEFkZFRyYWNrVG9Qcml2YXRlKHRyYWNr
LT5wcml2YXRlVHJhY2soKSk7CisgICAgICAgIGlmICh0cmFjay0+cmVhZHlTdGF0ZSgpID09ICJs
aXZlIikgeworICAgICAgICAgICAgdHJhY2stPnNvdXJjZSgpLT5zdGFydFByb2R1Y2luZ0RhdGEo
KTsKKyAgICAgICAgICAgIHRyYWNrLT5zZXRFbmFibGVkKHRydWUpOworICAgICAgICB9CisgICAg
fQorICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2Vk
KG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OmNhbmNlbExvYWQoKQoreworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSgpCit7Cit9CisKK1BsYXRmb3JtTWVkaWEgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybU1lZGlhKCkgY29uc3QKK3sK
KyAgICBQbGF0Zm9ybU1lZGlhIHBtOworICAgIHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpBVkZv
dW5kYXRpb25Bc3NldFR5cGU7CisgICAgcG0ubWVkaWEuYXZmQXNzZXQgPSBtX2Fzc2V0LmdldCgp
OworICAgIHJldHVybiBwbTsKK30KKworUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
TWVkaWFTdHJlYW1Qcml2YXRlKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlOjpwbGF0Zm9ybUxheWVyKCk7CisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0
cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRWaWRlb1RyYWNrcygpKSB7CisgICAgICAgIC8vIEZJ
WE1FKDE0Njg1OCk6IEp1c3QgZ3JhYiB0aGUgZmlyc3Qgd2ViY2FtIGZvciBub3csIHdlIGNhbiBt
YW5hZ2UgbW9yZSBsYXRlcgorICAgICAgICBBVlZpZGVvQ2FwdHVyZVNvdXJjZSogY2FwdHVyZSA9
IChBVlZpZGVvQ2FwdHVyZVNvdXJjZSopdHJhY2stPnNvdXJjZSgpOworICAgICAgICByZXR1cm4g
KFBsYXRmb3JtTGF5ZXIqKVtnZXRBVkNhcHR1cmVWaWRlb1ByZXZpZXdMYXllckNsYXNzKCkgbGF5
ZXJXaXRoU2Vzc2lvbjpjYXB0dXJlLT5zZXNzaW9uKCldOworICAgIH0KKyAgICByZXR1cm4gTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpwbGF0Zm9ybUxheWVyKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF5KCkKK3sKKyAgICBhdXRvIHdl
YWtUaGlzID0gY3JlYXRlV2Vha1B0cigpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlz
XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHdlYWtUaGlzLmdldCgpLT5wbGF5SW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXlJbnRlcm5hbCgpCit7CisgICAg
bV9wbGF5aW5nID0gdHJ1ZTsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCisgICAgICAgIFtt
X3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CisKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBt
X01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpCisgICAgICAg
IHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7CisgICAgZm9yIChhdXRvIHRy
YWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRBdWRpb1RyYWNrcygpKQor
ICAgICAgICB0cmFjay0+c291cmNlKCktPnN0YXJ0UHJvZHVjaW5nRGF0YSgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2UoKQoreworICAgIGF1
dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vh
a1RoaXNdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgd2Vha1RoaXMuZ2V0KCktPnBhdXNlSW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlSW50ZXJuYWwoKQor
eworICAgIG1fcGxheWluZyA9IGZhbHNlOworCisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRp
YVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRWaWRlb1RyYWNrcygpKQorICAgICAgICB0cmFj
ay0+c291cmNlKCktPnN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgZm9yIChhdXRvIHRyYWNrIDog
bV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRBdWRpb1RyYWNrcygpKQorICAgICAg
ICB0cmFjay0+c291cmNlKCktPnN0b3BQcm9kdWNpbmdEYXRhKCk7Cit9CisKK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYXVzZWQoKSBjb25zdAoreworICAgIC8v
IFNob3VsZG4ndCBiZSBhYmxlIHRvIHBhdXNlIHN0cmVhbXMKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRWb2x1bWUo
ZmxvYXQpCit7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpzdXBwb3J0c1NjYW5uaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldE11dGVkKGJvb2wgbXV0
ZWQpCit7CisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVu
dCgpLT5nZXRBdWRpb1RyYWNrcygpKQorICAgICAgICB0cmFjay0+c291cmNlKCktPnNldE11dGVk
KG11dGVkKTsKK30KKworRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBmbG9hdFNpemU7Cisg
ICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRW
aWRlb1RyYWNrcygpKSB7CisgICAgICAgIEFWVmlkZW9DYXB0dXJlU291cmNlKiBzb3VyY2UgPSAo
QVZWaWRlb0NhcHR1cmVTb3VyY2UqKXRyYWNrLT5zb3VyY2UoKTsKKyAgICAgICAgaWYgKCFzb3Vy
Y2UtPnN0b3BwZWQoKSAmJiB0cmFjay0+ZW5hYmxlZCgpKSB7CisgICAgICAgICAgICBpZiAoc291
cmNlLT53aWR0aCgpID4gZmxvYXRTaXplLndpZHRoKCkpCisgICAgICAgICAgICAgICAgZmxvYXRT
aXplLnNldFdpZHRoKHNvdXJjZS0+d2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoc291cmNlLT5o
ZWlnaHQoKSA+IGZsb2F0U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBmbG9hdFNpemUu
c2V0SGVpZ2h0KHNvdXJjZS0+aGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBmbG9hdFNpemU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fTWVkaWFTdHJlYW1Qcml2YXRl
LT5jbGllbnQoKS0+Z2V0VmlkZW9UcmFja3MoKS5zaXplKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fTWVkaWFTdHJlYW1Qcml2YXRlLT5jbGllbnQoKS0+Z2V0QXVkaW9UcmFja3MoKS5zaXpl
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRW
aXNpYmxlKGJvb2wpCit7CisgICAgLy8gTm8tb3AuCit9CisKK01lZGlhVGltZSBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOworfQorCitNZWRp
YVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjdXJyZW50TWVkaWFU
aW1lKCkgY29uc3QKK3sKKyAgICBNZWRpYVRpbWUgc3luY2hyb25pemVyVGltZSA9IHRvTWVkaWFU
aW1lKENNVGltZWJhc2VHZXRUaW1lKFttX3N5bmNocm9uaXplciB0aW1lYmFzZV0pKTsKKyAgICBp
ZiAoc3luY2hyb25pemVyVGltZSA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSkKKyAgICAgICAgcmV0
dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKyAgICByZXR1cm4gc3luY2hyb25pemVyVGltZTsK
K30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWtpbmco
KSBjb25zdAoreworICAgIC8vIE1lZGlhU3RyZWFtIGlzIHVuc2Vla2FibGUKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpz
ZXRSYXRlRG91YmxlKGRvdWJsZSkKK3sKKyAgICAvLyBNZWRpYVN0cmVhbSBpcyB1bnNlZWthYmxl
OyB0aGVyZWZvcmUsIGNhbm5vdCBzZXQgcmF0ZQorfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bmV0d29ya1N0YXRlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpS
ZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cmVhZHlTdGF0
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNpemVDaGFuZ2VkKCkKK3sKKyAgICBtX3Bs
YXllci0+c2l6ZUNoYW5nZWQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJh
bmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZWVrYWJsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPiht
aW5NZWRpYVRpbWVTZWVrYWJsZSgpLCBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpKTsKK30KKworTWVk
aWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bWF4TWVkaWFUaW1l
U2Vla2FibGUoKSBjb25zdAoreworICAgIHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgpOworfQor
CitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjptaW5NZWRp
YVRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXJ0VGltZSgpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAoreworICAg
IGJvb2wgbG9hZGluZ1Byb2dyZXNzZWQgPSBtX2xvYWRpbmdQcm9ncmVzc2VkOworICAgIG1fbG9h
ZGluZ1Byb2dyZXNzZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gbG9hZGluZ1Byb2dyZXNzZWQ7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKGNv
bnN0IEludFNpemUmKQoreworICAgIC8vIE5vLW9wLgorfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JikKK3sKKyAgICAvLyBGSVhNRSgxMjUxNTcpOiBJbXBsZW1lbnQgcGFpbnRpbmcuCit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQorewor
ICAgIC8vIEZJWE1FKDEyNTE1Nyk6IEltcGxlbWVudCBwYWludGluZy4KK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5k
ZXJpbmcoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitNZWRpYVBsYXllcjo6TW92
aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1vdmllTG9h
ZFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnByZXBhcmVGb3JS
ZW5kZXJpbmcoKQoreworICAgIC8vIE5vLW9wLgorfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjplbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZGVzY3JpcHRpb24oQVNDSUlMaXRlcmFsKCJB
VkZvdW5kYXRpb24gTWVkaWFTdHJlYW0gRW5naW5lIikpOworICAgIHJldHVybiBkZXNjcmlwdGlv
bjsKK30KKworU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6bGFu
Z3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRSgxMjUxNTgp
OiBpbXBsZW1lbnQgbGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKCkKKyAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKK30KKworc2l6ZV90IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6ZXh0cmFNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNob3VsZEJlUGxheWluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWluZyAmJiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQ
bGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFk
eVN0YXRlKQoreworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gcmVhZHlTdGF0ZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKKworICAgIG1fcGxheWVy
LT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTdHJl
YW1Qcml2YXRlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1
MThlYzhjZWIzMmY2ZDM1ZjgxNjA4OTYzMjQ3ZTUyNDZmZGQxNTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVN0cmVhbVByaXZhdGVBVkZPYmpDLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFTdHJlYW1Qcml2YXRl
QVZGT2JqQ19oCisjZGVmaW5lIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakNfaAorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFU
aW1lLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK09CSkNfQ0xBU1MgQVZBc3NldDsKK09CSkNf
Q0xBU1MgQVZTdHJlYW1EYXRhUGFyc2VyOworT0JKQ19DTEFTUyBOU0Vycm9yOworT0JKQ19DTEFT
UyBOU09iamVjdDsKK3R5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBs
ZUJ1ZmZlclJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDRE1TZXNzaW9uOwor
Y2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOworY2xhc3MgTWVkaWFT
dHJlYW1Qcml2YXRlOworY2xhc3MgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50OworY2xhc3MgUGxh
dGZvcm1UaW1lUmFuZ2VzOworY2xhc3MgVGltZVJhbmdlczsKKworY2xhc3MgTWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQyBmaW5hbCA6IHB1YmxpYyBNZWRpYVN0cmVhbVByaXZhdGUgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQz4gY3JlYXRlKE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyYsIE1lZGlhU3RyZWFtUHJpdmF0ZUNs
aWVudCYpOworICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMoKTsKKworICAg
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyogcGxheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF5ZXI7IH0KKworICAgIHZpcnR1YWwgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50
KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRDbGllbnQoTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBjbGllbnQpIHsgbV9jbGll
bnQgPSBjbGllbnQ7IH0KKworICAgIE1lZGlhVGltZSBkdXJhdGlvbigpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCk7CisKKyAgICBib29sIGhhc0F1
ZGlvKCkgY29uc3Q7CisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OworCisgICAgdm9pZCBzZXRS
ZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKKyAgICBGbG9hdFNpemUgbmF0dXJh
bFNpemUoKSBjb25zdDsKKworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyYsIE1lZGlhU3RyZWFtUHJpdmF0ZUNsaWVu
dCYpOworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiBtX3BsYXll
cjsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50PiBtX2NsaWVudDsKK307Cisg
ICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFU
SU9OKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVh
bVByaXZhdGVBVkZPYmpDLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5Y2I3YjExZTdmMWExMzU0OTFmYjNlYjQy
NDQ4NWIzNGY5MDQxMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLm1t
CkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRl
QVZGT2JqQy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElP
TikKKworI2ltcG9ydCAiQ29udGVudFR5cGUuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFj
ZWhvbGRlci5oIgorI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
LmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5n
LmgiCisjaW1wb3J0ICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9ydCA8b2Jq
Yy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbXBvcnQg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjcHJh
Z21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMKKworUmVm
UHRyPE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM+IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6
OmNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMmIHBhcmVudCwgTWVk
aWFTdHJlYW1Qcml2YXRlQ2xpZW50JiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7Cit9CisKK01lZGlh
U3RyZWFtUHJpdmF0ZUFWRk9iakM6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMoTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDJiBwYXJlbnQsIE1lZGlhU3RyZWFtUHJpdmF0ZUNs
aWVudCYgY2xpZW50KQorICAgIDogbV9wbGF5ZXIoJnBhcmVudCkKKyAgICAsIG1fY2xpZW50KCZj
bGllbnQpCit7Cit9CisKK01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6On5NZWRpYVN0cmVhbVBy
aXZhdGVBVkZPYmpDKCkKK3sKKworfQorCitNZWRpYVRpbWUgTWVkaWFTdHJlYW1Qcml2YXRlQVZG
T2JqQzo6ZHVyYXRpb24oKQoreworICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5p
dGVUaW1lKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlh
U3RyZWFtUHJpdmF0ZUFWRk9iakM6OmJ1ZmZlcmVkKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4oKTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGxheWVyLT5yZWFkeVN0YXRlKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1Qcml2
YXRlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0
YXRlKQoreworICAgIG1fcGxheWVyLT5zZXRSZWFkeVN0YXRlKHJlYWR5U3RhdGUpOworfQorCiti
b29sIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wbGF5ZXItPmhhc0F1ZGlvKCk7Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1Qcml2YXRl
QVZGT2JqQzo6aGFzVmlkZW8oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllci0+aGFzVmlk
ZW8oKTsKK30KKworRmxvYXRTaXplIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5hdHVyYWxT
aXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPm5hdHVyYWxTaXplKCk7Cit9Cisg
ICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFU
SU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1Qcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVByaXZhdGUuaAppbmRleCAzZTYzZjRjYTQyNTA3MDUzZDgzYWRlYTVkZDBkZmI1
N2JhMjM2OTIxLi5lYjU2NzhlMzA2MWIzYTc5ZjY0MDBlMjdkOTU1MjdmNTA3ZDBkMWZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVBy
aXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVByaXZhdGUuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVU
cmFjayhNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE5vdGlmeUNsaWVudE9wdGlvbik7CiAKIHBy
aXZhdGU6CisgICAgTWVkaWFTdHJlYW1Qcml2YXRlKCkgeyB9CiAgICAgTWVkaWFTdHJlYW1Qcml2
YXRlKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+PiYpOwogCiAgICAgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBtX2NsaWVudDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256627</attachid>
            <date>2015-07-10 16:49:57 -0700</date>
            <delta_ts>2015-07-13 11:00:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146789-20150710164854.patch</filename>
            <type>text/plain</type>
            <size>32496</size>
            <attacher name="Matthew Daiter">mdaiter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZhOGE3Y2MxMDdlMGY3
MWIyMDYxYTI4MjZkMDVmZWNkMGI4M2JkNi4uMjcwYTQ0Y2U1M2Y0YzcwNWU2ODQxMmRjZjdjZjg3
MWU4NGQ3NTkyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE1LTA3LTEwICBNYXR0
aGV3IERhaXRlciAgPG1kYWl0ZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZGluZyBNZWRpYVN0
cmVhbSBFbmdpbmUgYnVpbGRpbmcgYmxvY2tzIHRvIHRoZSBjb2RlIHJlcG8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njc4OQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjE3NDcwMjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldExvYWRpbmdQcm9n
cmVzc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnNldEhhc0F2YWlsYWJsZVZpZGVvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpjcmVhdGVXZWFrUHRyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Om1p
bWVUeXBlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpj
YW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2Jq
Qzo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakM6OnBsYXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2VJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakM6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om5hdHVyYWxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkdXJhdGlvbk1lZGlhVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNl
ZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDOjpzZXRSYXRlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuZXR3b3JrU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6c2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjptYXhNZWRpYVRpbWVTZWVrYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Om1pbk1lZGlh
VGltZVNlZWthYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpt
b3ZpZUxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6cHJlcGFyZUZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
bGFuZ3VhZ2VPZlByaW1hcnlBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2hvdWxkQmVQbGF5aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YWRkRGlzcGxh
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFt
QVZGT2JqQzo6cmVtb3ZlRGlzcGxheUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFt
UHJpdmF0ZUFWRk9iakMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJp
dmF0ZUFWRk9iakM6Ok1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6fk1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6YnVmZmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpoYXNBdWRp
byk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpoYXNWaWRl
byk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDOjpuYXR1cmFs
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRl
Lmg6IAorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Qcml2YXRlOjpNZWRpYVN0cmVhbVBy
aXZhdGUpOiBBZGRlZCBjb25zdHJ1Y3Rvci4KKwogMjAxNS0wNy0wOSAgTWF0dGhldyBEYWl0ZXIg
IDxtZGFpdGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHBvc2VkIEFWVmlkZW9DYXB0dXJlU291
cmNlJ3MgYm91bmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwYjg4MzVm
MGE0MDE5ODRmNmY2OTExZTlhNDliYjk4MmE5NDNlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZP
VU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJN
ZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0
ZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworT0JKQ19DTEFTUyBBVkFzc2V0Owor
T0JKQ19DTEFTUyBBVkNhcHR1cmVWaWRlb1ByZXZpZXdMYXllcjsKK09CSkNfQ0xBU1MgQVZTYW1w
bGVCdWZmZXJBdWRpb1JlbmRlcmVyOworT0JKQ19DTEFTUyBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllcjsKK09CSkNfQ0xBU1MgQVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5jaHJvbml6ZXI7CitPQkpD
X0NMQVNTIEFWU3RyZWFtU2Vzc2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01UaW1lYmFz
ZSogQ01UaW1lYmFzZVJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRl
SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMoTWVkaWFQbGF5ZXIqKTsKKyAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVN0cmVhbUFWRk9iakMoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVk
aWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworCisgICAgLy8gTWVkaWFQbGF5ZXIgRmFj
dG9yeSBNZXRob2RzCisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0
aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdp
bmVTdXBwb3J0UGFyYW1ldGVycyYpOworCisgICAgdm9pZCBhZGREaXNwbGF5TGF5ZXIoQVZTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXIqKTsKKyAgICB2b2lkIHJlbW92ZURpc3BsYXlMYXllcihBVlNh
bXBsZUJ1ZmZlckRpc3BsYXlMYXllciopOworCisgICAgdm9pZCBhZGRBdWRpb1JlbmRlcmVyKEFW
U2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlciopOworICAgIHZvaWQgcmVtb3ZlQXVkaW9SZW5kZXJl
cihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVuZGVyZXIqKTsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0UmVh
ZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisKKyAgICB2b2lkIHNpemVDaGFuZ2Vk
KCk7CisgICAgdm9pZCBjaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisKKyAgICBXZWFrUHRyPE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQz4gY3JlYXRlV2Vha1B0cigpIHsgcmV0
dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisKK3ByaXZhdGU6CisgICAg
ICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZQorICAgICAgICAvLyBGSVhNRSgxNDY4
NTMpOiBJbXBsZW1lbnQgbmVjZXNzYXJ5IGNvbmZvcm1hdGlvbnMgdG8gc3RhbmRhcmQgaW4gSFRN
TE1lZGlhRWxlbWVudCBmb3IgTWVkaWFTdHJlYW0gCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlIHsgfTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIHZvaWQgbG9h
ZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKSBvdmVycmlkZSB7IH07
CisjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHZvaWQgbG9hZChNZWRpYVN0
cmVhbVByaXZhdGUqKSBvdmVycmlkZTsKKyNlbmRpZgorICAgIHZvaWQgY2FuY2VsTG9hZCgpIG92
ZXJyaWRlOworCisgICAgdm9pZCBwcmVwYXJlVG9QbGF5KCkgb3ZlcnJpZGU7CisgICAgUGxhdGZv
cm1NZWRpYSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIHBs
YXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXlJbnRlcm5hbCgpOworCisgICAgdm9pZCBwYXVz
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcGF1c2VJbnRlcm5hbCgpOworCisgICAgYm9vbCBwYXVz
ZWQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBvdmVycmlk
ZTsKKyAgICBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBib29sIHN1cHBv
cnRzU2Nhbm5pbmcoKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6
ZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Vmlz
aWJsZShib29sKSBvdmVycmlkZTsKKworICAgIE1lZGlhVGltZSBkdXJhdGlvbk1lZGlhVGltZSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1lZGlhVGltZSYs
IGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlIHsgfTsKKyAgICBi
b29sIHNlZWtpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJhdGVEb3VibGUoZG91
YmxlKSBvdmVycmlkZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+
IHNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIG1heE1lZGlhVGltZVNl
ZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFUaW1lIG1pbk1lZGlhVGltZVNlZWth
YmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJh
bmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgZGlkTG9hZGluZ1By
b2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6
ZSYpIG92ZXJyaWRlOworCisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgYm9v
bCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBN
ZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHByZXBhcmVGb3JSZW5kZXJpbmcoKSBvdmVycmlkZTsKKworICAgIFN0cmlu
ZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIGxhbmd1
YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc2l6ZV90IGV4
dHJhTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBzaG91bGRCZVBsYXlp
bmcoKSBjb25zdDsKKworICAgIGZyaWVuZCBjbGFzcyBNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpD
OworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIFdlYWtQdHJGYWN0b3J5PE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQz4gbV93ZWFrUHRyRmFjdG9yeTsKKyAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQz4gbV9NZWRpYVN0cmVhbVByaXZhdGU7Cisg
ICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7CisgICAgUmV0YWluUHRyPEFWU2FtcGxlQnVm
ZmVyRGlzcGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKKyAgICBWZWN0b3I8
UmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcj4+IG1fc2FtcGxlQnVmZmVyQXVk
aW9SZW5kZXJlcnM7CisgICAgUmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyUmVuZGVyU3luY2hyb25p
emVyPiBtX3N5bmNocm9uaXplcjsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fdGltZUp1bXBlZE9ic2Vy
dmVyOworICAgIFJldGFpblB0cjxpZD4gbV9kdXJhdGlvbk9ic2VydmVyOworICAgIFJldGFpblB0
cjxBVlN0cmVhbVNlc3Npb24+IG1fc3RyZWFtU2Vzc2lvbjsKKyAgICBNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1f
cmVhZHlTdGF0ZTsKKyAgICBNZWRpYVRpbWUgbV9sYXN0U2Vla1RpbWU7CisgICAgZG91YmxlIG1f
cmF0ZTsKKyAgICBib29sIG1fcGxheWluZzsKKyAgICBib29sIG1fc2Vla2luZzsKKyAgICBib29s
IG1fc2Vla0NvbXBsZXRlZDsKKyAgICBtdXRhYmxlIGJvb2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZDsK
K307CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZG
T1VOREFUSU9OKQorCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTc4ZmExMDU3YTc3
M2E1ZDk5OTkzN2ZmNTIzNjRmMDBiMzNjODk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0wLDAgKzEsNDA4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaCIKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBvcnQgIkFW
VmlkZW9DYXB0dXJlU291cmNlLmgiCisjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCisjaW1wb3J0ICJM
b2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbXBvcnQgIk1lZGlh
U3RyZWFtUHJpdmF0ZUFWRk9iakMuaCIKKyNpbXBvcnQgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5o
IgorI2ltcG9ydCAiUGxhdGZvcm1DbG9ja0NNLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldC5oPgorI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZUaW1lLmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KKyNpbXBvcnQg
PG9iamNfcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjcHJhZ21hIG1hcmsgLSBTb2Z0IExpbmtpbmcKKworI2lt
cG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05B
TChBVkZvdW5kYXRpb24pCisKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24s
IEFWQXNzZXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBBVkNhcHR1
cmVWaWRlb1ByZXZpZXdMYXllcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRp
b24sIEFWVVJMQXNzZXQpCitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBB
VlN0cmVhbVNlc3Npb24pOworCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFWU3RyZWFt
U2Vzc2lvbgorCitAaW50ZXJmYWNlIEFWU3RyZWFtU2Vzc2lvbiA6IE5TT2JqZWN0CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhTdG9yYWdlRGlyZWN0b3J5QXRVUkw6KE5TVVJMICopc3RvcmFnZURp
cmVjdG9yeTsKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjcHJhZ21hIG1hcmsgLQor
I3ByYWdtYSBtYXJrIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQworCitNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQyhNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVy
KQorICAgICwgbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQorICAgICwgbV9uZXR3b3JrU3RhdGUoTWVk
aWFQbGF5ZXI6OklkbGUpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nKQorICAgICwgbV9yYXRlKDEpCisgICAgLCBtX3BsYXlpbmcoMCkKKyAgICAsIG1fc2Vla2lu
ZyhmYWxzZSkKKyAgICAsIG1fc2Vla0NvbXBsZXRlZCh0cnVlKQorICAgICwgbV9sb2FkaW5nUHJv
Z3Jlc3NlZChmYWxzZSkKK3sKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKCkKK3sKK30KKworI3By
YWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBNZWRpYVBsYXllciBGYWN0b3J5IE1ldGhvZHMKKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWls
YWJsZSgpKQorICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM+
KHBsYXllcik7IH0sIGdldFN1cHBvcnRlZFR5cGVzLAorICAgICAgICAgICAgc3VwcG9ydHNUeXBl
LCAwLCAwLCAwLCAwKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakM6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgp
CisgICAgICAgICYmIGlzQ29yZU1lZGlhRnJhbWV3b3JrQXZhaWxhYmxlKCk7Cit9CisKK3N0YXRp
YyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIG1pbWVUeXBlQ2FjaGUoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGNhY2hlOworICAgIHN0YXRpYyBib29sIHR5
cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICh0eXBlTGlzdEluaXRpYWxpemVk
KQorICAgICAgICByZXR1cm4gY2FjaGU7CisgICAgdHlwZUxpc3RJbml0aWFsaXplZCA9IHRydWU7
CisKKyAgICBOU0FycmF5ICp0eXBlcyA9IFtnZXRBVlVSTEFzc2V0Q2xhc3MoKSBhdWRpb3Zpc3Vh
bE1JTUVUeXBlc107CisgICAgZm9yIChOU1N0cmluZyAqbWltZVR5cGUgaW4gdHlwZXMpCisgICAg
ICAgIGNhY2hlLmdldCgpLmFkZChtaW1lVHlwZSk7CisKKyAgICByZXR1cm4gY2FjaGU7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQoreworICAgIHR5cGVzID0gbWltZVR5cGVDYWNo
ZSgpOworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQzo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgLy8gVGhpcyBlbmdpbmUgZG9lcyBub3Qgc3Vw
cG9ydCBub24tbWVkaWEtc3RyZWFtIHNvdXJjZXMuCisgICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRp
YVN0cmVhbSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKKyAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCisjcHJhZ21hIG1hcmsgLQor
I3ByYWdtYSBtYXJrIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSBPdmVycmlkZXMKKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmxvYWQoTWVkaWFTdHJlYW1Q
cml2YXRlKiBjbGllbnQpCit7CisgICAgbV9NZWRpYVN0cmVhbVByaXZhdGUgPSBNZWRpYVN0cmVh
bVByaXZhdGVBVkZPYmpDOjpjcmVhdGUodGhpcywgY2xpZW50LT5jbGllbnQoKSk7CisgICAgZm9y
IChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRWaWRlb1Ry
YWNrcygpKSB7CisgICAgICAgIGNsaWVudC0+YWRkVHJhY2soJnRyYWNrLT5wcml2YXRlVHJhY2so
KSwgTWVkaWFTdHJlYW1Qcml2YXRlOjpOb3RpZnlDbGllbnRPcHRpb246OkRvbnROb3RpZnkpOwor
ICAgICAgICBjbGllbnQtPmNsaWVudCgpLT5kaWRBZGRUcmFja1RvUHJpdmF0ZSh0cmFjay0+cHJp
dmF0ZVRyYWNrKCkpOworICAgICAgICBpZiAodHJhY2stPnJlYWR5U3RhdGUoKSA9PSAibGl2ZSIp
IHsKKyAgICAgICAgICAgIHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7Cisg
ICAgICAgICAgICB0cmFjay0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBmb3IgKGF1dG8gdHJhY2sgOiBtX01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldEF1
ZGlvVHJhY2tzKCkpIHsKKyAgICAgICAgY2xpZW50LT5hZGRUcmFjaygmdHJhY2stPnByaXZhdGVU
cmFjaygpLCBNZWRpYVN0cmVhbVByaXZhdGU6Ok5vdGlmeUNsaWVudE9wdGlvbjo6RG9udE5vdGlm
eSk7CisgICAgICAgIGNsaWVudC0+Y2xpZW50KCktPmRpZEFkZFRyYWNrVG9Qcml2YXRlKHRyYWNr
LT5wcml2YXRlVHJhY2soKSk7CisgICAgICAgIGlmICh0cmFjay0+cmVhZHlTdGF0ZSgpID09ICJs
aXZlIikgeworICAgICAgICAgICAgdHJhY2stPnNvdXJjZSgpLT5zdGFydFByb2R1Y2luZ0RhdGEo
KTsKKyAgICAgICAgICAgIHRyYWNrLT5zZXRFbmFibGVkKHRydWUpOworICAgICAgICB9CisgICAg
fQorICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmluZ01vZGVDaGFuZ2Vk
KG1fcGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OmNhbmNlbExvYWQoKQoreworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6cHJlcGFyZVRvUGxheSgpCit7Cit9CisKK1BsYXRmb3JtTWVkaWEgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybU1lZGlhKCkgY29uc3QKK3sK
KyAgICBQbGF0Zm9ybU1lZGlhIHBtOworICAgIHBtLnR5cGUgPSBQbGF0Zm9ybU1lZGlhOjpBVkZv
dW5kYXRpb25Bc3NldFR5cGU7CisgICAgcG0ubWVkaWEuYXZmQXNzZXQgPSBtX2Fzc2V0LmdldCgp
OworICAgIHJldHVybiBwbTsKK30KKworUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
TWVkaWFTdHJlYW1Qcml2YXRlKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlOjpwbGF0Zm9ybUxheWVyKCk7CisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0
cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRWaWRlb1RyYWNrcygpKSB7CisgICAgICAgIC8vIEZJ
WE1FKDE0Njg1OCk6IEp1c3QgZ3JhYiB0aGUgZmlyc3Qgd2ViY2FtIGZvciBub3csIHdlIGNhbiBt
YW5hZ2UgbW9yZSBsYXRlcgorICAgICAgICBBVlZpZGVvQ2FwdHVyZVNvdXJjZSogY2FwdHVyZSA9
IChBVlZpZGVvQ2FwdHVyZVNvdXJjZSopdHJhY2stPnNvdXJjZSgpOworICAgICAgICByZXR1cm4g
KFBsYXRmb3JtTGF5ZXIqKVtnZXRBVkNhcHR1cmVWaWRlb1ByZXZpZXdMYXllckNsYXNzKCkgbGF5
ZXJXaXRoU2Vzc2lvbjpjYXB0dXJlLT5zZXNzaW9uKCldOworICAgIH0KKyAgICByZXR1cm4gTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpwbGF0Zm9ybUxheWVyKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwbGF5KCkKK3sKKyAgICBhdXRvIHdl
YWtUaGlzID0gY3JlYXRlV2Vha1B0cigpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlz
XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHdlYWtUaGlzLmdldCgpLT5wbGF5SW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXlJbnRlcm5hbCgpCit7CisgICAg
bV9wbGF5aW5nID0gdHJ1ZTsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCisgICAgICAgIFtt
X3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CisKKyAgICBmb3IgKGF1dG8gdHJhY2sgOiBt
X01lZGlhU3RyZWFtUHJpdmF0ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkpCisgICAgICAg
IHRyYWNrLT5zb3VyY2UoKS0+c3RhcnRQcm9kdWNpbmdEYXRhKCk7CisgICAgZm9yIChhdXRvIHRy
YWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRBdWRpb1RyYWNrcygpKQor
ICAgICAgICB0cmFjay0+c291cmNlKCktPnN0YXJ0UHJvZHVjaW5nRGF0YSgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGF1c2UoKQoreworICAgIGF1
dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vh
a1RoaXNdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgd2Vha1RoaXMuZ2V0KCktPnBhdXNlSW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBhdXNlSW50ZXJuYWwoKQor
eworICAgIG1fcGxheWluZyA9IGZhbHNlOworCisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRp
YVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRWaWRlb1RyYWNrcygpKQorICAgICAgICB0cmFj
ay0+c291cmNlKCktPnN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgZm9yIChhdXRvIHRyYWNrIDog
bV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRBdWRpb1RyYWNrcygpKQorICAgICAg
ICB0cmFjay0+c291cmNlKCktPnN0b3BQcm9kdWNpbmdEYXRhKCk7Cit9CisKK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYXVzZWQoKSBjb25zdAoreworICAgIC8v
IFNob3VsZG4ndCBiZSBhYmxlIHRvIHBhdXNlIHN0cmVhbXMKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRWb2x1bWUo
ZmxvYXQpCit7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpzdXBwb3J0c1NjYW5uaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNldE11dGVkKGJvb2wgbXV0
ZWQpCit7CisgICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVu
dCgpLT5nZXRBdWRpb1RyYWNrcygpKQorICAgICAgICB0cmFjay0+c291cmNlKCktPnNldE11dGVk
KG11dGVkKTsKK30KKworRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBmbG9hdFNpemU7Cisg
ICAgZm9yIChhdXRvIHRyYWNrIDogbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRW
aWRlb1RyYWNrcygpKSB7CisgICAgICAgIEFWVmlkZW9DYXB0dXJlU291cmNlKiBzb3VyY2UgPSAo
QVZWaWRlb0NhcHR1cmVTb3VyY2UqKXRyYWNrLT5zb3VyY2UoKTsKKyAgICAgICAgaWYgKCFzb3Vy
Y2UtPnN0b3BwZWQoKSAmJiB0cmFjay0+ZW5hYmxlZCgpKSB7CisgICAgICAgICAgICBpZiAoc291
cmNlLT53aWR0aCgpID4gZmxvYXRTaXplLndpZHRoKCkpCisgICAgICAgICAgICAgICAgZmxvYXRT
aXplLnNldFdpZHRoKHNvdXJjZS0+d2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoc291cmNlLT5o
ZWlnaHQoKSA+IGZsb2F0U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBmbG9hdFNpemUu
c2V0SGVpZ2h0KHNvdXJjZS0+aGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBmbG9hdFNpemU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX01lZGlhU3RyZWFtUHJpdmF0
ZS0+Y2xpZW50KCktPmdldFZpZGVvVHJhY2tzKCkuaXNFbXB0eSgpOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6aGFzQXVkaW8oKSBjb25zdAoreworICAg
IHJldHVybiAhbV9NZWRpYVN0cmVhbVByaXZhdGUtPmNsaWVudCgpLT5nZXRBdWRpb1RyYWNrcygp
LmlzRW1wdHkoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akM6OnNldFZpc2libGUoYm9vbCkKK3sKKyAgICAvLyBOby1vcC4KK30KKworTWVkaWFUaW1lIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZHVyYXRpb25NZWRpYVRpbWUoKSBj
b25zdAoreworICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7Cit9
CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmN1cnJl
bnRNZWRpYVRpbWUoKSBjb25zdAoreworICAgIE1lZGlhVGltZSBzeW5jaHJvbml6ZXJUaW1lID0g
dG9NZWRpYVRpbWUoQ01UaW1lYmFzZUdldFRpbWUoW21fc3luY2hyb25pemVyIHRpbWViYXNlXSkp
OworICAgIGlmIChzeW5jaHJvbml6ZXJUaW1lIDwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQorICAg
ICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworICAgIHJldHVybiBzeW5jaHJvbml6
ZXJUaW1lOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
c2Vla2luZygpIGNvbnN0Cit7CisgICAgLy8gTWVkaWFTdHJlYW0gaXMgdW5zZWVrYWJsZQorICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakM6OnNldFJhdGVEb3VibGUoZG91YmxlKQoreworICAgIC8vIE1lZGlhU3RyZWFtIGlzIHVu
c2Vla2FibGU7IHRoZXJlZm9yZSwgY2Fubm90IHNldCByYXRlCit9CisKK01lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpuZXR3b3Jr
U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpy
ZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2l6ZUNoYW5nZWQoKQorewor
ICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZv
cm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNlZWth
YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybVRpbWVS
YW5nZXM+KG1pbk1lZGlhVGltZVNlZWthYmxlKCksIG1heE1lZGlhVGltZVNlZWthYmxlKCkpOwor
fQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjptYXhN
ZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGR1cmF0aW9uTWVkaWFUaW1l
KCk7Cit9CisKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6
Om1pbk1lZGlhVGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhcnRUaW1lKCk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6YnVmZmVyZWQoKSBjb25zdAoreworICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3JtVGltZVJhbmdlcz4oKTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0
Cit7CisgICAgYm9vbCBsb2FkaW5nUHJvZ3Jlc3NlZCA9IG1fbG9hZGluZ1Byb2dyZXNzZWQ7Cisg
ICAgbV9sb2FkaW5nUHJvZ3Jlc3NlZCA9IGZhbHNlOworICAgIHJldHVybiBsb2FkaW5nUHJvZ3Jl
c3NlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnNl
dFNpemUoY29uc3QgSW50U2l6ZSYpCit7CisgICAgLy8gTm8tb3AuCit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmKQoreworICAgIC8vIEZJWE1FKDEyNTE1Nyk6IEltcGxlbWVudCBwYWlu
dGluZy4KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBh
aW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYpCit7CisgICAgLy8gRklYTUUoMTI1MTU3KTogSW1wbGVtZW50IHBhaW50aW5nLgorfQorCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c3VwcG9ydHNBY2NlbGVy
YXRlZFJlbmRlcmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK01lZGlhUGxh
eWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
bW92aWVMb2FkVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3Ry
ZWFtOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cHJl
cGFyZUZvclJlbmRlcmluZygpCit7CisgICAgLy8gTm8tb3AuCit9CisKK1N0cmluZyBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZXNjcmlwdGlvbihBU0NJSUxp
dGVyYWwoIkFWRm91bmRhdGlvbiBNZWRpYVN0cmVhbSBFbmdpbmUiKSk7CisgICAgcmV0dXJuIGRl
c2NyaXB0aW9uOworfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKSBjb25zdAoreworICAgIC8vIEZJWE1F
KDEyNTE1OCk6IGltcGxlbWVudCBsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKQorICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOworfQorCitzaXplX3QgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpleHRyYU1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiAwOwor
fQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6c2hvdWxkQmVQ
bGF5aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5aW5nICYmIG1fcmVhZHlTdGF0ZSA+
PSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIHJlYWR5U3RhdGUpCit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSByZWFkeVN0YXRlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOworCisgICAg
bV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDUxOGVjOGNlYjMyZjZkMzVmODE2MDg5NjMyNDdlNTI0NmZkZDE1OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMuaApAQCAtMCwwICsxLDg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVN0cmVh
bVByaXZhdGVBVkZPYmpDX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQ19oCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKKyNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworT0JKQ19DTEFTUyBBVkFzc2V0
OworT0JKQ19DTEFTUyBBVlN0cmVhbURhdGFQYXJzZXI7CitPQkpDX0NMQVNTIE5TRXJyb3I7CitP
QkpDX0NMQVNTIE5TT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIg
KkNNU2FtcGxlQnVmZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENETVNl
c3Npb247CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM7CitjbGFz
cyBNZWRpYVN0cmVhbVByaXZhdGU7CitjbGFzcyBNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQ7Citj
bGFzcyBQbGF0Zm9ybVRpbWVSYW5nZXM7CitjbGFzcyBUaW1lUmFuZ2VzOworCitjbGFzcyBNZWRp
YVN0cmVhbVByaXZhdGVBVkZPYmpDIGZpbmFsIDogcHVibGljIE1lZGlhU3RyZWFtUHJpdmF0ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVBVkZPYmpDPiBj
cmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDJiwgTWVkaWFTdHJlYW1Q
cml2YXRlQ2xpZW50Jik7CisgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQygp
OworCisgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKiBwbGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX3BsYXllcjsgfQorCisgICAgdmlydHVhbCBNZWRpYVN0cmVhbVByaXZh
dGVDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldENsaWVudChNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQqIGNsaWVudCkg
eyBtX2NsaWVudCA9IGNsaWVudDsgfQorCisgICAgTWVkaWFUaW1lIGR1cmF0aW9uKCk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKTsKKworICAgIGJv
b2wgaGFzQXVkaW8oKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisKKyAgICB2
b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOworICAgIEZsb2F0U2l6
ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OworCisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9i
akMoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDJiwgTWVkaWFTdHJlYW1Qcml2
YXRlQ2xpZW50Jik7CisKKyAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMq
IG1fcGxheWVyOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQ+IG1fY2xpZW50
OworfTsKKyAgICAKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShB
VkZPVU5EQVRJT04pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA2YTQ1ZGIyOTg2NjVhMmIz
NjY0N2FlZjMwZmRiODA5NDgyN2YxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU3RyZWFtUHJpdmF0ZUFW
Rk9iakMubW0KQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVh
bVByaXZhdGVBVkZPYmpDLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZG
T1VOREFUSU9OKQorCisjaW1wb3J0ICJDb250ZW50VHlwZS5oIgorI2ltcG9ydCAiRXhjZXB0aW9u
Q29kZVBsYWNlaG9sZGVyLmgiCisjaW1wb3J0ICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVh
bUFWRk9iakMuaCIKKyNpbXBvcnQgIk1lZGlhU3RyZWFtUHJpdmF0ZS5oIgorI2ltcG9ydCAiU29m
dExpbmtpbmcuaCIKKyNpbXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCisjaW1w
b3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgor
I2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2Jq
QworCitSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQz4gTWVkaWFTdHJlYW1Qcml2YXRl
QVZGT2JqQzo6Y3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyYgcGFy
ZW50LCBNZWRpYVN0cmVhbVByaXZhdGVDbGllbnQmIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakMocGFyZW50LCBjbGllbnQpKTsKK30K
KworTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6TWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQyhN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMmIHBhcmVudCwgTWVkaWFTdHJlYW1Q
cml2YXRlQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX3BsYXllcigmcGFyZW50KQorICAgICwgbV9j
bGllbnQoJmNsaWVudCkKK3sKK30KKworTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6fk1lZGlh
U3RyZWFtUHJpdmF0ZUFWRk9iakMoKQoreworfQorCitNZWRpYVRpbWUgTWVkaWFTdHJlYW1Qcml2
YXRlQVZGT2JqQzo6ZHVyYXRpb24oKQoreworICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZl
SW5maW5pdGVUaW1lKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+
IE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6OmJ1ZmZlcmVkKCkKK3sKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4oKTsKK30KKworTWVkaWFQbGF5ZXI6OlJl
YWR5U3RhdGUgTWVkaWFTdHJlYW1Qcml2YXRlQVZGT2JqQzo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGxheWVyLT5yZWFkeVN0YXRlKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJl
YW1Qcml2YXRlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBy
ZWFkeVN0YXRlKQoreworICAgIG1fcGxheWVyLT5zZXRSZWFkeVN0YXRlKHJlYWR5U3RhdGUpOwor
fQorCitib29sIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Omhhc0F1ZGlvKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wbGF5ZXItPmhhc0F1ZGlvKCk7Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1Q
cml2YXRlQVZGT2JqQzo6aGFzVmlkZW8oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXllci0+
aGFzVmlkZW8oKTsKK30KKworRmxvYXRTaXplIE1lZGlhU3RyZWFtUHJpdmF0ZUFWRk9iakM6Om5h
dHVyYWxTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF5ZXItPm5hdHVyYWxTaXplKCk7
Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZG
T1VOREFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1Qcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaAppbmRleCAzZTYzZjRjYTQyNTA3MDUzZDgzYWRlYTVk
ZDBkZmI1N2JhMjM2OTIxLi5lYjU2NzhlMzA2MWIzYTc5ZjY0MDBlMjdkOTU1MjdmNTA3ZDBkMWZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVByaXZhdGUuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZW1vdmVUcmFjayhNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIE5vdGlmeUNsaWVudE9wdGlvbik7
CiAKIHByaXZhdGU6CisgICAgTWVkaWFTdHJlYW1Qcml2YXRlKCkgeyB9CiAgICAgTWVkaWFTdHJl
YW1Qcml2YXRlKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+PiYpOwogCiAgICAgTWVkaWFTdHJlYW1Qcml2YXRlQ2xpZW50KiBtX2Ns
aWVudDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>