<?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>108961</bug_id>
          
          <creation_ts>2013-02-05 10:58:09 -0800</creation_ts>
          <short_desc>[GTK][AC] Implement opacity animation with clutter ac backend</short_desc>
          <delta_ts>2013-02-08 08:09:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>105699</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="ChangSeok Oh">kevin.cs.oh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>joone</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>825645</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-02-05 10:58:09 -0800</bug_when>
    <thetext>In this bug, I plan to add opacity animation with clutter backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825700</commentid>
    <comment_count>1</comment_count>
      <attachid>186675</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-02-05 12:23:38 -0800</bug_when>
    <thetext>Created attachment 186675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826325</commentid>
    <comment_count>2</comment_count>
      <attachid>186675</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-02-06 04:26:26 -0800</bug_when>
    <thetext>Comment on attachment 186675
Patch

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

Looks OK in general, just a few nits.

&gt; Source/WebCore/ChangeLog:9
&gt; +        Almost implementations of GraphicsLayerClutter are based on mac port&apos;s one.

This sentence seems to be missing a word. &quot;Almost all&quot;?

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:32
&gt;  
&gt; +#include &lt;wtf/text/CString.h&gt;

No blank line.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:45
&gt; +
&gt; +#include &lt;limits.h&gt;

Ditto.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:53
&gt; +// If we send a duration of 0 to CA, then it will use the default duration

Talking about CA here doesn&apos;t make much sense =)

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:678
&gt; +    // CoreAnimation does not handle the steps() timing function. Fall back

Another CA-related comment here.

&gt; Source/WebCore/platform/graphics/clutter/PlatformClutterAnimation.cpp:398
&gt; +        notImplemented();
&gt; +    else if (m_animatedPropertyType == BackgroundColor)
&gt; +        notImplemented();

Make these ASSERT_NOT_REACHED() for now? You should be refusing to create these kinds of animations, so they should really not be reached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826465</commentid>
    <comment_count>3</comment_count>
      <attachid>186859</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-02-06 08:19:51 -0800</bug_when>
    <thetext>Created attachment 186859
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826467</commentid>
    <comment_count>4</comment_count>
      <attachid>186675</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-02-06 08:20:37 -0800</bug_when>
    <thetext>Comment on attachment 186675
Patch

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

Thanks! :D

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        Almost implementations of GraphicsLayerClutter are based on mac port&apos;s one.
&gt; 
&gt; This sentence seems to be missing a word. &quot;Almost all&quot;?

Oops. Sorry.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:32
&gt;&gt; +#include &lt;wtf/text/CString.h&gt;
&gt; 
&gt; No blank line.

Done

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:45
&gt;&gt; +#include &lt;limits.h&gt;
&gt; 
&gt; Ditto.

yeap.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:53
&gt;&gt; +// If we send a duration of 0 to CA, then it will use the default duration
&gt; 
&gt; Talking about CA here doesn&apos;t make much sense =)

Updated the comment talking about clutterTimeline.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:678
&gt;&gt; +    // CoreAnimation does not handle the steps() timing function. Fall back
&gt; 
&gt; Another CA-related comment here.

I rewrote this comment.

&gt;&gt; Source/WebCore/platform/graphics/clutter/PlatformClutterAnimation.cpp:398
&gt;&gt; +        notImplemented();
&gt; 
&gt; Make these ASSERT_NOT_REACHED() for now? You should be refusing to create these kinds of animations, so they should really not be reached.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827306</commentid>
    <comment_count>5</comment_count>
      <attachid>186859</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-07 04:23:20 -0800</bug_when>
    <thetext>Comment on attachment 186859
Patch

Clearing flags on attachment: 186859

Committed r142094: &lt;http://trac.webkit.org/changeset/142094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828565</commentid>
    <comment_count>6</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2013-02-08 07:42:57 -0800</bug_when>
    <thetext>forgot to close the bug?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186675</attachid>
            <date>2013-02-05 12:23:38 -0800</date>
            <delta_ts>2013-02-06 08:20:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108961-20130206052015.patch</filename>
            <type>text/plain</type>
            <size>48198</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzgwOGVjMDkzZjFkYWUy
Nzk4NGQ1ZDU4MDE5Y2VlM2MzZWMxYTYxOS4uZDc3YTYzZjNhMzdiNTU0NzBjMTQzMWVkOGI0MjM0
MDBmNjI3OTgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wMi0wNSAgQ2hh
bmdTZW9rIE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisKKyAgICAgICAgW0dUS11bQUNdIElt
cGxlbWVudCBvcGFjaXR5IGFuaW1hdGlvbiB3aXRoIGNsdXR0ZXIgYWMgYmFja2VuZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4OTYxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IG9wYWNp
dHkgYW5pbWF0aW9uIHdpdGggY2x1dHRlciBhYyBiYWNrZW5kLgorICAgICAgICBBbG1vc3QgaW1w
bGVtZW50YXRpb25zIG9mIEdyYXBoaWNzTGF5ZXJDbHV0dGVyIGFyZSBiYXNlZCBvbiBtYWMgcG9y
dCdzIG9uZS4KKyAgICAgICAgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uIGludGVyZmFjZXMgYXJl
IGFsc28gc2ltaWxhciB3aXRoIG1hYyBwb3J0LCBidXQgdGhleSBhcmUgaW1wbGVtZW50ZWQKKyAg
ICAgICAgd2l0aCBuYXRpdmUgY2x1dHRlciBBUElzLgorICAgICAgICBUaGlzIHBhdGNoIGluY2x1
ZGVzIG9ubHkgb3BhY2l0eSBhbmltYXRpb24gcmVsYXRlZCBjaGFuZ2VzLCBzbyBtYW55IEFQSXMg
bWlnaHQgYmUgZW1wdHkuCisgICAgICAgIFJlbWFpbmVkIGFuaW1hdGlvbnMgbGlrZSByb3RhdGlv
biBhbmQgdHJhbnNsYXRlIHdpbGwgYmUgZGVhbHQgaW4gYW5vdGhlciBwYXRjaGVzLgorCisgICAg
ICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgYW5pbWF0aW9uIHRlc3RzLgorCisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJBY3Rvci5jcHA6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRBbmlt
YXRpb25Gb3JLZXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NMYXllckFjdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFw
aGljc0xheWVyQ2x1dHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OnByb3BlcnR5SWRUb1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjphbmltYXRpb25JZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmFuaW1hdGlvbkhhc1N0ZXBzVGltaW5nRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE9wYWNpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZUFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVy
Q2hhbmdlc0JlZm9yZVN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2x1dHRlcjo6c2V0dXBBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsdXR0ZXI6OnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNyZWF0ZUJhc2ljQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjcmVhdGVLZXlmcmFtZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0VHJhbnNmb3Jt
QW5pbWF0aW9uS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXRUcmFuc2Zvcm1BbmltYXRpb25FbmRwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJh
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjcmVhdGVBbmlt
YXRpb25Gcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnJlbW92ZUNsdXR0ZXJBbmltYXRpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsdXR0ZXI6OnBhdXNlQ2x1dHRlckFuaW1hdGlvbk9uTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldEFuaW1hdGlvbk9uTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldEFuaW1hdGlvbkVu
ZHBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0QW5p
bWF0aW9uS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjphbmltYXRlZExheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJDbHV0dGVyLmg6CisgICAgICAgIChHcmFwaGljc0xheWVyQ2x1dHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJQcm9wZXJ0eUFuaW1h
dGlvbjo6TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbik6CisgICAgICAgIChMYXllclByb3BlcnR5QW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpBbmltYXRp
b25Qcm9jZXNzaW5nQWN0aW9uOjpBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uKToKKyAgICAgICAg
KEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnRpbWVsaW5lU3RhcnRlZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvQ2x1dHRlckFuaW1hdGlvbk1vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzdHJpbmdUb0FuaW1hdGVkUHJvcGVydHlUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6UGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bjo6flBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUNsdXR0ZXJBbmltYXRpb246OnN1cHBvcnRzVmFsdWVGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmJlZ2luVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldEJlZ2luVGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0RHVyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzcGVlZCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFNwZWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6dGltZU9mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFRpbWVPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpyZXBlYXRDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFJlcGVhdENvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6YXV0b3JldmVyc2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0QXV0b3JldmVy
c2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6ZmlsbE1v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRGaWxs
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFRp
bWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bjo6Y29weVRpbWluZ0Z1bmN0aW9uRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb246OmlzUmVtb3ZlZE9uQ29tcGxldGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFJlbW92ZWRPbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjppc0FkZGl0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0QWRkaXRpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjp2YWx1ZUZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0VmFsdWVG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNl
dEZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246
OmNvcHlGcm9tVmFsdWVGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb246OmNvcHlUb1ZhbHVlRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb246OnNldFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb246OmNvcHlWYWx1ZXNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0S2V5VGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjb3B5S2V5VGltZXNGcm9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0VGltaW5nRnVuY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Y29weVRpbWluZ0Z1bmN0aW9u
c0Zyb20pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjphbmlt
YXRpb25EaWRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OnRpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bjo6YWRkT3BhY2l0eVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uOjphZGRBbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjphbmltYXRp
b25UeXBlKToKKwogMjAxMy0wMS0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBQb3J0IERyYWdJbWFnZVdpbi5jcHAgdG8gV2luQ0UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwppbmRleCA4YjVkMmY0ZWU2ZmZkMmQ3ODJhZDEwNDMzNWZjMDI0MWMyMWY2YmVhLi4wMzdm
NTZhMDM4MjkzYTEyZmZlNGQxNjc5NTQ1NDA1ZDdlOTc0ZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTMtMDItMDUgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21h
aWwuY29tPgorCisgICAgICAgIFtHVEtdW0FDXSBJbXBsZW1lbnQgb3BhY2l0eSBhbmltYXRpb24g
d2l0aCBjbHV0dGVyIGFjIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwODk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBBbmltYXRpb25UcmlnZ2VyIGZvciBhYyBjb21wb3NpdGluZy4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudDo6YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMpOgorCiAy
MDEzLTAxLTMwICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAg
ICAgICAgIFtUZXhNYXBdIFJlbW92ZSBHcmFwaGljc0xheWVyIGluIFRleHR1cmVNYXBwZXJMYXll
ci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGVlOWVmYTkyMDYzYzg1ZGYwMjNl
NGI5N2YyYzc0ZDc4ZmU3NWZmNjYuLjNiNDU0YjgxZTFiYWVkNzYzNTQ2MGQwODIzNzdiMGYyNjIz
ZDI2NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjQyMyw2ICs2NDIzLDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1BsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0
ZXIvUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NsdXR0ZXIvVHJhbnNmb3JtYXRpb25NYXRyaXhDbHV0dGVyLmNwcAogZW5kaWYg
ICMgRU5EIFVTRV9DTFVUVEVSCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcAppbmRleCBk
OWQ0NDMyNzdlYWY3YWIxMjc3ODRhYTAyNzgyNzlmYjYwZjk2YjYxLi41YWVkMjQ0NGEwNzE1ZWQ3
ZTE1MjIwNWNkMTZlNWMwNzk5YzUzZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3Bw
CkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgogCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogR19ERUZJTkVfVFlQRShHcmFwaGljc0xheWVy
QWN0b3IsIGdyYXBoaWNzX2xheWVyX2FjdG9yLCBDTFVUVEVSX1RZUEVfQUNUT1IpCkBAIC01NTgs
NCArNTYwLDkgQEAgZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJhd3NDb250ZW50KEdy
YXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCiAgICAgcmV0dXJuIGxheWVyLT5wcml2LT5kcmF3c0Nv
bnRlbnQ7CiB9CiAKK1dlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiogZ3JhcGhpY3NM
YXllckFjdG9yR2V0QW5pbWF0aW9uRm9yS2V5KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNv
bnN0IFN0cmluZyBrZXkpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OlBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbio+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGxheWVyKSwg
a2V5LnV0ZjgoKS5kYXRhKCkpKTsKK30KKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oCmluZGV4IGQ5NjVkYWZiMDM2NGQwMDQ3
YzMwOTQ4Y2Y5NThlMzQ2Y2I2N2I4Y2EuLmU0OTQ0ZTUwOWNmZjkzNDA1OTMzNmUwOGJkZjIwOGMx
ZDFkYTk4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaApAQCAtOTYsNiArOTYsOCBAQCB2
b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhHcmFwaGljc0xheWVyQWN0b3IqLCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQQogZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJh
d3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciopOwogdm9pZCBncmFwaGljc0xheWVyQWN0b3JT
ZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgZ2Jvb2xlYW4gZHJhd3NDb250ZW50
KTsKIAorV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBncmFwaGljc0xheWVyQWN0
b3JHZXRBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3QgU3RyaW5nKTsK
KwogR19FTkRfREVDTFMKIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NMYXllckNsdXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAKaW5kZXggOWM3YWI0ZmRmZWZmMDZjZTRk
MjJhYmE3ZDEwZWI4ZmE0ZWUzOTBiZC4uNzlhYjFlZGZiODQxZTk4ODZlYzVhYWQyYWQzNDg5NTJl
ODRlODcyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBDb2xsYWJvcmEgTHRkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIENvbGxhYm9yYSBMdGQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0zMCwxNyArMzAsNjcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsdXR0ZXIuaCIKIAorI2luY2x1ZGUgIkFu
aW1hdGlvbi5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
U3RhdGUuaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworI2lu
Y2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisvLyBJZiB3ZSBzZW5kIGEgZHVyYXRpb24gb2YgMCB0byBDQSwgdGhl
biBpdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBkdXJhdGlvbgorLy8gb2YgMjUwbXMuIFNvIHNlbmQg
YSB2ZXJ5IHNtYWxsIHZhbHVlIGluc3RlYWQuCitzdGF0aWMgY29uc3QgZmxvYXQgY0FuaW1hdGlv
bkFsbW9zdFplcm9EdXJhdGlvbiA9IDFlLTNmOworCitzdGF0aWMgU3RyaW5nIHByb3BlcnR5SWRU
b1N0cmluZyhBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpCit7CisgICAgc3dpdGNoIChwcm9w
ZXJ0eSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKKyAgICAg
ICAgcmV0dXJuICJ0cmFuc2Zvcm0iOworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6
CisgICAgICAgIHJldHVybiAib3BhY2l0eSI7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5QmFj
a2dyb3VuZENvbG9yOgorICAgICAgICByZXR1cm4gImJhY2tncm91bmRDb2xvciI7CisgICAgY2Fz
ZSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkOgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuICIiOworfQorCitzdGF0aWMgU3RyaW5nIGFuaW1hdGlvbklkZW50aWZpZXIoY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25OYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGludCBpbmRl
eCkKK3sKKyAgICByZXR1cm4gYW5pbWF0aW9uTmFtZSArICdfJyArIFN0cmluZzo6bnVtYmVyKHBy
b3BlcnR5KSArICdfJyArIFN0cmluZzo6bnVtYmVyKGluZGV4KTsKK30KKworc3RhdGljIGJvb2wg
YW5pbWF0aW9uSGFzU3RlcHNUaW1pbmdGdW5jdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW0pCit7CisgICAgaWYgKGFuaW0tPnRpbWlu
Z0Z1bmN0aW9uKCktPmlzU3RlcHNUaW1pbmdGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uID0gdmFsdWVM
aXN0LmF0KGkpLT50aW1pbmdGdW5jdGlvbigpOworICAgICAgICBpZiAodGltaW5nRnVuY3Rpb24g
JiYgdGltaW5nRnVuY3Rpb24tPmlzU3RlcHNUaW1pbmdGdW5jdGlvbigpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBUaGlzIGlz
IHRoZSBob29rIGZvciBXZWJDb3JlIGNvbXBvc2l0b3IgdG8ga25vdyB0aGF0IHRoZSB3ZWJLaXQg
Y2x1dHRlciBwb3J0IGltcGxlbWVudHMKIC8vIGNvbXBvc2l0aW5nIHdpdGggR3JhcGhpY3NMYXll
ckNsdXR0ZXIuCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZShHcmFwaGljc0xheWVyRmFjdG9yeSogZmFjdG9yeSwgR3JhcGhpY3NMYXllckNsaWVudCogY2xp
ZW50KQpAQCAtMTU0LDcgKzIwNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldEFu
Y2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCiAKIHZvaWQgR3JhcGhpY3NMYXll
ckNsdXR0ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBmbG9hdCBjbGFtcGVk
T3BhY2l0eSA9IHN0ZDo6bWF4KDAuMGYsIHN0ZDo6bWluKG9wYWNpdHksIDEuMGYpKTsKKyAgICBm
bG9hdCBjbGFtcGVkT3BhY2l0eSA9IG1heCgwLjBmLCBtaW4ob3BhY2l0eSwgMS4wZikpOwogICAg
IGlmIChjbGFtcGVkT3BhY2l0eSA9PSBtX29wYWNpdHkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjgwLDYgKzMzMCw1OCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVPcGFjaXR5
T25MYXllcigpCiAgICAgY2x1dHRlcl9hY3Rvcl9zZXRfb3BhY2l0eShDTFVUVEVSX0FDVE9SKHBy
aW1hcnlMYXllcigpKSwgc3RhdGljX2Nhc3Q8Z3VpbnQ4Pihyb3VuZGYobV9vcGFjaXR5ICogMjU1
KSkpOwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVBbmltYXRpb25zKCkK
K3sKKyAgICBpZiAobV9hbmltYXRpb25zVG9Qcm9jZXNzLnNpemUoKSkgeworICAgICAgICBBbmlt
YXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnNUb1By
b2Nlc3MuZW5kKCk7CisgICAgICAgIGZvciAoQW5pbWF0aW9uc1RvUHJvY2Vzc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQt
PmtleTsKKyAgICAgICAgICAgIEFuaW1hdGlvbnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0g
bV9ydW5uaW5nQW5pbWF0aW9ucy5maW5kKGN1cnJBbmltYXRpb25OYW1lKTsKKyAgICAgICAgICAg
IGlmIChhbmltYXRpb25JdCA9PSBtX3J1bm5pbmdBbmltYXRpb25zLmVuZCgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5n
QWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT52
YWx1ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24m
IGN1cnJBbmltYXRpb24gPSBhbmltYXRpb25zW2ldOworICAgICAgICAgICAgICAgIHN3aXRjaCAo
cHJvY2Vzc2luZ0luZm8uYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZW1vdmU6Cisg
ICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsdXR0ZXJBbmltYXRpb25Gcm9tTGF5ZXIoY3VyckFu
aW1hdGlvbi5tX3Byb3BlcnR5LCBjdXJyQW5pbWF0aW9uTmFtZSwgY3VyckFuaW1hdGlvbi5tX2lu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQ
YXVzZToKKyAgICAgICAgICAgICAgICAgICAgcGF1c2VDbHV0dGVyQW5pbWF0aW9uT25MYXllcihj
dXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1cnJBbmltYXRpb25OYW1lLCBjdXJyQW5pbWF0aW9u
Lm1faW5kZXgsIHByb2Nlc3NpbmdJbmZvLnRpbWVPZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChwcm9jZXNzaW5nSW5mby5hY3Rpb24gPT0gUmVtb3ZlKQorICAgICAgICAgICAgICAgIG1f
cnVubmluZ0FuaW1hdGlvbnMucmVtb3ZlKGN1cnJBbmltYXRpb25OYW1lKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1fYW5pbWF0aW9uc1RvUHJvY2Vzcy5jbGVhcigpOworICAgIH0KKworICAgIHNp
emVfdCBudW1BbmltYXRpb25zOworICAgIGlmICgobnVtQW5pbWF0aW9ucyA9IG1fdW5jb21pdHRl
ZEFuaW1hdGlvbnMuc2l6ZSgpKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUFuaW1hdGlvbnM7ICsraSkgeworICAgICAgICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFuaW1h
dGlvbiYgcGVuZGluZ0FuaW1hdGlvbiA9IG1fdW5jb21pdHRlZEFuaW1hdGlvbnNbaV07CisgICAg
ICAgICAgICBzZXRBbmltYXRpb25PbkxheWVyKHBlbmRpbmdBbmltYXRpb24ubV9hbmltYXRpb24u
Z2V0KCksIHBlbmRpbmdBbmltYXRpb24ubV9wcm9wZXJ0eSwgcGVuZGluZ0FuaW1hdGlvbi5tX25h
bWUsIHBlbmRpbmdBbmltYXRpb24ubV9pbmRleCwgcGVuZGluZ0FuaW1hdGlvbi5tX3RpbWVPZmZz
ZXQpOworCisgICAgICAgICAgICBBbmltYXRpb25zTWFwOjppdGVyYXRvciBpdCA9IG1fcnVubmlu
Z0FuaW1hdGlvbnMuZmluZChwZW5kaW5nQW5pbWF0aW9uLm1fbmFtZSk7CisgICAgICAgICAgICBp
ZiAoaXQgPT0gbV9ydW5uaW5nQW5pbWF0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAgICAgIFZl
Y3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiBhbmltYXRpb25zOworICAgICAgICAgICAgICAg
IGFuaW1hdGlvbnMuYXBwZW5kKHBlbmRpbmdBbmltYXRpb24pOworICAgICAgICAgICAgICAgIG1f
cnVubmluZ0FuaW1hdGlvbnMuYWRkKHBlbmRpbmdBbmltYXRpb24ubV9uYW1lLCBhbmltYXRpb25z
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgVmVjdG9yPExheWVyUHJv
cGVydHlBbmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnZhbHVlOworICAgICAgICAgICAgICAg
IGFuaW1hdGlvbnMuYXBwZW5kKHBlbmRpbmdBbmltYXRpb24pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgbV91bmNvbWl0dGVkQW5pbWF0aW9ucy5jbGVhcigpOworICAgIH0K
K30KKwogRmxvYXRQb2ludCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tcHV0ZVBvc2l0aW9uUmVs
YXRpdmVUb0Jhc2UoZmxvYXQmIHBhZ2VTY2FsZSkgY29uc3QKIHsKICAgICBwYWdlU2NhbGUgPSAx
OwpAQCAtMzg2LDYgKzQ4OCw5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExh
eWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyhmbG9hdCBwYWdlU2NhbGVGYWN0CiAKICAgICBpZiAo
bV91bmNvbW1pdHRlZENoYW5nZXMgJiBPcGFjaXR5Q2hhbmdlZCkKICAgICAgICAgdXBkYXRlT3Bh
Y2l0eU9uTGF5ZXIoKTsKKworICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIEFuaW1hdGlv
bkNoYW5nZWQpCisgICAgICAgIHVwZGF0ZUFuaW1hdGlvbnMoKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQpAQCAtNDU4LDEwICs1NjMsMjA1
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KGZs
b2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QKICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsK
IH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0dXBBbmltYXRpb24oUGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uKiBwcm9wZXJ0eUFuaW0sIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgYm9v
bCBhZGRpdGl2ZSkKK3sKKyAgICBkb3VibGUgZHVyYXRpb24gPSBhbmltLT5kdXJhdGlvbigpOwor
ICAgIGlmIChkdXJhdGlvbiA8PSAwKQorICAgICAgICBkdXJhdGlvbiA9IGNBbmltYXRpb25BbG1v
c3RaZXJvRHVyYXRpb247CisKKyAgICBmbG9hdCByZXBlYXRDb3VudCA9IGFuaW0tPml0ZXJhdGlv
bkNvdW50KCk7CisgICAgaWYgKHJlcGVhdENvdW50ID09IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291
bnRJbmZpbml0ZSkKKyAgICAgICAgcmVwZWF0Q291bnQgPSBudW1lcmljX2xpbWl0czxmbG9hdD46
Om1heCgpOworICAgIGVsc2UgaWYgKGFuaW0tPmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5p
bWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlIHx8IGFuaW0tPmRpcmVjdGlvbigpID09IEFuaW1hdGlv
bjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkKKyAgICAgICAgcmVwZWF0Q291
bnQgLz0gMjsKKworICAgIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6RmlsbE1vZGVUeXBlIGZp
bGxNb2RlID0gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpOb0ZpbGxNb2RlOworICAgIHN3aXRj
aCAoYW5pbS0+ZmlsbE1vZGUoKSkgeworICAgIGNhc2UgQW5pbWF0aW9uRmlsbE1vZGVOb25lOgor
ICAgICAgICBmaWxsTW9kZSA9IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Rm9yd2FyZHM7IC8v
IFVzZSAiZm9yd2FyZHMiIHJhdGhlciB0aGFuICJyZW1vdmVkIiBiZWNhdXNlIHRoZSBzdHlsZSBz
eXN0ZW0gd2lsbCByZW1vdmUgdGhlIGFuaW1hdGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVkLiBUaGlz
IGF2b2lkcyBhIGZsYXNoLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFuaW1hdGlvbkZpbGxN
b2RlQmFja3dhcmRzOgorICAgICAgICBmaWxsTW9kZSA9IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bjo6Qm90aDsgLy8gVXNlICJib3RoIiByYXRoZXIgdGhhbiAiYmFja3dhcmRzIiBiZWNhdXNlIHRo
ZSBzdHlsZSBzeXN0ZW0gd2lsbCByZW1vdmUgdGhlIGFuaW1hdGlvbiB3aGVuIGl0IGlzIGZpbmlz
aGVkLiBUaGlzIGF2b2lkcyBhIGZsYXNoLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFuaW1h
dGlvbkZpbGxNb2RlRm9yd2FyZHM6CisgICAgICAgIGZpbGxNb2RlID0gUGxhdGZvcm1DbHV0dGVy
QW5pbWF0aW9uOjpGb3J3YXJkczsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBbmltYXRpb25G
aWxsTW9kZUJvdGg6CisgICAgICAgIGZpbGxNb2RlID0gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
OjpCb3RoOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBwcm9wZXJ0eUFuaW0tPnNldER1
cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBwcm9wZXJ0eUFuaW0tPnNldFJlcGVhdENvdW50KHJlcGVh
dENvdW50KTsKKyAgICBwcm9wZXJ0eUFuaW0tPnNldEF1dG9yZXZlcnNlcyhhbmltLT5kaXJlY3Rp
b24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSB8fCBhbmltLT5k
aXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVy
c2UpOworICAgIHByb3BlcnR5QW5pbS0+c2V0UmVtb3ZlZE9uQ29tcGxldGlvbihmYWxzZSk7Cisg
ICAgcHJvcGVydHlBbmltLT5zZXRBZGRpdGl2ZShhZGRpdGl2ZSk7CisgICAgcHJvcGVydHlBbmlt
LT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7Cit9CisKK2NvbnN0IFRpbWluZ0Z1bmN0aW9uKiBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6dGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBB
bmltYXRpb25WYWx1ZSogYW5pbVZhbHVlLCBjb25zdCBBbmltYXRpb24qIGFuaW0pCit7CisgICAg
aWYgKGFuaW1WYWx1ZS0+dGltaW5nRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIGFuaW1WYWx1
ZS0+dGltaW5nRnVuY3Rpb24oKTsKKyAgICBpZiAoYW5pbS0+aXNUaW1pbmdGdW5jdGlvblNldCgp
KQorICAgICAgICByZXR1cm4gYW5pbS0+dGltaW5nRnVuY3Rpb24oKS5nZXQoKTsKKworICAgIHJl
dHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24oKTsK
K30KKworUGFzc1JlZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IEdyYXBoaWNzTGF5ZXJD
bHV0dGVyOjpjcmVhdGVCYXNpY0FuaW1hdGlvbihjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhZGRpdGl2ZSkKK3sKKyAgICBSZWZQdHI8UGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uPiBiYXNpY0FuaW0gPSBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmNy
ZWF0ZShQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OkJhc2ljLCBrZXlQYXRoKTsKKyAgICBzZXR1
cEFuaW1hdGlvbihiYXNpY0FuaW0uZ2V0KCksIGFuaW0sIGFkZGl0aXZlKTsKKyAgICByZXR1cm4g
YmFzaWNBbmltOworfQorCitQYXNzUmVmUHRyPFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbj5HcmFw
aGljc0xheWVyQ2x1dHRlcjo6Y3JlYXRlS2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9u
KiBhbmltLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYWRkaXRpdmUpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBHcmFwaGljc0xheWVyQ2x1
dHRlcjo6c2V0VHJhbnNmb3JtQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBQbGF0Zm9ybUNsdXR0
ZXJBbmltYXRpb24qIGtleWZyYW1lQW5pbSwgaW50IGZ1bmN0aW9uSW5kZXgsIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1PcFR5cGUsIGJvb2wgaXNNYXRyaXhBbmlt
YXRpb24sIGNvbnN0IEludFNpemUmIGJveFNpemUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldFRy
YW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVM
aXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
KiBiYXNpY0FuaW0sIGludCBmdW5jdGlvbkluZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgdHJhbnNmb3JtT3BUeXBlLCBib29sIGlzTWF0cml4QW5pbWF0aW9uLCBjb25zdCBJ
bnRTaXplJiBib3hTaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjcmVhdGVUcmFuc2Zvcm1Bbmlt
YXRpb25zRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBj
b25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBk
b3VibGUgdGltZU9mZnNldCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyQ2x1
dHRlcjo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICBBU1NFUlQodmFsdWVMaXN0
LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBi
b29sIGlzS2V5ZnJhbWUgPSB2YWx1ZUxpc3Quc2l6ZSgpID4gMjsKKyAgICBib29sIHZhbHVlc09L
OworCisgICAgYm9vbCBhZGRpdGl2ZSA9IGZhbHNlOworICAgIGludCBhbmltYXRpb25JbmRleCA9
IDA7CisKKyAgICBSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBjbHV0dGVyQW5pbWF0
aW9uOworCisgICAgaWYgKGlzS2V5ZnJhbWUpIHsKKyAgICAgICAgY2x1dHRlckFuaW1hdGlvbiA9
IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJvcGVydHlJZFRvU3RyaW5nKHZh
bHVlTGlzdC5wcm9wZXJ0eSgpKSwgYWRkaXRpdmUpOworICAgICAgICB2YWx1ZXNPSyA9IHNldEFu
aW1hdGlvbktleWZyYW1lcyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2x1dHRlckFuaW1hdGlvbi5n
ZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2x1dHRlckFuaW1hdGlvbiA9IGNyZWF0ZUJh
c2ljQW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJvcGVydHlJZFRvU3RyaW5nKHZhbHVlTGlzdC5wcm9w
ZXJ0eSgpKSwgYWRkaXRpdmUpOworICAgICAgICB2YWx1ZXNPSyA9IHNldEFuaW1hdGlvbkVuZHBv
aW50cyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgY2x1dHRlckFuaW1hdGlvbi5nZXQoKSk7CisgICAg
fQorCisgICAgaWYgKCF2YWx1ZXNPSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV91
bmNvbWl0dGVkQW5pbWF0aW9ucy5hcHBlbmQoTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihjbHV0dGVy
QW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB2YWx1ZUxpc3QucHJvcGVydHkoKSwgYW5pbWF0aW9u
SW5kZXgsIHRpbWVPZmZzZXQpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZh
bHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIEFT
U0VSVCghYW5pbWF0aW9uTmFtZS5pc0VtcHR5KCkpOworCisgICAgaWYgKCFhbmltIHx8IGFuaW0t
PmlzRW1wdHlPclplcm9EdXJhdGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDb3JlQW5pbWF0aW9uIGRvZXMgbm90IGhhbmRsZSB0
aGUgc3RlcHMoKSB0aW1pbmcgZnVuY3Rpb24uIEZhbGwgYmFjaworICAgIC8vIHRvIHNvZnR3YXJl
IGFuaW1hdGlvbiBpbiB0aGF0IGNhc2UuCisgICAgaWYgKGFuaW1hdGlvbkhhc1N0ZXBzVGltaW5n
RnVuY3Rpb24odmFsdWVMaXN0LCBhbmltKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCBjcmVhdGVkQW5pbWF0aW9ucyA9IGZhbHNlOworICAgIGlmICh2YWx1ZUxpc3QucHJvcGVy
dHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAgICAgICBjcmVhdGVk
QW5pbWF0aW9ucyA9IGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKHZhbHVl
TGlzdCwgYW5pbSwgYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCwgYm94U2l6ZSk7CisgICAgZWxz
ZQorICAgICAgICBjcmVhdGVkQW5pbWF0aW9ucyA9IGNyZWF0ZUFuaW1hdGlvbkZyb21LZXlmcmFt
ZXModmFsdWVMaXN0LCBhbmltLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKworICAgIGlm
IChjcmVhdGVkQW5pbWF0aW9ucykKKyAgICAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEFu
aW1hdGlvbkNoYW5nZWQpOworCisgICAgcmV0dXJuIGNyZWF0ZWRBbmltYXRpb25zOworfQorCiti
b29sIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZW1vdmVDbHV0dGVyQW5pbWF0aW9uRnJvbUxheWVy
KEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
LCBpbnQgaW5kZXgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnBhdXNlQ2x1dHRlckFuaW1hdGlvbk9u
TGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGludCBpbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0QW5pbWF0aW9uT25MYXll
cihQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGNsdXR0ZXJBbmltLCBBbmltYXRlZFByb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4LCBkb3Vi
bGUgdGltZU9mZnNldCkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gYW5pbWF0
ZWRMYXllcihwcm9wZXJ0eSk7CisKKyAgICBpZiAodGltZU9mZnNldCkKKyAgICAgICAgY2x1dHRl
ckFuaW0tPnNldEJlZ2luVGltZShnX2dldF9yZWFsX3RpbWUoKSAtIHRpbWVPZmZzZXQpOworCisg
ICAgU3RyaW5nIGFuaW1hdGlvbklEID0gYW5pbWF0aW9uSWRlbnRpZmllcihhbmltYXRpb25OYW1l
LCBwcm9wZXJ0eSwgaW5kZXgpOworCisgICAgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBleGlz
dGluZ0FuaW1hdGlvbiA9IGdyYXBoaWNzTGF5ZXJBY3RvckdldEFuaW1hdGlvbkZvcktleShsYXll
ciwgYW5pbWF0aW9uSUQpOworICAgIGlmIChleGlzdGluZ0FuaW1hdGlvbikKKyAgICAgICAgZXhp
c3RpbmdBbmltYXRpb24tPnJlbW92ZUFuaW1hdGlvbkZvcktleShsYXllciwgYW5pbWF0aW9uSUQp
OworCisgICAgY2x1dHRlckFuaW0tPmFkZEFuaW1hdGlvbkZvcktleShsYXllciwgYW5pbWF0aW9u
SUQpOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRBbmltYXRpb25FbmRwb2lu
dHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBh
bmltYXRpb24sIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiogYmFzaWNBbmltKQoreworICAgIGJv
b2wgZm9yd2FyZHMgPSBhbmltYXRpb24tPmRpcmVjdGlvbklzRm9yd2FyZHMoKTsKKworICAgIHVu
c2lnbmVkIGZyb21JbmRleCA9ICFmb3J3YXJkczsKKyAgICB1bnNpZ25lZCB0b0luZGV4ID0gZm9y
d2FyZHM7CisKKyAgICBzd2l0Y2ggKHZhbHVlTGlzdC5wcm9wZXJ0eSgpKSB7CisgICAgY2FzZSBB
bmltYXRlZFByb3BlcnR5T3BhY2l0eTogeworICAgICAgICBiYXNpY0FuaW0tPnNldEZyb21WYWx1
ZShzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4odmFsdWVMaXN0LmF0KGZy
b21JbmRleCkpLT52YWx1ZSgpKTsKKyAgICAgICAgYmFzaWNBbmltLT5zZXRUb1ZhbHVlKHN0YXRp
Y19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih2YWx1ZUxpc3QuYXQodG9JbmRleCkp
LT52YWx1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyB3ZSBkb24ndCBhbmltYXRlIGNvbG9yIHlldAorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvZGVwYXRoIGlzIHVzZWQgZm9yIDIt
a2V5ZnJhbWUgYW5pbWF0aW9ucywgc28gd2Ugc3RpbGwgbmVlZCB0byBsb29rIGluIHRoZSBzdGFy
dAorICAgIC8vIGZvciBhIHRpbWluZyBmdW5jdGlvbi4gRXZlbiBpbiB0aGUgcmV2ZXJzaW5nIGFu
aW1hdGlvbiBjYXNlLCB0aGUgZmlyc3Qga2V5ZnJhbWUgcHJvdmlkZXMgdGhlIHRpbWluZyBmdW5j
dGlvbi4KKyAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdG
dW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHZhbHVlTGlzdC5hdCgwKSwgYW5pbWF0aW9uKTsKKyAg
ICBpZiAodGltaW5nRnVuY3Rpb24pCisgICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rp
b24odGltaW5nRnVuY3Rpb24sICFmb3J3YXJkcyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0QW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBQ
bGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGtleWZyYW1lQW5pbSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogR3JhcGhpY3NMYXllckFjdG9yKiBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6bGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9sYXllci5nZXQoKTsKIH0KKworR3JhcGhpY3NMYXllckFjdG9yKiBHcmFwaGljc0xheWVy
Q2x1dHRlcjo6YW5pbWF0ZWRMYXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHByaW1hcnlMYXllcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJD
bHV0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBo
aWNzTGF5ZXJDbHV0dGVyLmgKaW5kZXggZjIzNTU3ZWQyYjk3OTBiMTFkZmMyNGM4MGE0MzcxZmJj
NmIyM2FkZi4uMzVhNTQ3MDA3NTAxN2NlOWU2MTNlZjdiYzAwN2MxMTdiMzQyZjI4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xh
eWVyQ2x1dHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0
ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdl
U291cmNlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC03OCw2ICs3OSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHZpcnR1YWwgYm9vbCBh
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hT
aXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJs
ZSB0aW1lT2Zmc2V0KTsKKwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGUo
Y29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKIApAQCAtOTUsNiArOTgsMjcgQEAgcHJpdmF0ZToKIAogICAg
IEdyYXBoaWNzTGF5ZXJBY3RvciogcHJpbWFyeUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXll
ci5nZXQoKTsgfQogICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXJGb3JTdXBlcmxheWVyKCkg
Y29uc3Q7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBhbmltYXRlZExheWVyKEFuaW1hdGVkUHJv
cGVydHlJRCkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bj4gY3JlYXRlQmFzaWNBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIGFkZGl0aXZlKTsKKyAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbj4gY3JlYXRlS2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiwgY29uc3Qg
U3RyaW5nJiwgYm9vbCBhZGRpdGl2ZSk7CisgICAgdm9pZCBzZXR1cEFuaW1hdGlvbihQbGF0Zm9y
bUNsdXR0ZXJBbmltYXRpb24qLCBjb25zdCBBbmltYXRpb24qLCBib29sIGFkZGl0aXZlKTsKKwor
ICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVl
KGNvbnN0IEFuaW1hdGlvblZhbHVlKiwgY29uc3QgQW5pbWF0aW9uKik7CisKKyAgICBib29sIHNl
dEFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1h
dGlvbiosIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiopOworICAgIGJvb2wgc2V0QW5pbWF0aW9u
S2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7CisKKyAgICB2b2lkIHNldEFuaW1hdGlvbk9uTGF5ZXIo
UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiwgQW5pbWF0ZWRQcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIGJv
b2wgcmVtb3ZlQ2x1dHRlckFuaW1hdGlvbkZyb21MYXllcihBbmltYXRlZFByb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50IGluZGV4KTsKKyAgICB2b2lkIHBhdXNlQ2x1
dHRlckFuaW1hdGlvbk9uTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbk5hbWUsIGludCBpbmRleCwgZG91YmxlIHRpbWVPZmZzZXQpOworCisgICAgYm9vbCBj
cmVhdGVBbmltYXRpb25Gcm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29u
c3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9m
ZnNldCk7CisgICAgYm9vbCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyhj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEludFNpemUmIGJveFNpemUp
OworCisgICAgYm9vbCBzZXRUcmFuc2Zvcm1BbmltYXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24q
LCBpbnQgZnVuY3Rpb25JbmRleCwgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCBi
b29sIGlzTWF0cml4QW5pbWF0aW9uLCBjb25zdCBJbnRTaXplJiBib3hTaXplKTsKKyAgICBib29s
IHNldFRyYW5zZm9ybUFuaW1hdGlvbktleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYs
IGNvbnN0IEFuaW1hdGlvbiosIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiosIGludCBmdW5jdGlv
bkluZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIGJvb2wgaXNNYXRyaXhB
bmltYXRpb24sIGNvbnN0IEludFNpemUmIGJveFNpemUpOworCiAgICAgZW51bSBMYXllckNoYW5n
ZSB7CiAgICAgICAgIE5vQ2hhbmdlID0gMCwKICAgICAgICAgTmFtZUNoYW5nZWQgPSAxIDw8IDEs
CkBAIC0xMzMsMTIgKzE1Nyw1MiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVHJhbnNmb3Jt
KCk7CiAgICAgdm9pZCB1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9hdCBwaXhlbEFsaWdubWVu
dFNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKIAorICAg
IHZvaWQgdXBkYXRlQW5pbWF0aW9ucygpOworCiAgICAgdm9pZCByZXBhaW50TGF5ZXJEaXJ0eVJl
Y3RzKCk7CiAKICAgICBHUmVmUHRyPEdyYXBoaWNzTGF5ZXJBY3Rvcj4gbV9sYXllcjsKIAogICAg
IFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGlydHlSZWN0czsKICAgICBMYXllckNoYW5nZUZsYWdzIG1f
dW5jb21taXR0ZWRDaGFuZ2VzOworCisgICAgLy8gVGhpcyByZXByZXNlbnRzIHRoZSBhbmltYXRp
b24gb2YgYSBzaW5nbGUgcHJvcGVydHkuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSB0cmFuc2Zvcm0g
YW5pbWF0aW9ucyBmb3IKKyAgICAvLyBhIHNpbmdsZSB0cmFuc2l0aW9uIG9yIGtleWZyYW1lIGFu
aW1hdGlvbiwgc28gaW5kZXggaXMgdXNlZCB0byBkaXN0aW5ndWlzaCB0aGVzZS4KKyAgICBzdHJ1
Y3QgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiB7CisgICAgICAgIExheWVyUHJvcGVydHlBbmltYXRp
b24oUGFzc1JlZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IGNhQW5pbWF0aW9uLCBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgaW50
IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCkKKyAgICAgICAgOiBtX2FuaW1hdGlvbihjYUFuaW1h
dGlvbikKKyAgICAgICAgLCBtX25hbWUoYW5pbWF0aW9uTmFtZSkKKyAgICAgICAgLCBtX3Byb3Bl
cnR5KHByb3BlcnR5KQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV90aW1l
T2Zmc2V0KHRpbWVPZmZzZXQpCisgICAgICAgIHsgfQorCisgICAgICAgIFJlZlB0cjxQbGF0Zm9y
bUNsdXR0ZXJBbmltYXRpb24+IG1fYW5pbWF0aW9uOworICAgICAgICBTdHJpbmcgbV9uYW1lOwor
ICAgICAgICBBbmltYXRlZFByb3BlcnR5SUQgbV9wcm9wZXJ0eTsKKyAgICAgICAgaW50IG1faW5k
ZXg7CisgICAgICAgIGRvdWJsZSBtX3RpbWVPZmZzZXQ7CisgICAgfTsKKworICAgIC8vIFVuY29t
bWl0dGVkIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25zLgorICAgIFZlY3RvcjxMYXllclByb3Bl
cnR5QW5pbWF0aW9uPiBtX3VuY29taXR0ZWRBbmltYXRpb25zOworCisgICAgZW51bSBBY3Rpb24g
eyBSZW1vdmUsIFBhdXNlIH07CisgICAgc3RydWN0IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24g
eworICAgICAgICBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uKEFjdGlvbiBhY3Rpb24gPSBSZW1v
dmUsIGRvdWJsZSB0aW1lT2Zmc2V0ID0gMCkKKyAgICAgICAgICAgIDogYWN0aW9uKGFjdGlvbikK
KyAgICAgICAgICAgICwgdGltZU9mZnNldCh0aW1lT2Zmc2V0KQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgQWN0aW9uIGFjdGlvbjsKKyAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQ7IC8v
IG9ubHkgdXNlZCBmb3IgcGF1c2UKKyAgICB9OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24+IEFuaW1hdGlvbnNUb1Byb2Nlc3NNYXA7CisgICAg
QW5pbWF0aW9uc1RvUHJvY2Vzc01hcCBtX2FuaW1hdGlvbnNUb1Byb2Nlc3M7CisKKyAgICAvLyBN
YXAgb2YgYW5pbWF0aW9uIG5hbWVzIHRvIHRoZWlyIGFzc29jaWF0ZWQgbGlzdHMgb2YgcHJvcGVy
dHkgYW5pbWF0aW9ucywgc28gd2UgY2FuIHJlbW92ZS9wYXVzZSB0aGVtLgorICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9uPiA+IEFuaW1hdGlv
bnNNYXA7CisgICAgQW5pbWF0aW9uc01hcCBtX3J1bm5pbmdBbmltYXRpb25zOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU0NWRiMTIyYzBiOGZiNzZkYWJkNWJhOTdlZjMxMWE5ZmQwYzkwNmQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL1BsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSw0MjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0
ZXJBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXJBY3Rvci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlRpbWluZ0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAi
VW5pdEJlemllci5oIgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgdm9pZCB0aW1lbGluZVN0YXJ0ZWRDYWxsYmFjayhDbHV0dGVyVGltZWxpbmUq
LCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGFuaW1hdGlvbikKK3sKKyAgICBhbmltYXRpb24t
PmFuaW1hdGlvbkRpZFN0YXJ0KCk7Cit9CisKK3N0YXRpYyBDbHV0dGVyQW5pbWF0aW9uTW9kZSB0
b0NsdXR0ZXJBbmltYXRpb25Nb2RlKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlv
bikKK3sKKyAgICBBU1NFUlQodGltaW5nRnVuY3Rpb24pOworCisgICAgaWYgKHRpbWluZ0Z1bmN0
aW9uLT5pc0xpbmVhclRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBDTFVUVEVSX0xJ
TkVBUjsKKyAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bigpKSB7CisgICAgICAgIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9u
UHJlc2V0IHRpbWluZ0Z1bmN0aW9uUHJlc2V0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKS0+dGltaW5nRnVuY3Rpb25QcmVzZXQo
KTsgCisgICAgICAgIHN3aXRjaCAodGltaW5nRnVuY3Rpb25QcmVzZXQpIHsKKyAgICAgICAgY2Fz
ZSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpFYXNlOgorICAgICAgICAgICAgcmV0dXJuIENM
VVRURVJfRUFTRTsKKyAgICAgICAgY2FzZSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpFYXNl
SW46CisgICAgICAgICAgICByZXR1cm4gQ0xVVFRFUl9FQVNFX0lOOworICAgICAgICBjYXNlIEN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkVhc2VPdXQ6CisgICAgICAgICAgICByZXR1cm4gQ0xV
VFRFUl9FQVNFX09VVDsKKyAgICAgICAgY2FzZSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpF
YXNlSW5PdXQ6CisgICAgICAgICAgICByZXR1cm4gQ0xVVFRFUl9FQVNFX0lOX09VVDsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIENMVVRURVJfRUFTRTsKK30KKworUGxhdGZvcm1DbHV0dGVy
QW5pbWF0aW9uOjpBbmltYXRlZFByb3BlcnR5VHlwZSBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246
OnN0cmluZ1RvQW5pbWF0ZWRQcm9wZXJ0eVR5cGUoY29uc3QgU3RyaW5nJiBrZXlQYXRoKSBjb25z
dAoreworICAgIGlmIChrZXlQYXRoID09ICJ0cmFuc2Zvcm0iKQorICAgICAgICByZXR1cm4gVHJh
bnNmb3JtOworICAgIGlmIChrZXlQYXRoID09ICJvcGFjaXR5IikKKyAgICAgICAgcmV0dXJuIE9w
YWNpdHk7CisgICAgaWYgKGtleVBhdGggPT0gImJhY2tncm91bmRDb2xvciIpCisgICAgICAgIHJl
dHVybiBCYWNrZ3JvdW5kQ29sb3I7CisgICAgcmV0dXJuIE5vQW5pbWF0ZWRQcm9wZXJ0eVR5cGU7
Cit9CisKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBQbGF0Zm9ybUNsdXR0
ZXJBbmltYXRpb246OmNyZWF0ZShBbmltYXRpb25UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bih0eXBlLCBrZXlQYXRoKSk7Cit9CisKK1Bhc3NSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0
aW9uPiBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmNyZWF0ZShQbGF0Zm9ybUNsdXR0ZXJBbmlt
YXRpb24qIGFuaW1hdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbihhbmltYXRpb24pKTsKK30KKworUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
OjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24oQW5pbWF0aW9uVHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fYW5pbWF0ZWRQcm9wZXJ0
eVR5cGUoc3RyaW5nVG9BbmltYXRlZFByb3BlcnR5VHlwZShrZXlQYXRoKSkKKyAgICAsIG1fYWRk
aXRpdmUoZmFsc2UpCisgICAgLCBtX2Zyb21WYWx1ZSgwKQorICAgICwgbV90b1ZhbHVlKDApCisg
ICAgLCBtX3JlcGVhdENvdW50KDApCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKDApCisgICAgLCBt
X3ZhbHVlRnVuY3Rpb25UeXBlKE5vVmFsdWVGdW5jdGlvbikKK3sKKyAgICAvLyBGSVhNRTogV2Ug
c3VwcG9ydCBvbmx5IEJhc2ljIHR5cGUgbm93LgorICAgIEFTU0VSVCh0eXBlID09IEJhc2ljKTsK
KyAgICBtX2FuaW1hdGlvbiA9IGFkb3B0R1JlZihHX09CSkVDVChjbHV0dGVyX3RyYW5zaXRpb25f
Z3JvdXBfbmV3KCkpKTsKK30KKworUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb24oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBhbmltYXRpb24p
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
Ojp+UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKCkKK3sKKyAgICBtX2FuaW1hdGlvbi5jbGVhcigp
OworICAgIG1fbGF5ZXIuY2xlYXIoKTsKK30KKworYm9vbCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OnN1cHBvcnRzVmFsdWVGdW5jdGlvbigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitk
b3VibGUgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpiZWdpblRpbWUoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uOjpzZXRCZWdpblRpbWUoZG91YmxlIHZhbHVlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK2RvdWJsZSBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmR1cmF0aW9u
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV90eXBlID09IEJhc2ljKTsKKworICAgIGRvdWJsZSBk
dXJhdGlvbiA9IGNsdXR0ZXJfdGltZWxpbmVfZ2V0X2R1cmF0aW9uKENMVVRURVJfVElNRUxJTkUo
bV9hbmltYXRpb24uZ2V0KCkpKTsKKyAgICByZXR1cm4gZHVyYXRpb24gLyAxMDAwOworfQorCit2
b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0RHVyYXRpb24oZG91YmxlIHZhbHVlKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gQmFzaWMpOworCisgICAgLy8gQ2x1dHRlciBBbmltYXRp
b24gc2V0cyB0aGUgZHVyYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMuCisgICAgZ2ludCBkdXJh
dGlvbiA9IHZhbHVlICogMTAwMDsKKyAgICBjbHV0dGVyX3RpbWVsaW5lX3NldF9kdXJhdGlvbihD
TFVUVEVSX1RJTUVMSU5FKG1fYW5pbWF0aW9uLmdldCgpKSwgZHVyYXRpb24pOworfQorCitmbG9h
dCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNwZWVkKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbjo6c2V0U3BlZWQoZmxvYXQgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworZG91YmxlIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6dGltZU9mZnNldCgpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQbGF0Zm9y
bUNsdXR0ZXJBbmltYXRpb246OnNldFRpbWVPZmZzZXQoZG91YmxlIHZhbHVlKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2Zsb2F0IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6cmVw
ZWF0Q291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlcGVhdENvdW50OworfQorCit2b2lk
IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0UmVwZWF0Q291bnQoZmxvYXQgdmFsdWUpCit7
CisgICAgaWYgKG1fcmVwZWF0Q291bnQgPT0gdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcmVwZWF0Q291bnQgPSB2YWx1ZTsKKyAgICBjbHV0dGVyX3RpbWVsaW5lX3NldF9yZXBlYXRf
Y291bnQodGltZWxpbmUoKSwgc3RhdGljX2Nhc3Q8Z2ludD4odmFsdWUgPT0gbnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjptYXgoKSA/IC0xIDogdmFsdWUpKTsgCit9CisKK2Jvb2wgUGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uOjphdXRvcmV2ZXJzZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bjo6c2V0QXV0b3JldmVyc2VzKGJvb2wgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpGaWxsTW9kZVR5cGUgUGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uOjpmaWxsTW9kZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpOb0ZpbGxNb2RlOworfQorCit2
b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0RmlsbE1vZGUoRmlsbE1vZGVUeXBlIHZh
bHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVy
QW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5n
RnVuY3Rpb24sIGJvb2wgcmV2ZXJzZSkKK3sKKyAgICBpZiAoIXRpbWluZ0Z1bmN0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgbV90aW1pbmdGdW5jdGlvbiA9IHRpbWluZ0Z1bmN0aW9uOworfQor
Cit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Y29weVRpbWluZ0Z1bmN0aW9uRnJvbShj
b25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjppc1JlbW92ZWRPbkNv
bXBsZXRpb24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0UmVtb3ZlZE9uQ29t
cGxldGlvbihib29sIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wg
UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjppc0FkZGl0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9hZGRpdGl2ZTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldEFk
ZGl0aXZlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fYWRkaXRpdmUgPT0gdmFsdWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2FkZGl0aXZlID0gdmFsdWU7Cit9CisKK1BsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbjo6VmFsdWVGdW5jdGlvblR5cGUgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjp2
YWx1ZUZ1bmN0aW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBOb1ZhbHVlRnVuY3Rpb247Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpz
ZXRWYWx1ZUZ1bmN0aW9uKFZhbHVlRnVuY3Rpb25UeXBlIHZhbHVlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRGcm9tVmFs
dWUoZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKG1fZnJvbVZhbHVlID09IHZhbHVlKQorICAgICAg
ICByZXR1cm47CisgICAgbV9mcm9tVmFsdWUgPSB2YWx1ZTsKK30KKwordm9pZCBQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb246OnNldEZyb21WYWx1ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0
Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldEZyb21WYWx1ZShjb25zdCBGbG9hdFBvaW50M0QmIHZh
bHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVy
QW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImIHZhbHVlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
Ojpjb3B5RnJvbVZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIHZhbHVl
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5p
bWF0aW9uOjpzZXRUb1ZhbHVlKGZsb2F0IHZhbHVlKQoreworICAgIGlmIChtX3RvVmFsdWUgPT0g
dmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RvVmFsdWUgPSB2YWx1ZTsKK30KKwordm9p
ZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0IEZsb2F0UG9p
bnQzRCYgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9y
bUNsdXR0ZXJBbmltYXRpb246OnNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImIHZhbHVl
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5p
bWF0aW9uOjpjb3B5VG9WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiB2
YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbjo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpz
ZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiYgdmFs
dWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYgdmFsdWUpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29sb3I+JiB2YWx1ZSkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6
Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiB2YWx1ZSkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bjo6c2V0S2V5VGltZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmNvcHlLZXlU
aW1lc0Zyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiB2YWx1ZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0
VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiB2YWx1
ZSwgYm9vbCByZXZlcnNlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0
Zm9ybUNsdXR0ZXJBbmltYXRpb24qIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjphbmltYXRpb25EaWRTdGFydCgpCit7
CisgICAgQVNTRVJUKENMVVRURVJfSVNfQUNUT1IobV9sYXllci5nZXQoKSkpOworCisgICAgUGxh
dGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqIGNsaWVudCA9IGdyYXBoaWNzTGF5ZXJBY3RvckdldENs
aWVudChHUkFQSElDU19MQVlFUl9BQ1RPUihtX2xheWVyLmdldCgpKSk7CisgICAgaWYgKCFjbGll
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIGNsaWVudC0+cGxhdGZvcm1DbHV0dGVyTGF5ZXJB
bmltYXRpb25TdGFydGVkKFdURjo6Y3VycmVudFRpbWUoKSk7Cit9CisKK0NsdXR0ZXJUaW1lbGlu
ZSogUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjp0aW1lbGluZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fYW5pbWF0aW9uKTsKKyAgICBBU1NFUlQobV90eXBlID09IEJhc2ljKTsKKyAgICByZXR1
cm4gQ0xVVFRFUl9USU1FTElORShtX2FuaW1hdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1DbHV0dGVyQW5pbWF0aW9uOjphZGRPcGFjaXR5VHJhbnNpdGlvbigpCit7CisgICAgR1JlZlB0
cjxDbHV0dGVyVHJhbnNpdGlvbj4gdHJhbnNpdGlvbiA9IGFkb3B0R1JlZihjbHV0dGVyX3Byb3Bl
cnR5X3RyYW5zaXRpb25fbmV3KCJvcGFjaXR5IikpOworICAgIGNsdXR0ZXJfdHJhbnNpdGlvbl9z
ZXRfZnJvbSh0cmFuc2l0aW9uLmdldCgpLCBHX1RZUEVfVUlOVCwgc3RhdGljX2Nhc3Q8Z3VpbnQ4
PigyNTUgKiBtX2Zyb21WYWx1ZSkpOworICAgIGNsdXR0ZXJfdHJhbnNpdGlvbl9zZXRfdG8odHJh
bnNpdGlvbi5nZXQoKSwgR19UWVBFX1VJTlQsIHN0YXRpY19jYXN0PGd1aW50OD4oMjU1ICogbV90
b1ZhbHVlKSk7CisKKyAgICBjbHV0dGVyX3RyYW5zaXRpb25fZ3JvdXBfYWRkX3RyYW5zaXRpb24o
Q0xVVFRFUl9UUkFOU0lUSU9OX0dST1VQKG1fYW5pbWF0aW9uLmdldCgpKSwgdHJhbnNpdGlvbi5n
ZXQoKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjphZGRBbmltYXRpb25G
b3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiBwbGF0Zm9ybUxheWVyLCBjb25zdCBTdHJpbmcmIGtl
eSkKK3sKKyAgICBBU1NFUlQoYW5pbWF0aW9uVHlwZSgpID09IEJhc2ljKTsKKyAgICBBU1NFUlQo
IWdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHBsYXRmb3JtTGF5ZXIpLCBrZXkudXRmOCgpLmRh
dGEoKSkpOworCisgICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPT0gT3BhY2l0eSkKKyAg
ICAgICAgYWRkT3BhY2l0eVRyYW5zaXRpb24oKTsKKyAgICBlbHNlIGlmIChtX2FuaW1hdGVkUHJv
cGVydHlUeXBlID09IFRyYW5zZm9ybSkKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBl
bHNlIGlmIChtX2FuaW1hdGVkUHJvcGVydHlUeXBlID09IEJhY2tncm91bmRDb2xvcikKKyAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworCisgICAgQ2x1dHRlckFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IHRvQ2x1dHRl
ckFuaW1hdGlvbk1vZGUobV90aW1pbmdGdW5jdGlvbik7CisgICAgQ2x1dHRlclRpbWVsaW5lKiBj
bHV0dGVyVGltZWxpbmUgPSB0aW1lbGluZSgpOworICAgIGNsdXR0ZXJfdGltZWxpbmVfc2V0X3By
b2dyZXNzX21vZGUoY2x1dHRlclRpbWVsaW5lLCBhbmltYXRpb25Nb2RlKTsKKworICAgIGdfc2ln
bmFsX2Nvbm5lY3QoY2x1dHRlclRpbWVsaW5lLCAic3RhcnRlZCIsIEdfQ0FMTEJBQ0sodGltZWxp
bmVTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVD
VChwbGF0Zm9ybUxheWVyKSwga2V5LnV0ZjgoKS5kYXRhKCksIHRoaXMpOworCisgICAgbV9sYXll
ciA9IENMVVRURVJfQUNUT1IocGxhdGZvcm1MYXllcik7CisKKyAgICBjbHV0dGVyX2FjdG9yX2Fk
ZF90cmFuc2l0aW9uKG1fbGF5ZXIuZ2V0KCksIGtleS51dGY4KCkuZGF0YSgpLCBDTFVUVEVSX1RS
QU5TSVRJT04obV9hbmltYXRpb24uZ2V0KCkpKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb246OnJlbW92ZUFuaW1hdGlvbkZvcktleShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVy
LCBjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBBU1NFUlQoYW5pbWF0aW9uVHlwZSgpID09IEJh
c2ljKTsKKworICAgIGNsdXR0ZXJfYWN0b3JfcmVtb3ZlX3RyYW5zaXRpb24oQ0xVVFRFUl9BQ1RP
UihsYXllciksIGtleS51dGY4KCkuZGF0YSgpKTsKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09C
SkVDVChsYXllciksIGtleS51dGY4KCkuZGF0YSgpLCAwKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0
ZXIvUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E2Y2NmZTZlMTM5YTQ4
MTVkMDVhOTRiZWVlOTQyNzUzZTM2NTU1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uLmgK
QEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbl9oCisjZGVmaW5lIFBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkZs
b2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3Qg
X0NsdXR0ZXJBY3RvciBDbHV0dGVyQWN0b3I7Cit0eXBlZGVmIHN0cnVjdCBfQ2x1dHRlclRpbWVs
aW5lIENsdXR0ZXJUaW1lbGluZTsKK3R5cGVkZWYgc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3Ig
R3JhcGhpY3NMYXllckFjdG9yOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0
UmVjdDsKK2NsYXNzIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjsKK2NsYXNzIFRpbWluZ0Z1bmN0
aW9uOworCitjbGFzcyBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24gOiBwdWJsaWMgUmVmQ291bnRl
ZDxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIEFuaW1hdGlv
blR5cGUgeyBCYXNpYywgS2V5ZnJhbWUgfTsKKyAgICBlbnVtIEFuaW1hdGVkUHJvcGVydHlUeXBl
IHsgTm9BbmltYXRlZFByb3BlcnR5VHlwZSwgVHJhbnNmb3JtLCBPcGFjaXR5LCBCYWNrZ3JvdW5k
Q29sb3IgfTsKKyAgICBlbnVtIEZpbGxNb2RlVHlwZSB7IE5vRmlsbE1vZGUsIEZvcndhcmRzLCBC
YWNrd2FyZHMsIEJvdGggfTsKKyAgICBlbnVtIFZhbHVlRnVuY3Rpb25UeXBlIHsgTm9WYWx1ZUZ1
bmN0aW9uLCBSb3RhdGVYLCBSb3RhdGVZLCBSb3RhdGVaLCBTY2FsZVgsIFNjYWxlWSwgU2NhbGVa
LCBTY2FsZSwgVHJhbnNsYXRlWCwgVHJhbnNsYXRlWSwgVHJhbnNsYXRlWiwgVHJhbnNsYXRlIH07
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IGNyZWF0
ZShBbmltYXRpb25UeXBlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbj4gY3JlYXRlKFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbiopOworCisgICAgflBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbigpOworCisgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNWYWx1ZUZ1bmN0aW9uKCk7CisKKyAgICBBbmltYXRpb25UeXBlIGFu
aW1hdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIGRvdWJsZSBiZWdp
blRpbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEJlZ2luVGltZShkb3VibGUpOworCisgICAgZG91
YmxlIGR1cmF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpOworCisg
ICAgZmxvYXQgc3BlZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldFNwZWVkKGZsb2F0KTsKKworICAg
IGRvdWJsZSB0aW1lT2Zmc2V0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRUaW1lT2Zmc2V0KGRvdWJs
ZSk7CisKKyAgICBmbG9hdCByZXBlYXRDb3VudCgpIGNvbnN0OworICAgIHZvaWQgc2V0UmVwZWF0
Q291bnQoZmxvYXQpOworCisgICAgYm9vbCBhdXRvcmV2ZXJzZXMoKSBjb25zdDsKKyAgICB2b2lk
IHNldEF1dG9yZXZlcnNlcyhib29sKTsKKworICAgIEZpbGxNb2RlVHlwZSBmaWxsTW9kZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0RmlsbE1vZGUoRmlsbE1vZGVUeXBlKTsKKworICAgIHZvaWQgc2V0
VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qLCBib29sIHJldmVyc2UgPSBmYWxz
ZSk7CisgICAgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25Gcm9tKGNvbnN0IFBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbiopOworCisgICAgYm9vbCBpc1JlbW92ZWRPbkNvbXBsZXRpb24oKSBjb25zdDsK
KyAgICB2b2lkIHNldFJlbW92ZWRPbkNvbXBsZXRpb24oYm9vbCk7CisKKyAgICBib29sIGlzQWRk
aXRpdmUoKSBjb25zdDsKKyAgICB2b2lkIHNldEFkZGl0aXZlKGJvb2wpOworCisgICAgVmFsdWVG
dW5jdGlvblR5cGUgdmFsdWVGdW5jdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0VmFsdWVGdW5j
dGlvbihWYWx1ZUZ1bmN0aW9uVHlwZSk7CisKKyAgICAvLyBCYXNpYy1hbmltYXRpb24gcHJvcGVy
dGllcy4KKyAgICB2b2lkIHNldEZyb21WYWx1ZShmbG9hdCk7CisgICAgdm9pZCBzZXRGcm9tVmFs
dWUoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIHNldEZy
b21WYWx1ZShjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2b2lkIHNldEZyb21WYWx1ZShjb25z
dCBXZWJDb3JlOjpDb2xvciYpOworICAgIHZvaWQgY29weUZyb21WYWx1ZUZyb20oY29uc3QgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7CisKKyAgICB2b2lkIHNldFRvVmFsdWUoZmxvYXQpOwor
ICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OworICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2b2lkIHNl
dFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICB2b2lkIGNvcHlUb1ZhbHVlRnJv
bShjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qKTsKKworICAgIC8vIEtleWZyYW1lLWFu
aW1hdGlvbiBwcm9wZXJ0aWVzLgorICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9h
dD4mKTsKKyAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXg+Jik7CisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPEZsb2F0UG9p
bnQzRD4mKTsKKyAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29sb3I+
Jik7CisgICAgdm9pZCBjb3B5VmFsdWVzRnJvbShjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b24qKTsKKworICAgIHZvaWQgc2V0S2V5VGltZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAg
IHZvaWQgY29weUtleVRpbWVzRnJvbShjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qKTsK
KworICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdG
dW5jdGlvbio+JiwgYm9vbCByZXZlcnNlID0gZmFsc2UpOworICAgIHZvaWQgY29weVRpbWluZ0Z1
bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7CisKKyAgICB2b2lk
IGFkZEFuaW1hdGlvbkZvcktleShHcmFwaGljc0xheWVyQWN0b3IqLCBjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShHcmFwaGljc0xheWVyQWN0b3IqLCBjb25z
dCBTdHJpbmcmKTsKKworICAgIHZvaWQgYW5pbWF0aW9uRGlkU3RhcnQoKTsKKworcHJvdGVjdGVk
OgorICAgIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbihBbmltYXRpb25UeXBlLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgpOworICAgIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbihjb25zdCBQbGF0Zm9y
bUNsdXR0ZXJBbmltYXRpb24qKTsKKworcHJpdmF0ZToKKyAgICBDbHV0dGVyVGltZWxpbmUqIHRp
bWVsaW5lKCkgY29uc3Q7CisgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgc3RyaW5nVG9BbmltYXRl
ZFByb3BlcnR5VHlwZShjb25zdCBTdHJpbmcmIGtleVBhdGgpIGNvbnN0OworCisgICAgdm9pZCBh
ZGRPcGFjaXR5VHJhbnNpdGlvbigpOworCisgICAgQW5pbWF0aW9uVHlwZSBtX3R5cGU7CisgICAg
QW5pbWF0ZWRQcm9wZXJ0eVR5cGUgbV9hbmltYXRlZFByb3BlcnR5VHlwZTsKKworICAgIEdSZWZQ
dHI8R09iamVjdD4gbV9hbmltYXRpb247CisgICAgR1JlZlB0cjxDbHV0dGVyQWN0b3I+IG1fbGF5
ZXI7CisKKyAgICBib29sIG1fYWRkaXRpdmU7CisKKyAgICBmbG9hdCBtX2Zyb21WYWx1ZTsKKyAg
ICBmbG9hdCBtX3RvVmFsdWU7CisKKyAgICBmbG9hdCBtX3JlcGVhdENvdW50OworCisgICAgY29u
c3QgVGltaW5nRnVuY3Rpb24qIG1fdGltaW5nRnVuY3Rpb247CisgICAgVmFsdWVGdW5jdGlvblR5
cGUgbV92YWx1ZUZ1bmN0aW9uVHlwZTsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIFBsYXRmb3JtQ0FBbmltYXRpb25faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAKaW5kZXggMTRkOGNkZjIyYzVlZTI3OWFhZjI2OGE3NmUwMGMwYTM5ZDQ0YWE1Zi4uNzc3NDhi
NWU1ZWIwYjg1N2NlYmE4OGIxYTY5ZTEwZGMyYTBjYzQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0xMDI1LDcg
KzEwMjUsNyBAQCBDaHJvbWVDbGllbnQ6OkNvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIENocm9tZUNs
aWVudDo6YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAjaWYgVVNFKENMVVRURVIpCiAgICAgLy8gQ3VycmVudGx5LCB3ZSBvbmx5IHN1cHBvcnQgQ1NT
IDNEIFRyYW5zZm9ybXMuCi0gICAgcmV0dXJuIFRocmVlRFRyYW5zZm9ybVRyaWdnZXI7CisgICAg
cmV0dXJuIFRocmVlRFRyYW5zZm9ybVRyaWdnZXIgfCBBbmltYXRpb25UcmlnZ2VyOwogI2Vsc2UK
ICAgICByZXR1cm4gQWxsVHJpZ2dlcnM7CiAjZW5kaWYK
</data>
<flag name="review"
          id="206214"
          type_id="1"
          status="+"
          setter="gustavo"
    />
    <flag name="commit-queue"
          id="206215"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186859</attachid>
            <date>2013-02-06 08:19:51 -0800</date>
            <delta_ts>2013-02-07 04:23:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108961-20130207011627.patch</filename>
            <type>text/plain</type>
            <size>48310</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RmY2Q1Yzg5ZjlmYmNj
N2RlZjllNDNlNmMzYTVmMjViZmViNzcwNC4uMmM2MWMxYzM2OTkwN2UwOThkMjNmMjhmN2EyZGYz
YWFlNTQ5NzM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wMi0wNiAgQ2hh
bmdTZW9rIE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisKKyAgICAgICAgW0dUS11bQUNdIElt
cGxlbWVudCBvcGFjaXR5IGFuaW1hdGlvbiB3aXRoIGNsdXR0ZXIgYWMgYmFja2VuZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4OTYxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgorCisgICAgICAgIEltcGxlbWVu
dCBvcGFjaXR5IGFuaW1hdGlvbiB3aXRoIGNsdXR0ZXIgYWMgYmFja2VuZC4KKyAgICAgICAgQWxt
b3N0IGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgR3JhcGhpY3NMYXllckNsdXR0ZXIgYXJlIGJhc2Vk
IG9uIG1hYyBwb3J0J3Mgb25lLgorICAgICAgICBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24gaW50
ZXJmYWNlcyBhcmUgYWxzbyBzaW1pbGFyIHdpdGggbWFjIHBvcnQsIGJ1dCB0aGV5IGFyZSBpbXBs
ZW1lbnRlZAorICAgICAgICB3aXRoIG5hdGl2ZSBjbHV0dGVyIEFQSXMuCisgICAgICAgIFRoaXMg
cGF0Y2ggaW5jbHVkZXMgb25seSBvcGFjaXR5IGFuaW1hdGlvbiByZWxhdGVkIGNoYW5nZXMsIHNv
IG1hbnkgQVBJcyBtaWdodCBiZSBlbXB0eS4KKyAgICAgICAgUmVtYWluZWQgYW5pbWF0aW9ucyBs
aWtlIHJvdGF0aW9uIGFuZCB0cmFuc2xhdGUgd2lsbCBiZSBkZWFsdCBpbiBhbm90aGVyIHBhdGNo
ZXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBhbmltYXRpb24gdGVzdHMuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcDoKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJB
Y3RvckdldEFuaW1hdGlvbkZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
bHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJvcGVydHlJZFRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmFu
aW1hdGlvbklkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6YW5pbWF0aW9uSGFzU3RlcHNU
aW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6
c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBk
YXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6
Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXR1cEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2x1dHRlcjo6dGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y3JlYXRlQmFzaWNBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNyZWF0ZUtleWZy
YW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpz
ZXRUcmFuc2Zvcm1BbmltYXRpb25LZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsdXR0ZXI6OnNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9u
c0Zyb21LZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6
OmNyZWF0ZUFuaW1hdGlvbkZyb21LZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsdXR0ZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6cmVtb3ZlQ2x1dHRlckFuaW1hdGlvbkZyb21MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGF1c2VDbHV0dGVyQW5pbWF0aW9uT25M
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0QW5pbWF0
aW9uT25MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0
QW5pbWF0aW9uRW5kcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXRBbmltYXRpb25LZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsdXR0ZXI6OmFuaW1hdGVkTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJD
bHV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclBy
b3BlcnR5QW5pbWF0aW9uOjpMYXllclByb3BlcnR5QW5pbWF0aW9uKToKKyAgICAgICAgKExheWVy
UHJvcGVydHlBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OkFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb246OkFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24p
OgorICAgICAgICAoQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dGltZWxpbmVTdGFydGVkQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6dG9DbHV0dGVyQW5pbWF0aW9uTW9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnN0cmluZ1RvQW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpQ
bGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uOjp+UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c3VwcG9ydHNWYWx1ZUZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6YmVnaW5UaW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0QmVnaW5UaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6ZHVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXREdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNwZWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0U3BlZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjp0aW1lT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0VGltZU9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnJlcGVhdENvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0UmVwZWF0
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjphdXRv
cmV2ZXJzZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpz
ZXRBdXRvcmV2ZXJzZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0
aW9uOjpmaWxsTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OnNldEZpbGxNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbjo6c2V0VGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uOjpjb3B5VGltaW5nRnVuY3Rpb25Gcm9tKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6aXNSZW1vdmVkT25Db21wbGV0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0UmVtb3ZlZE9uQ29tcGxl
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmlzQWRk
aXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRB
ZGRpdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnZh
bHVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
OjpzZXRWYWx1ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbjo6c2V0RnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbjo6Y29weUZyb21WYWx1ZUZyb20pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbjo6Y29weVRvVmFsdWVGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Y29weVZhbHVlc0Zyb20pOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRLZXlUaW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmNvcHlLZXlUaW1lc0Zyb20pOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5jdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjb3B5VGlt
aW5nRnVuY3Rpb25zRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmlt
YXRpb246OmFuaW1hdGlvbkRpZFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbjo6dGltZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uOjphZGRPcGFjaXR5VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmFkZEFuaW1hdGlvbkZvcktleSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnJlbW92ZUFuaW1hdGlvbkZvcktleSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmlt
YXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OmFuaW1hdGlvblR5cGUpOgorCiAyMDEzLTAyLTA2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5n
QGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBHbHlwaFBhZ2UgZm9yIGNhc2Ugd2hlcmUg
YWxsIGdseXBocyBhcmUgYXZhaWxhYmxlIGluIHRoZSBzYW1lIGZvbnQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
aW5kZXggYWY5N2E1NzhjMTk0N2M3Mjk1NTdlODg3ZTViMGFkOTY1MDg3MzliNi4uYmJmYWJhMjA3
YmUwMDU2NjEyZTA4ZDE4YmU4YjEwNGMzNDQ3ZTAwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEzLTAyLTA2ICBDaGFuZ1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNv
bT4KKworICAgICAgICBbR1RLXVtBQ10gSW1wbGVtZW50IG9wYWNpdHkgYW5pbWF0aW9uIHdpdGgg
Y2x1dHRlciBhYyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDg5NjEKKworICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEg
U2lsdmEuCisKKyAgICAgICAgQWRkIEFuaW1hdGlvblRyaWdnZXIgZm9yIGFjIGNvbXBvc2l0aW5n
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjphbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2Vycyk6CisK
IDIwMTMtMDItMDUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFVwZGF0ZSB0aGUgTkVXUyBhbmQgY29uZmlndXJhdGlvbiBpbiBwcmVwYXJhdGlvbiBm
b3IgMS4xMS41LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNmU3ZDZmNzYyMTZl
ZjY1NDVkNTFjNjc2Yzc5YzYwNTYwZTNlMTdiNi4uYTdkYWYyN2MwYTJkMjU4MGE1OTI1MDZlYjE1
YTcyMWZhN2EwMTMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02NDQ3LDYg
KzY0NDcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0
dGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZv
cm1DbHV0dGVyQW5pbWF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9UcmFuc2Zvcm1hdGlvbk1hdHJpeENsdXR0ZXIuY3Bw
CiBlbmRpZiAgIyBFTkQgVVNFX0NMVVRURVIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3Bw
CmluZGV4IGQ5ZDQ0MzI3N2VhZjdhYjEyNzc4NGFhMDI3ODI3OWZiNjBmOTZiNjEuLmQzZDhlZTY5
ZmRiOGJiMmVkZTdjZWJmMjhiMGMyZDJmOTIyNGQ1ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJB
Y3Rvci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXll
ckNsaWVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC01NTgsNCArNTU5LDkgQEAgZ2Jvb2xlYW4gZ3JhcGhpY3NM
YXllckFjdG9yR2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCiAgICAg
cmV0dXJuIGxheWVyLT5wcml2LT5kcmF3c0NvbnRlbnQ7CiB9CiAKK1dlYkNvcmU6OlBsYXRmb3Jt
Q2x1dHRlckFuaW1hdGlvbiogZ3JhcGhpY3NMYXllckFjdG9yR2V0QW5pbWF0aW9uRm9yS2V5KEdy
YXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNvbnN0IFN0cmluZyBrZXkpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbio+KGdfb2JqZWN0
X2dldF9kYXRhKEdfT0JKRUNUKGxheWVyKSwga2V5LnV0ZjgoKS5kYXRhKCkpKTsKK30KKwogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rv
ci5oCmluZGV4IGQ5NjVkYWZiMDM2NGQwMDQ3YzMwOTQ4Y2Y5NThlMzQ2Y2I2N2I4Y2EuLmU0OTQ0
ZTUwOWNmZjkzNDA1OTMzNmUwOGJkZjIwOGMxZDFkYTk4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVy
QWN0b3IuaApAQCAtOTYsNiArOTYsOCBAQCB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1Ymxh
eWVycyhHcmFwaGljc0xheWVyQWN0b3IqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQQogZ2Jvb2xl
YW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3Rvciop
Owogdm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFj
dG9yKiwgZ2Jvb2xlYW4gZHJhd3NDb250ZW50KTsKIAorV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVy
QW5pbWF0aW9uKiBncmFwaGljc0xheWVyQWN0b3JHZXRBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NM
YXllckFjdG9yKiwgY29uc3QgU3RyaW5nKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5j
cHAKaW5kZXggOWM3YWI0ZmRmZWZmMDZjZTRkMjJhYmE3ZDEwZWI4ZmE0ZWUzOTBiZC4uMzU3ZGZl
NGIzZjVhZGI1Yjc0MmU1MzkxMmQwZGZmNzE1ZDg3Yzg3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xh
eWVyQ2x1dHRlci5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIENv
bGxhYm9yYSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwxNyArMzAsNjYgQEAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckNsdXR0ZXIuaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJBY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0b3J5LmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gSWYgd2Ugc2VuZCBh
IGR1cmF0aW9uIG9mIDAgdG8gQ2x1dHRlclRpbWVsaW5lLCB0aGVuIGl0IHdpbGwgZmFpbCB0byBz
ZXQgdGhlIGR1cmF0aW9uLiAKKy8vIFNvIHNlbmQgYSB2ZXJ5IHNtYWxsIHZhbHVlIGluc3RlYWQu
CitzdGF0aWMgY29uc3QgZmxvYXQgY0FuaW1hdGlvbkFsbW9zdFplcm9EdXJhdGlvbiA9IDFlLTNm
OworCitzdGF0aWMgU3RyaW5nIHByb3BlcnR5SWRUb1N0cmluZyhBbmltYXRlZFByb3BlcnR5SUQg
cHJvcGVydHkpCit7CisgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgIGNhc2UgQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKKyAgICAgICAgcmV0dXJuICJ0cmFuc2Zvcm0iOworICAg
IGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6CisgICAgICAgIHJldHVybiAib3BhY2l0eSI7
CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgICAgICByZXR1
cm4gImJhY2tncm91bmRDb2xvciI7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0Rmls
dGVyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlJbnZhbGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCitzdGF0aWMgU3RyaW5n
IGFuaW1hdGlvbklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBBbmltYXRl
ZFByb3BlcnR5SUQgcHJvcGVydHksIGludCBpbmRleCkKK3sKKyAgICByZXR1cm4gYW5pbWF0aW9u
TmFtZSArICdfJyArIFN0cmluZzo6bnVtYmVyKHByb3BlcnR5KSArICdfJyArIFN0cmluZzo6bnVt
YmVyKGluZGV4KTsKK30KKworc3RhdGljIGJvb2wgYW5pbWF0aW9uSGFzU3RlcHNUaW1pbmdGdW5j
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24q
IGFuaW0pCit7CisgICAgaWYgKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCktPmlzU3RlcHNUaW1pbmdG
dW5jdGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVGltaW5nRnVu
Y3Rpb24qIHRpbWluZ0Z1bmN0aW9uID0gdmFsdWVMaXN0LmF0KGkpLT50aW1pbmdGdW5jdGlvbigp
OworICAgICAgICBpZiAodGltaW5nRnVuY3Rpb24gJiYgdGltaW5nRnVuY3Rpb24tPmlzU3RlcHNU
aW1pbmdGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCiAvLyBUaGlzIGlzIHRoZSBob29rIGZvciBXZWJDb3JlIGNvbXBv
c2l0b3IgdG8ga25vdyB0aGF0IHRoZSB3ZWJLaXQgY2x1dHRlciBwb3J0IGltcGxlbWVudHMKIC8v
IGNvbXBvc2l0aW5nIHdpdGggR3JhcGhpY3NMYXllckNsdXR0ZXIuCiBQYXNzT3duUHRyPEdyYXBo
aWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyRmFjdG9yeSogZmFj
dG9yeSwgR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQpAQCAtMTU0LDcgKzIwMyw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQz
RCYgcG9pbnQpCiAKIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE9wYWNpdHkoZmxvYXQg
b3BhY2l0eSkKIHsKLSAgICBmbG9hdCBjbGFtcGVkT3BhY2l0eSA9IHN0ZDo6bWF4KDAuMGYsIHN0
ZDo6bWluKG9wYWNpdHksIDEuMGYpKTsKKyAgICBmbG9hdCBjbGFtcGVkT3BhY2l0eSA9IG1heCgw
LjBmLCBtaW4ob3BhY2l0eSwgMS4wZikpOwogICAgIGlmIChjbGFtcGVkT3BhY2l0eSA9PSBtX29w
YWNpdHkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjgwLDYgKzMyOSw1OCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVPcGFjaXR5T25MYXllcigpCiAgICAgY2x1dHRlcl9hY3Rv
cl9zZXRfb3BhY2l0eShDTFVUVEVSX0FDVE9SKHByaW1hcnlMYXllcigpKSwgc3RhdGljX2Nhc3Q8
Z3VpbnQ4Pihyb3VuZGYobV9vcGFjaXR5ICogMjU1KSkpOwogfQogCit2b2lkIEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjp1cGRhdGVBbmltYXRpb25zKCkKK3sKKyAgICBpZiAobV9hbmltYXRpb25zVG9Q
cm9jZXNzLnNpemUoKSkgeworICAgICAgICBBbmltYXRpb25zVG9Qcm9jZXNzTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnNUb1Byb2Nlc3MuZW5kKCk7CisgICAgICAgIGZvciAo
QW5pbWF0aW9uc1RvUHJvY2Vzc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNU
b1Byb2Nlc3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIGN1cnJBbmltYXRpb25OYW1lID0gaXQtPmtleTsKKyAgICAgICAgICAgIEFuaW1hdGlv
bnNNYXA6Oml0ZXJhdG9yIGFuaW1hdGlvbkl0ID0gbV9ydW5uaW5nQW5pbWF0aW9ucy5maW5kKGN1
cnJBbmltYXRpb25OYW1lKTsKKyAgICAgICAgICAgIGlmIChhbmltYXRpb25JdCA9PSBtX3J1bm5p
bmdBbmltYXRpb25zLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBjb25zdCBBbmltYXRpb25Qcm9jZXNzaW5nQWN0aW9uJiBwcm9jZXNzaW5nSW5mbyA9IGl0
LT52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9u
PiYgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbkl0LT52YWx1ZTsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IExheWVyUHJvcGVydHlBbmltYXRpb24mIGN1cnJBbmltYXRpb24gPSBhbmltYXRpb25z
W2ldOworICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvY2Vzc2luZ0luZm8uYWN0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBSZW1vdmU6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNs
dXR0ZXJBbmltYXRpb25Gcm9tTGF5ZXIoY3VyckFuaW1hdGlvbi5tX3Byb3BlcnR5LCBjdXJyQW5p
bWF0aW9uTmFtZSwgY3VyckFuaW1hdGlvbi5tX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQYXVzZToKKyAgICAgICAgICAgICAgICAgICAg
cGF1c2VDbHV0dGVyQW5pbWF0aW9uT25MYXllcihjdXJyQW5pbWF0aW9uLm1fcHJvcGVydHksIGN1
cnJBbmltYXRpb25OYW1lLCBjdXJyQW5pbWF0aW9uLm1faW5kZXgsIHByb2Nlc3NpbmdJbmZvLnRp
bWVPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nSW5mby5hY3Rpb24g
PT0gUmVtb3ZlKQorICAgICAgICAgICAgICAgIG1fcnVubmluZ0FuaW1hdGlvbnMucmVtb3ZlKGN1
cnJBbmltYXRpb25OYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fYW5pbWF0aW9uc1RvUHJv
Y2Vzcy5jbGVhcigpOworICAgIH0KKworICAgIHNpemVfdCBudW1BbmltYXRpb25zOworICAgIGlm
ICgobnVtQW5pbWF0aW9ucyA9IG1fdW5jb21pdHRlZEFuaW1hdGlvbnMuc2l6ZSgpKSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUFuaW1hdGlvbnM7ICsraSkgeworICAgICAg
ICAgICAgY29uc3QgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbiYgcGVuZGluZ0FuaW1hdGlvbiA9IG1f
dW5jb21pdHRlZEFuaW1hdGlvbnNbaV07CisgICAgICAgICAgICBzZXRBbmltYXRpb25PbkxheWVy
KHBlbmRpbmdBbmltYXRpb24ubV9hbmltYXRpb24uZ2V0KCksIHBlbmRpbmdBbmltYXRpb24ubV9w
cm9wZXJ0eSwgcGVuZGluZ0FuaW1hdGlvbi5tX25hbWUsIHBlbmRpbmdBbmltYXRpb24ubV9pbmRl
eCwgcGVuZGluZ0FuaW1hdGlvbi5tX3RpbWVPZmZzZXQpOworCisgICAgICAgICAgICBBbmltYXRp
b25zTWFwOjppdGVyYXRvciBpdCA9IG1fcnVubmluZ0FuaW1hdGlvbnMuZmluZChwZW5kaW5nQW5p
bWF0aW9uLm1fbmFtZSk7CisgICAgICAgICAgICBpZiAoaXQgPT0gbV9ydW5uaW5nQW5pbWF0aW9u
cy5lbmQoKSkgeworICAgICAgICAgICAgICAgIFZlY3RvcjxMYXllclByb3BlcnR5QW5pbWF0aW9u
PiBhbmltYXRpb25zOworICAgICAgICAgICAgICAgIGFuaW1hdGlvbnMuYXBwZW5kKHBlbmRpbmdB
bmltYXRpb24pOworICAgICAgICAgICAgICAgIG1fcnVubmluZ0FuaW1hdGlvbnMuYWRkKHBlbmRp
bmdBbmltYXRpb24ubV9uYW1lLCBhbmltYXRpb25zKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+JiBhbmltYXRpb25z
ID0gaXQtPnZhbHVlOworICAgICAgICAgICAgICAgIGFuaW1hdGlvbnMuYXBwZW5kKHBlbmRpbmdB
bmltYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV91bmNvbWl0
dGVkQW5pbWF0aW9ucy5jbGVhcigpOworICAgIH0KK30KKwogRmxvYXRQb2ludCBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoZmxvYXQmIHBhZ2VTY2Fs
ZSkgY29uc3QKIHsKICAgICBwYWdlU2NhbGUgPSAxOwpAQCAtMzg2LDYgKzQ4Nyw5IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyhm
bG9hdCBwYWdlU2NhbGVGYWN0CiAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBPcGFj
aXR5Q2hhbmdlZCkKICAgICAgICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKKworICAgIGlmICht
X3VuY29tbWl0dGVkQ2hhbmdlcyAmIEFuaW1hdGlvbkNoYW5nZWQpCisgICAgICAgIHVwZGF0ZUFu
aW1hdGlvbnMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlR2VvbWV0
cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0
aXZlVG9CYXNlKQpAQCAtNDU4LDEwICs1NjIsMjA1IEBAIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0
ZXI6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QK
ICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2x1
dHRlcjo6c2V0dXBBbmltYXRpb24oUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBwcm9wZXJ0eUFu
aW0sIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgYm9vbCBhZGRpdGl2ZSkKK3sKKyAgICBkb3VibGUg
ZHVyYXRpb24gPSBhbmltLT5kdXJhdGlvbigpOworICAgIGlmIChkdXJhdGlvbiA8PSAwKQorICAg
ICAgICBkdXJhdGlvbiA9IGNBbmltYXRpb25BbG1vc3RaZXJvRHVyYXRpb247CisKKyAgICBmbG9h
dCByZXBlYXRDb3VudCA9IGFuaW0tPml0ZXJhdGlvbkNvdW50KCk7CisgICAgaWYgKHJlcGVhdENv
dW50ID09IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSkKKyAgICAgICAgcmVwZWF0
Q291bnQgPSBudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworICAgIGVsc2UgaWYgKGFuaW0t
PmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlIHx8
IGFuaW0tPmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJu
YXRlUmV2ZXJzZSkKKyAgICAgICAgcmVwZWF0Q291bnQgLz0gMjsKKworICAgIFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbjo6RmlsbE1vZGVUeXBlIGZpbGxNb2RlID0gUGxhdGZvcm1DbHV0dGVyQW5p
bWF0aW9uOjpOb0ZpbGxNb2RlOworICAgIHN3aXRjaCAoYW5pbS0+ZmlsbE1vZGUoKSkgeworICAg
IGNhc2UgQW5pbWF0aW9uRmlsbE1vZGVOb25lOgorICAgICAgICBmaWxsTW9kZSA9IFBsYXRmb3Jt
Q2x1dHRlckFuaW1hdGlvbjo6Rm9yd2FyZHM7IC8vIFVzZSAiZm9yd2FyZHMiIHJhdGhlciB0aGFu
ICJyZW1vdmVkIiBiZWNhdXNlIHRoZSBzdHlsZSBzeXN0ZW0gd2lsbCByZW1vdmUgdGhlIGFuaW1h
dGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVkLiBUaGlzIGF2b2lkcyBhIGZsYXNoLgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFuaW1hdGlvbkZpbGxNb2RlQmFja3dhcmRzOgorICAgICAgICBmaWxs
TW9kZSA9IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Qm90aDsgLy8gVXNlICJib3RoIiByYXRo
ZXIgdGhhbiAiYmFja3dhcmRzIiBiZWNhdXNlIHRoZSBzdHlsZSBzeXN0ZW0gd2lsbCByZW1vdmUg
dGhlIGFuaW1hdGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVkLiBUaGlzIGF2b2lkcyBhIGZsYXNoLgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFuaW1hdGlvbkZpbGxNb2RlRm9yd2FyZHM6CisgICAg
ICAgIGZpbGxNb2RlID0gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpGb3J3YXJkczsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBbmltYXRpb25GaWxsTW9kZUJvdGg6CisgICAgICAgIGZpbGxN
b2RlID0gUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpCb3RoOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBwcm9wZXJ0eUFuaW0tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBwcm9w
ZXJ0eUFuaW0tPnNldFJlcGVhdENvdW50KHJlcGVhdENvdW50KTsKKyAgICBwcm9wZXJ0eUFuaW0t
PnNldEF1dG9yZXZlcnNlcyhhbmltLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvbkFsdGVybmF0ZSB8fCBhbmltLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFu
aW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpOworICAgIHByb3BlcnR5QW5pbS0+c2V0
UmVtb3ZlZE9uQ29tcGxldGlvbihmYWxzZSk7CisgICAgcHJvcGVydHlBbmltLT5zZXRBZGRpdGl2
ZShhZGRpdGl2ZSk7CisgICAgcHJvcGVydHlBbmltLT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7Cit9
CisKK2NvbnN0IFRpbWluZ0Z1bmN0aW9uKiBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dGltaW5nRnVu
Y3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBBbmltYXRpb25WYWx1ZSogYW5pbVZhbHVlLCBj
b25zdCBBbmltYXRpb24qIGFuaW0pCit7CisgICAgaWYgKGFuaW1WYWx1ZS0+dGltaW5nRnVuY3Rp
b24oKSkKKyAgICAgICAgcmV0dXJuIGFuaW1WYWx1ZS0+dGltaW5nRnVuY3Rpb24oKTsKKyAgICBp
ZiAoYW5pbS0+aXNUaW1pbmdGdW5jdGlvblNldCgpKQorICAgICAgICByZXR1cm4gYW5pbS0+dGlt
aW5nRnVuY3Rpb24oKS5nZXQoKTsKKworICAgIHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24oKTsKK30KKworUGFzc1JlZlB0cjxQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb24+IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjcmVhdGVCYXNpY0FuaW1hdGlv
bihjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhZGRp
dGl2ZSkKK3sKKyAgICBSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBiYXNpY0FuaW0g
PSBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmNyZWF0ZShQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OkJhc2ljLCBrZXlQYXRoKTsKKyAgICBzZXR1cEFuaW1hdGlvbihiYXNpY0FuaW0uZ2V0KCks
IGFuaW0sIGFkZGl0aXZlKTsKKyAgICByZXR1cm4gYmFzaWNBbmltOworfQorCitQYXNzUmVmUHRy
PFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbj5HcmFwaGljc0xheWVyQ2x1dHRlcjo6Y3JlYXRlS2V5
ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgYWRkaXRpdmUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0VHJhbnNmb3JtQW5pbWF0aW9u
S2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGtleWZyYW1lQW5pbSwg
aW50IGZ1bmN0aW9uSW5kZXgsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFu
c2Zvcm1PcFR5cGUsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24sIGNvbnN0IEludFNpemUmIGJveFNp
emUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBiYXNpY0FuaW0sIGludCBmdW5jdGlvbklu
ZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtT3BUeXBlLCBi
b29sIGlzTWF0cml4QW5pbWF0aW9uLCBjb25zdCBJbnRTaXplJiBib3hTaXplKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyhjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtl
eWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRp
b24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9m
ZnNldCkKK3sKKyAgICBBU1NFUlQodmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBib29sIGlzS2V5ZnJhbWUgPSB2YWx1ZUxpc3Qu
c2l6ZSgpID4gMjsKKyAgICBib29sIHZhbHVlc09LOworCisgICAgYm9vbCBhZGRpdGl2ZSA9IGZh
bHNlOworICAgIGludCBhbmltYXRpb25JbmRleCA9IDA7CisKKyAgICBSZWZQdHI8UGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uPiBjbHV0dGVyQW5pbWF0aW9uOworCisgICAgaWYgKGlzS2V5ZnJhbWUp
IHsKKyAgICAgICAgY2x1dHRlckFuaW1hdGlvbiA9IGNyZWF0ZUtleWZyYW1lQW5pbWF0aW9uKGFu
aW1hdGlvbiwgcHJvcGVydHlJZFRvU3RyaW5nKHZhbHVlTGlzdC5wcm9wZXJ0eSgpKSwgYWRkaXRp
dmUpOworICAgICAgICB2YWx1ZXNPSyA9IHNldEFuaW1hdGlvbktleWZyYW1lcyh2YWx1ZUxpc3Qs
IGFuaW1hdGlvbiwgY2x1dHRlckFuaW1hdGlvbi5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgY2x1dHRlckFuaW1hdGlvbiA9IGNyZWF0ZUJhc2ljQW5pbWF0aW9uKGFuaW1hdGlvbiwgcHJv
cGVydHlJZFRvU3RyaW5nKHZhbHVlTGlzdC5wcm9wZXJ0eSgpKSwgYWRkaXRpdmUpOworICAgICAg
ICB2YWx1ZXNPSyA9IHNldEFuaW1hdGlvbkVuZHBvaW50cyh2YWx1ZUxpc3QsIGFuaW1hdGlvbiwg
Y2x1dHRlckFuaW1hdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZXNPSykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV91bmNvbWl0dGVkQW5pbWF0aW9ucy5hcHBlbmQo
TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihjbHV0dGVyQW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB2
YWx1ZUxpc3QucHJvcGVydHkoKSwgYW5pbWF0aW9uSW5kZXgsIHRpbWVPZmZzZXQpKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94
U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUs
IGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIEFTU0VSVCghYW5pbWF0aW9uTmFtZS5pc0VtcHR5
KCkpOworCisgICAgaWYgKCFhbmltIHx8IGFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpIHx8
IHZhbHVlTGlzdC5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBG
SVhNRTogQ2x1dHRlclRpbWVsaW5lIHNlZW1zIHRvIHN1cHBvcnQgc3RlcHMgdGltaW5nIGZ1bmN0
aW9uLiBTbyB3ZSBuZWVkIHRvIGltcHJvdmUgaGVyZS4KKyAgICAvLyBTZWUgaHR0cDovL2RldmVs
b3Blci5nbm9tZS5vcmcvY2x1dHRlci9zdGFibGUvQ2x1dHRlclRpbWVsaW5lLmh0bWwjQ2x1dHRl
ckFuaW1hdGlvbk1vZGUKKyAgICBpZiAoYW5pbWF0aW9uSGFzU3RlcHNUaW1pbmdGdW5jdGlvbih2
YWx1ZUxpc3QsIGFuaW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGNyZWF0
ZWRBbmltYXRpb25zID0gZmFsc2U7CisgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFu
aW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIGNyZWF0ZWRBbmltYXRpb25z
ID0gY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXModmFsdWVMaXN0LCBhbmlt
LCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0LCBib3hTaXplKTsKKyAgICBlbHNlCisgICAgICAg
IGNyZWF0ZWRBbmltYXRpb25zID0gY3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyh2YWx1ZUxp
c3QsIGFuaW0sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworCisgICAgaWYgKGNyZWF0ZWRB
bmltYXRpb25zKQorICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoQW5pbWF0aW9uQ2hh
bmdlZCk7CisKKyAgICByZXR1cm4gY3JlYXRlZEFuaW1hdGlvbnM7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NMYXllckNsdXR0ZXI6OnJlbW92ZUNsdXR0ZXJBbmltYXRpb25Gcm9tTGF5ZXIoQW5pbWF0ZWRQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGludCBpbmRl
eCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGF1c2VDbHV0dGVyQW5pbWF0aW9uT25MYXllcihBbmlt
YXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgaW50
IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRBbmltYXRpb25PbkxheWVyKFBsYXRmb3Jt
Q2x1dHRlckFuaW1hdGlvbiogY2x1dHRlckFuaW0sIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0
eSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgsIGRvdWJsZSB0aW1lT2Zm
c2V0KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIgPSBhbmltYXRlZExheWVyKHBy
b3BlcnR5KTsKKworICAgIGlmICh0aW1lT2Zmc2V0KQorICAgICAgICBjbHV0dGVyQW5pbS0+c2V0
QmVnaW5UaW1lKGdfZ2V0X3JlYWxfdGltZSgpIC0gdGltZU9mZnNldCk7CisKKyAgICBTdHJpbmcg
YW5pbWF0aW9uSUQgPSBhbmltYXRpb25JZGVudGlmaWVyKGFuaW1hdGlvbk5hbWUsIHByb3BlcnR5
LCBpbmRleCk7CisKKyAgICBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGV4aXN0aW5nQW5pbWF0
aW9uID0gZ3JhcGhpY3NMYXllckFjdG9yR2V0QW5pbWF0aW9uRm9yS2V5KGxheWVyLCBhbmltYXRp
b25JRCk7CisgICAgaWYgKGV4aXN0aW5nQW5pbWF0aW9uKQorICAgICAgICBleGlzdGluZ0FuaW1h
dGlvbi0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGxheWVyLCBhbmltYXRpb25JRCk7CisKKyAgICBj
bHV0dGVyQW5pbS0+YWRkQW5pbWF0aW9uRm9yS2V5KGxheWVyLCBhbmltYXRpb25JRCk7Cit9CisK
K2Jvb2wgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldEFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwg
UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBiYXNpY0FuaW0pCit7CisgICAgYm9vbCBmb3J3YXJk
cyA9IGFuaW1hdGlvbi0+ZGlyZWN0aW9uSXNGb3J3YXJkcygpOworCisgICAgdW5zaWduZWQgZnJv
bUluZGV4ID0gIWZvcndhcmRzOworICAgIHVuc2lnbmVkIHRvSW5kZXggPSBmb3J3YXJkczsKKwor
ICAgIHN3aXRjaCAodmFsdWVMaXN0LnByb3BlcnR5KCkpIHsKKyAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlPcGFjaXR5OiB7CisgICAgICAgIGJhc2ljQW5pbS0+c2V0RnJvbVZhbHVlKHN0YXRpY19j
YXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih2YWx1ZUxpc3QuYXQoZnJvbUluZGV4KSkt
PnZhbHVlKCkpOworICAgICAgICBiYXNpY0FuaW0tPnNldFRvVmFsdWUoc3RhdGljX2Nhc3Q8Y29u
c3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KHZhbHVlTGlzdC5hdCh0b0luZGV4KSktPnZhbHVlKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIHdlIGRvbid0IGFuaW1hdGUgY29sb3IgeWV0CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBh
bmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0CisgICAgLy8g
Zm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNh
c2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0aW9uLgorICAg
IGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiA9IHRpbWluZ0Z1bmN0aW9uRm9y
QW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCBhbmltYXRpb24pOworICAgIGlmICh0aW1p
bmdGdW5jdGlvbikKKyAgICAgICAgYmFzaWNBbmltLT5zZXRUaW1pbmdGdW5jdGlvbih0aW1pbmdG
dW5jdGlvbiwgIWZvcndhcmRzKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpzZXRBbmltYXRpb25LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3JtQ2x1
dHRlckFuaW1hdGlvbioga2V5ZnJhbWVBbmltKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiBHcmFwaGljc0xheWVyQWN0b3IqIEdyYXBoaWNzTGF5ZXJD
bHV0dGVyOjpsYXllckZvclN1cGVybGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2xheWVy
LmdldCgpOwogfQorCitHcmFwaGljc0xheWVyQWN0b3IqIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjph
bmltYXRlZExheWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcHJpbWFyeUxheWVyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNs
dXR0ZXIuaAppbmRleCBmMjM1NTdlZDJiOTc5MGIxMWRmYzI0YzgwYTQzNzFmYmM2YjIzYWRmLi4z
NWE1NDcwMDc1MDE3Y2U5ZTYxM2VmN2JjMDA3YzExN2IzNDJmMjg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGlj
c0xheWVyQ2x1dHRlci5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckNsaWVudC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUNsdXR0ZXJMYXllckNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTc4LDYgKzc5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCisgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZz
ZXQpOworCiAgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwogCkBAIC05NSw2ICs5OCwyNyBAQCBwcml2YXRlOgogCiAgICAgR3JhcGhpY3NM
YXllckFjdG9yKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9
CiAgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllckZvclN1cGVybGF5ZXIoKSBjb25zdDsKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3IqIGFuaW1hdGVkTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0eUlEKSBj
b25zdDsKKworICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBjcmVhdGVC
YXNpY0FuaW1hdGlvbihjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgYWRkaXRpdmUpOworICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBj
cmVhdGVLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmLCBi
b29sIGFkZGl0aXZlKTsKKyAgICB2b2lkIHNldHVwQW5pbWF0aW9uKFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbiosIGNvbnN0IEFuaW1hdGlvbiosIGJvb2wgYWRkaXRpdmUpOworCisgICAgY29uc3Qg
VGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoY29uc3QgQW5p
bWF0aW9uVmFsdWUqLCBjb25zdCBBbmltYXRpb24qKTsKKworICAgIGJvb2wgc2V0QW5pbWF0aW9u
RW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7CisgICAgYm9vbCBzZXRBbmltYXRpb25LZXlmcmFtZXMo
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBQbGF0Zm9ybUNsdXR0
ZXJBbmltYXRpb24qKTsKKworICAgIHZvaWQgc2V0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb24qLCBBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgYm9vbCByZW1vdmVD
bHV0dGVyQW5pbWF0aW9uRnJvbUxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBpbnQgaW5kZXgpOworICAgIHZvaWQgcGF1c2VDbHV0dGVyQW5pbWF0
aW9uT25MYXllcihBbmltYXRlZFByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgaW50IGluZGV4LCBkb3VibGUgdGltZU9mZnNldCk7CisKKyAgICBib29sIGNyZWF0ZUFuaW1h
dGlvbkZyb21LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRp
b24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAg
ICBib29sIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSk7CisKKyAgICBi
b29sIHNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYsIGNvbnN0IEFuaW1hdGlvbiosIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiosIGludCBmdW5j
dGlvbkluZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIGJvb2wgaXNNYXRy
aXhBbmltYXRpb24sIGNvbnN0IEludFNpemUmIGJveFNpemUpOworICAgIGJvb2wgc2V0VHJhbnNm
b3JtQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5p
bWF0aW9uKiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiwgaW50IGZ1bmN0aW9uSW5kZXgsIFRy
YW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgYm9vbCBpc01hdHJpeEFuaW1hdGlvbiwg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSk7CisKICAgICBlbnVtIExheWVyQ2hhbmdlIHsKICAgICAg
ICAgTm9DaGFuZ2UgPSAwLAogICAgICAgICBOYW1lQ2hhbmdlZCA9IDEgPDwgMSwKQEAgLTEzMywx
MiArMTU3LDUyIEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKICAgICB2
b2lkIHVwZGF0ZUxheWVyRHJhd3NDb250ZW50KGZsb2F0IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCisgICAgdm9pZCB1cGRh
dGVBbmltYXRpb25zKCk7CisKICAgICB2b2lkIHJlcGFpbnRMYXllckRpcnR5UmVjdHMoKTsKIAog
ICAgIEdSZWZQdHI8R3JhcGhpY3NMYXllckFjdG9yPiBtX2xheWVyOwogCiAgICAgVmVjdG9yPEZs
b2F0UmVjdD4gbV9kaXJ0eVJlY3RzOwogICAgIExheWVyQ2hhbmdlRmxhZ3MgbV91bmNvbW1pdHRl
ZENoYW5nZXM7CisKKyAgICAvLyBUaGlzIHJlcHJlc2VudHMgdGhlIGFuaW1hdGlvbiBvZiBhIHNp
bmdsZSBwcm9wZXJ0eS4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIHRyYW5zZm9ybSBhbmltYXRpb25z
IGZvcgorICAgIC8vIGEgc2luZ2xlIHRyYW5zaXRpb24gb3Iga2V5ZnJhbWUgYW5pbWF0aW9uLCBz
byBpbmRleCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRoZXNlLgorICAgIHN0cnVjdCBMYXllclBy
b3BlcnR5QW5pbWF0aW9uIHsKKyAgICAgICAgTGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbihQYXNzUmVm
UHRyPFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbj4gY2FBbmltYXRpb24sIGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBpbnQgaW5kZXgsIGRv
dWJsZSB0aW1lT2Zmc2V0KQorICAgICAgICA6IG1fYW5pbWF0aW9uKGNhQW5pbWF0aW9uKQorICAg
ICAgICAsIG1fbmFtZShhbmltYXRpb25OYW1lKQorICAgICAgICAsIG1fcHJvcGVydHkocHJvcGVy
dHkpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX3RpbWVPZmZzZXQodGlt
ZU9mZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgUmVmUHRyPFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbj4gbV9hbmltYXRpb247CisgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgIEFu
aW1hdGVkUHJvcGVydHlJRCBtX3Byb3BlcnR5OworICAgICAgICBpbnQgbV9pbmRleDsKKyAgICAg
ICAgZG91YmxlIG1fdGltZU9mZnNldDsKKyAgICB9OworCisgICAgLy8gVW5jb21taXR0ZWQgdHJh
bnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMuCisgICAgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRp
b24+IG1fdW5jb21pdHRlZEFuaW1hdGlvbnM7CisKKyAgICBlbnVtIEFjdGlvbiB7IFJlbW92ZSwg
UGF1c2UgfTsKKyAgICBzdHJ1Y3QgQW5pbWF0aW9uUHJvY2Vzc2luZ0FjdGlvbiB7CisgICAgICAg
IEFuaW1hdGlvblByb2Nlc3NpbmdBY3Rpb24oQWN0aW9uIGFjdGlvbiA9IFJlbW92ZSwgZG91Ymxl
IHRpbWVPZmZzZXQgPSAwKQorICAgICAgICAgICAgOiBhY3Rpb24oYWN0aW9uKQorICAgICAgICAg
ICAgLCB0aW1lT2Zmc2V0KHRpbWVPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICBBY3Rpb24gYWN0aW9uOworICAgICAgICBkb3VibGUgdGltZU9mZnNldDsgLy8gb25seSB1c2Vk
IGZvciBwYXVzZQorICAgIH07CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQW5pbWF0aW9u
UHJvY2Vzc2luZ0FjdGlvbj4gQW5pbWF0aW9uc1RvUHJvY2Vzc01hcDsKKyAgICBBbmltYXRpb25z
VG9Qcm9jZXNzTWFwIG1fYW5pbWF0aW9uc1RvUHJvY2VzczsKKworICAgIC8vIE1hcCBvZiBhbmlt
YXRpb24gbmFtZXMgdG8gdGhlaXIgYXNzb2NpYXRlZCBsaXN0cyBvZiBwcm9wZXJ0eSBhbmltYXRp
b25zLCBzbyB3ZSBjYW4gcmVtb3ZlL3BhdXNlIHRoZW0uCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPExheWVyUHJvcGVydHlBbmltYXRpb24+ID4gQW5pbWF0aW9uc01hcDsKKyAg
ICBBbmltYXRpb25zTWFwIG1fcnVubmluZ0FuaW1hdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
bHV0dGVyL1BsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1BsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzc5ODc2MjA1ZWNiZDk4NTUzNGNhMjk2ZDJlNWQwYjg4MDcyMjZiNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZv
cm1DbHV0dGVyQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bi5oIgorCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NM
YXllckFjdG9yLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiVGltaW5nRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJVbml0QmV6aWVy
LmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyB2b2lkIHRpbWVsaW5lU3RhcnRlZENhbGxiYWNrKENsdXR0ZXJUaW1lbGluZSosIFBsYXRmb3Jt
Q2x1dHRlckFuaW1hdGlvbiogYW5pbWF0aW9uKQoreworICAgIGFuaW1hdGlvbi0+YW5pbWF0aW9u
RGlkU3RhcnQoKTsKK30KKworc3RhdGljIENsdXR0ZXJBbmltYXRpb25Nb2RlIHRvQ2x1dHRlckFu
aW1hdGlvbk1vZGUoY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uKQoreworICAg
IEFTU0VSVCh0aW1pbmdGdW5jdGlvbik7CisKKyAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzTGlu
ZWFyVGltaW5nRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIENMVVRURVJfTElORUFSOworICAg
IGlmICh0aW1pbmdGdW5jdGlvbi0+aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKKyAg
ICAgICAgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25QcmVzZXQgdGlt
aW5nRnVuY3Rpb25QcmVzZXQgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pLT50aW1pbmdGdW5jdGlvblByZXNldCgpOyAKKyAgICAg
ICAgc3dpdGNoICh0aW1pbmdGdW5jdGlvblByZXNldCkgeworICAgICAgICBjYXNlIEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb246OkVhc2U6CisgICAgICAgICAgICByZXR1cm4gQ0xVVFRFUl9FQVNF
OworICAgICAgICBjYXNlIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkVhc2VJbjoKKyAgICAg
ICAgICAgIHJldHVybiBDTFVUVEVSX0VBU0VfSU47CisgICAgICAgIGNhc2UgQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6RWFzZU91dDoKKyAgICAgICAgICAgIHJldHVybiBDTFVUVEVSX0VBU0Vf
T1VUOworICAgICAgICBjYXNlIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkVhc2VJbk91dDoK
KyAgICAgICAgICAgIHJldHVybiBDTFVUVEVSX0VBU0VfSU5fT1VUOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gQ0xVVFRFUl9FQVNFOworfQorCitQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246
OkFuaW1hdGVkUHJvcGVydHlUeXBlIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c3RyaW5nVG9B
bmltYXRlZFByb3BlcnR5VHlwZShjb25zdCBTdHJpbmcmIGtleVBhdGgpIGNvbnN0Cit7CisgICAg
aWYgKGtleVBhdGggPT0gInRyYW5zZm9ybSIpCisgICAgICAgIHJldHVybiBUcmFuc2Zvcm07Cisg
ICAgaWYgKGtleVBhdGggPT0gIm9wYWNpdHkiKQorICAgICAgICByZXR1cm4gT3BhY2l0eTsKKyAg
ICBpZiAoa2V5UGF0aCA9PSAiYmFja2dyb3VuZENvbG9yIikKKyAgICAgICAgcmV0dXJuIEJhY2tn
cm91bmRDb2xvcjsKKyAgICByZXR1cm4gTm9BbmltYXRlZFByb3BlcnR5VHlwZTsKK30KKworUGFz
c1JlZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlv
bjo6Y3JlYXRlKEFuaW1hdGlvblR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKHR5cGUsIGtl
eVBhdGgpKTsKK30KKworUGFzc1JlZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IFBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbjo6Y3JlYXRlKFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiogYW5p
bWF0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1DbHV0dGVyQW5pbWF0
aW9uKGFuaW1hdGlvbikpOworfQorCitQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlBsYXRmb3Jt
Q2x1dHRlckFuaW1hdGlvbihBbmltYXRpb25UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9hbmltYXRlZFByb3BlcnR5VHlwZShzdHJp
bmdUb0FuaW1hdGVkUHJvcGVydHlUeXBlKGtleVBhdGgpKQorICAgICwgbV9hZGRpdGl2ZShmYWxz
ZSkKKyAgICAsIG1fZnJvbVZhbHVlKDApCisgICAgLCBtX3RvVmFsdWUoMCkKKyAgICAsIG1fcmVw
ZWF0Q291bnQoMCkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb24oMCkKKyAgICAsIG1fdmFsdWVGdW5j
dGlvblR5cGUoTm9WYWx1ZUZ1bmN0aW9uKQoreworICAgIC8vIEZJWE1FOiBXZSBzdXBwb3J0IG9u
bHkgQmFzaWMgdHlwZSBub3cuCisgICAgQVNTRVJUKHR5cGUgPT0gQmFzaWMpOworICAgIG1fYW5p
bWF0aW9uID0gYWRvcHRHUmVmKEdfT0JKRUNUKGNsdXR0ZXJfdHJhbnNpdGlvbl9ncm91cF9uZXco
KSkpOworfQorCitQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OlBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbihjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGFuaW1hdGlvbikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246On5QbGF0Zm9y
bUNsdXR0ZXJBbmltYXRpb24oKQoreworICAgIG1fYW5pbWF0aW9uLmNsZWFyKCk7CisgICAgbV9s
YXllci5jbGVhcigpOworfQorCitib29sIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c3VwcG9y
dHNWYWx1ZUZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2RvdWJsZSBQbGF0
Zm9ybUNsdXR0ZXJBbmltYXRpb246OmJlZ2luVGltZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OnNldEJlZ2luVGltZShkb3VibGUgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworZG91YmxlIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6ZHVyYXRpb24oKSBjb25zdAor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gQmFzaWMpOworCisgICAgZG91YmxlIGR1cmF0aW9uID0g
Y2x1dHRlcl90aW1lbGluZV9nZXRfZHVyYXRpb24oQ0xVVFRFUl9USU1FTElORShtX2FuaW1hdGlv
bi5nZXQoKSkpOworICAgIHJldHVybiBkdXJhdGlvbiAvIDEwMDA7Cit9CisKK3ZvaWQgUGxhdGZv
cm1DbHV0dGVyQW5pbWF0aW9uOjpzZXREdXJhdGlvbihkb3VibGUgdmFsdWUpCit7CisgICAgQVNT
RVJUKG1fdHlwZSA9PSBCYXNpYyk7CisKKyAgICAvLyBDbHV0dGVyIEFuaW1hdGlvbiBzZXRzIHRo
ZSBkdXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcy4KKyAgICBnaW50IGR1cmF0aW9uID0gdmFs
dWUgKiAxMDAwOworICAgIGNsdXR0ZXJfdGltZWxpbmVfc2V0X2R1cmF0aW9uKENMVVRURVJfVElN
RUxJTkUobV9hbmltYXRpb24uZ2V0KCkpLCBkdXJhdGlvbik7Cit9CisKK2Zsb2F0IFBsYXRmb3Jt
Q2x1dHRlckFuaW1hdGlvbjo6c3BlZWQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRT
cGVlZChmbG9hdCB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitkb3VibGUg
UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjp0aW1lT2Zmc2V0KCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbjo6c2V0VGltZU9mZnNldChkb3VibGUgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworZmxvYXQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpyZXBlYXRDb3VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVwZWF0Q291bnQ7Cit9CisKK3ZvaWQgUGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uOjpzZXRSZXBlYXRDb3VudChmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAo
bV9yZXBlYXRDb3VudCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZXBlYXRD
b3VudCA9IHZhbHVlOworICAgIGNsdXR0ZXJfdGltZWxpbmVfc2V0X3JlcGVhdF9jb3VudCh0aW1l
bGluZSgpLCBzdGF0aWNfY2FzdDxnaW50Pih2YWx1ZSA9PSBudW1lcmljX2xpbWl0czxmbG9hdD46
Om1heCgpID8gLTEgOiB2YWx1ZSkpOyAKK30KKworYm9vbCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OmF1dG9yZXZlcnNlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRBdXRv
cmV2ZXJzZXMoYm9vbCB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQbGF0
Zm9ybUNsdXR0ZXJBbmltYXRpb246OkZpbGxNb2RlVHlwZSBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRp
b246OmZpbGxNb2RlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246Ok5vRmlsbE1vZGU7Cit9CisKK3ZvaWQgUGxhdGZv
cm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRGaWxsTW9kZShGaWxsTW9kZVR5cGUgdmFsdWUpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246
OnNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwg
Ym9vbCByZXZlcnNlKQoreworICAgIGlmICghdGltaW5nRnVuY3Rpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3RpbWluZ0Z1bmN0aW9uID0gdGltaW5nRnVuY3Rpb247Cit9CisKK3ZvaWQgUGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjb3B5VGltaW5nRnVuY3Rpb25Gcm9tKGNvbnN0IFBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbiogdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworYm9vbCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmlzUmVtb3ZlZE9uQ29tcGxldGlvbigp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRSZW1vdmVkT25Db21wbGV0aW9uKGJv
b2wgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBQbGF0Zm9ybUNs
dXR0ZXJBbmltYXRpb246OmlzQWRkaXRpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2FkZGl0
aXZlOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0QWRkaXRpdmUoYm9v
bCB2YWx1ZSkKK3sKKyAgICBpZiAobV9hZGRpdGl2ZSA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fYWRkaXRpdmUgPSB2YWx1ZTsKK30KKworUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
OjpWYWx1ZUZ1bmN0aW9uVHlwZSBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnZhbHVlRnVuY3Rp
b24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIE5vVmFsdWVG
dW5jdGlvbjsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFZhbHVlRnVu
Y3Rpb24oVmFsdWVGdW5jdGlvblR5cGUgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldEZyb21WYWx1ZShmbG9hdCB2
YWx1ZSkKK3sKKyAgICBpZiAobV9mcm9tVmFsdWUgPT0gdmFsdWUpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2Zyb21WYWx1ZSA9IHZhbHVlOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1h
dGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB2
YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246
OnNldEZyb21WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYgdmFsdWUpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmNvcHlGcm9t
VmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiogdmFsdWUpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNl
dFRvVmFsdWUoZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKG1fdG9WYWx1ZSA9PSB2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fdG9WYWx1ZSA9IHZhbHVlOworfQorCit2b2lkIFBsYXRmb3Jt
Q2x1dHRlckFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0
Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFRvVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1
ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYgdmFsdWUpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmNv
cHlUb1ZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIHZhbHVlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OnNldFZhbHVlcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWx1ZSkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6
c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6c2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mIHZhbHVlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpjb3B5VmFsdWVz
RnJvbShjb25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIHZhbHVlKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRLZXlU
aW1lcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbjo6Y29weUtleVRpbWVzRnJvbShj
b25zdCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5j
dGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mIHZhbHVlLCBib29sIHJl
dmVyc2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0
ZXJBbmltYXRpb246OmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbiogdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
bGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmFuaW1hdGlvbkRpZFN0YXJ0KCkKK3sKKyAgICBBU1NF
UlQoQ0xVVFRFUl9JU19BQ1RPUihtX2xheWVyLmdldCgpKSk7CisKKyAgICBQbGF0Zm9ybUNsdXR0
ZXJMYXllckNsaWVudCogY2xpZW50ID0gZ3JhcGhpY3NMYXllckFjdG9yR2V0Q2xpZW50KEdSQVBI
SUNTX0xBWUVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpKTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2xpZW50LT5wbGF0Zm9ybUNsdXR0ZXJMYXllckFuaW1hdGlvblN0
YXJ0ZWQoV1RGOjpjdXJyZW50VGltZSgpKTsKK30KKworQ2x1dHRlclRpbWVsaW5lKiBQbGF0Zm9y
bUNsdXR0ZXJBbmltYXRpb246OnRpbWVsaW5lKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9hbmlt
YXRpb24pOworICAgIEFTU0VSVChtX3R5cGUgPT0gQmFzaWMpOworICAgIHJldHVybiBDTFVUVEVS
X1RJTUVMSU5FKG1fYW5pbWF0aW9uLmdldCgpKTsKK30KKwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb246OmFkZE9wYWNpdHlUcmFuc2l0aW9uKCkKK3sKKyAgICBHUmVmUHRyPENsdXR0ZXJU
cmFuc2l0aW9uPiB0cmFuc2l0aW9uID0gYWRvcHRHUmVmKGNsdXR0ZXJfcHJvcGVydHlfdHJhbnNp
dGlvbl9uZXcoIm9wYWNpdHkiKSk7CisgICAgY2x1dHRlcl90cmFuc2l0aW9uX3NldF9mcm9tKHRy
YW5zaXRpb24uZ2V0KCksIEdfVFlQRV9VSU5ULCBzdGF0aWNfY2FzdDxndWludDg+KDI1NSAqIG1f
ZnJvbVZhbHVlKSk7CisgICAgY2x1dHRlcl90cmFuc2l0aW9uX3NldF90byh0cmFuc2l0aW9uLmdl
dCgpLCBHX1RZUEVfVUlOVCwgc3RhdGljX2Nhc3Q8Z3VpbnQ4PigyNTUgKiBtX3RvVmFsdWUpKTsK
KworICAgIGNsdXR0ZXJfdHJhbnNpdGlvbl9ncm91cF9hZGRfdHJhbnNpdGlvbihDTFVUVEVSX1RS
QU5TSVRJT05fR1JPVVAobV9hbmltYXRpb24uZ2V0KCkpLCB0cmFuc2l0aW9uLmdldCgpKTsKK30K
Kwordm9pZCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb246OmFkZEFuaW1hdGlvbkZvcktleShHcmFw
aGljc0xheWVyQWN0b3IqIHBsYXRmb3JtTGF5ZXIsIGNvbnN0IFN0cmluZyYga2V5KQoreworICAg
IEFTU0VSVChhbmltYXRpb25UeXBlKCkgPT0gQmFzaWMpOworICAgIEFTU0VSVCghZ19vYmplY3Rf
Z2V0X2RhdGEoR19PQkpFQ1QocGxhdGZvcm1MYXllciksIGtleS51dGY4KCkuZGF0YSgpKSk7CisK
KyAgICBpZiAobV9hbmltYXRlZFByb3BlcnR5VHlwZSA9PSBPcGFjaXR5KQorICAgICAgICBhZGRP
cGFjaXR5VHJhbnNpdGlvbigpOworICAgIGVsc2UgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUg
PT0gVHJhbnNmb3JtKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlbHNlIGlm
IChtX2FuaW1hdGVkUHJvcGVydHlUeXBlID09IEJhY2tncm91bmRDb2xvcikKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKworICAgIENsdXR0ZXJBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSB0b0NsdXR0ZXJB
bmltYXRpb25Nb2RlKG1fdGltaW5nRnVuY3Rpb24pOworICAgIENsdXR0ZXJUaW1lbGluZSogY2x1
dHRlclRpbWVsaW5lID0gdGltZWxpbmUoKTsKKyAgICBjbHV0dGVyX3RpbWVsaW5lX3NldF9wcm9n
cmVzc19tb2RlKGNsdXR0ZXJUaW1lbGluZSwgYW5pbWF0aW9uTW9kZSk7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGNsdXR0ZXJUaW1lbGluZSwgInN0YXJ0ZWQiLCBHX0NBTExCQUNLKHRpbWVsaW5l
U3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qo
cGxhdGZvcm1MYXllciksIGtleS51dGY4KCkuZGF0YSgpLCB0aGlzKTsKKworICAgIG1fbGF5ZXIg
PSBDTFVUVEVSX0FDVE9SKHBsYXRmb3JtTGF5ZXIpOworCisgICAgY2x1dHRlcl9hY3Rvcl9hZGRf
dHJhbnNpdGlvbihtX2xheWVyLmdldCgpLCBrZXkudXRmOCgpLmRhdGEoKSwgQ0xVVFRFUl9UUkFO
U0lUSU9OKG1fYW5pbWF0aW9uLmdldCgpKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DbHV0dGVyQW5p
bWF0aW9uOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwg
Y29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgQVNTRVJUKGFuaW1hdGlvblR5cGUoKSA9PSBCYXNp
Yyk7CisKKyAgICBjbHV0dGVyX2FjdG9yX3JlbW92ZV90cmFuc2l0aW9uKENMVVRURVJfQUNUT1Io
bGF5ZXIpLCBrZXkudXRmOCgpLmRhdGEoKSk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QobGF5ZXIpLCBrZXkudXRmOCgpLmRhdGEoKSwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZvcm1DbHV0
dGVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L1BsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhNmNjZmU2ZTEzOWE0ODE1
ZDA1YTk0YmVlZTk0Mjc1M2UzNjU1NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1BsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbi5oCkBA
IC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb25faAorI2RlZmluZSBQbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb25faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJGbG9h
dFBvaW50M0QuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9D
bHV0dGVyQWN0b3IgQ2x1dHRlckFjdG9yOwordHlwZWRlZiBzdHJ1Y3QgX0NsdXR0ZXJUaW1lbGlu
ZSBDbHV0dGVyVGltZWxpbmU7Cit0eXBlZGVmIHN0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yIEdy
YXBoaWNzTGF5ZXJBY3RvcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJl
Y3Q7CitjbGFzcyBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb247CitjbGFzcyBUaW1pbmdGdW5jdGlv
bjsKKworY2xhc3MgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8
UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBBbmltYXRpb25U
eXBlIHsgQmFzaWMsIEtleWZyYW1lIH07CisgICAgZW51bSBBbmltYXRlZFByb3BlcnR5VHlwZSB7
IE5vQW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIFRyYW5zZm9ybSwgT3BhY2l0eSwgQmFja2dyb3VuZENv
bG9yIH07CisgICAgZW51bSBGaWxsTW9kZVR5cGUgeyBOb0ZpbGxNb2RlLCBGb3J3YXJkcywgQmFj
a3dhcmRzLCBCb3RoIH07CisgICAgZW51bSBWYWx1ZUZ1bmN0aW9uVHlwZSB7IE5vVmFsdWVGdW5j
dGlvbiwgUm90YXRlWCwgUm90YXRlWSwgUm90YXRlWiwgU2NhbGVYLCBTY2FsZVksIFNjYWxlWiwg
U2NhbGUsIFRyYW5zbGF0ZVgsIFRyYW5zbGF0ZVksIFRyYW5zbGF0ZVosIFRyYW5zbGF0ZSB9Owor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uPiBjcmVhdGUo
QW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24+IGNyZWF0ZShQbGF0Zm9ybUNsdXR0ZXJBbmlt
YXRpb24qKTsKKworICAgIH5QbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24oKTsKKworICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzVmFsdWVGdW5jdGlvbigpOworCisgICAgQW5pbWF0aW9uVHlwZSBhbmlt
YXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICBkb3VibGUgYmVnaW5U
aW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCZWdpblRpbWUoZG91YmxlKTsKKworICAgIGRvdWJs
ZSBkdXJhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKTsKKworICAg
IGZsb2F0IHNwZWVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTcGVlZChmbG9hdCk7CisKKyAgICBk
b3VibGUgdGltZU9mZnNldCgpIGNvbnN0OworICAgIHZvaWQgc2V0VGltZU9mZnNldChkb3VibGUp
OworCisgICAgZmxvYXQgcmVwZWF0Q291bnQoKSBjb25zdDsKKyAgICB2b2lkIHNldFJlcGVhdENv
dW50KGZsb2F0KTsKKworICAgIGJvb2wgYXV0b3JldmVyc2VzKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRBdXRvcmV2ZXJzZXMoYm9vbCk7CisKKyAgICBGaWxsTW9kZVR5cGUgZmlsbE1vZGUoKSBjb25z
dDsKKyAgICB2b2lkIHNldEZpbGxNb2RlKEZpbGxNb2RlVHlwZSk7CisKKyAgICB2b2lkIHNldFRp
bWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiwgYm9vbCByZXZlcnNlID0gZmFsc2Up
OworICAgIHZvaWQgY29weVRpbWluZ0Z1bmN0aW9uRnJvbShjb25zdCBQbGF0Zm9ybUNsdXR0ZXJB
bmltYXRpb24qKTsKKworICAgIGJvb2wgaXNSZW1vdmVkT25Db21wbGV0aW9uKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRSZW1vdmVkT25Db21wbGV0aW9uKGJvb2wpOworCisgICAgYm9vbCBpc0FkZGl0
aXZlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBZGRpdGl2ZShib29sKTsKKworICAgIFZhbHVlRnVu
Y3Rpb25UeXBlIHZhbHVlRnVuY3Rpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlRnVuY3Rp
b24oVmFsdWVGdW5jdGlvblR5cGUpOworCisgICAgLy8gQmFzaWMtYW5pbWF0aW9uIHByb3BlcnRp
ZXMuCisgICAgdm9pZCBzZXRGcm9tVmFsdWUoZmxvYXQpOworICAgIHZvaWQgc2V0RnJvbVZhbHVl
KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRGcm9t
VmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJik7CisgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKTsKKyAgICB2b2lkIGNvcHlGcm9tVmFsdWVGcm9tKGNvbnN0IFBsYXRm
b3JtQ2x1dHRlckFuaW1hdGlvbiopOworCisgICAgdm9pZCBzZXRUb1ZhbHVlKGZsb2F0KTsKKyAg
ICB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsK
KyAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJik7CisgICAgdm9pZCBzZXRU
b1ZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CisgICAgdm9pZCBjb3B5VG9WYWx1ZUZyb20o
Y29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7CisKKyAgICAvLyBLZXlmcmFtZS1hbmlt
YXRpb24gcHJvcGVydGllcy4KKyAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+
Jik7CisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4PiYpOworICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50
M0Q+Jik7CisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbG9yPiYp
OworICAgIHZvaWQgY29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9u
Kik7CisKKyAgICB2b2lkIHNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICB2
b2lkIGNvcHlLZXlUaW1lc0Zyb20oY29uc3QgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKik7CisK
KyAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9ucyhjb25zdCBWZWN0b3I8Y29uc3QgVGltaW5nRnVu
Y3Rpb24qPiYsIGJvb2wgcmV2ZXJzZSA9IGZhbHNlKTsKKyAgICB2b2lkIGNvcHlUaW1pbmdGdW5j
dGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiopOworCisgICAgdm9pZCBh
ZGRBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3Qg
U3RyaW5nJik7CisKKyAgICB2b2lkIGFuaW1hdGlvbkRpZFN0YXJ0KCk7CisKK3Byb3RlY3RlZDoK
KyAgICBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24oQW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoKTsKKyAgICBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24oY29uc3QgUGxhdGZvcm1D
bHV0dGVyQW5pbWF0aW9uKik7CisKK3ByaXZhdGU6CisgICAgQ2x1dHRlclRpbWVsaW5lKiB0aW1l
bGluZSgpIGNvbnN0OworICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIHN0cmluZ1RvQW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUoY29uc3QgU3RyaW5nJiBrZXlQYXRoKSBjb25zdDsKKworICAgIHZvaWQgYWRk
T3BhY2l0eVRyYW5zaXRpb24oKTsKKworICAgIEFuaW1hdGlvblR5cGUgbV90eXBlOworICAgIEFu
aW1hdGVkUHJvcGVydHlUeXBlIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGU7CisKKyAgICBHUmVmUHRy
PEdPYmplY3Q+IG1fYW5pbWF0aW9uOworICAgIEdSZWZQdHI8Q2x1dHRlckFjdG9yPiBtX2xheWVy
OworCisgICAgYm9vbCBtX2FkZGl0aXZlOworCisgICAgZmxvYXQgbV9mcm9tVmFsdWU7CisgICAg
ZmxvYXQgbV90b1ZhbHVlOworCisgICAgZmxvYXQgbV9yZXBlYXRDb3VudDsKKworICAgIGNvbnN0
IFRpbWluZ0Z1bmN0aW9uKiBtX3RpbWluZ0Z1bmN0aW9uOworICAgIFZhbHVlRnVuY3Rpb25UeXBl
IG1fdmFsdWVGdW5jdGlvblR5cGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZiAvLyBQbGF0Zm9ybUNBQW5pbWF0aW9uX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
CmluZGV4IDY3MGY2NDUwYzYxN2E2ZWFmMzVmM2Y4MmNiNDY4NjY4ZjM1MTljOTguLmRjMmJiNjE2
YmE5NTUyZjgxODEwODZjODMwNmRiYmE3Njc2YWYyMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtMTA3MCw3ICsx
MDcwLDcgQEAgQ2hyb21lQ2xpZW50OjpDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBDaHJvbWVDbGll
bnQ6OmFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
I2lmIFVTRShDTFVUVEVSKQogICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IENTUyAz
RCBUcmFuc2Zvcm1zLgotICAgIHJldHVybiBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyOworICAgIHJl
dHVybiBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyIHwgQW5pbWF0aW9uVHJpZ2dlcjsKICNlbHNlCiAg
ICAgcmV0dXJuIEFsbFRyaWdnZXJzOwogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>