<?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>23371</bug_id>
          
          <creation_ts>2009-01-15 17:19:09 -0800</creation_ts>
          <short_desc>Add support for hardware animations to AnimationController, when using accelerated compositing</short_desc>
          <delta_ts>2009-03-02 11:51:56 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23359</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dino</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105997</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-15 17:19:09 -0800</bug_when>
    <thetext>Bug to track changes related to support for hardware animations (transforms and opacity) when accelerated compositing is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108369</commentid>
    <comment_count>1</comment_count>
      <attachid>27335</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-02-04 16:47:01 -0800</bug_when>
    <thetext>Created attachment 27335
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108378</commentid>
    <comment_count>2</comment_count>
      <attachid>27337</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-02-04 17:37:00 -0800</bug_when>
    <thetext>Created attachment 27337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108380</commentid>
    <comment_count>3</comment_count>
      <attachid>27337</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-04 17:58:51 -0800</bug_when>
    <thetext>Comment on attachment 27337
Patch

I see the term &quot;Hardware.&quot;  Should we be using the term accelerated instead?  The #ifdef is ACCELERATED_COMPOSITING.  This doesn&apos;t bug me that much and can be changed later, so not that big a deal.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108395</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-04 22:07:57 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/40664</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27335</attachid>
            <date>2009-02-04 16:47:01 -0800</date>
            <delta_ts>2009-02-04 17:37:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>23371.patch</filename>
            <type>text/plain</type>
            <size>62228</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDY0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMDktMDItMDQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3MQorCisJQWRkZWQgaGFy
ZHdhcmUgYW5pbWF0aW9uIHN1cHBvcnQgdG8gQW5pbWF0aW9uQ29udHJvbGxlciBhbmQgZnJpZW5k
cworCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJCYXNlOjppc0hhcmR3YXJlQW5pbWF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVySFdPcGFjaXR5OjpQcm9wZXJ0eVdyYXBwZXJI
V09wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVySFdPcGFjaXR5Ojpp
c0hhcmR3YXJlQW5pbWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVySFdP
cGFjaXR5OjpibGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJIV1RyYW5z
Zm9ybTo6UHJvcGVydHlXcmFwcGVySFdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UHJv
cGVydHlXcmFwcGVySFdUcmFuc2Zvcm06OmlzSGFyZHdhcmVBbmltYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJIV1RyYW5zZm9ybTo6YmxlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5zdXJlUHJvcGVydHlNYXApOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjp+QW5p
bWF0aW9uQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpibGVuZFByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6aXNQcm9wZXJ0eUhXQW5p
bWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNo
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmZpcmVBbmltYXRpb25FdmVu
dHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjp3aWxsTmVlZFNl
cnZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6Z2V0VGltZVRvTmV4dEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmdvSW50b0VuZGluZ09yTG9v
cGluZ1N0YXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpvbkFuaW1hdGlvblN0YXJ0UmVzcG9uc2Up
OgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6Z2V0QW5pbWF0ZWRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjppc0FuaW1hdGluZ1Byb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmVuZEFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25CYXNlOjppc0ZhbGxiYWNrQW5pbWF0aW5nKToKKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbmRBbmltYXRpb25VcGRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlY2VpdmVkU3RhcnRUaW1l
UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnZXRBbmltYXRl
ZFN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnN0eWxlQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjphZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21TdGFydFRp
bWVSZXNwb25zZVdhaXRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25Db250cm9sbGVyOjpnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyOjpub3RpZnlUcmFuc2l0aW9uU3RhcnRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyOjplbmRBbmltYXRpb25V
cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkVG9TdGFy
dFRpbWVSZXNwb25zZVdhaXRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRy
b2xsZXI6OnJlbW92ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KToKKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvblByaXZhdGU6OnVwZGF0ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjphbmltYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmdldEFuaW1hdGVkU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Q
cml2YXRlOjpub3RpZnlUcmFuc2l0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVBbmltYXRpb25Qcml2YXRlOjphZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6cmVtb3ZlRnJvbVN0
YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFu
aW1hdGlvbjo6YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpub3RpZnlBbmltYXRp
b25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6bm90aWZ5
VHJhbnNpdGlvblN0YXJ0ZWQpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRG
b3JMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmVuZEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6d2lsbE5lZWRTZXJ2aWNlKToKKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOgorICAgICAgICAqIHBh
Z2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oktl
eWZyYW1lQW5pbWF0aW9uOjpnZXRLZXlmcmFtZUFuaW1hdGlvbkludGVydmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OktleWZyYW1lQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OktleWZyYW1lQW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpL
ZXlmcmFtZUFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZy
YW1lQW5pbWF0aW9uOjp3aWxsTmVlZFNlcnZpY2UpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeVRy
YW5zaXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisKIDIwMDktMDItMDQgIE1hZHMgQWRnZXIgIDxtYWRA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpJbmRl
eDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShyZXZpc2lvbiA0MDYy
NykKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJVbml0QmV6aWVyLmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlIGVwc2lsb24gdmFsdWUg
d2UgcGFzcyB0byBVbml0QmV6aWVyOjpzb2x2ZSBnaXZlbiB0aGF0IHRoZSBhbmltYXRpb24gaXMg
Z29pbmcgdG8gcnVuIG92ZXIgfGR1cnwgc2Vjb25kcy4gVGhlIGxvbmdlciB0aGUKQEAgLTE4MCw2
ICsxODQsMTAgQEAgcHVibGljOgogCiAgICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wOyB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVh
bCBib29sIGlzSGFyZHdhcmVBbmltYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5k
aWYKKwogcHJpdmF0ZToKICAgICBpbnQgbV9wcm9wOwogfTsKQEAgLTIyNiw2ICsyMzQsNDEgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQpOwogfTsKIAor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK2NsYXNzIFByb3BlcnR5V3JhcHBlckhX
T3BhY2l0eSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+IHsKK3B1YmxpYzoKKyAgICBQ
cm9wZXJ0eVdyYXBwZXJIV09wYWNpdHkoKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZSZW5kZXJTdHls
ZTo6c2V0T3BhY2l0eSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGlzSGFyZHdh
cmVBbmltYXRlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBi
bGVuZChjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3QKKyAgICB7CisgICAgICAgIGZsb2F0IGZyb21PcGFjaXR5ID0gYS0+b3BhY2l0eSgpOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBtYWtlcyBzdXJlIHdlIHB1dCB0aGUgb2JqZWN0IGJlaW5n
IGFuaW1hdGVkIGludG8gYSBSZW5kZXJMYXllciBkdXJpbmcgdGhlIGFuaW1hdGlvbgorICAgICAg
ICBkc3QtPnNldE9wYWNpdHkoYmxlbmRGdW5jKGFuaW0sIChmcm9tT3BhY2l0eSA9PSAxKSA/IDAu
OTk5OTk5ZiA6IGZyb21PcGFjaXR5LCBiLT5vcGFjaXR5KCksIHByb2dyZXNzKSk7CisgICAgfQor
fTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVySFdUcmFuc2Zvcm0gOiBwdWJsaWMgUHJvcGVydHlX
cmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPiB7CitwdWJsaWM6CisgICAgUHJvcGVy
dHlXcmFwcGVySFdUcmFuc2Zvcm0oKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sICZSZW5kZXJT
dHlsZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0hhcmR3YXJlQW5pbWF0ZWQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQW5pbWF0aW9uQmFz
ZSogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CisgICAgeworICAgICAgICBkc3Qt
PnNldFRyYW5zZm9ybShibGVuZEZ1bmMoYW5pbSwgYS0+dHJhbnNmb3JtKCksIGItPnRyYW5zZm9y
bSgpLCBwcm9ncmVzcykpOworICAgIH0KK307CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCiBjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFNoYWRvd0RhdGEqPiB7CiBwdWJsaWM6CiAgICAgUHJvcGVydHlXcmFw
cGVyU2hhZG93KGludCBwcm9wLCBTaGFkb3dEYXRhKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShTaGFkb3dEYXRhKiwgYm9vbCkpCkBA
IC0zNjgsNyArNDExLDYgQEAgc3RhdGljIHZvaWQgZW5zdXJlUHJvcGVydHlNYXAoKQogICAgICAg
ICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihD
U1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nUmlnaHQsICZSZW5k
ZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ1RvcCwg
JlJlbmRlclN0eWxlOjpwYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdUb3ApKTsK
ICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExl
bmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdCb3R0
b20sICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0JvdHRvbSkpOwotICAgICAgICBnUHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3Bh
Y2l0eSwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldE9wYWNpdHkpKTsK
ICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNv
bnN0IENvbG9yJj4oQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRDb2xvcikpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5l
dyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgQ29sb3ImPihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
ciwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0QmFja2dy
b3VuZENvbG9yKSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Zm9udFNp
emUsICZSZW5kZXJTdHlsZTo6c2V0QmxlbmRlZEZvbnRTaXplKSk7CkBAIC0zODQsNyArNDI2LDYg
QEAgc3RhdGljIHZvaWQgZW5zdXJlUHJvcGVydHlNYXAoKQogICAgICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3Bl
cnR5T3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxl
OjpzZXRPdXRsaW5lV2lkdGgpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZykpOwog
ICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50
PihDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6OnNldFdvcmRTcGFjaW5nKSk7Ci0gICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtLCAmUmVuZGVy
U3R5bGU6OnNldFRyYW5zZm9ybSkpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9y
aWdpblgsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRU
cmFuc2Zvcm1PcmlnaW5YKSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2lu
WSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5z
Zm9ybU9yaWdpblkpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyPGNvbnN0IEludFNpemUmPihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRvcExl
ZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxl
OjpzZXRCb3JkZXJUb3BMZWZ0UmFkaXVzKSk7CkBAIC0zOTMsNiArNDM0LDE1IEBAIHN0YXRpYyB2
b2lkIGVuc3VyZVByb3BlcnR5TWFwKCkKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IEludFNpemUmPihDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKSk7CiAgICAgICAg
IGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxFVmlzaWJpbGl0
eT4oQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaWJpbGl0eSkpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Wm9vbSwgJlJlbmRlclN0
eWxlOjp6b29tLCAmUmVuZGVyU3R5bGU6OnNldFpvb20pKTsKKyAgICAgICAgCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXJIV09wYWNpdHkoKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBw
ZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckhXVHJhbnNmb3JtKCkpOworI2Vsc2UKKyAg
ICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJTdHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxl
OjpzZXRPcGFjaXR5KSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRy
YW5zZm9ybSkpOworI2VuZGlmCisKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldENvbHVtblJ1bGVDb2xvcikpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0VGV4dFN0cm9rZUNvbG9yKSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0
VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFRleHRGaWxsQ29sb3IpKTsKQEAgLTUwNywxMyArNTU3LDEzIEBAIHN0YXRpYyBQcm9wZXJ0
eVdyYXBwZXJCYXNlKiB3cmFwcGVyRm9yUHIKIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2Uo
Y29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21w
b3NpdGVBbmltYXRpb24qIGNvbXBBbmltKQogICAgIDogbV9hbmltU3RhdGUoQW5pbWF0aW9uU3Rh
dGVOZXcpCiAgICAgLCBtX2lzQW5pbWF0aW5nKGZhbHNlKQotICAgICwgbV93YWl0ZWRGb3JSZXNw
b25zZShmYWxzZSkKICAgICAsIG1fc3RhcnRUaW1lKDApCiAgICAgLCBtX3BhdXNlVGltZSgtMSkK
ICAgICAsIG1fcmVxdWVzdGVkU3RhcnRUaW1lKDApCiAgICAgLCBtX29iamVjdChyZW5kZXJlcikK
ICAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4odHJhbnNpdGlvbikpCiAg
ICAgLCBtX2NvbXBBbmltKGNvbXBBbmltKQorICAgICwgbV9mYWxsYmFja0FuaW1hdGluZyhmYWxz
ZSkKICAgICAsIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQoZmFsc2UpCiAgICAgLCBtX25l
eHRJdGVyYXRpb25EdXJhdGlvbigtMSkKICAgICAsIG1fbmV4dCgwKQpAQCAtNTI2LDggKzU3Niw4
IEBAIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWEKIAogQW5pbWF0aW9u
QmFzZTo6fkFuaW1hdGlvbkJhc2UoKQogewotICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZVN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICBtX2NvbXBBbmltLT5yZW1v
dmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdCh0aGlzKTsKKyAgICBtX2NvbXBBbmltLT5yZW1v
dmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdCh0aGlzKTsKKyAgICBtX2NvbXBBbmltLT5yZW1v
dmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCh0aGlzKTsKIH0KIAogYm9vbCBBbmltYXRp
b25CYXNlOjpwcm9wZXJ0aWVzRXF1YWwoaW50IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikKQEAgLTU3NSwxMiArNjI1LDI5IEBAIGJvb2wgQW5pbWF0aW9u
QmFzZTo6YmxlbmRQcm9wZXJ0aWVzKGNvbnMKICAgICBQcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFw
cGVyID0gd3JhcHBlckZvclByb3BlcnR5KHByb3ApOwogICAgIGlmICh3cmFwcGVyKSB7CiAgICAg
ICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgcmV0dXJuICF3cmFwcGVyLT5pc0hhcmR3
YXJlQW5pbWF0ZWQoKTsKKyNlbHNlCiAgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCiAgICAg
fQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorYm9vbCBBbmltYXRpb25CYXNlOjppc1Byb3BlcnR5SFdBbmltYXRlZChpbnQgcHJvcCkK
K3sKKyAgICBlbnN1cmVQcm9wZXJ0eU1hcCgpOworICAgIGludCBwcm9wSW5kZXggPSBwcm9wIC0g
Zmlyc3RDU1NQcm9wZXJ0eTsKKyAgICBpZiAocHJvcEluZGV4IDwgMCB8fCBwcm9wSW5kZXggPj0g
bnVtQ1NTUHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBp
bnQgaSA9IGdQcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcEluZGV4XTsKKyAgICByZXR1cm4gKGkgPj0g
MCkgPyAoKmdQcm9wZXJ0eVdyYXBwZXJzKVtpXS0+aXNIYXJkd2FyZUFuaW1hdGVkKCkgOiBmYWxz
ZTsKK30KKyNlbmRpZgorCiB2b2lkIEFuaW1hdGlvbkJhc2U6OnNldENoYW5nZWQoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQoIW5vZGUgfHwgKG5vZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUtPmRv
Y3VtZW50KCktPmluUGFnZUNhY2hlKCkpKTsKQEAgLTYxNCw3ICs2ODEsNiBAQCB2b2lkIEFuaW1h
dGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBCiAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7
CiAgICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gMDsKICAgICAgICAgbV9uZXh0SXRlcmF0
aW9uRHVyYXRpb24gPSAtMTsKLSAgICAgICAgbV93YWl0ZWRGb3JSZXNwb25zZSA9IGZhbHNlOwog
ICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NjY1LDcgKzczMSw2IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEEK
ICAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZU5ldzoKICAgICAgICAgICAgIEFTU0VSVChpbnB1
dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0U3RhcnRBbmltYXRpb24gfHwgaW5wdXQgPT0gQW5pbWF0
aW9uU3RhdGVJbnB1dFBsYXlTdGF0ZVJ1bm5uaW5nIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRl
SW5wdXRQbGF5U3RhdGVQYXVzZWQpOwogICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlv
blN0YXRlSW5wdXRTdGFydEFuaW1hdGlvbiB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0
UGxheVN0YXRlUnVubm5pbmcpIHsKLSAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNl
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPSBiZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWUoKTsKICAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1h
dGlvblN0YXRlU3RhcnRXYWl0VGltZXI7CiAgICAgICAgICAgICB9CkBAIC03MDEsMTIgKzc2Niwx
OCBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBCiAgICAgICAgICAg
ICBvbkFuaW1hdGlvblN0YXJ0KDApOyAvLyBUaGUgZWxhcHNlZFRpbWUgaXMgYWx3YXlzIDAgaGVy
ZQogCiAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICBpZiAo
b3ZlcnJpZGRlbigpIHx8ICFzdGFydEFuaW1hdGlvbigwKSkgewotICAgICAgICAgICAgICAgIC8v
IFdlJ3JlIG5vdCBnb2luZyB0byBnZXQgYSBzdGFydFRpbWUgY2FsbGJhY2ssIHNvIGZpcmUgdGhl
IHN0YXJ0IHRpbWUgaGVyZQorICAgICAgICAgICAgaWYgKG92ZXJyaWRkZW4oKSkgeworICAgICAg
ICAgICAgICAgIC8vIFdlIHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmltYXRpb25z
IGlmIHdlIGFyZSBvdmVycmlkZGVuIGFuZAorICAgICAgICAgICAgICAgIC8vIGp1c3QgbW92ZSBv
biB0byB0aGUgbmV4dCBzdGF0ZS4KICAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1h
dGlvblN0YXRlU3RhcnRXYWl0UmVzcG9uc2U7CisgICAgICAgICAgICAgICAgbV9mYWxsYmFja0Fu
aW1hdGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1h
dGlvblN0YXRlSW5wdXRTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsK
LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fd2FpdGVkRm9yUmVzcG9uc2Ug
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24oMCk7CisgICAgICAgICAgICAgICAgbV9j
b21wQW5pbS0+YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KHRoaXMsIHN0YXJ0ZWQpOwor
ICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tBbmltYXRpbmcgPSAhc3RhcnRlZDsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlU3Rh
cnRXYWl0UmVzcG9uc2U6CiAgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dFN0YXJ0VGltZVNldCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0UGxheVN0
YXRlUGF1c2VkKTsKQEAgLTc4OSw4ICs4NjAsMTkgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRh
dGVTdGF0ZU1hY2hpbmUoQQogICAgICAgICAgICAgLy8gQW5pbWF0aW9uU3RhdGVQYXVzZWRXYWl0
UmVzcG9uc2UsIHdlIGRvbid0IHlldCBoYXZlIGEgdmFsaWQgc3RhcnRUaW1lLCBzbyB3ZSBzZW5k
IDAgdG8gc3RhcnRBbmltYXRpb24uCiAgICAgICAgICAgICAvLyBXaGVuIHRoZSBBbmltYXRpb25T
dGF0ZUlucHV0U3RhcnRUaW1lU2V0IGNvbWVzIGluIGFuZCB3ZSB3ZXJlIGluIEFuaW1hdGlvblN0
YXRlUGF1c2VkUnVuLCB3ZSB3aWxsIG5vdGljZQogICAgICAgICAgICAgLy8gdGhhdCB3ZSBoYXZl
IGFscmVhZHkgc2V0IHRoZSBzdGFydFRpbWUgYW5kIHdpbGwgaWdub3JlIGl0LgotICAgICAgICAg
ICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRQbGF5U3RhdGVSdW5ubmluZyk7
CisgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dFBsYXlTdGF0
ZVJ1bm5uaW5nIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRTdGFydFRpbWVTZXQpOwog
ICAgICAgICAgICAgQVNTRVJUKHBhdXNlZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gSWYgd2UgYXJlIHBhdXNlZCwgYnV0IHdlIGdldCB0aGUgY2FsbGJhY2sgdGhhdCBub3RpZmll
cyB1cyB0aGF0IGFuIGFjY2VsZXJhdGVkIGFuaW1hdGlvbiBzdGFydGVkLAorICAgICAgICAgICAg
Ly8gdGhlbiB3ZSBpZ25vcmUgdGhlIHN0YXJ0IHRpbWUgYW5kIGp1c3QgbW92ZSBpbnRvIHRoZSBw
YXVzZWQtcnVuIHN0YXRlLgorICAgICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IEFuaW1hdGlv
blN0YXRlUGF1c2VkV2FpdFJlc3BvbnNlICYmIGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRT
dGFydFRpbWVTZXQpIHsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0
YXRlUGF1c2VkUnVuOworICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXJ0VGltZSA9PSAwKTsK
KyAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IHBhcmFtOworICAgICAgICAgICAgICAgIG1f
cGF1c2VUaW1lICs9IG1fc3RhcnRUaW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpbWVzCiAg
ICAgICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGVQYXVzZWRSdW4pCiAg
ICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgKz0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkg
LSBtX3BhdXNlVGltZTsKQEAgLTgwMiwxMSArODg0LDE3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6
dXBkYXRlU3RhdGVNYWNoaW5lKEEKICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gQW5pbWF0aW9u
U3RhdGVTdGFydFdhaXRSZXNwb25zZTsKIAogICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGFuaW1h
dGlvbgotICAgICAgICAgICAgaWYgKG92ZXJyaWRkZW4oKSB8fCAhc3RhcnRBbmltYXRpb24obV9z
dGFydFRpbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIGdldCBh
IHN0YXJ0VGltZSBjYWxsYmFjaywgc28gZmlyZSB0aGUgc3RhcnQgdGltZSBoZXJlCisgICAgICAg
ICAgICBpZiAob3ZlcnJpZGRlbigpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3QgdHJ5
IHRvIHN0YXJ0IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgaWYgd2UgYXJlIG92ZXJyaWRkZW4gYW5k
CisgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlLgogICAg
ICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0U3RhcnRU
aW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBtX2ZhbGxiYWNrQW5pbWF0aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9u
KDApOworICAgICAgICAgICAgICAgIG1fY29tcEFuaW0tPmFkZFRvU3RhcnRUaW1lUmVzcG9uc2VX
YWl0TGlzdCh0aGlzLCBzdGFydGVkKTsKKyAgICAgICAgICAgICAgICBtX2ZhbGxiYWNrQW5pbWF0
aW5nID0gIXN0YXJ0ZWQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBbmltYXRpb25TdGF0ZURvbmU6CiAgICAgICAgICAgICAvLyBXZSdyZSBkb25lLiBT
dGF5IGluIHRoaXMgc3RhdGUgdW50aWwgd2UgYXJlIGRlbGV0ZWQKQEAgLTgzNSw3ICs5MjMsMTAg
QEAgdm9pZCBBbmltYXRpb25CYXNlOjpmaXJlQW5pbWF0aW9uRXZlbnRzSQogICAgIH0KICAgICAK
ICAgICBkb3VibGUgZWxhcHNlZER1cmF0aW9uID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkg
LSBtX3N0YXJ0VGltZTsKLSAgICBBU1NFUlQoZWxhcHNlZER1cmF0aW9uID49IDApOworICAgIC8v
IEZJWE1FOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGVsYXBzZWREdXJhdGlvbiBpcyBuZXZlciA8
IDAuIElmIGl0IGlzLCB0aGlzIHN1Z2dlc3RzIHRoYXQKKyAgICAvLyB3ZSBoYWQgYSByZWNhbGNT
dHlsZSgpIG91dHNpZGUgb2YgYmVnaW5BbmltYXRpb25VcGRhdGUoKS9lbmRBbmltYXRpb25VcGRh
dGUoKS4KKyAgICAvLyBBbHNvIGNoZWNrIGluIGdldFRpbWVUb05leHRFdmVudCgpLgorICAgIGVs
YXBzZWREdXJhdGlvbiA9IG1heChlbGFwc2VkRHVyYXRpb24sIDAuMCk7CiAgICAgCiAgICAgLy8g
Q2hlY2sgZm9yIGVuZCB0aW1lb3V0CiAgICAgaWYgKG1fdG90YWxEdXJhdGlvbiA+PSAwICYmIGVs
YXBzZWREdXJhdGlvbiA+PSBtX3RvdGFsRHVyYXRpb24pIHsKQEAgLTg2OCw3ICs5NTksNyBAQCB2
b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVBsYXlTdGF0ZShib29sCiAgICAgICAgIHVwZGF0ZVN0
YXRlTWFjaGluZShydW4gPyBBbmltYXRpb25TdGF0ZUlucHV0UGxheVN0YXRlUnVubm5pbmcgOiBB
bmltYXRpb25TdGF0ZUlucHV0UGxheVN0YXRlUGF1c2VkLCAtMSk7CiB9CiAKLWRvdWJsZSBBbmlt
YXRpb25CYXNlOjp3aWxsTmVlZFNlcnZpY2UoKSBjb25zdAorZG91YmxlIEFuaW1hdGlvbkJhc2U6
OndpbGxOZWVkU2VydmljZSgpCiB7CiAgICAgLy8gUmV0dXJucyB0aGUgdGltZSBhdCB3aGljaCBu
ZXh0IHNlcnZpY2UgaXMgcmVxdWlyZWQuIC0xIG1lYW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQu
IDAgbWVhbnMgCiAgICAgLy8gc2VydmljZSBpcyByZXF1aXJlZCBub3csIGFuZCA+IDAgbWVhbnMg
c2VydmljZSBpcyByZXF1aXJlZCB0aGF0IG1hbnkgc2Vjb25kcyBpbiB0aGUgZnV0dXJlLgpAQCAt
ODgwLDYgKzk3MSw4IEBAIGRvdWJsZSBBbmltYXRpb25CYXNlOjp3aWxsTmVlZFNlcnZpY2UoKSAK
ICAgICAgICAgcmV0dXJuIChmbG9hdCkgKCh0aW1lRnJvbU5vdyA+IDApID8gdGltZUZyb21Ob3cg
OiAwKTsKICAgICB9CiAgICAgCisgICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7Cisg
ICAgICAgIAogICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcywgd2UgbmVlZCBzZXJ2aWNlIHJpZ2h0
IGF3YXkuCiAgICAgcmV0dXJuIDA7CiB9CkBAIC05MjYsMzEgKzEwMTksNDAgQEAgZG91YmxlIEFu
aW1hdGlvbkJhc2U6OnByb2dyZXNzKGRvdWJsZSBzYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgQW5pbWF0aW9uQmFzZTo6Z29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKQordm9pZCBB
bmltYXRpb25CYXNlOjpnZXRUaW1lVG9OZXh0RXZlbnQoZG91YmxlJiB0aW1lLCBib29sJiBpc0xv
b3BpbmcpIGNvbnN0CiB7CiAgICAgLy8gRGVjaWRlIHdoZW4gdGhlIGVuZCBvciBsb29wIGV2ZW50
IG5lZWRzIHRvIGZpcmUKICAgICBkb3VibGUgdG90YWxEdXJhdGlvbiA9IC0xOwogICAgIGlmICht
X2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCiAgICAgICAgIHRvdGFsRHVyYXRpb24g
PSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
OwogCi0gICAgY29uc3QgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGJlZ2luQW5pbWF0aW9uVXBk
YXRlVGltZSgpIC0gbV9zdGFydFRpbWU7Ci0gICAgQVNTRVJUKGVsYXBzZWREdXJhdGlvbiA+PSAw
KTsKKyAgICBjb25zdCBkb3VibGUgZWxhcHNlZER1cmF0aW9uID0gbWF4KGJlZ2luQW5pbWF0aW9u
VXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUsIDAuMCk7CiAgICAgZG91YmxlIGR1cmF0aW9uTGVm
dCA9IDA7Ci0gICAgZG91YmxlIG5leHRJdGVyYXRpb25UaW1lID0gdG90YWxEdXJhdGlvbjsKKyAg
ICBkb3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSBtX3RvdGFsRHVyYXRpb247CiAKLSAgICBpZiAo
dG90YWxEdXJhdGlvbiA8IDAgfHwgZWxhcHNlZER1cmF0aW9uIDwgdG90YWxEdXJhdGlvbikgewor
ICAgIGlmIChtX3RvdGFsRHVyYXRpb24gPCAwIHx8IGVsYXBzZWREdXJhdGlvbiA8IG1fdG90YWxE
dXJhdGlvbikgewogICAgICAgICBkdXJhdGlvbkxlZnQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KSAtIGZtb2QoZWxhcHNlZER1cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CiAgICAg
ICAgIG5leHRJdGVyYXRpb25UaW1lID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0Owog
ICAgIH0KLQotICAgIGlmICh0b3RhbER1cmF0aW9uIDwgMCB8fCBuZXh0SXRlcmF0aW9uVGltZSA8
IHRvdGFsRHVyYXRpb24pIHsKKyAgICAKKyAgICBpZiAobV90b3RhbER1cmF0aW9uIDwgMCB8fCBu
ZXh0SXRlcmF0aW9uVGltZSA8IG1fdG90YWxEdXJhdGlvbikgewogICAgICAgICAvLyBXZSBhcmUg
bm90IGF0IHRoZSBlbmQgeWV0CiAgICAgICAgIEFTU0VSVChuZXh0SXRlcmF0aW9uVGltZSA+IDAp
OwotICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlTG9vcGluZzsKKyAgICAgICAg
aXNMb29waW5nID0gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBhcmUgYXQgdGhl
IGVuZAotICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlRW5kaW5nOworICAgICAg
ICBpc0xvb3BpbmcgPSBmYWxzZTsKICAgICB9CisgICAgCisgICAgdGltZSA9IGR1cmF0aW9uTGVm
dDsKK30KKwordm9pZCBBbmltYXRpb25CYXNlOjpnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0ZSgp
Cit7CisgICAgZG91YmxlIHQ7CisgICAgYm9vbCBpc0xvb3Bpbmc7CisgICAgZ2V0VGltZVRvTmV4
dEV2ZW50KHQsIGlzTG9vcGluZyk7CisgICAgbV9hbmltU3RhdGUgPSBpc0xvb3BpbmcgPyBBbmlt
YXRpb25TdGF0ZUxvb3BpbmcgOiBBbmltYXRpb25TdGF0ZUVuZGluZzsKIH0KICAgCiB2b2lkIEFu
aW1hdGlvbkJhc2U6OnBhdXNlQXRUaW1lKGRvdWJsZSB0KQpJbmRleDogV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmgJKHJldmlzaW9uIDQwNjI3KQorKysgV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltU3RhdGVJbnB1dCwgZG91
YmxlIHBhcmFtKTsKIAogICAgIC8vIEFuaW1hdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQg
cGFzc2VkIHRpbWUKLSAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZShkb3VibGUgc3Rh
cnRUaW1lKTsKKyAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZShkb3VibGUgc3RhcnRU
aW1lKQorICAgIHsKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvblN0YXRlSW5wdXRTdGFydFRpbWVTZXQsIHN0YXJ0VGltZSk7CisgICAgfQogCiAgICAg
Ly8gQ2FsbGVkIHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNlZCBzdGF0ZQogICAgIHZvaWQgdXBk
YXRlUGxheVN0YXRlKGJvb2wgcnVubmluZyk7CkBAIC0xMTcsMTIgKzEyMCwxMyBAQCBwdWJsaWM6
CiAgICAgLy8gImFuaW1hdGluZyIgbWVhbnMgdGhhdCBzb21ldGhpbmcgaXMgcnVubmluZyB0aGF0
IHJlcXVpcmVzIGEgdGltZXIgdG8ga2VlcCBmaXJpbmcKICAgICAvLyAoZS5nLiBhIHNvZnR3YXJl
IGFuaW1hdGlvbikKICAgICB2b2lkIHNldEFuaW1hdGluZyhib29sIGluQW5pbWF0aW5nID0gdHJ1
ZSkgeyBtX2lzQW5pbWF0aW5nID0gaW5BbmltYXRpbmc7IH0KLSAgICBkb3VibGUgd2lsbE5lZWRT
ZXJ2aWNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBkb3VibGUgd2lsbE5lZWRTZXJ2aWNlKCk7CiAK
ICAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0LCBjb25zdCBU
aW1pbmdGdW5jdGlvbiopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9z
aXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIC8qY3VycmVu
dFN0eWxlKi8sIAogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBS
ZWZQdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgeyB9CisgICAgdmlydHVhbCB2
b2lkIGdldEFuaW1hdGVkU3R5bGUoUmVmUHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxl
Ki8pIHsgfQogCiAgICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCkBAIC0xNDIsNiArMTQ2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBhZmZlY3RzUHJvcGVydHkoaW50IC8qcHJvcGVydHkqLykgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5LCBib29sIGlz
UnVubmluZ05vdykgY29uc3QKICAgICB7CisgICAgICAgIGlmIChtX2ZhbGxiYWNrQW5pbWF0aW5n
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCiAgICAgICAgIGlmIChp
c1J1bm5pbmdOb3cpCiAgICAgICAgICAgICByZXR1cm4gKCF3YWl0aW5nVG9TdGFydCgpICYmICFw
b3N0QWN0aXZlKCkpICYmIGFmZmVjdHNQcm9wZXJ0eShwcm9wZXJ0eSk7CiAKQEAgLTE3NiwyMyAr
MTgzLDMwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25JdGVyYXRp
b24oZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0
aW9uRW5kKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQogICAgIHZpcnR1YWwgYm9vbCBzdGFy
dEFuaW1hdGlvbihkb3VibGUgLypiZWdpblRpbWUqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgLypyZXNldCovKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgLypyZXNldCovLCBkb3VibGUgLypmb3JjZVBhdXNlVGlt
ZSovID0gLTEpIHsgfQogCiAgICAgdm9pZCBnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0ZSgpOwog
CisgICAgYm9vbCBpc0ZhbGxiYWNrQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9mYWxsYmFj
a0FuaW1hdGluZzsgfQorCiAgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKGludCBwcm9w
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOwogICAgIHN0YXRp
YyBpbnQgZ2V0UHJvcGVydHlBdEluZGV4KGludCwgYm9vbCYgaXNTaG9ydGhhbmQpOwogICAgIHN0
YXRpYyBpbnQgZ2V0TnVtUHJvcGVydGllcygpOwogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgd2Ug
bmVlZCB0byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCiAgICAgc3RhdGljIGJvb2wg
YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGludCBwcm9wLCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcyk7Ci0gICAgCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUhXQW5pbWF0ZWQoaW50IHByb3ApOworI2Vu
ZGlmCisKICAgICBzdGF0aWMgdm9pZCBzZXRDaGFuZ2VkKE5vZGUqKTsKKyAgICAKKyAgICB2b2lk
IGdldFRpbWVUb05leHRFdmVudChkb3VibGUmIHRpbWUsIGJvb2wmIGlzTG9vcGluZykgY29uc3Q7
CiAKICAgICBBbmltU3RhdGUgbV9hbmltU3RhdGU7CiAKICAgICBib29sIG1faXNBbmltYXRpbmc7
ICAgICAgIC8vIHRyYW5zaXRpb24vYW5pbWF0aW9uIHJlcXVpcmVzIGNvbnRpbnVhbCB0aW1lciBm
aXJpbmcKLSAgICBib29sIG1fd2FpdGVkRm9yUmVzcG9uc2U7CiAgICAgZG91YmxlIG1fc3RhcnRU
aW1lOwogICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKICAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFy
dFRpbWU7CkBAIC0yMDAsNiArMjE0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVmUHRyPEFuaW1h
dGlvbj4gbV9hbmltYXRpb247CiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBtX2NvbXBBbmltOwor
ICAgIGJvb2wgbV9mYWxsYmFja0FuaW1hdGluZzsgICAgICAgLy8gdHJ1ZSBpZiBhbnkgYW5pbWF0
aW9uIHJldHVybmVkIGZhbHNlIGZyb20gc3RhcnRBbmltYXRpb24oKQogICAgIGJvb2wgbV90cmFu
c2Zvcm1GdW5jdGlvbkxpc3RWYWxpZDsKICAgICBkb3VibGUgbV90b3RhbER1cmF0aW9uLCBtX25l
eHRJdGVyYXRpb25EdXJhdGlvbjsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNDA2MjcpCisrKyBXZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MiwxNCArNjIsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoRG9j
dW1lbnQqKTsKICAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqKTsKIAotICAgIHZv
aWQgc3R5bGVBdmFpbGFibGUoKTsKLQogICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVu
ZGVyZXIoUmVuZGVyT2JqZWN0KiwgaW50IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05vdykgY29u
c3Q7CiAKICAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgZG91YmxlIHQpOwogICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1l
KFJlbmRlck9iamVjdCosIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsKICAgICB1
bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdDsKIAorICAgIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKTsKKwogICAgIGRvdWJsZSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKQogICAg
IHsKICAgICAgICAgaWYgKG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID09IGNCZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWVOb3RTZXQpCkBAIC03OCwxMSArNzgsMjkgQEAgcHVibGljOgogICAgIH0K
ICAgICAKICAgICB2b2lkIHNldEJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZShkb3VibGUgdCkgeyBt
X2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSA9IHQ7IH0KKyAgICB2b2lkIGVuZEFuaW1hdGlvblVw
ZGF0ZSgpCisgICAgeworICAgICAgICBzdHlsZUF2YWlsYWJsZSgpOworICAgICAgICBpZiAoIW1f
d2FpdGluZ0ZvckFSZXNwb25zZSkKKyAgICAgICAgICAgIHN0YXJ0VGltZVJlc3BvbnNlKGJlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZWNlaXZlZFN0
YXJ0VGltZVJlc3BvbnNlKGRvdWJsZSB0KQorICAgIHsKKyAgICAgICAgbV93YWl0aW5nRm9yQVJl
c3BvbnNlID0gZmFsc2U7CisgICAgICAgIHN0YXJ0VGltZVJlc3BvbnNlKHQpOworICAgIH0KICAg
ICAKICAgICB2b2lkIGFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25CYXNlKik7
CiAgICAgdm9pZCByZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25CYXNl
Kik7ICAgIAogICAgIAorICAgIHZvaWQgYWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFu
aW1hdGlvbkJhc2UqLCBib29sIHdpbGxHZXRBUmVzcG9uc2UpOworICAgIHZvaWQgcmVtb3ZlRnJv
bVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSopOyAgICAKKyAgICB2b2lk
IHN0YXJ0VGltZVJlc3BvbnNlKGRvdWJsZSB0KTsKKyAgICAKIHByaXZhdGU6CisgICAgdm9pZCBz
dHlsZUF2YWlsYWJsZSgpOworCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIFJl
ZlB0cjxDb21wb3NpdGVBbmltYXRpb24+ID4gUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOwogCiAg
ICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwIG1fY29tcG9zaXRlQW5pbWF0aW9uczsKQEAgLTEw
NCw2ICsxMjIsMTAgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9iZWdpbkFuaW1hdGlvblVwZGF0
ZVRpbWU7CiAgICAgQW5pbWF0aW9uQmFzZSogbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnM7CiAgICAg
QW5pbWF0aW9uQmFzZSogbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0ZXI7CisgICAgCisgICAgQW5p
bWF0aW9uQmFzZSogbV9yZXNwb25zZVdhaXRlcnM7CisgICAgQW5pbWF0aW9uQmFzZSogbV9sYXN0
UmVzcG9uc2VXYWl0ZXI7CisgICAgYm9vbCBtX3dhaXRpbmdGb3JBUmVzcG9uc2U7CiB9OwogCiBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJh
bWUqIGZyYW1lKQpAQCAtMTEzLDYgKzEzNSw5IEBAIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpBbmltYXRpb25Db24KICAgICAsIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKGNCZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWVOb3RTZXQpCiAgICAgLCBtX3N0eWxlQXZhaWxhYmxlV2FpdGVycygw
KQogICAgICwgbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0ZXIoMCkKKyAgICAsIG1fcmVzcG9uc2VX
YWl0ZXJzKDApCisgICAgLCBtX2xhc3RSZXNwb25zZVdhaXRlcigwKQorICAgICwgbV93YWl0aW5n
Rm9yQVJlc3BvbnNlKGZhbHNlKQogewogfQogCkBAIC0yOTQsNiArMzE5LDcgQEAgYm9vbCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbgogCiAgICAgaWYgKGNvbXBBbmltLT5wYXVz
ZUFuaW1hdGlvbkF0VGltZShuYW1lLCB0KSkgewogICAgICAgICByZW5kZXJlci0+bm9kZSgpLT5z
ZXRDaGFuZ2VkKEFuaW1hdGlvblN0eWxlQ2hhbmdlKTsKKyAgICAgICAgc3RhcnRVcGRhdGVSZW5k
ZXJpbmdEaXNwYXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzEx
LDEyICszMzcsMjMgQEAgYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VUcgog
CiAgICAgaWYgKGNvbXBBbmltLT5wYXVzZVRyYW5zaXRpb25BdFRpbWUoY3NzUHJvcGVydHlJRChw
cm9wZXJ0eSksIHQpKSB7CiAgICAgICAgIHJlbmRlcmVyLT5ub2RlKCktPnNldENoYW5nZWQoQW5p
bWF0aW9uU3R5bGVDaGFuZ2UpOworICAgICAgICBzdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNo
ZXIoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7Cisg
ICAgLy8gTWFrZSBzdXJlIGFuaW1hdGlvblVwZGF0ZVRpbWUgaXMgdXBkYXRlZCwgc28gdGhhdCBp
dCBpcyBjdXJyZW50IGV2ZW4gaWYgbm8KKyAgICAvLyBzdHlsZUNoYW5nZSBoYXMgaGFwcGVuZWQg
KGUuZy4gaGFyZHdhcmUgYW5pbWF0aW9ucykKKyAgICBzZXRCZWdpbkFuaW1hdGlvblVwZGF0ZVRp
bWUoY0JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZU5vdFNldCk7CisKKyAgICBSZWZQdHI8Q29tcG9z
aXRlQW5pbWF0aW9uPiByZW5kZXJlckFuaW1hdGlvbnMgPSBhY2Nlc3NDb21wb3NpdGVBbmltYXRp
b24ocmVuZGVyZXIpOworICAgIHJldHVybiByZW5kZXJlckFuaW1hdGlvbnMtPmdldEFuaW1hdGVk
U3R5bGUoKTsKK30KKwogdW5zaWduZWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpA
QCAtMzY0LDEzICs0MDEsODIgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVt
b3ZlRgogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUoKQog
ewogICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJzIGFuZCBzZW5kIHRoZW0gb24gdGhl
aXIgd2F5Ci0gICAgZm9yIChBbmltYXRpb25CYXNlKiBhbmltYXRpb24gPSBtX3N0eWxlQXZhaWxh
YmxlV2FpdGVyczsgYW5pbWF0aW9uOyBhbmltYXRpb24gPSBhbmltYXRpb24tPm5leHQoKSkKKyAg
ICBmb3IgKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiA9IG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJz
OyBhbmltYXRpb247ICkgeworICAgICAgICBBbmltYXRpb25CYXNlKiBuZXh0QW5pbWF0aW9uID0g
YW5pbWF0aW9uLT5uZXh0KCk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0TmV4dCgwKTsKICAgICAg
ICAgYW5pbWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOworICAgICAgICBhbmltYXRpb24gPSBuZXh0
QW5pbWF0aW9uOworICAgIH0KICAgICAKICAgICBtX3N0eWxlQXZhaWxhYmxlV2FpdGVycyA9IDA7
CiAgICAgbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0ZXIgPSAwOwogfQogCit2b2lkIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0
aW9uQmFzZSogYW5pbWF0aW9uLCBib29sIHdpbGxHZXRBUmVzcG9uc2UpCit7CisgICAgLy8gSWYg
d2lsbEdldEFSZXNwb25zZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlvbiBpcyBhY3R1
YWxseSB3YWl0aW5nIGZvciBhIHJlc3BvbnNlCisgICAgLy8gKHdoaWNoIHdpbGwgY29tZSBpbiBh
cyBhIGNhbGwgdG8gbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpIG9yIG5vdGlmeVRyYW5zaXRpb25T
dGFydGVkKCkpLgorICAgIC8vIEluIHRoYXQgY2FzZSB3ZSBkb24ndCBuZWVkIHRvIGFkZCBpdCB0
byB0aGlzIGxpc3QuIFdlIGp1c3Qgc2V0IGEgd2FpdGluZ0ZvckFSZXNwb25zZSBmbGFnIAorICAg
IC8vIHdoaWNoIHNheXMgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSByZXNwb25zZS4gSWYgd2lsbEdl
dEFSZXNwb25zZSBpcyBmYWxzZSwgdGhpcyBhbmltYXRpb24gCisgICAgLy8gaXMgbm90IHdhaXRp
bmcgZm9yIGEgcmVzcG9uc2UgZm9yIGl0c2VsZiwgYnV0IHJhdGhlciBmb3IgYSBub3RpZnlYWFhT
dGFydGVkKCkgY2FsbCBmb3IgCisgICAgLy8gYW5vdGhlciBhbmltYXRpb24gdG8gd2hpY2ggaXQg
d2lsbCBzeW5jLgorICAgIC8vCisgICAgLy8gV2hlbiBlbmRBbmltYXRpb25VcGRhdGUoKSBpcyBj
YWxsZWQgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSB3YWl0aW5nRm9yQVJlc3BvbnNlIGZsYWcgaXMK
KyAgICAvLyB0cnVlLiBJZiBzbywgd2UganVzdCByZXR1cm4gYW5kIHdpbGwgZG8gb3VyIHdvcmsg
d2hlbiB0aGUgZmlyc3Qgbm90aWZ5WFhYU3RhcnRlZCgpIGNhbGwKKyAgICAvLyBjb21lcyBpbi4g
SWYgaXQgaXMgZmFsc2UsIHdlIHdpbGwgbm90IGJlIGdldHRpbmcgYSBub3RpZnlYWFhTdGFydGVk
KCkgY2FsbCwgc28gd2Ugd2lsbAorICAgIC8vIGRvIG91ciB3b3JrIHJpZ2h0IGF3YXkuIEluIGJv
dGggY2FzZXMgd2UgY2FsbCB0aGUgb25BbmltYXRpb25TdGFydFJlc3BvbnNlKCkgbWV0aG9kCisg
ICAgLy8gb24gZWFjaCBhbmltYXRpb24uIEluIHRoZSBmaXJzdCBjYXNlIHdlIHNlbmQgaW4gdGhl
IHRpbWUgd2UgZ290IGZyb20gbm90aWZ5WFhYU3RhcnRlZCgpLgorICAgIC8vIEluIHRoZSBzZWNv
bmQgY2FzZSwgd2UganVzdCBwYXNzIGluIHRoZSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKS4K
KyAgICAvLworICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSBhbGwgc29mdHdhcmUgYW5kIGhh
cmR3YXJlIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUgc2FtZSAKKyAgICAvLyB1cGRhdGVSZW5k
ZXJpbmcgY3ljbGUuCisgICAgLy8KKyAgICBBU1NFUlQoIWFuaW1hdGlvbi0+bmV4dCgpKTsKKyAg
ICAKKyAgICBpZiAod2lsbEdldEFSZXNwb25zZSkKKyAgICAgICAgbV93YWl0aW5nRm9yQVJlc3Bv
bnNlID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9yZXNwb25zZVdhaXRlcnMpCisgICAgICAgIG1f
bGFzdFJlc3BvbnNlV2FpdGVyLT5zZXROZXh0KGFuaW1hdGlvbik7CisgICAgZWxzZQorICAgICAg
ICBtX3Jlc3BvbnNlV2FpdGVycyA9IGFuaW1hdGlvbjsKKyAgICAgICAgCisgICAgbV9sYXN0UmVz
cG9uc2VXYWl0ZXIgPSBhbmltYXRpb247CisgICAgYW5pbWF0aW9uLT5zZXROZXh0KDApOworfQor
Cit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tU3RhcnRUaW1lUmVz
cG9uc2VXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKK3sKKyAgICBB
bmltYXRpb25CYXNlKiBwcmV2QW5pbWF0aW9uID0gMDsKKyAgICBmb3IgKEFuaW1hdGlvbkJhc2Uq
IGFuaW1hdGlvbiA9IG1fcmVzcG9uc2VXYWl0ZXJzOyBhbmltYXRpb247IGFuaW1hdGlvbiA9IGFu
aW1hdGlvbi0+bmV4dCgpKSB7CisgICAgICAgIGlmIChhbmltYXRpb24gPT0gYW5pbWF0aW9uVG9S
ZW1vdmUpIHsKKyAgICAgICAgICAgIGlmIChwcmV2QW5pbWF0aW9uKQorICAgICAgICAgICAgICAg
IHByZXZBbmltYXRpb24tPnNldE5leHQoYW5pbWF0aW9uLT5uZXh0KCkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VXYWl0ZXJzID0gYW5pbWF0aW9uLT5uZXh0
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2xhc3RSZXNwb25zZVdhaXRlciA9
PSBhbmltYXRpb24pCisgICAgICAgICAgICAgICAgbV9sYXN0UmVzcG9uc2VXYWl0ZXIgPSBwcmV2
QW5pbWF0aW9uOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgYW5pbWF0aW9uVG9SZW1v
dmUtPnNldE5leHQoMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnN0YXJ0VGltZVJlc3BvbnNlKGRvdWJsZSB0KQoreworICAgIC8vIEdv
IHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJzIGFuZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5CisgICAg
Zm9yIChBbmltYXRpb25CYXNlKiBhbmltYXRpb24gPSBtX3Jlc3BvbnNlV2FpdGVyczsgYW5pbWF0
aW9uOyApIHsKKyAgICAgICAgQW5pbWF0aW9uQmFzZSogbmV4dEFuaW1hdGlvbiA9IGFuaW1hdGlv
bi0+bmV4dCgpOworICAgICAgICBhbmltYXRpb24tPnNldE5leHQoMCk7CisgICAgICAgIGFuaW1h
dGlvbi0+b25BbmltYXRpb25TdGFydFJlc3BvbnNlKHQpOworICAgICAgICBhbmltYXRpb24gPSBu
ZXh0QW5pbWF0aW9uOworICAgIH0KKyAgICAKKyAgICBtX3Jlc3BvbnNlV2FpdGVycyA9IDA7Cisg
ICAgbV9yZXNwb25zZVdhaXRlcnMgPSAwOworfQorCiBBbmltYXRpb25Db250cm9sbGVyOjpBbmlt
YXRpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZGF0YShuZXcgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUoZnJhbWUpKQogewpAQCAtNDI1LDE2ICs1MzEsMjMgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gQW5pbWF0aW9uQ29udHJvbAogICAgIHJldHVybiBibGVuZGVkU3R5
bGUucmVsZWFzZSgpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNldEFuaW1hdGlv
blN0YXJ0VGltZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBkb3VibGUgdCkKK1Bhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IEFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFuaW1hdGVkU3R5bGVGb3JSZW5k
ZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIFJlZlB0cjxDb21wb3NpdGVBbmlt
YXRpb24+IHJlbmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+YWNjZXNzQ29tcG9zaXRlQW5pbWF0
aW9uKHJlbmRlcmVyKTsKLSAgICByZW5kZXJlckFuaW1hdGlvbnMtPnNldEFuaW1hdGlvblN0YXJ0
VGltZSh0KTsKKyAgICByZXR1cm4gbV9kYXRhLT5nZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIo
cmVuZGVyZXIpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNldFRyYW5zaXRpb25T
dGFydFRpbWUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50IHByb3BlcnR5LCBkb3VibGUgdCkK
K3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChSZW5kZXJP
YmplY3QqLyogcmVuZGVyZXIqLywgZG91YmxlIHQpCiB7Ci0gICAgUmVmUHRyPENvbXBvc2l0ZUFu
aW1hdGlvbj4gcmVuZGVyZXJBbmltYXRpb25zID0gbV9kYXRhLT5hY2Nlc3NDb21wb3NpdGVBbmlt
YXRpb24ocmVuZGVyZXIpOwotICAgIHJlbmRlcmVyQW5pbWF0aW9ucy0+c2V0VHJhbnNpdGlvblN0
YXJ0VGltZShwcm9wZXJ0eSwgdCk7CisgICAgLy9SZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPiBy
ZW5kZXJlckFuaW1hdGlvbnMgPSBtX2RhdGEtPmFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihyZW5k
ZXJlcik7CisgICAgLy9yZW5kZXJlckFuaW1hdGlvbnMtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
dCk7CisgICAgbV9kYXRhLT5yZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKHQpOworfQorCit2b2lk
IEFuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeVRyYW5zaXRpb25TdGFydGVkKFJlbmRlck9iamVj
dCogLypyZW5kZXJlciovLCBpbnQgLypwcm9wZXJ0eSovLCBkb3VibGUgdCkKK3sKKyAgICAvL1Jl
ZlB0cjxDb21wb3NpdGVBbmltYXRpb24+IHJlbmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+YWNj
ZXNzQ29tcG9zaXRlQW5pbWF0aW9uKHJlbmRlcmVyKTsKKyAgICAvL3JlbmRlcmVyQW5pbWF0aW9u
cy0+bm90aWZ5VHJhbnNpdGlvblN0YXJ0ZWQocHJvcGVydHksIHQpOworICAgIG1fZGF0YS0+cmVj
ZWl2ZWRTdGFydFRpbWVSZXNwb25zZSh0KTsKIH0KIAogYm9vbCBBbmltYXRpb25Db250cm9sbGVy
OjpwYXVzZUFuaW1hdGlvbkF0VGltZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGRvdWJsZSB0KQpAQCAtNDk2LDcgKzYwOSw3IEBAIHZvaWQgQW5pbWF0aW9uQ29u
dHJvbGxlcjo6YmVnaW5BbmltYXRpb24KIAogdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjplbmRB
bmltYXRpb25VcGRhdGUoKQogewotICAgIG1fZGF0YS0+c3R5bGVBdmFpbGFibGUoKTsKKyAgICBt
X2RhdGEtPmVuZEFuaW1hdGlvblVwZGF0ZSgpOwogfQogCiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb24p
CkBAIC01MDksNCArNjIyLDE0IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlRnJv
bVN0eWwKICAgICBtX2RhdGEtPnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KGFuaW1h
dGlvbik7CiB9CiAKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkVG9TdGFydFRpbWVSZXNw
b25zZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0QVJlc3Bv
bnNlKQoreworICAgIG1fZGF0YS0+YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KGFuaW1h
dGlvbiwgd2lsbEdldEFSZXNwb25zZSk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6
cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSogYW5pbWF0
aW9uKQoreworICAgIG1fZGF0YS0+cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3Qo
YW5pbWF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDQwNjI3KQor
KysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDE1ICs1MSwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNhbmNlbEFuaW1h
dGlvbnMoUmVuZGVyT2JqZWN0Kik7CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gdXBkYXRl
QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOworICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJP
YmplY3QqKTsKIAotICAgIHZvaWQgc2V0QW5pbWF0aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCos
IGRvdWJsZSB0KTsKLSAgICB2b2lkIHNldFRyYW5zaXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0
KiwgaW50IHByb3BlcnR5LCBkb3VibGUgdCk7CisgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFy
dGVkKFJlbmRlck9iamVjdCosIGRvdWJsZSB0KTsKKyAgICB2b2lkIG5vdGlmeVRyYW5zaXRpb25T
dGFydGVkKFJlbmRlck9iamVjdCosIGludCBwcm9wZXJ0eSwgZG91YmxlIHQpOwogCiAgICAgYm9v
bCBwYXVzZUFuaW1hdGlvbkF0VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCiAgICAgYm9vbCBwYXVz
ZVRyYW5zaXRpb25BdFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwg
ZG91YmxlIHQpOyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdDsgLy8gVG8gYmUgdXNlZCBvbmx5IGZvciB0
ZXN0aW5nCiAgICAgCi0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5k
ZXJPYmplY3QqLCBpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5nTm93KSBjb25zdDsKKyAgICBi
b29sIGlzQW5pbWF0aW5nUHJvcGVydHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCosIGludCBwcm9w
ZXJ0eSwgYm9vbCBpc1J1bm5pbmdOb3cgPSB0cnVlKSBjb25zdDsKIAogICAgIHZvaWQgc3VzcGVu
ZEFuaW1hdGlvbnMoRG9jdW1lbnQqKTsKICAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRG9jdW1l
bnQqKTsKQEAgLTcxLDYgKzcyLDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVG9TdHlsZUF2YWls
YWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKICAgICB2b2lkIHJlbW92ZUZyb21TdHlsZUF2
YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKIAorICAgIHZvaWQgYWRkVG9TdGFydFRp
bWVSZXNwb25zZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqLCBib29sIHdpbGxHZXRBUmVzcG9uc2Up
OworICAgIHZvaWQgcmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9u
QmFzZSopOworCiAgICAgZG91YmxlIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwogICAgIAog
ICAgIHZvaWQgYmVnaW5BbmltYXRpb25VcGRhdGUoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDQwNjI3KQorKysgV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyUmVuZGVyZXIoKTsKIAog
ICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCk7CiAKICAgICBBbmltYXRpb25D
b250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKCkgIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcjsgfQogCkBAIC02Myw4ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYW51
cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKIAotICAgIHZvaWQgc2V0QW5pbWF0
aW9uU3RhcnRUaW1lKGRvdWJsZSB0KTsKLSAgICB2b2lkIHNldFRyYW5zaXRpb25TdGFydFRpbWUo
aW50IHByb3BlcnR5LCBkb3VibGUgdCk7CisgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
KGRvdWJsZSB0KTsKKyAgICB2b2lkIG5vdGlmeVRyYW5zaXRpb25TdGFydGVkKGludCBwcm9wZXJ0
eSwgZG91YmxlIHQpOwogCiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIHZvaWQg
cmVzdW1lQW5pbWF0aW9ucygpOwpAQCAtODAsNiArODEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRUb1N0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSopOwogICAgIHZvaWQgcmVt
b3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSopOwogCisgICAgdm9p
ZCBhZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSosIGJvb2wgd2ls
bEdldEFSZXNwb25zZSk7CisgICAgdm9pZCByZW1vdmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0
TGlzdChBbmltYXRpb25CYXNlKik7CisKICAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpOwogICAgIGJvb2wgcGF1c2VUcmFuc2l0
aW9uQXRUaW1lKGludCBwcm9wZXJ0eSwgZG91YmxlIHQpOwogICAgIHVuc2lnbmVkIG51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0OwpAQCAtOTQsNiArOTgsNyBAQCBwcml2YXRlOgogCiAg
ICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcCBtX3RyYW5zaXRpb25zOwogICAgIEFuaW1hdGlv
bk5hbWVNYXAgbV9rZXlmcmFtZUFuaW1hdGlvbnM7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZ0lt
cGwqPiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXA7CiAgICAgYm9vbCBtX2lzU3VzcGVuZGVk
OwogICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKICAgICBD
b21wb3NpdGVBbmltYXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOwpAQCAtMTI2LDkgKzEzMSwx
MSBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmNsZWFyUmVuCiAgICAgICAgIH0K
ICAgICB9CiB9Ci0gICAgCisKIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRl
VHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogeworICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbW9kaWZpZWRDdXJyZW50U3R5bGU7CisgICAgCiAgICAgLy8gSWYgY3VycmVudFN0eWxlIGlz
IG51bGwsIHdlIGRvbid0IGRvIHRyYW5zaXRpb25zCiAgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwg
IXRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpKQogICAgICAgICByZXR1cm47CkBAIC0xNzYsNiAr
MTgzLDE3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHIKICAgICAg
ICAgICAgICAgICAvLyBsaXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBsYXR0ZXIgb25lIG92ZXJyaWRl
cyB0aGUgZWFybGllciBvbmUsIHNvIHdlCiAgICAgICAgICAgICAgICAgLy8gYmVoYXZlIGFzIHRo
b3VnaCB0aGlzIGlzIGEgcnVubmluZyBhbmltYXRpb24gYmVpbmcgcmVwbGFjZWQuCiAgICAgICAg
ICAgICAgICAgaWYgKCFpbXBsQW5pbS0+aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKHByb3AsIHRhcmdl
dFN0eWxlKSkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRm9yIGhhcmR3YXJlIGFuaW1hdGlvbnMgd2UgbmVlZCB0byByZXR1cm4gYSBu
ZXcgUmVuZGVyU3R5bGUgd2l0aCB0aGUgX2N1cnJlbnRfIHZhbHVlCisgICAgICAgICAgICAgICAg
ICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0ZWQgdHJhbnNpdGlvbnMgdXNl
IHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgorICAgICAgICAgICAgICAgICAgICBpZiAoQW5p
bWF0aW9uQmFzZTo6aXNQcm9wZXJ0eUhXQW5pbWF0ZWQocHJvcCkpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZWRDdXJyZW50U3R5bGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRDdXJyZW50U3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y2xvbmUoY3VycmVudFN0eWxlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
aW1wbEFuaW0tPmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUocHJvcCwgbW9kaWZpZWRDdXJyZW50
U3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAg
ICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcCk7CiAgICAgICAgICAgICAgICAgICAg
IGVxdWFsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTg2LDcgKzIwNCw3IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHIKIAogICAgICAgICAgICAgaWYg
KCFlcXVhbCkgewogICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KLSAg
ICAgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnNldChwcm9wLCBJbXBsaWNpdEFuaW1hdGlvbjo6
Y3JlYXRlKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4oYW5pbSksIHByb3AsIHJlbmRlcmVyLCBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CisgICAgICAgICAgICAgICAgbV90cmFuc2l0
aW9ucy5zZXQocHJvcCwgSW1wbGljaXRBbmltYXRpb246OmNyZWF0ZShjb25zdF9jYXN0PEFuaW1h
dGlvbio+KGFuaW0pLCBwcm9wLCByZW5kZXJlciwgbV9jb21wb3NpdGVBbmltYXRpb24sIG1vZGlm
aWVkQ3VycmVudFN0eWxlID8gbW9kaWZpZWRDdXJyZW50U3R5bGUuZ2V0KCkgOiBmcm9tU3R5bGUp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugb25seSBu
ZWVkIG9uZSBwYXNzIGZvciB0aGUgc2luZ2xlIHByb3AgY2FzZQpAQCAtMjEwLDYgKzIyOCw5IEBA
IHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlS2UKICAgICBBbmltYXRpb25O
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgp
OwogICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkKICAgICAgICAgaXQtPnNl
Y29uZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAKKyAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24g
b3JkZXIgbWFwCisgICAgbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmNsZWFyKCk7CiAgICAg
CiAgICAgLy8gTm93IG1hcmsgYW55IHN0aWxsIGFjdGl2ZSBhbmltYXRpb25zIGFzIGFjdGl2ZSBh
bmQgYWRkIGFueSBuZXcgYW5pbWF0aW9ucwogICAgIGlmICh0YXJnZXRTdHlsZS0+YW5pbWF0aW9u
cygpKSB7CkBAIC0yMzcsNiArMjU4LDEwIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0
ZTo6dXBkYXRlS2UKICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0gPSBLZXlmcmFtZUFuaW1h
dGlvbjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4oYW5pbSksIHJlbmRlcmVyLCBpLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbiwgY3VycmVudFN0eWxlID8gY3VycmVudFN0eWxlIDogdGFyZ2V0
U3R5bGUpOwogICAgICAgICAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLnNldChrZXlmcmFt
ZUFuaW0tPm5hbWUoKS5pbXBsKCksIGtleWZyYW1lQW5pbSk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEFkZCB0aGlzIHRvIHRoZSBhbmltYXRpb24gb3JkZXIg
bWFwCisgICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQorICAgICAgICAgICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25PcmRlck1hcC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1lKCkuaW1wbCgp
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc4LDE3ICszMDMsMTAgQEAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aQogCiAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBh
bmltYXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0aGUgbmV3IGdvYWwg
c3RhdGUuICBXZSB3YW50IHRoZW0KICAgICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBv
bmx5IGlmIG5lZWRlZC4KLSAgICBpZiAodGFyZ2V0U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkt
PnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBbmltYXRpb24qIGFuaW0gPSB0YXJn
ZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7Ci0KLSAgICAgICAgICAgIGlmIChh
bmltLT5pc1ZhbGlkQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcg
YW5pbWF0aW9uTmFtZShhbmltLT5uYW1lKCkpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxLZXlm
cmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KGFu
aW1hdGlvbk5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQot
ICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPmFuaW1hdGUobV9jb21wb3NpdGVBbmlt
YXRpb24sIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBmb3IgKFZlY3RvcjxBdG9taWNTdHJpbmdJ
bXBsKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmJl
Z2luKCk7IGl0ICE9IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5lbmQoKTsgKytpdCkgewor
ICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmdldCgqaXQpOworICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQorICAgICAg
ICAgICAga2V5ZnJhbWVBbmltLT5hbmltYXRlKG1fY29tcG9zaXRlQW5pbWF0aW9uLCByZW5kZXJl
ciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOwogICAgIH0KIAogICAg
IGNsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMocmVuZGVyZXIpOwpAQCAtMjk2LDYgKzMxNCwyNCBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpCiAgICAgcmV0dXJuIHJl
c3VsdFN0eWxlID8gcmVzdWx0U3R5bGUucmVsZWFzZSgpIDogdGFyZ2V0U3R5bGU7CiB9CiAKK1Bh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmdldEFuaW1h
dGVkU3R5bGUoKQoreworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7CisgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT5zZWNv
bmQuZ2V0KCkpCisgICAgICAgICAgICBpbXBsaWNpdEFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHls
ZShyZXN1bHRTdHlsZSk7CisgICAgfQorCisgICAgZm9yIChWZWN0b3I8QXRvbWljU3RyaW5nSW1w
bCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5iZWdp
bigpOyBpdCAhPSBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW1hdGlvbiA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmdldCgqaXQpOworICAgICAgICBpZiAoa2V5ZnJhbWVBbmltYXRpb24p
CisgICAgICAgICAgICBrZXlmcmFtZUFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRT
dHlsZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHRTdHlsZTsKK30KKwogLy8gImFu
aW1hdGluZyIgbWVhbnMgdGhhdCBzb21ldGhpbmcgaXMgcnVubmluZyB0aGF0IHJlcXVpcmVzIHRo
ZSB0aW1lciB0byBrZWVwIGZpcmluZwogdm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpz
ZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCiB7CkBAIC00MDksNyArNDQ1LDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpjbGVhbnVwRgogICAgIH0KIH0KIAotdm9pZCBDb21w
b3NpdGVBbmltYXRpb25Qcml2YXRlOjpzZXRBbmltYXRpb25TdGFydFRpbWUoZG91YmxlIHQpCit2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91
YmxlIHQpCiB7CiAgICAgLy8gU2V0IHN0YXJ0IHRpbWUgb24gYWxsIGFuaW1hdGlvbnMgd2FpdGlu
ZyBmb3IgaXQKICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewpAQCAt
NDE3LDEyICs0NTMsMTIgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpzZXRBbmlt
YQogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAoYW5pbSAmJiBhbmltLT53YWl0aW5nRm9yU3RhcnRUaW1lKCkpCi0gICAgICAgICAgICAg
ICAgYW5pbS0+dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRl
SW5wdXRTdGFydFRpbWVTZXQsIHQpOworICAgICAgICAgICAgICAgIGFuaW0tPm9uQW5pbWF0aW9u
U3RhcnRSZXNwb25zZSh0KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDb21wb3NpdGVB
bmltYXRpb25Qcml2YXRlOjpzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBwcm9wZXJ0eSwgZG91
YmxlIHQpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6Om5vdGlmeVRyYW5zaXRpb25T
dGFydGVkKGludCBwcm9wZXJ0eSwgZG91YmxlIHQpCiB7CiAgICAgLy8gU2V0IHRoZSBzdGFydCB0
aW1lIGZvciBnaXZlbiBwcm9wZXJ0eSB0cmFuc2l0aW9uCiAgICAgaWYgKCFtX3RyYW5zaXRpb25z
LmlzRW1wdHkoKSkgewpAQCAtNDMwLDcgKzQ2Niw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
UHJpdmF0ZTo6c2V0VHJhbnMKICAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53YWl0aW5nRm9yU3RhcnRUaW1l
KCkgJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAg
ICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGVJbnB1dFN0YXJ0VGltZVNldCwgdCk7CisgICAgICAgICAgICAgICAgYW5pbS0+b25BbmltYXRp
b25TdGFydFJlc3BvbnNlKHQpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTQxLDYgKzU3Nywx
NiBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnJlbW92ZUZyCiAgICAgbV9hbmlt
YXRpb25Db250cm9sbGVyLT5yZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdChhbmltYXRp
b24pOwogfQogCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmFkZFRvU3RhcnRUaW1l
UmVzcG9uc2VXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb24sIGJvb2wgd2lsbEdldEFS
ZXNwb25zZSkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmFkZFRvU3RhcnRUaW1lUmVz
cG9uc2VXYWl0TGlzdChhbmltYXRpb24sIHdpbGxHZXRBUmVzcG9uc2UpOworfQorCit2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnJlbW92ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRM
aXN0KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbikKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xs
ZXItPnJlbW92ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KGFuaW1hdGlvbik7Cit9CisK
IGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKIHsKICAgICBpZiAoIW5hbWUpCkBAIC02
MjYsNiArNjcyLDExIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGkK
ICAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRlKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdl
dFN0eWxlKTsKIH0KIAorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9u
OjpnZXRBbmltYXRlZFN0eWxlKCkKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5nZXRBbmltYXRlZFN0
eWxlKCk7Cit9CisKIGRvdWJsZSBDb21wb3NpdGVBbmltYXRpb246OndpbGxOZWVkU2VydmljZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS0+d2lsbE5lZWRTZXJ2aWNlKCk7CkBAIC02NDEs
NiArNjkyLDE2IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZW1vdmVGcm9tU3R5bGUKICAg
ICBtX2RhdGEtPnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KGFuaW1hdGlvbik7CiB9
CiAKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjphZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExp
c3QoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uLCBib29sIHdpbGxHZXRBUmVzcG9uc2UpCit7Cisg
ICAgbV9kYXRhLT5hZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoYW5pbWF0aW9uLCB3aWxs
R2V0QVJlc3BvbnNlKTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlbW92ZUZyb21T
dGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbikKK3sKKyAg
ICBtX2RhdGEtPnJlbW92ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KGFuaW1hdGlvbik7
Cit9CisKIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucygpCiB7CiAg
ICAgbV9kYXRhLT5zdXNwZW5kQW5pbWF0aW9ucygpOwpAQCAtNjc2LDE0ICs3MzcsMTQgQEAgUGFz
c1JlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gQ29tcG9zaXRlQQogICAgIHJldHVybiBtX2RhdGEt
PmdldEFuaW1hdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KTsKIH0KIAotdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnNldEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUgdCkKK3ZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0KQogewotICAgIG1fZGF0
YS0+c2V0QW5pbWF0aW9uU3RhcnRUaW1lKHQpOworICAgIG1fZGF0YS0+bm90aWZ5QW5pbWF0aW9u
U3RhcnRlZCh0KTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFRyYW5zaXRpb25T
dGFydFRpbWUoaW50IHByb3BlcnR5LCBkb3VibGUgdCkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
Ojpub3RpZnlUcmFuc2l0aW9uU3RhcnRlZChpbnQgcHJvcGVydHksIGRvdWJsZSB0KQogewotICAg
IG1fZGF0YS0+c2V0VHJhbnNpdGlvblN0YXJ0VGltZShwcm9wZXJ0eSwgdCk7CisgICAgbV9kYXRh
LT5ub3RpZnlUcmFuc2l0aW9uU3RhcnRlZChwcm9wZXJ0eSwgdCk7CiB9CiAKIHZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHJldmlz
aW9uIDQwNjI3KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTAgKzU3LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyUmVuZGVyZXIoKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGUoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCk7
CisKICAgICBkb3VibGUgd2lsbE5lZWRTZXJ2aWNlKCkgY29uc3Q7CiAgICAgCiAgICAgQW5pbWF0
aW9uQ29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlcigpOwogCisgICAgdm9pZCBhZGRUb1N0
eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSopOworICAgIHZvaWQgcmVtb3ZlRnJv
bVN0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSopOworCisgICAgdm9pZCBhZGRU
b1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSosIGJvb2wgd2lsbEdldEFS
ZXNwb25zZSk7CisgICAgdm9pZCByZW1vdmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdChB
bmltYXRpb25CYXNlKik7CisKICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgdm9p
ZCByZXN1bWVBbmltYXRpb25zKCk7CiAgICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0OwpAQCAt
NzIsOSArODAsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGFzc1JlZlB0cjxLZXlmcmFtZUFuaW1h
dGlvbj4gZ2V0QW5pbWF0aW9uRm9yUHJvcGVydHkoaW50IHByb3BlcnR5KTsKIAotCi0gICAgdm9p
ZCBzZXRBbmltYXRpb25TdGFydFRpbWUoZG91YmxlIHQpOwotICAgIHZvaWQgc2V0VHJhbnNpdGlv
blN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKKyAgICB2b2lkIG5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoZG91YmxlIHQpOworICAgIHZvaWQgbm90aWZ5VHJhbnNpdGlvblN0YXJ0ZWQo
aW50IHByb3BlcnR5LCBkb3VibGUgdCk7CiAKICAgICB2b2lkIG92ZXJyaWRlSW1wbGljaXRBbmlt
YXRpb25zKGludCBwcm9wZXJ0eSk7CiAgICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRB
bmltYXRpb25zKGludCBwcm9wZXJ0eSk7CkBAIC04Myw5ICs5MCw2IEBAIHB1YmxpYzoKICAgICBi
b29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKICAgICB1
bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdDsKIAotICAgIHZvaWQgYWRk
VG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKLSAgICB2b2lkIHJlbW92
ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKLQogcHJpdmF0ZToK
ICAgICBDb21wb3NpdGVBbmltYXRpb24oQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9uQ29u
dHJvbGxlcik7CiAgICAgCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5p
bWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0
QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gNDA2MjcpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQAog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJJbXBsaWNpdEFuaW1hdGlvbi5oIgog
I2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSw3ICs1Niw3IEBAIEltcGxpY2l0QW5p
bWF0aW9uOjp+SW1wbGljaXRBbmltYXRpb24oKQogICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUo
QW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFuaW1hdGlvbiwgLTEpOwogfQogCi1ib29sIEltcGxpY2l0
QW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJU
eXBlIGluTGlzdGVuZXJUeXBlKQorYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2
ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3RlbmVyVHlwZSkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShp
bkxpc3RlbmVyVHlwZSk7CiB9CkBAIC03NiwxMyArNzcsNDkgQEAgdm9pZCBJbXBsaWNpdEFuaW1h
dGlvbjo6YW5pbWF0ZShDb21wb3NpdAogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKICAgICAgICAg
YW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSh0YXJnZXRTdHlsZSk7CiAKLSAgICBp
ZiAoYmxlbmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5
bGUuZ2V0KCksIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKDEs
IDAsIDApKSkKKyAgICBib29sIG5lZWRzQW5pbSA9IGJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2Fu
aW1hdGluZ1Byb3BlcnR5LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwg
bV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygxLCAwLCAwKSk7CisgICAgaWYgKG5lZWRzQW5pbSB8
fCBtX2ZhbGxiYWNrQW5pbWF0aW5nKQogICAgICAgICBzZXRBbmltYXRpbmcoKTsKIAogICAgIC8v
IEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCiAgICAgZmlyZUFuaW1hdGlvbkV2ZW50
c0lmTmVlZGVkKCk7CiB9CiAKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OmdldEFuaW1hdGVkU3R5
bGUoUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK3sKKyAgICBpZiAoIWFuaW1h
dGVkU3R5bGUpCisgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUobV90
b1N0eWxlLmdldCgpKTsKKworICAgIGJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGluZ1By
b3BlcnR5LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxl
LmdldCgpLCBwcm9ncmVzcygxLCAwLCAwKSk7Cit9CisKK2Jvb2wgSW1wbGljaXRBbmltYXRpb246
OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICBiZWdpblRpbWUKKyNlbmRpZgorICAgICkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT5oYXNMYXllcigpKSB7Cisg
ICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IHRvUmVuZGVyQm94KG1fb2JqZWN0KS0+bGF5ZXIo
KTsKKyAgICAgICAgaWYgKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBsYXllci0+YmFja2luZygpLT5zdGFydFRyYW5zaXRpb24oYmVnaW5UaW1lLCBtX2FuaW1hdGlu
Z1Byb3BlcnR5LCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpKTsKKyAgICB9Cisj
ZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OmVu
ZEFuaW1hdGlvbihib29sIC8qcmVzZXQqLykKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT5oYXNMYXllcigpKSB7CisgICAg
ICAgIFJlbmRlckxheWVyKiBsYXllciA9IHRvUmVuZGVyQm94KG1fb2JqZWN0KS0+bGF5ZXIoKTsK
KyAgICAgICAgaWYgKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKKyAgICAgICAgICAgIGxheWVyLT5i
YWNraW5nKCktPnRyYW5zaXRpb25GaW5pc2hlZChtX2FuaW1hdGluZ1Byb3BlcnR5KTsKKyAgICB9
CisjZW5kaWYKK30KKwogdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91
YmxlIGVsYXBzZWRUaW1lKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBrZXlmcmFtZSBhbmltYXRp
b24gb24gdGhpcyBwcm9wZXJ0eSwgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIG92ZXJyaWRkZW4u
IFRoZSBrZXlmcmFtZQpAQCAtMjA5LDQgKzI0NiwyMSBAQCB2b2lkIEltcGxpY2l0QW5pbWF0aW9u
Ojp2YWxpZGF0ZVRyYW5zZm9yCiAgICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCA9IHRy
dWU7CiB9CiAKK2RvdWJsZSBJbXBsaWNpdEFuaW1hdGlvbjo6d2lsbE5lZWRTZXJ2aWNlKCkKK3sK
KyAgICBkb3VibGUgdCA9IEFuaW1hdGlvbkJhc2U6OndpbGxOZWVkU2VydmljZSgpOworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAodCAhPSAwIHx8IHByZUFjdGl2ZSgp
KQorICAgICAgICByZXR1cm4gdDsKKyAgICAgICAgCisgICAgLy8gQSByZXR1cm4gdmFsdWUgb2Yg
MCBtZWFucyB3ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB0aGlzIGlzIGEgSFcgYW5pbWF0aW9uIHdl
IAorICAgIC8vIG9ubHkgbmVlZCBzZXJ2aWNlIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zaXRpb24K
KyAgICBpZiAoaXNQcm9wZXJ0eUhXQW5pbWF0ZWQobV9hbmltYXRpbmdQcm9wZXJ0eSkpIHsKKyAg
ICAgICAgYm9vbCBpc0xvb3Bpbmc7CisgICAgICAgIGdldFRpbWVUb05leHRFdmVudCh0LCBpc0xv
b3BpbmcpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiB0OworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlv
bi5oCShyZXZpc2lvbiA0MDYyNykKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRB
bmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsMTEgQEAgcHVibGljOgogICAg
IGludCBhbmltYXRpbmdQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nUHJvcGVy
dHk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRp
bWUpOwotCisgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdpblRpbWUp
OworICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCByZXNldCk7CisgICAgCiAgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQ
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QW5p
bWF0ZWRTdHlsZShSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVzZXQoUmVuZGVyU3R5bGUqIHRvKTsKIAogICAgIHZvaWQgc2V0T3ZlcnJpZGRl
bihib29sKTsKQEAgLTYyLDggKzY1LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYmxlbmRQcm9w
ZXJ0eVZhbHVlSW5TdHlsZShpbnQsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUpOwogCisgICAg
dmlydHVhbCBkb3VibGUgd2lsbE5lZWRTZXJ2aWNlKCk7CisKIHByb3RlY3RlZDoKLSAgICBib29s
IHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUpOyAgICAK
KyAgICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5
cGUpIGNvbnN0OyAgICAKICAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiwgZG91YmxlIGVsYXBzZWRUaW1lKTsKIAogICAgIHZvaWQgdmFsaWRhdGVUcmFuc2Zv
cm1GdW5jdGlvbkxpc3QoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVB
bmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJh
bWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiA0MDYyNykKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRp
b24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBA
CiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1h
dGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU5LDYgKzYwLDQ0IEBAIEtleWZyYW1l
QW5pbWF0aW9uOjp+S2V5ZnJhbWVBbmltYXRpb24oKQogICAgICAgICB1cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFuaW1hdGlvbiwgLTEpOwogfQogCit2b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjpnZXRLZXlmcmFtZUFuaW1hdGlvbkludGVydmFsKGNvbnN0IFJlbmRlclN0
eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJv
ZykgY29uc3QKK3sKKyAgICAvLyBGaW5kIHRoZSBmaXJzdCBrZXkKKyAgICBkb3VibGUgZWxhcHNl
ZFRpbWUgPSBnZXRFbGFwc2VkVGltZSgpOworCisgICAgZG91YmxlIHQgPSBtX2FuaW1hdGlvbi0+
ZHVyYXRpb24oKSA/IChlbGFwc2VkVGltZSAvIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKSA6IDE7
CisgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KHQpOworICAgIHQgLT0gaTsKKyAgICBpZiAo
bV9hbmltYXRpb24tPmRpcmVjdGlvbigpICYmIChpICYgMSkpCisgICAgICAgIHQgPSAxIC0gdDsK
KworICAgIGRvdWJsZSBzY2FsZSA9IDE7CisgICAgZG91YmxlIG9mZnNldCA9IDA7CisgICAgVmVj
dG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmRLZXlmcmFtZXMgPSBtX2tleWZy
YW1lcy5lbmRLZXlmcmFtZXMoKTsKKyAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBlbmRL
ZXlmcmFtZXM7ICsraXQpIHsKKyAgICAgICAgaWYgKHQgPCBpdC0+a2V5KCkpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBmaXJzdCBrZXkgc2hvdWxkIGFsd2F5cyBiZSAwLCBzbyB3ZSBzaG91bGQgbmV2
ZXIgc3VjY2VlZCBvbiB0aGUgZmlyc3Qga2V5CisgICAgICAgICAgICBpZiAoIWZyb21TdHlsZSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHNjYWxlID0gMS4wIC8gKGl0LT5r
ZXkoKSAtIG9mZnNldCk7CisgICAgICAgICAgICB0b1N0eWxlID0gaXQtPnN0eWxlKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCA9IGl0LT5rZXkoKTsK
KyAgICAgICAgZnJvbVN0eWxlID0gaXQtPnN0eWxlKCk7CisgICAgfQorCisgICAgaWYgKCFmcm9t
U3R5bGUgfHwgIXRvU3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFRpbWluZ0Z1
bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiA9IDA7CisgICAgaWYgKGZyb21TdHlsZS0+YW5pbWF0aW9u
cygpICYmIGZyb21TdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCkgPiAwKQorICAgICAgICB0aW1p
bmdGdW5jdGlvbiA9ICYoZnJvbVN0eWxlLT5hbmltYXRpb25zKCktPmFuaW1hdGlvbigwKS0+dGlt
aW5nRnVuY3Rpb24oKSk7CisKKyAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgdGlt
aW5nRnVuY3Rpb24pOworfQorCiB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBv
c2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0
eWxlKQogewogICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCkBAIC04NCwz
NCArMTIzLDEyIEBAIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXQKIAog
ICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGJlIG1vcmUgZWZmaWNpZW50IGFib3V0IGRldGVybWlu
aW5nIHdoaWNoIGtleWZyYW1lcyB3ZSBhcmUgYW5pbWF0aW5nIGJldHdlZW4uCiAgICAgLy8gV2Ug
c2hvdWxkIGNhY2hlIHRoZSBsYXN0IHBhaXIgb3Igc29tZXRoaW5nLgotCi0gICAgLy8gRmluZCB0
aGUgZmlyc3Qga2V5Ci0gICAgZG91YmxlIGVsYXBzZWRUaW1lID0gZ2V0RWxhcHNlZFRpbWUoKTsK
LQotICAgIGRvdWJsZSB0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUg
LyBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkgOiAxOwotICAgIGludCBpID0gc3RhdGljX2Nhc3Q8
aW50Pih0KTsKLSAgICB0IC09IGk7Ci0gICAgaWYgKG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSAm
JiAoaSAmIDEpKQotICAgICAgICB0ID0gMSAtIHQ7Ci0KKyAgICAKKyAgICAvLyBHZXQgdGhlIGZy
b20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVuCiAgICAgY29uc3QgUmVuZGVyU3R5bGUq
IGZyb21TdHlsZSA9IDA7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUgPSAwOwotICAg
IGRvdWJsZSBzY2FsZSA9IDE7Ci0gICAgZG91YmxlIG9mZnNldCA9IDA7Ci0gICAgVmVjdG9yPEtl
eWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmRLZXlmcmFtZXMgPSBtX2tleWZyYW1lcy5l
bmRLZXlmcmFtZXMoKTsKLSAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBlbmRLZXlmcmFt
ZXM7ICsraXQpIHsKLSAgICAgICAgaWYgKHQgPCBpdC0+a2V5KCkpIHsKLSAgICAgICAgICAgIC8v
IFRoZSBmaXJzdCBrZXkgc2hvdWxkIGFsd2F5cyBiZSAwLCBzbyB3ZSBzaG91bGQgbmV2ZXIgc3Vj
Y2VlZCBvbiB0aGUgZmlyc3Qga2V5Ci0gICAgICAgICAgICBpZiAoIWZyb21TdHlsZSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHNjYWxlID0gMS4wIC8gKGl0LT5rZXkoKSAt
IG9mZnNldCk7Ci0gICAgICAgICAgICB0b1N0eWxlID0gaXQtPnN0eWxlKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIG9mZnNldCA9IGl0LT5rZXkoKTsKLSAgICAg
ICAgZnJvbVN0eWxlID0gaXQtPnN0eWxlKCk7Ci0gICAgfQorICAgIGRvdWJsZSBwcm9nOworICAg
IGdldEtleWZyYW1lQW5pbWF0aW9uSW50ZXJ2YWwoZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9nKTsK
IAogICAgIC8vIElmIGVpdGhlciBzdHlsZSBpcyAwIHdlIGhhdmUgYW4gaW52YWxpZCBjYXNlLCBq
dXN0IHN0b3AgdGhlIGFuaW1hdGlvbi4KICAgICBpZiAoIWZyb21TdHlsZSB8fCAhdG9TdHlsZSkg
ewpAQCAtMTI0LDE5ICsxNDEsMzQgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShD
b21wb3NpdAogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9
IFJlbmRlclN0eWxlOjpjbG9uZSh0YXJnZXRTdHlsZSk7CiAKLSAgICBjb25zdCBUaW1pbmdGdW5j
dGlvbiogdGltaW5nRnVuY3Rpb24gPSAwOwotICAgIGlmIChmcm9tU3R5bGUtPmFuaW1hdGlvbnMo
KSAmJiBmcm9tU3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgpID4gMCkKLSAgICAgICAgdGltaW5n
RnVuY3Rpb24gPSAmKGZyb21TdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oMCktPnRpbWlu
Z0Z1bmN0aW9uKCkpOwotCi0gICAgZG91YmxlIHByb2cgPSBwcm9ncmVzcyhzY2FsZSwgb2Zmc2V0
LCB0aW1pbmdGdW5jdGlvbik7Ci0KICAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVu
ZFByb3BlcnRpZXMgPSBtX2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7CiAgICAgZm9yIChIYXNo
U2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVz
KCk7IGl0ICE9IGVuZFByb3BlcnRpZXM7ICsraXQpIHsKLSAgICAgICAgaWYgKGJsZW5kUHJvcGVy
dGllcyh0aGlzLCAqaXQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21TdHlsZSwgdG9TdHlsZSwg
cHJvZykpCisgICAgICAgIGJvb2wgbmVlZHNBbmltID0gYmxlbmRQcm9wZXJ0aWVzKHRoaXMsICpp
dCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9nKTsKKyAgICAg
ICAgaWYgKG5lZWRzQW5pbSB8fCBtX2ZhbGxiYWNrQW5pbWF0aW5nKQogICAgICAgICAgICAgc2V0
QW5pbWF0aW5nKCk7CiAgICAgfQogfQogCit2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpnZXRBbmlt
YXRlZFN0eWxlKFJlZlB0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCit7CisgICAgLy8g
R2V0IHRoZSBmcm9tL3RvIHN0eWxlcyBhbmQgcHJvZ3Jlc3MgYmV0d2VlbgorICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBmcm9tU3R5bGUgPSAwOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxl
ID0gMDsKKyAgICBkb3VibGUgcHJvZzsKKyAgICBnZXRLZXlmcmFtZUFuaW1hdGlvbkludGVydmFs
KGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZyk7CisKKyAgICAvLyBJZiBlaXRoZXIgc3R5bGUgaXMg
MCB3ZSBoYXZlIGFuIGludmFsaWQgY2FzZQorICAgIGlmICghZnJvbVN0eWxlIHx8ICF0b1N0eWxl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCisgICAgICAgIGFu
aW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUobV9vYmplY3QtPnN0eWxlKCkpOworCisg
ICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmRQcm9wZXJ0aWVzID0gbV9rZXlmcmFt
ZXMuZW5kUHJvcGVydGllcygpOworICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBlbmRQcm9wZXJ0aWVz
OyArK2l0KQorICAgICAgICBibGVuZFByb3BlcnRpZXModGhpcywgKml0LCBhbmltYXRlZFN0eWxl
LmdldCgpLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2cpOworfQorCiBib29sIEtleWZyYW1lQW5p
bWF0aW9uOjpoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0CiB7CiAg
ICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy5lbmRQcm9w
ZXJ0aWVzKCk7CkBAIC0xNDgsMTEgKzE4MCw0MCBAQCBib29sIEtleWZyYW1lQW5pbWF0aW9uOjpo
YXNBbmltYXRpb25Gb3JQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEtleWZyYW1lQW5p
bWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCkKLXsKLSAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5h
bCAodW5hbmltYXRlZCkgc3R5bGUKLSAgICBpZiAobV9vYmplY3QpCitib29sIEtleWZyYW1lQW5p
bWF0aW9uOjpzdGFydEFuaW1hdGlvbihkb3VibGUKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgYmVnaW5UaW1lCisjZW5kaWYKKyAgICApCit7CisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+aGFzTGF5ZXIo
KSkgeworICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveChtX29iamVjdCkt
PmxheWVyKCk7CisgICAgICAgIGlmIChsYXllci0+aXNDb21wb3NpdGVkKCkpCisgICAgICAgICAg
ICByZXR1cm4gbGF5ZXItPmJhY2tpbmcoKS0+c3RhcnRBbmltYXRpb24oYmVnaW5UaW1lLCBtX2Fu
aW1hdGlvbi5nZXQoKSwgbV9rZXlmcmFtZXMpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgcmVzZXQKKyNlbmRpZgorICAgICkK
K3sKKyAgICBpZiAobV9vYmplY3QpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisgICAgICAgIGlmIChtX29iamVjdC0+aGFzTGF5ZXIoKSkgeworICAgICAgICAgICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gdG9SZW5kZXJCb3gobV9vYmplY3QpLT5sYXllcigpOworICAgICAgICAg
ICAgaWYgKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKKyAgICAgICAgICAgICAgICBsYXllci0+YmFj
a2luZygpLT5hbmltYXRpb25GaW5pc2hlZChtX2tleWZyYW1lcy5hbmltYXRpb25OYW1lKCksIDAs
IHJlc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIAorICAgICAgICAvLyBSZXN0b3Jl
IHRoZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUKICAgICAgICAgc2V0Q2hhbmdlZChtX29i
amVjdC0+ZWxlbWVudCgpKTsKKyAgICB9CiB9CiAKIGJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNo
b3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUgbGlzdGVuZXJU
eXBlKQpAQCAtMjg3LDQgKzM0OCwzMSBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjp2YWxpZGF0
ZVRyYW5zZm9yCiAgICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCA9IHRydWU7CiB9CiAK
K2RvdWJsZSBLZXlmcmFtZUFuaW1hdGlvbjo6d2lsbE5lZWRTZXJ2aWNlKCkKK3sKKyAgICBkb3Vi
bGUgdCA9IEFuaW1hdGlvbkJhc2U6OndpbGxOZWVkU2VydmljZSgpOworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICBpZiAodCAhPSAwIHx8IHByZUFjdGl2ZSgpKQorICAgICAg
ICByZXR1cm4gdDsKKyAgICAgICAgCisgICAgLy8gQSByZXR1cm4gdmFsdWUgb2YgMCBtZWFucyB3
ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB3ZSBvbmx5IGhhdmUgSFcgYW5pbWF0aW9ucyB3ZSAKKyAg
ICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2l0aW9uCisgICAg
SGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmRQcm9wZXJ0aWVzID0gbV9rZXlmcmFtZXMu
ZW5kUHJvcGVydGllcygpOworICAgIGJvb2wgaXNPbmx5SFcgPSB0cnVlOworICAgIAorICAgIGZv
ciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJv
cGVydGllcygpOyBpdCAhPSBlbmRQcm9wZXJ0aWVzOyArK2l0KSB7CisgICAgICAgIGlmICghaXNQ
cm9wZXJ0eUhXQW5pbWF0ZWQoKml0KSkgeworICAgICAgICAgICAgaXNPbmx5SFcgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzT25seUhX
KSB7CisgICAgICAgIGJvb2wgaXNMb29waW5nOworICAgICAgICBnZXRUaW1lVG9OZXh0RXZlbnQo
dCwgaXNMb29waW5nKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gdDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFu
aW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVB
bmltYXRpb24uaAkocmV2aXNpb24gNDA2MjcpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tl
eWZyYW1lQW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGlj
OgogICAgIH07CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0
aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShSZWZQdHI8UmVuZGVy
U3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKTsgfQogICAgIGludCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KQEAgLTU2LDEwICs1NywxMyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRVbmFuaW1hdGVkU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGUpIHsgbV91bmFuaW1hdGVkU3R5bGUgPSBzdHlsZTsgfQogICAgIFJlbmRlclN0eWxlKiB1
bmFuaW1hdGVkU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3VuYW5pbWF0ZWRTdHlsZS5nZXQoKTsg
fQogCisgICAgdmlydHVhbCBkb3VibGUgd2lsbE5lZWRTZXJ2aWNlKCk7CisKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25TdGFydChkb3VibGUgZWxhcHNlZFRpbWUpOwog
ICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgZWxhcHNlZFRpbWUp
OwogICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpOwor
ICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKTsKICAgICB2
aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQpOwogCiAgICAgdmlydHVhbCB2b2lk
IG92ZXJyaWRlQW5pbWF0aW9ucygpOwpAQCAtNzYsNiArODAsOSBAQCBwcml2YXRlOgogICAgIEtl
eWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3Qq
LCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVk
U3R5bGUpOwogICAgIHZpcnR1YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CiAgICAgCisgICAgLy8g
R2V0IHRoZSBzdHlsZXMgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRpbWUgYW5k
IHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0KKyAgICB2b2lkIGdldEtleWZyYW1lQW5pbWF0aW9u
SW50ZXJ2YWwoY29uc3QgUmVuZGVyU3R5bGUqJiBmcm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiYgZnJvbVN0eWxlLCBkb3VibGUmIHByb2cpIGNvbnN0OworCiAgICAgLy8gVGhlIGtleWZyYW1l
cyB0aGF0IHdlIGFyZSBibGVuZGluZy4KICAgICBLZXlmcmFtZUxpc3QgbV9rZXlmcmFtZXM7CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24g
NDA2MjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkNTU1By
b3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC04OTgsMTIgKzg5
OSwxMiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRUcmFuc2l0aW9uCiAKIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpub3RpZnlUcmFuc2l0aW9uU3RhcnRlZChjb25zdCBHcmFwaGlj
c0xheWVyKiwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBkb3VibGUgdGltZSkKIHsKLSAg
ICByZW5kZXJlcigpLT5ub3RpZnlUcmFuc2l0aW9uU3RhcnRlZChncmFwaGljc0xheWVyVG9DU1NQ
cm9wZXJ0eShwcm9wZXJ0eSksIHRpbWUpOworICAgIHJlbmRlcmVyKCktPmFuaW1hdGlvbigpLT5u
b3RpZnlUcmFuc2l0aW9uU3RhcnRlZChyZW5kZXJlcigpLCBncmFwaGljc0xheWVyVG9DU1NQcm9w
ZXJ0eShwcm9wZXJ0eSksIHRpbWUpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCiB7
Ci0gICAgcmVuZGVyZXIoKS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aW1lKTsKKyAgICByZW5k
ZXJlcigpLT5hbmltYXRpb24oKS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChyZW5kZXJlcigpLCB0
aW1lKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmFuaW1hdGlvbkZpbmlzaGVkKGNv
bnN0IFN0cmluZyYgbmFtZSwgaW50IGluZGV4LCBib29sIHJlc2V0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27337</attachid>
            <date>2009-02-04 17:37:00 -0800</date>
            <delta_ts>2009-02-04 17:58:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>23371.patch</filename>
            <type>text/plain</type>
            <size>63202</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDY1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODUgQEAKKzIwMDktMDItMDQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3MQorCisgICAgICAgIEFk
ZGVkIGFjY2VsZXJhdGVkIGFuaW1hdGlvbiBzdXBwb3J0IHRvIEFuaW1hdGlvbkNvbnRyb2xsZXIg
YW5kIGZyaWVuZHMKKworICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyQmFzZTo6aXNIYXJkd2FyZUFuaW1h
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckhXT3BhY2l0eTo6UHJvcGVy
dHlXcmFwcGVySFdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckhX
T3BhY2l0eTo6aXNIYXJkd2FyZUFuaW1hdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5
V3JhcHBlckhXT3BhY2l0eTo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFw
cGVySFdUcmFuc2Zvcm06OlByb3BlcnR5V3JhcHBlckhXVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlByb3BlcnR5V3JhcHBlckhXVHJhbnNmb3JtOjppc0hhcmR3YXJlQW5pbWF0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVySFdUcmFuc2Zvcm06OmJsZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OmVuc3VyZVByb3BlcnR5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkFu
aW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9u
QmFzZTo6fkFuaW1hdGlvbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6
YmxlbmRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmlzUHJv
cGVydHlIV0FuaW1hdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnVwZGF0
ZVN0YXRlTWFjaGluZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpmaXJlQW5p
bWF0aW9uRXZlbnRzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6
d2lsbE5lZWRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmdldFRp
bWVUb05leHRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpnb0ludG9F
bmRpbmdPckxvb3BpbmdTdGF0ZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6b25BbmltYXRpb25TdGFy
dFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmdldEFuaW1hdGVk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6aXNBbmltYXRpbmdQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjplbmRBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6aXNGYWxsYmFja0FuaW1hdGluZyk6Cisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5kQW5pbWF0aW9uVXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZWNlaXZl
ZFN0YXJ0VGltZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlVHJhbnNpdGlv
bkF0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpzdHlsZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVG
cm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRUaW1lUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6ZW5kQW5pbWF0aW9u
VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZFRvU3Rh
cnRUaW1lUmVzcG9uc2VXYWl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250
cm9sbGVyOjpyZW1vdmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCk6CisgICAgICAgICog
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAqIHBhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6YW5pbWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpnZXRBbmltYXRlZFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmFkZFRv
U3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVB
bmltYXRpb25Qcml2YXRlOjpyZW1vdmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjphZGRUb1N0YXJ0VGltZVJlc3Bv
bnNlV2FpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpyZW1v
dmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCk6CisgICAgICAgICogcGFnZS9hbmltYXRp
b24vQ29tcG9zaXRlQW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGlj
aXRBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OnNo
b3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5p
bWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpn
ZXRBbmltYXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpz
dGFydEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6ZW5k
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjp3aWxsTmVl
ZFNlcnZpY2UpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmg6
CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmdldEtleWZyYW1lQW5pbWF0aW9uSW50ZXJ2
YWwpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjplbmRBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OndpbGxOZWVkU2VydmljZSk6CisgICAgICAgICog
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbToKKyAgICAgICAgKC1bV2ViQW5pbWF0aW9uRGVsZWdh
dGUgYW5pbWF0aW9uRGlkU3RhcnQ6XSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgor
CiAyMDA5LTAyLTA0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcy4KSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gNDA2MjcpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMCBAQAog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiVW5pdEJlemllci5oIgogCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIFRoZSBlcHNpbG9uIHZhbHVlIHdlIHBhc3MgdG8gVW5pdEJlemllcjo6c29s
dmUgZ2l2ZW4gdGhhdCB0aGUgYW5pbWF0aW9uIGlzIGdvaW5nIHRvIHJ1biBvdmVyIHxkdXJ8IHNl
Y29uZHMuIFRoZSBsb25nZXIgdGhlCkBAIC0xODAsNiArMTg0LDEwIEBAIHB1YmxpYzoKIAogICAg
IGludCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcDsgfQogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgYm9vbCBpc0hhcmR3YXJlQW5pbWF0ZWQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgaW50IG1f
cHJvcDsKIH07CkBAIC0yMjYsNiArMjM0LDQxIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIChSZW5k
ZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKIH07CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJIV09wYWNpdHkgOiBwdWJsaWMgUHJvcGVydHlX
cmFwcGVyPGZsb2F0PiB7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVySFdPcGFjaXR5KCkK
KyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3BhY2l0eSwgJlJl
bmRlclN0eWxlOjpvcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldE9wYWNpdHkpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0hhcmR3YXJlQW5pbWF0ZWQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQW5pbWF0aW9uQmFzZSog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CisgICAgeworICAgICAgICBmbG9hdCBm
cm9tT3BhY2l0eSA9IGEtPm9wYWNpdHkoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgbWFr
ZXMgc3VyZSB3ZSBwdXQgdGhlIG9iamVjdCBiZWluZyBhbmltYXRlZCBpbnRvIGEgUmVuZGVyTGF5
ZXIgZHVyaW5nIHRoZSBhbmltYXRpb24KKyAgICAgICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVu
YyhhbmltLCAoZnJvbU9wYWNpdHkgPT0gMSkgPyAwLjk5OTk5OWYgOiBmcm9tT3BhY2l0eSwgYi0+
b3BhY2l0eSgpLCBwcm9ncmVzcykpOworICAgIH0KK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBl
ckhXVHJhbnNmb3JtIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zJj4geworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckhXVHJhbnNmb3JtKCkKKyAg
ICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyY+KENTU1By
b3BlcnR5V2Via2l0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybSwgJlJlbmRlclN0
eWxlOjpzZXRUcmFuc2Zvcm0pCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wg
aXNIYXJkd2FyZUFuaW1hdGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3Qs
IGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dy
ZXNzKSBjb25zdAorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFu
aW0sIGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9
OworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwogY2xhc3MgUHJvcGVy
dHlXcmFwcGVyU2hhZG93IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxTaGFkb3dEYXRh
Kj4gewogcHVibGljOgogICAgIFByb3BlcnR5V3JhcHBlclNoYWRvdyhpbnQgcHJvcCwgU2hhZG93
RGF0YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoU2hhZG93RGF0YSosIGJvb2wpKQpAQCAtMzY4LDcgKzQxMSw2IEBAIHN0YXRpYyB2
b2lkIGVuc3VyZVByb3BlcnR5TWFwKCkKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZS
ZW5kZXJTdHlsZTo6cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCkp
OwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6cGFkZGluZ1RvcCwg
JlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ0Jv
dHRvbSwgJlJlbmRlclN0eWxlOjpwYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRp
bmdCb3R0b20pKTsKLSAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJTdHlsZTo6b3BhY2l0
eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBDb2xvciY+KENTU1Byb3BlcnR5Q29s
b3IsICZSZW5kZXJTdHlsZTo6Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IpKTsKICAgICAg
ICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IENv
bG9yJj4oQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3Vu
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvcikpOwogICAgICAgICBnUHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0
eUZvbnRTaXplLCAmUmVuZGVyU3R5bGU6OmZvbnRTaXplLCAmUmVuZGVyU3R5bGU6OnNldEJsZW5k
ZWRGb250U2l6ZSkpOwpAQCAtMzg0LDcgKzQyNiw2IEBAIHN0YXRpYyB2b2lkIGVuc3VyZVByb3Bl
cnR5TWFwKCkKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0
eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVdpZHRoKSk7CiAgICAg
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENT
U1Byb3BlcnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMt
PmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlXb3JkU3BhY2luZywg
JlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZykp
OwotICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCAm
UmVuZGVyU3R5bGU6OnRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm0pKTsKICAg
ICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0
aD4oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5z
Zm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCkpOwogICAgICAg
ICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6dHJhbnNmb3Jt
T3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5ZKSk7CiAgICAgICAgIGdQ
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBJbnRTaXpl
Jj4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJv
cmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wTGVmdFJhZGl1cykp
OwpAQCAtMzkzLDYgKzQzNCwxNSBAQCBzdGF0aWMgdm9pZCBlbnN1cmVQcm9wZXJ0eU1hcCgpCiAg
ICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25z
dCBJbnRTaXplJj4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJl
bmRlclN0eWxlOjpib3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJCb3R0b21SaWdodFJhZGl1cykpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8RVZpc2liaWxpdHk+KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwg
JlJlbmRlclN0eWxlOjp2aXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldFZpc2liaWxpdHkpKTsK
ICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eVpvb20sICZSZW5kZXJTdHlsZTo6em9vbSwgJlJlbmRlclN0eWxlOjpz
ZXRab29tKSk7CisgICAgICAgIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVySFdPcGFj
aXR5KCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXJIV1RyYW5zZm9ybSgpKTsKKyNlbHNlCisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVu
ZGVyU3R5bGU6Om9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0T3BhY2l0eSkpOworICAgICAgICBn
UHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6
OnRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm0pKTsKKyNlbmRpZgorCiAgICAg
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IpKTsKICAg
ICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJ
bnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHls
ZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRTdHJva2VDb2xvcikpOwog
ICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXli
ZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHls
ZTo6dGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yKSk7CkBAIC01
MDcsMTMgKzU1NywxMyBAQCBzdGF0aWMgUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlckZvclBy
CiBBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiogdHJhbnNpdGlv
biwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSkK
ICAgICA6IG1fYW5pbVN0YXRlKEFuaW1hdGlvblN0YXRlTmV3KQogICAgICwgbV9pc0FuaW1hdGlu
ZyhmYWxzZSkKLSAgICAsIG1fd2FpdGVkRm9yUmVzcG9uc2UoZmFsc2UpCiAgICAgLCBtX3N0YXJ0
VGltZSgwKQogICAgICwgbV9wYXVzZVRpbWUoLTEpCiAgICAgLCBtX3JlcXVlc3RlZFN0YXJ0VGlt
ZSgwKQogICAgICwgbV9vYmplY3QocmVuZGVyZXIpCiAgICAgLCBtX2FuaW1hdGlvbihjb25zdF9j
YXN0PEFuaW1hdGlvbio+KHRyYW5zaXRpb24pKQogICAgICwgbV9jb21wQW5pbShjb21wQW5pbSkK
KyAgICAsIG1fZmFsbGJhY2tBbmltYXRpbmcoZmFsc2UpCiAgICAgLCBtX3RyYW5zZm9ybUZ1bmN0
aW9uTGlzdFZhbGlkKGZhbHNlKQogICAgICwgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24oLTEpCiAg
ICAgLCBtX25leHQoMCkKQEAgLTUyNiw4ICs1NzYsOCBAQCBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25CYXNlKGNvbnN0IEFuaW1hCiAKIEFuaW1hdGlvbkJhc2U6On5BbmltYXRpb25CYXNlKCkKIHsK
LSAgICBpZiAobV9hbmltU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGVTdGFydFdhaXRTdHlsZUF2YWls
YWJsZSkKLSAgICAgICAgbV9jb21wQW5pbS0+cmVtb3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExp
c3QodGhpcyk7CisgICAgbV9jb21wQW5pbS0+cmVtb3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExp
c3QodGhpcyk7CisgICAgbV9jb21wQW5pbS0+cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2Fp
dExpc3QodGhpcyk7CiB9CiAKIGJvb2wgQW5pbWF0aW9uQmFzZTo6cHJvcGVydGllc0VxdWFsKGlu
dCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCkBAIC01
NzUsMTIgKzYyNSwyOSBAQCBib29sIEFuaW1hdGlvbkJhc2U6OmJsZW5kUHJvcGVydGllcyhjb25z
CiAgICAgUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IHdyYXBwZXJGb3JQcm9wZXJ0eShw
cm9wKTsKICAgICBpZiAod3JhcHBlcikgewogICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBk
c3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgICAgIHJldHVybiAhd3JhcHBlci0+aXNIYXJkd2FyZUFuaW1hdGVkKCk7CisjZWxzZQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK2Jvb2wgQW5pbWF0aW9uQmFzZTo6
aXNQcm9wZXJ0eUhXQW5pbWF0ZWQoaW50IHByb3ApCit7CisgICAgZW5zdXJlUHJvcGVydHlNYXAo
KTsKKyAgICBpbnQgcHJvcEluZGV4ID0gcHJvcCAtIGZpcnN0Q1NTUHJvcGVydHk7CisgICAgaWYg
KHByb3BJbmRleCA8IDAgfHwgcHJvcEluZGV4ID49IG51bUNTU1Byb3BlcnRpZXMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgaW50IGkgPSBnUHJvcGVydHlXcmFwcGVyTWFw
W3Byb3BJbmRleF07CisgICAgcmV0dXJuIChpID49IDApID8gKCpnUHJvcGVydHlXcmFwcGVycylb
aV0tPmlzSGFyZHdhcmVBbmltYXRlZCgpIDogZmFsc2U7Cit9CisjZW5kaWYKKwogdm9pZCBBbmlt
YXRpb25CYXNlOjpzZXRDaGFuZ2VkKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFub2RlIHx8
IChub2RlLT5kb2N1bWVudCgpICYmICFub2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7
CkBAIC02MTQsNyArNjgxLDYgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hp
bmUoQQogICAgICAgICBtX3BhdXNlVGltZSA9IC0xOwogICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0
VGltZSA9IDA7CiAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0gLTE7Ci0gICAgICAg
IG1fd2FpdGVkRm9yUmVzcG9uc2UgPSBmYWxzZTsKICAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY2NSw3ICs3MzEsNiBAQCB2b2lkIEFuaW1h
dGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uU3Rh
dGVOZXc6CiAgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dFN0
YXJ0QW5pbWF0aW9uIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRQbGF5U3RhdGVSdW5u
bmluZyB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0UGxheVN0YXRlUGF1c2VkKTsKICAg
ICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0U3RhcnRBbmltYXRpb24g
fHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dFBsYXlTdGF0ZVJ1bm5uaW5nKSB7Ci0gICAg
ICAgICAgICAgICAgbV93YWl0ZWRGb3JSZXNwb25zZSA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7CiAgICAg
ICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0ZVN0YXJ0V2FpdFRpbWVyOwog
ICAgICAgICAgICAgfQpAQCAtNzAxLDEyICs3NjYsMTggQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1
cGRhdGVTdGF0ZU1hY2hpbmUoQQogICAgICAgICAgICAgb25BbmltYXRpb25TdGFydCgwKTsgLy8g
VGhlIGVsYXBzZWRUaW1lIGlzIGFsd2F5cyAwIGhlcmUKIAogICAgICAgICAgICAgLy8gU3RhcnQg
dGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgaWYgKG92ZXJyaWRkZW4oKSB8fCAhc3RhcnRBbmlt
YXRpb24oMCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGEg
c3RhcnRUaW1lIGNhbGxiYWNrLCBzbyBmaXJlIHRoZSBzdGFydCB0aW1lIGhlcmUKKyAgICAgICAg
ICAgIGlmIChvdmVycmlkZGVuKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSB3b24ndCB0cnkg
dG8gc3RhcnQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJpZGRlbiBhbmQK
KyAgICAgICAgICAgICAgICAvLyBqdXN0IG1vdmUgb24gdG8gdGhlIG5leHQgc3RhdGUuCiAgICAg
ICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0ZVN0YXJ0V2FpdFJlc3BvbnNl
OworICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tBbmltYXRpbmcgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0U3RhcnRUaW1lU2V0
LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5p
bWF0aW9uKDApOworICAgICAgICAgICAgICAgIG1fY29tcEFuaW0tPmFkZFRvU3RhcnRUaW1lUmVz
cG9uc2VXYWl0TGlzdCh0aGlzLCBzdGFydGVkKTsKKyAgICAgICAgICAgICAgICBtX2ZhbGxiYWNr
QW5pbWF0aW5nID0gIXN0YXJ0ZWQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZVN0YXJ0V2FpdFJlc3BvbnNlOgogICAgICAgICAg
ICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRTdGFydFRpbWVTZXQgfHwgaW5w
dXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dFBsYXlTdGF0ZVBhdXNlZCk7CkBAIC03ODksOCArODYw
LDE5IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEEKICAgICAgICAg
ICAgIC8vIEFuaW1hdGlvblN0YXRlUGF1c2VkV2FpdFJlc3BvbnNlLCB3ZSBkb24ndCB5ZXQgaGF2
ZSBhIHZhbGlkIHN0YXJ0VGltZSwgc28gd2Ugc2VuZCAwIHRvIHN0YXJ0QW5pbWF0aW9uLgogICAg
ICAgICAgICAgLy8gV2hlbiB0aGUgQW5pbWF0aW9uU3RhdGVJbnB1dFN0YXJ0VGltZVNldCBjb21l
cyBpbiBhbmQgd2Ugd2VyZSBpbiBBbmltYXRpb25TdGF0ZVBhdXNlZFJ1biwgd2Ugd2lsbCBub3Rp
Y2UKICAgICAgICAgICAgIC8vIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHNldCB0aGUgc3RhcnRUaW1l
IGFuZCB3aWxsIGlnbm9yZSBpdC4KLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRp
b25TdGF0ZUlucHV0UGxheVN0YXRlUnVubm5pbmcpOworICAgICAgICAgICAgQVNTRVJUKGlucHV0
ID09IEFuaW1hdGlvblN0YXRlSW5wdXRQbGF5U3RhdGVSdW5ubmluZyB8fCBpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0U3RhcnRUaW1lU2V0KTsKICAgICAgICAgICAgIEFTU0VSVChwYXVzZWQo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBwYXVzZWQsIGJ1dCB3
ZSBnZXQgdGhlIGNhbGxiYWNrIHRoYXQgbm90aWZpZXMgdXMgdGhhdCBhbiBhY2NlbGVyYXRlZCBh
bmltYXRpb24gc3RhcnRlZCwKKyAgICAgICAgICAgIC8vIHRoZW4gd2UgaWdub3JlIHRoZSBzdGFy
dCB0aW1lIGFuZCBqdXN0IG1vdmUgaW50byB0aGUgcGF1c2VkLXJ1biBzdGF0ZS4KKyAgICAgICAg
ICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZVBhdXNlZFdhaXRSZXNwb25zZSAm
JiBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0U3RhcnRUaW1lU2V0KSB7CisgICAgICAgICAg
ICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0ZVBhdXNlZFJ1bjsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQobV9zdGFydFRpbWUgPT0gMCk7CisgICAgICAgICAgICAgICAgbV9zdGFydFRp
bWUgPSBwYXJhbTsKKyAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSArPSBtX3N0YXJ0VGltZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwogICAgICAgICAgICAgaWYgKG1fYW5pbVN0YXRl
ID09IEFuaW1hdGlvblN0YXRlUGF1c2VkUnVuKQogICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1l
ICs9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWU7CkBAIC04MDIsMTEg
Kzg4NCwxNiBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBCiAgICAg
ICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlU3RhcnRXYWl0UmVzcG9uc2U7CiAK
ICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgIGlmIChvdmVy
cmlkZGVuKCkgfHwgIXN0YXJ0QW5pbWF0aW9uKG1fc3RhcnRUaW1lKSkgewotICAgICAgICAgICAg
ICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byBnZXQgYSBzdGFydFRpbWUgY2FsbGJhY2ssIHNvIGZp
cmUgdGhlIHN0YXJ0IHRpbWUgaGVyZQorICAgICAgICAgICAgaWYgKG92ZXJyaWRkZW4oKSkgewor
ICAgICAgICAgICAgICAgIC8vIFdlIHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmlt
YXRpb25zIGlmIHdlIGFyZSBvdmVycmlkZGVuIGFuZAorICAgICAgICAgICAgICAgIC8vIGp1c3Qg
bW92ZSBvbiB0byB0aGUgbmV4dCBzdGF0ZS4KICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dFN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25VcGRh
dGVUaW1lKCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV93YWl0ZWRG
b3JSZXNwb25zZSA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9mYWxsYmFja0FuaW1hdGluZyA9
IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRl
ZCA9IHN0YXJ0QW5pbWF0aW9uKDApOworICAgICAgICAgICAgICAgIG1fY29tcEFuaW0tPmFkZFRv
U3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCh0aGlzLCBzdGFydGVkKTsKKyAgICAgICAgICAgICAg
ICBtX2ZhbGxiYWNrQW5pbWF0aW5nID0gIXN0YXJ0ZWQ7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZURvbmU6CiAgICAgICAgICAg
ICAvLyBXZSdyZSBkb25lLiBTdGF5IGluIHRoaXMgc3RhdGUgdW50aWwgd2UgYXJlIGRlbGV0ZWQK
QEAgLTgzNSwxNCArOTIyLDE2IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6ZmlyZUFuaW1hdGlvbkV2
ZW50c0kKICAgICB9CiAgICAgCiAgICAgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGJlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWU7Ci0gICAgQVNTRVJUKGVsYXBzZWREdXJh
dGlvbiA+PSAwKTsKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBlbGFwc2Vk
RHVyYXRpb24gaXMgbmV2ZXIgPCAwLiBJZiBpdCBpcywgdGhpcyBzdWdnZXN0cyB0aGF0CisgICAg
Ly8gd2UgaGFkIGEgcmVjYWxjU3R5bGUoKSBvdXRzaWRlIG9mIGJlZ2luQW5pbWF0aW9uVXBkYXRl
KCkvZW5kQW5pbWF0aW9uVXBkYXRlKCkuCisgICAgLy8gQWxzbyBjaGVjayBpbiBnZXRUaW1lVG9O
ZXh0RXZlbnQoKS4KKyAgICBlbGFwc2VkRHVyYXRpb24gPSBtYXgoZWxhcHNlZER1cmF0aW9uLCAw
LjApOwogICAgIAogICAgIC8vIENoZWNrIGZvciBlbmQgdGltZW91dAogICAgIGlmIChtX3RvdGFs
RHVyYXRpb24gPj0gMCAmJiBlbGFwc2VkRHVyYXRpb24gPj0gbV90b3RhbER1cmF0aW9uKSB7CiAg
ICAgICAgIC8vIEZpcmUgYW4gZW5kIGV2ZW50CiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0RW5kVGltZXJGaXJlZCwgbV90b3RhbER1cmF0aW9uKTsKLSAgICB9
Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZXJhdGlv
biB0aW1lb3V0CiAgICAgICAgIGlmIChtX25leHRJdGVyYXRpb25EdXJhdGlvbiA8IDApIHsKICAg
ICAgICAgICAgIC8vIEhhc24ndCBiZWVuIHNldCB5ZXQsIHNldCBpdApAQCAtODY4LDcgKzk1Nyw3
IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlUGxheVN0YXRlKGJvb2wKICAgICAgICAgdXBk
YXRlU3RhdGVNYWNoaW5lKHJ1biA/IEFuaW1hdGlvblN0YXRlSW5wdXRQbGF5U3RhdGVSdW5ubmlu
ZyA6IEFuaW1hdGlvblN0YXRlSW5wdXRQbGF5U3RhdGVQYXVzZWQsIC0xKTsKIH0KIAotZG91Ymxl
IEFuaW1hdGlvbkJhc2U6OndpbGxOZWVkU2VydmljZSgpIGNvbnN0Citkb3VibGUgQW5pbWF0aW9u
QmFzZTo6d2lsbE5lZWRTZXJ2aWNlKCkKIHsKICAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIGF0IHdo
aWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gLTEgbWVhbnMgbm8gc2VydmljZSBpcyByZXF1
aXJlZC4gMCBtZWFucyAKICAgICAvLyBzZXJ2aWNlIGlzIHJlcXVpcmVkIG5vdywgYW5kID4gMCBt
ZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBzZWNvbmRzIGluIHRoZSBmdXR1cmUu
CkBAIC04ODAsNiArOTY5LDggQEAgZG91YmxlIEFuaW1hdGlvbkJhc2U6OndpbGxOZWVkU2Vydmlj
ZSgpIAogICAgICAgICByZXR1cm4gKGZsb2F0KSAoKHRpbWVGcm9tTm93ID4gMCkgPyB0aW1lRnJv
bU5vdyA6IDApOwogICAgIH0KICAgICAKKyAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQo
KTsKKyAgICAgICAgCiAgICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBuZWVkIHNlcnZpY2Ug
cmlnaHQgYXdheS4KICAgICByZXR1cm4gMDsKIH0KQEAgLTkyNiwzMSArMTAxNyw0MCBAQCBkb3Vi
bGUgQW5pbWF0aW9uQmFzZTo6cHJvZ3Jlc3MoZG91YmxlIHNjCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBBbmltYXRpb25CYXNlOjpnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0ZSgpCit2
b2lkIEFuaW1hdGlvbkJhc2U6OmdldFRpbWVUb05leHRFdmVudChkb3VibGUmIHRpbWUsIGJvb2wm
IGlzTG9vcGluZykgY29uc3QKIHsKICAgICAvLyBEZWNpZGUgd2hlbiB0aGUgZW5kIG9yIGxvb3Ag
ZXZlbnQgbmVlZHMgdG8gZmlyZQogICAgIGRvdWJsZSB0b3RhbER1cmF0aW9uID0gLTE7CiAgICAg
aWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKICAgICAgICAgdG90YWxEdXJh
dGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNv
dW50KCk7CiAKLSAgICBjb25zdCBkb3VibGUgZWxhcHNlZER1cmF0aW9uID0gYmVnaW5BbmltYXRp
b25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZTsKLSAgICBBU1NFUlQoZWxhcHNlZER1cmF0aW9u
ID49IDApOworICAgIGNvbnN0IGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBtYXgoYmVnaW5Bbmlt
YXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZSwgMC4wKTsKICAgICBkb3VibGUgZHVyYXRp
b25MZWZ0ID0gMDsKLSAgICBkb3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSB0b3RhbER1cmF0aW9u
OworICAgIGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9IG1fdG90YWxEdXJhdGlvbjsKIAotICAg
IGlmICh0b3RhbER1cmF0aW9uIDwgMCB8fCBlbGFwc2VkRHVyYXRpb24gPCB0b3RhbER1cmF0aW9u
KSB7CisgICAgaWYgKG1fdG90YWxEdXJhdGlvbiA8IDAgfHwgZWxhcHNlZER1cmF0aW9uIDwgbV90
b3RhbER1cmF0aW9uKSB7CiAgICAgICAgIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJh
dGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsK
ICAgICAgICAgbmV4dEl0ZXJhdGlvblRpbWUgPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxl
ZnQ7CiAgICAgfQotCi0gICAgaWYgKHRvdGFsRHVyYXRpb24gPCAwIHx8IG5leHRJdGVyYXRpb25U
aW1lIDwgdG90YWxEdXJhdGlvbikgeworICAgIAorICAgIGlmIChtX3RvdGFsRHVyYXRpb24gPCAw
IHx8IG5leHRJdGVyYXRpb25UaW1lIDwgbV90b3RhbER1cmF0aW9uKSB7CiAgICAgICAgIC8vIFdl
IGFyZSBub3QgYXQgdGhlIGVuZCB5ZXQKICAgICAgICAgQVNTRVJUKG5leHRJdGVyYXRpb25UaW1l
ID4gMCk7Ci0gICAgICAgIG1fYW5pbVN0YXRlID0gQW5pbWF0aW9uU3RhdGVMb29waW5nOworICAg
ICAgICBpc0xvb3BpbmcgPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGFyZSBh
dCB0aGUgZW5kCi0gICAgICAgIG1fYW5pbVN0YXRlID0gQW5pbWF0aW9uU3RhdGVFbmRpbmc7Cisg
ICAgICAgIGlzTG9vcGluZyA9IGZhbHNlOwogICAgIH0KKyAgICAKKyAgICB0aW1lID0gZHVyYXRp
b25MZWZ0OworfQorCit2b2lkIEFuaW1hdGlvbkJhc2U6OmdvSW50b0VuZGluZ09yTG9vcGluZ1N0
YXRlKCkKK3sKKyAgICBkb3VibGUgdDsKKyAgICBib29sIGlzTG9vcGluZzsKKyAgICBnZXRUaW1l
VG9OZXh0RXZlbnQodCwgaXNMb29waW5nKTsKKyAgICBtX2FuaW1TdGF0ZSA9IGlzTG9vcGluZyA/
IEFuaW1hdGlvblN0YXRlTG9vcGluZyA6IEFuaW1hdGlvblN0YXRlRW5kaW5nOwogfQogICAKIHZv
aWQgQW5pbWF0aW9uQmFzZTo6cGF1c2VBdFRpbWUoZG91YmxlIHQpCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gNDA2MjcpCisrKyBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1TdGF0ZUlucHV0
LCBkb3VibGUgcGFyYW0pOwogCiAgICAgLy8gQW5pbWF0aW9uIGhhcyBhY3R1YWxseSBzdGFydGVk
LCBhdCBwYXNzZWQgdGltZQotICAgIHZvaWQgb25BbmltYXRpb25TdGFydFJlc3BvbnNlKGRvdWJs
ZSBzdGFydFRpbWUpOworICAgIHZvaWQgb25BbmltYXRpb25TdGFydFJlc3BvbnNlKGRvdWJsZSBz
dGFydFRpbWUpCisgICAgeworICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uU3RhdGVJbnB1dFN0YXJ0VGltZVNldCwgc3RhcnRUaW1lKTsKKyAgICB9CiAK
ICAgICAvLyBDYWxsZWQgdG8gY2hhbmdlIHRvIG9yIGZyb20gcGF1c2VkIHN0YXRlCiAgICAgdm9p
ZCB1cGRhdGVQbGF5U3RhdGUoYm9vbCBydW5uaW5nKTsKQEAgLTExNywxMiArMTIwLDEzIEBAIHB1
YmxpYzoKICAgICAvLyAiYW5pbWF0aW5nIiBtZWFucyB0aGF0IHNvbWV0aGluZyBpcyBydW5uaW5n
IHRoYXQgcmVxdWlyZXMgYSB0aW1lciB0byBrZWVwIGZpcmluZwogICAgIC8vIChlLmcuIGEgc29m
dHdhcmUgYW5pbWF0aW9uKQogICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRpbmcg
PSB0cnVlKSB7IG1faXNBbmltYXRpbmcgPSBpbkFuaW1hdGluZzsgfQotICAgIGRvdWJsZSB3aWxs
TmVlZFNlcnZpY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB3aWxsTmVlZFNlcnZpY2Uo
KTsKIAogICAgIGRvdWJsZSBwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQsIGNv
bnN0IFRpbWluZ0Z1bmN0aW9uKikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShD
b21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogLypj
dXJyZW50U3R5bGUqLywgCiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxl
Ki8sIFJlZlB0cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShSZWZQdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVk
U3R5bGUqLykgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmlyZUV2ZW50cygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAgLTE0Miw2ICsxNDYsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQgLypwcm9wZXJ0eSovKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJv
b2wgaXNSdW5uaW5nTm93KSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKG1fZmFsbGJhY2tBbmlt
YXRpbmcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKICAgICAgICAg
aWYgKGlzUnVubmluZ05vdykKICAgICAgICAgICAgIHJldHVybiAoIXdhaXRpbmdUb1N0YXJ0KCkg
JiYgIXBvc3RBY3RpdmUoKSkgJiYgYWZmZWN0c1Byb3BlcnR5KHByb3BlcnR5KTsKIApAQCAtMTc2
LDIzICsxODMsMzAgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkl0
ZXJhdGlvbihkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgb25B
bmltYXRpb25FbmQoZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9CiAgICAgdmlydHVhbCBib29s
IHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSAvKmJlZ2luVGltZSovKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCAvKnJlc2V0Ki8pIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCAvKnJlc2V0Ki8sIGRvdWJsZSAvKmZvcmNlUGF1
c2VUaW1lKi8gPSAtMSkgeyB9CiAKICAgICB2b2lkIGdvSW50b0VuZGluZ09yTG9vcGluZ1N0YXRl
KCk7CiAKKyAgICBib29sIGlzRmFsbGJhY2tBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2Zh
bGxiYWNrQW5pbWF0aW5nOyB9CisKICAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoaW50
IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CiAgICAg
c3RhdGljIGludCBnZXRQcm9wZXJ0eUF0SW5kZXgoaW50LCBib29sJiBpc1Nob3J0aGFuZCk7CiAg
ICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKICAgICBzdGF0aWMg
Ym9vbCBibGVuZFByb3BlcnRpZXMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgaW50IHByb3As
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKTsKLSAgICAKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5SFdBbmltYXRlZChpbnQgcHJvcCk7
CisjZW5kaWYKKwogICAgIHN0YXRpYyB2b2lkIHNldENoYW5nZWQoTm9kZSopOworICAgIAorICAg
IHZvaWQgZ2V0VGltZVRvTmV4dEV2ZW50KGRvdWJsZSYgdGltZSwgYm9vbCYgaXNMb29waW5nKSBj
b25zdDsKIAogICAgIEFuaW1TdGF0ZSBtX2FuaW1TdGF0ZTsKIAogICAgIGJvb2wgbV9pc0FuaW1h
dGluZzsgICAgICAgLy8gdHJhbnNpdGlvbi9hbmltYXRpb24gcmVxdWlyZXMgY29udGludWFsIHRp
bWVyIGZpcmluZwotICAgIGJvb2wgbV93YWl0ZWRGb3JSZXNwb25zZTsKICAgICBkb3VibGUgbV9z
dGFydFRpbWU7CiAgICAgZG91YmxlIG1fcGF1c2VUaW1lOwogICAgIGRvdWJsZSBtX3JlcXVlc3Rl
ZFN0YXJ0VGltZTsKQEAgLTIwMCw2ICsyMTQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8
QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKICAgICBDb21wb3NpdGVBbmltYXRpb24qIG1fY29tcEFu
aW07CisgICAgYm9vbCBtX2ZhbGxiYWNrQW5pbWF0aW5nOyAgICAgICAvLyB0cnVlIGlmIGFueSBh
bmltYXRpb24gcmV0dXJuZWQgZmFsc2UgZnJvbSBzdGFydEFuaW1hdGlvbigpCiAgICAgYm9vbCBt
X3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkOwogICAgIGRvdWJsZSBtX3RvdGFsRHVyYXRpb24s
IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uOwogICAgIApJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MDYyNykKKysrIFdl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9u
cyhEb2N1bWVudCopOwogICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhEb2N1bWVudCopOwogCi0g
ICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpOwotCiAgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5
T25SZW5kZXJlcihSZW5kZXJPYmplY3QqLCBpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5nTm93
KSBjb25zdDsKIAogICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgdCk7CiAgICAgYm9vbCBwYXVzZVRyYW5zaXRpb25B
dFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOwog
ICAgIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0OwogCisgICAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlck9i
amVjdCogcmVuZGVyZXIpOworCiAgICAgZG91YmxlIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgp
CiAgICAgewogICAgICAgICBpZiAobV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUgPT0gY0JlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZU5vdFNldCkKQEAgLTc4LDExICs3OCwyOSBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogICAgIHZvaWQgc2V0QmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKGRvdWJsZSB0
KSB7IG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gdDsgfQorICAgIHZvaWQgZW5kQW5pbWF0
aW9uVXBkYXRlKCkKKyAgICB7CisgICAgICAgIHN0eWxlQXZhaWxhYmxlKCk7CisgICAgICAgIGlm
ICghbV93YWl0aW5nRm9yQVJlc3BvbnNlKQorICAgICAgICAgICAgc3RhcnRUaW1lUmVzcG9uc2Uo
YmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlY2Vp
dmVkU3RhcnRUaW1lUmVzcG9uc2UoZG91YmxlIHQpCisgICAgeworICAgICAgICBtX3dhaXRpbmdG
b3JBUmVzcG9uc2UgPSBmYWxzZTsKKyAgICAgICAgc3RhcnRUaW1lUmVzcG9uc2UodCk7CisgICAg
fQogICAgIAogICAgIHZvaWQgYWRkVG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJh
c2UqKTsKICAgICB2b2lkIHJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlv
bkJhc2UqKTsgICAgCiAgICAgCisgICAgdm9pZCBhZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExp
c3QoQW5pbWF0aW9uQmFzZSosIGJvb2wgd2lsbEdldFJlc3BvbnNlKTsKKyAgICB2b2lkIHJlbW92
ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsgICAgCisgICAg
dm9pZCBzdGFydFRpbWVSZXNwb25zZShkb3VibGUgdCk7CisgICAgCiBwcml2YXRlOgorICAgIHZv
aWQgc3R5bGVBdmFpbGFibGUoKTsKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3Qq
LCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPiA+IFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDsK
IAogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcCBtX2NvbXBvc2l0ZUFuaW1hdGlvbnM7CkBA
IC0xMDQsNiArMTIyLDEwIEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fYmVnaW5BbmltYXRpb25V
cGRhdGVUaW1lOwogICAgIEFuaW1hdGlvbkJhc2UqIG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJzOwog
ICAgIEFuaW1hdGlvbkJhc2UqIG1fbGFzdFN0eWxlQXZhaWxhYmxlV2FpdGVyOworICAgIAorICAg
IEFuaW1hdGlvbkJhc2UqIG1fcmVzcG9uc2VXYWl0ZXJzOworICAgIEFuaW1hdGlvbkJhc2UqIG1f
bGFzdFJlc3BvbnNlV2FpdGVyOworICAgIGJvb2wgbV93YWl0aW5nRm9yQVJlc3BvbnNlOwogfTsK
IAogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
KEZyYW1lKiBmcmFtZSkKQEAgLTExMyw2ICsxMzUsOSBAQCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6QW5pbWF0aW9uQ29uCiAgICAgLCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZShjQmVn
aW5BbmltYXRpb25VcGRhdGVUaW1lTm90U2V0KQogICAgICwgbV9zdHlsZUF2YWlsYWJsZVdhaXRl
cnMoMCkKICAgICAsIG1fbGFzdFN0eWxlQXZhaWxhYmxlV2FpdGVyKDApCisgICAgLCBtX3Jlc3Bv
bnNlV2FpdGVycygwKQorICAgICwgbV9sYXN0UmVzcG9uc2VXYWl0ZXIoMCkKKyAgICAsIG1fd2Fp
dGluZ0ZvckFSZXNwb25zZShmYWxzZSkKIHsKIH0KIApAQCAtMjk0LDYgKzMxOSw3IEBAIGJvb2wg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlQW4KIAogICAgIGlmIChjb21wQW5pbS0+
cGF1c2VBbmltYXRpb25BdFRpbWUobmFtZSwgdCkpIHsKICAgICAgICAgcmVuZGVyZXItPm5vZGUo
KS0+c2V0Q2hhbmdlZChBbmltYXRpb25TdHlsZUNoYW5nZSk7CisgICAgICAgIHN0YXJ0VXBkYXRl
UmVuZGVyaW5nRGlzcGF0Y2hlcigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTMxMSwxMiArMzM3LDIzIEBAIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNl
VHIKIAogICAgIGlmIChjb21wQW5pbS0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGNzc1Byb3BlcnR5
SUQocHJvcGVydHkpLCB0KSkgewogICAgICAgICByZW5kZXJlci0+bm9kZSgpLT5zZXRDaGFuZ2Vk
KEFuaW1hdGlvblN0eWxlQ2hhbmdlKTsKKyAgICAgICAgc3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNw
YXRjaGVyKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQor
eworICAgIC8vIE1ha2Ugc3VyZSBhbmltYXRpb25VcGRhdGVUaW1lIGlzIHVwZGF0ZWQsIHNvIHRo
YXQgaXQgaXMgY3VycmVudCBldmVuIGlmIG5vCisgICAgLy8gc3R5bGVDaGFuZ2UgaGFzIGhhcHBl
bmVkIChlLmcuIGhhcmR3YXJlIGFuaW1hdGlvbnMpCisgICAgc2V0QmVnaW5BbmltYXRpb25VcGRh
dGVUaW1lKGNCZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWVOb3RTZXQpOworCisgICAgUmVmUHRyPENv
bXBvc2l0ZUFuaW1hdGlvbj4gcmVuZGVyZXJBbmltYXRpb25zID0gYWNjZXNzQ29tcG9zaXRlQW5p
bWF0aW9uKHJlbmRlcmVyKTsKKyAgICByZXR1cm4gcmVuZGVyZXJBbmltYXRpb25zLT5nZXRBbmlt
YXRlZFN0eWxlKCk7Cit9CisKIHVuc2lnbmVkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewogICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKQEAgLTM2NCwxMyArNDAxLDgyIEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlbW92ZUYKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0eWxlQXZhaWxhYmxl
KCkKIHsKICAgICAvLyBHbyB0aHJvdWdoIGxpc3Qgb2Ygd2FpdGVycyBhbmQgc2VuZCB0aGVtIG9u
IHRoZWlyIHdheQotICAgIGZvciAoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uID0gbV9zdHlsZUF2
YWlsYWJsZVdhaXRlcnM7IGFuaW1hdGlvbjsgYW5pbWF0aW9uID0gYW5pbWF0aW9uLT5uZXh0KCkp
CisgICAgZm9yIChBbmltYXRpb25CYXNlKiBhbmltYXRpb24gPSBtX3N0eWxlQXZhaWxhYmxlV2Fp
dGVyczsgYW5pbWF0aW9uOyApIHsKKyAgICAgICAgQW5pbWF0aW9uQmFzZSogbmV4dEFuaW1hdGlv
biA9IGFuaW1hdGlvbi0+bmV4dCgpOworICAgICAgICBhbmltYXRpb24tPnNldE5leHQoMCk7CiAg
ICAgICAgIGFuaW1hdGlvbi0+c3R5bGVBdmFpbGFibGUoKTsKKyAgICAgICAgYW5pbWF0aW9uID0g
bmV4dEFuaW1hdGlvbjsKKyAgICB9CiAgICAgCiAgICAgbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMg
PSAwOwogICAgIG1fbGFzdFN0eWxlQXZhaWxhYmxlV2FpdGVyID0gMDsKIH0KIAordm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFu
aW1hdGlvbkJhc2UqIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpCit7CisgICAgLy8g
SWYgd2lsbEdldFJlc3BvbnNlIGlzIHRydWUsIGl0IG1lYW5zIHRoaXMgYW5pbWF0aW9uIGlzIGFj
dHVhbGx5IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UKKyAgICAvLyAod2hpY2ggd2lsbCBjb21lIGlu
IGFzIGEgY2FsbCB0byBub3RpZnlBbmltYXRpb25TdGFydGVkKCkpLgorICAgIC8vIEluIHRoYXQg
Y2FzZSB3ZSBkb24ndCBuZWVkIHRvIGFkZCBpdCB0byB0aGlzIGxpc3QuIFdlIGp1c3Qgc2V0IGEg
d2FpdGluZ0ZvckFSZXNwb25zZSBmbGFnIAorICAgIC8vIHdoaWNoIHNheXMgd2UgYXJlIHdhaXRp
bmcgZm9yIHRoZSByZXNwb25zZS4gSWYgd2lsbEdldFJlc3BvbnNlIGlzIGZhbHNlLCB0aGlzIGFu
aW1hdGlvbiAKKyAgICAvLyBpcyBub3Qgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmb3IgaXRzZWxm
LCBidXQgcmF0aGVyIGZvciBhIG5vdGlmeVhYWFN0YXJ0ZWQoKSBjYWxsIGZvciAKKyAgICAvLyBh
bm90aGVyIGFuaW1hdGlvbiB0byB3aGljaCBpdCB3aWxsIHN5bmMuCisgICAgLy8KKyAgICAvLyBX
aGVuIGVuZEFuaW1hdGlvblVwZGF0ZSgpIGlzIGNhbGxlZCB3ZSBjaGVjayB0byBzZWUgaWYgdGhl
IHdhaXRpbmdGb3JBUmVzcG9uc2UgZmxhZyBpcworICAgIC8vIHRydWUuIElmIHNvLCB3ZSBqdXN0
IHJldHVybiBhbmQgd2lsbCBkbyBvdXIgd29yayB3aGVuIHRoZSBmaXJzdCBub3RpZnlYWFhTdGFy
dGVkKCkgY2FsbAorICAgIC8vIGNvbWVzIGluLiBJZiBpdCBpcyBmYWxzZSwgd2Ugd2lsbCBub3Qg
YmUgZ2V0dGluZyBhIG5vdGlmeVhYWFN0YXJ0ZWQoKSBjYWxsLCBzbyB3ZSB3aWxsCisgICAgLy8g
ZG8gb3VyIHdvcmsgcmlnaHQgYXdheS4gSW4gYm90aCBjYXNlcyB3ZSBjYWxsIHRoZSBvbkFuaW1h
dGlvblN0YXJ0UmVzcG9uc2UoKSBtZXRob2QKKyAgICAvLyBvbiBlYWNoIGFuaW1hdGlvbi4gSW4g
dGhlIGZpcnN0IGNhc2Ugd2Ugc2VuZCBpbiB0aGUgdGltZSB3ZSBnb3QgZnJvbSBub3RpZnlYWFhT
dGFydGVkKCkuCisgICAgLy8gSW4gdGhlIHNlY29uZCBjYXNlLCB3ZSBqdXN0IHBhc3MgaW4gdGhl
IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpLgorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHN5
bmNocm9uaXplIGFsbCBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgYW5pbWF0aW9ucyBzdGFydGVkIGlu
IHRoZSBzYW1lIAorICAgIC8vIHVwZGF0ZVJlbmRlcmluZyBjeWNsZS4KKyAgICAvLworICAgIEFT
U0VSVCghYW5pbWF0aW9uLT5uZXh0KCkpOworICAgIAorICAgIGlmICh3aWxsR2V0UmVzcG9uc2Up
CisgICAgICAgIG1fd2FpdGluZ0ZvckFSZXNwb25zZSA9IHRydWU7CisgICAgCisgICAgaWYgKG1f
cmVzcG9uc2VXYWl0ZXJzKQorICAgICAgICBtX2xhc3RSZXNwb25zZVdhaXRlci0+c2V0TmV4dChh
bmltYXRpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9yZXNwb25zZVdhaXRlcnMgPSBhbmltYXRp
b247CisgICAgICAgIAorICAgIG1fbGFzdFJlc3BvbnNlV2FpdGVyID0gYW5pbWF0aW9uOworICAg
IGFuaW1hdGlvbi0+c2V0TmV4dCgwKTsKK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSog
YW5pbWF0aW9uVG9SZW1vdmUpCit7CisgICAgQW5pbWF0aW9uQmFzZSogcHJldkFuaW1hdGlvbiA9
IDA7CisgICAgZm9yIChBbmltYXRpb25CYXNlKiBhbmltYXRpb24gPSBtX3Jlc3BvbnNlV2FpdGVy
czsgYW5pbWF0aW9uOyBhbmltYXRpb24gPSBhbmltYXRpb24tPm5leHQoKSkgeworICAgICAgICBp
ZiAoYW5pbWF0aW9uID09IGFuaW1hdGlvblRvUmVtb3ZlKSB7CisgICAgICAgICAgICBpZiAocHJl
dkFuaW1hdGlvbikKKyAgICAgICAgICAgICAgICBwcmV2QW5pbWF0aW9uLT5zZXROZXh0KGFuaW1h
dGlvbi0+bmV4dCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Jlc3Bv
bnNlV2FpdGVycyA9IGFuaW1hdGlvbi0+bmV4dCgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAobV9sYXN0UmVzcG9uc2VXYWl0ZXIgPT0gYW5pbWF0aW9uKQorICAgICAgICAgICAgICAg
IG1fbGFzdFJlc3BvbnNlV2FpdGVyID0gcHJldkFuaW1hdGlvbjsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGFuaW1hdGlvblRvUmVtb3ZlLT5zZXROZXh0KDApOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNw
b25zZShkb3VibGUgdCkKK3sKKyAgICAvLyBHbyB0aHJvdWdoIGxpc3Qgb2Ygd2FpdGVycyBhbmQg
c2VuZCB0aGVtIG9uIHRoZWlyIHdheQorICAgIGZvciAoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9u
ID0gbV9yZXNwb25zZVdhaXRlcnM7IGFuaW1hdGlvbjsgKSB7CisgICAgICAgIEFuaW1hdGlvbkJh
c2UqIG5leHRBbmltYXRpb24gPSBhbmltYXRpb24tPm5leHQoKTsKKyAgICAgICAgYW5pbWF0aW9u
LT5zZXROZXh0KDApOworICAgICAgICBhbmltYXRpb24tPm9uQW5pbWF0aW9uU3RhcnRSZXNwb25z
ZSh0KTsKKyAgICAgICAgYW5pbWF0aW9uID0gbmV4dEFuaW1hdGlvbjsKKyAgICB9CisgICAgCisg
ICAgbV9yZXNwb25zZVdhaXRlcnMgPSAwOworICAgIG1fcmVzcG9uc2VXYWl0ZXJzID0gMDsKK30K
KwogQW5pbWF0aW9uQ29udHJvbGxlcjo6QW5pbWF0aW9uQ29udHJvbGxlcihGcmFtZSogZnJhbWUp
CiAgICAgOiBtX2RhdGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKGZyYW1lKSkKIHsK
QEAgLTQyNSwxNiArNTMxLDE0IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IEFuaW1hdGlvbkNv
bnRyb2wKICAgICByZXR1cm4gYmxlbmRlZFN0eWxlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBBbmlt
YXRpb25Db250cm9sbGVyOjpzZXRBbmltYXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgZG91YmxlIHQpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBBbmltYXRpb25Db250cm9s
bGVyOjpnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
IHsKLSAgICBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPiByZW5kZXJlckFuaW1hdGlvbnMgPSBt
X2RhdGEtPmFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihyZW5kZXJlcik7Ci0gICAgcmVuZGVyZXJB
bmltYXRpb25zLT5zZXRBbmltYXRpb25TdGFydFRpbWUodCk7CisgICAgcmV0dXJuIG1fZGF0YS0+
Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKIH0KIAotdm9pZCBBbmltYXRp
b25Db250cm9sbGVyOjpzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGludCBwcm9wZXJ0eSwgZG91YmxlIHQpCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6Om5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlIHQpCiB7Ci0gICAgUmVmUHRyPENvbXBvc2l0ZUFu
aW1hdGlvbj4gcmVuZGVyZXJBbmltYXRpb25zID0gbV9kYXRhLT5hY2Nlc3NDb21wb3NpdGVBbmlt
YXRpb24ocmVuZGVyZXIpOwotICAgIHJlbmRlcmVyQW5pbWF0aW9ucy0+c2V0VHJhbnNpdGlvblN0
YXJ0VGltZShwcm9wZXJ0eSwgdCk7CisgICAgbV9kYXRhLT5yZWNlaXZlZFN0YXJ0VGltZVJlc3Bv
bnNlKHQpOwogfQogCiBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRU
aW1lKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIHQp
CkBAIC00OTYsNyArNjAwLDcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpiZWdpbkFuaW1h
dGlvbgogCiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmVuZEFuaW1hdGlvblVwZGF0ZSgpCiB7
Ci0gICAgbV9kYXRhLT5zdHlsZUF2YWlsYWJsZSgpOworICAgIG1fZGF0YS0+ZW5kQW5pbWF0aW9u
VXBkYXRlKCk7CiB9CiAKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkVG9TdHlsZUF2YWls
YWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbikKQEAgLTUwOSw0ICs2MTMsMTQg
QEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVGcm9tU3R5bAogICAgIG1fZGF0YS0+
cmVtb3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExpc3QoYW5pbWF0aW9uKTsKIH0KIAordm9pZCBB
bmltYXRpb25Db250cm9sbGVyOjphZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0
aW9uQmFzZSogYW5pbWF0aW9uLCBib29sIHdpbGxHZXRSZXNwb25zZSkKK3sKKyAgICBtX2RhdGEt
PmFkZFRvU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdChhbmltYXRpb24sIHdpbGxHZXRSZXNwb25z
ZSk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlRnJvbVN0YXJ0VGltZVJl
c3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQoreworICAgIG1fZGF0YS0+
cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoYW5pbWF0aW9uKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDQwNjI3KQorKysgV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1MSwx
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7
CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gdXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqKTsKIAotICAgIHZvaWQg
c2V0QW5pbWF0aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCosIGRvdWJsZSB0KTsKLSAgICB2b2lk
IHNldFRyYW5zaXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiwgaW50IHByb3BlcnR5LCBkb3Vi
bGUgdCk7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBhbiBhY2NlbGVyYXRlZCBhbmltYXRp
b24gb3IgdHJhbnNpdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCB0byBhbmltYXRlCisgICAgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0KTsKIAogICAgIGJvb2wgcGF1c2VBbmlt
YXRpb25BdFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgdCk7
IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZwogICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9u
QXRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsg
Ly8gVG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKCkgY29uc3Q7IC8vIFRvIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZwogICAg
IAotICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIoUmVuZGVyT2JqZWN0Kiwg
aW50IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05vdykgY29uc3Q7CisgICAgYm9vbCBpc0FuaW1h
dGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqLCBpbnQgcHJvcGVydHksIGJvb2wg
aXNSdW5uaW5nTm93ID0gdHJ1ZSkgY29uc3Q7CiAKICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25z
KERvY3VtZW50Kik7CiAgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKERvY3VtZW50Kik7CkBAIC03
MSw2ICs3Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlz
dChBbmltYXRpb25CYXNlKik7CiAgICAgdm9pZCByZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0
TGlzdChBbmltYXRpb25CYXNlKik7CiAKKyAgICB2b2lkIGFkZFRvU3RhcnRUaW1lUmVzcG9uc2VX
YWl0TGlzdChBbmltYXRpb25CYXNlKiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOworICAgIHZvaWQg
cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSopOworCiAg
ICAgZG91YmxlIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwogICAgIAogICAgIHZvaWQgYmVn
aW5BbmltYXRpb25VcGRhdGUoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDQwNjI3KQorKysgV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyUmVuZGVyZXIoKTsKIAogICAgIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCk7CiAKICAgICBBbmltYXRpb25Db250cm9sbGVyKiBh
bmltYXRpb25Db250cm9sbGVyKCkgIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQog
CkBAIC02Myw5ICs2NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYW51cEZpbmlzaGVkQW5p
bWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKIAotICAgIHZvaWQgc2V0QW5pbWF0aW9uU3RhcnRUaW1l
KGRvdWJsZSB0KTsKLSAgICB2b2lkIHNldFRyYW5zaXRpb25TdGFydFRpbWUoaW50IHByb3BlcnR5
LCBkb3VibGUgdCk7Ci0KICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgdm9pZCBy
ZXN1bWVBbmltYXRpb25zKCk7CiAgICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNTdXNwZW5kZWQ7IH0KQEAgLTgwLDYgKzc4LDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRk
VG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKICAgICB2b2lkIHJlbW92
ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKIAorICAgIHZvaWQg
YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqLCBib29sIHdpbGxH
ZXRSZXNwb25zZSk7CisgICAgdm9pZCByZW1vdmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlz
dChBbmltYXRpb25CYXNlKik7CisKICAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgZG91YmxlIHQpOwogICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9u
QXRUaW1lKGludCBwcm9wZXJ0eSwgZG91YmxlIHQpOwogICAgIHVuc2lnbmVkIG51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucygpIGNvbnN0OwpAQCAtOTQsNiArOTUsNyBAQCBwcml2YXRlOgogCiAgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcCBtX3RyYW5zaXRpb25zOwogICAgIEFuaW1hdGlvbk5h
bWVNYXAgbV9rZXlmcmFtZUFuaW1hdGlvbnM7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZ0ltcGwq
PiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXA7CiAgICAgYm9vbCBtX2lzU3VzcGVuZGVkOwog
ICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKICAgICBDb21w
b3NpdGVBbmltYXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOwpAQCAtMTI2LDkgKzEyOCwxMSBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmNsZWFyUmVuCiAgICAgICAgIH0KICAg
ICB9CiB9Ci0gICAgCisKIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHJh
bnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogeworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
bW9kaWZpZWRDdXJyZW50U3R5bGU7CisgICAgCiAgICAgLy8gSWYgY3VycmVudFN0eWxlIGlzIG51
bGwsIHdlIGRvbid0IGRvIHRyYW5zaXRpb25zCiAgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgIXRh
cmdldFN0eWxlLT50cmFuc2l0aW9ucygpKQogICAgICAgICByZXR1cm47CkBAIC0xNzYsNiArMTgw
LDE3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHIKICAgICAgICAg
ICAgICAgICAvLyBsaXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBsYXR0ZXIgb25lIG92ZXJyaWRlcyB0
aGUgZWFybGllciBvbmUsIHNvIHdlCiAgICAgICAgICAgICAgICAgLy8gYmVoYXZlIGFzIHRob3Vn
aCB0aGlzIGlzIGEgcnVubmluZyBhbmltYXRpb24gYmVpbmcgcmVwbGFjZWQuCiAgICAgICAgICAg
ICAgICAgaWYgKCFpbXBsQW5pbS0+aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKHByb3AsIHRhcmdldFN0
eWxlKSkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yIGhhcmR3YXJlIGFuaW1hdGlvbnMgd2UgbmVlZCB0byByZXR1cm4gYSBuZXcg
UmVuZGVyU3R5bGUgd2l0aCB0aGUgX2N1cnJlbnRfIHZhbHVlCisgICAgICAgICAgICAgICAgICAg
IC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0ZWQgdHJhbnNpdGlvbnMgdXNlIHRo
ZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgorICAgICAgICAgICAgICAgICAgICBpZiAoQW5pbWF0
aW9uQmFzZTo6aXNQcm9wZXJ0eUhXQW5pbWF0ZWQocHJvcCkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZWRDdXJyZW50U3R5bGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRDdXJyZW50U3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y2xvbmUoY3VycmVudFN0eWxlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaW1w
bEFuaW0tPmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUocHJvcCwgbW9kaWZpZWRDdXJyZW50U3R5
bGUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICAg
ICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcCk7CiAgICAgICAgICAgICAgICAgICAgIGVx
dWFsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTg2LDcgKzIwMSw3IEBAIHZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHIKIAogICAgICAgICAgICAgaWYgKCFl
cXVhbCkgewogICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KLSAgICAg
ICAgICAgICAgICBtX3RyYW5zaXRpb25zLnNldChwcm9wLCBJbXBsaWNpdEFuaW1hdGlvbjo6Y3Jl
YXRlKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4oYW5pbSksIHByb3AsIHJlbmRlcmVyLCBtX2NvbXBv
c2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CisgICAgICAgICAgICAgICAgbV90cmFuc2l0aW9u
cy5zZXQocHJvcCwgSW1wbGljaXRBbmltYXRpb246OmNyZWF0ZShjb25zdF9jYXN0PEFuaW1hdGlv
bio+KGFuaW0pLCBwcm9wLCByZW5kZXJlciwgbV9jb21wb3NpdGVBbmltYXRpb24sIG1vZGlmaWVk
Q3VycmVudFN0eWxlID8gbW9kaWZpZWRDdXJyZW50U3R5bGUuZ2V0KCkgOiBmcm9tU3R5bGUpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVk
IG9uZSBwYXNzIGZvciB0aGUgc2luZ2xlIHByb3AgY2FzZQpAQCAtMjEwLDYgKzIyNSw5IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlS2UKICAgICBBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwog
ICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkKICAgICAgICAgaXQtPnNlY29u
ZC0+c2V0SW5kZXgoLTEpOworICAgICAgICAKKyAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3Jk
ZXIgbWFwCisgICAgbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmNsZWFyKCk7CiAgICAgCiAg
ICAgLy8gTm93IG1hcmsgYW55IHN0aWxsIGFjdGl2ZSBhbmltYXRpb25zIGFzIGFjdGl2ZSBhbmQg
YWRkIGFueSBuZXcgYW5pbWF0aW9ucwogICAgIGlmICh0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygp
KSB7CkBAIC0yMzcsNiArMjU1LDEwIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6
dXBkYXRlS2UKICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0gPSBLZXlmcmFtZUFuaW1hdGlv
bjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4oYW5pbSksIHJlbmRlcmVyLCBpLCBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbiwgY3VycmVudFN0eWxlID8gY3VycmVudFN0eWxlIDogdGFyZ2V0U3R5
bGUpOwogICAgICAgICAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLnNldChrZXlmcmFtZUFu
aW0tPm5hbWUoKS5pbXBsKCksIGtleWZyYW1lQW5pbSk7CiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEFkZCB0aGlzIHRvIHRoZSBhbmltYXRpb24gb3JkZXIgbWFw
CisgICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQorICAgICAgICAgICAgICAgIG1fa2V5ZnJh
bWVBbmltYXRpb25PcmRlck1hcC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1lKCkuaW1wbCgpKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMjc4LDE3ICszMDAsMTAgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aQogCiAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhbmlt
YXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0aGUgbmV3IGdvYWwgc3Rh
dGUuICBXZSB3YW50IHRoZW0KICAgICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5
IGlmIG5lZWRlZC4KLSAgICBpZiAodGFyZ2V0U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBbmltYXRpb24qIGFuaW0gPSB0YXJnZXRT
dHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7Ci0KLSAgICAgICAgICAgIGlmIChhbmlt
LT5pc1ZhbGlkQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYW5p
bWF0aW9uTmFtZShhbmltLT5uYW1lKCkpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFt
ZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KGFuaW1h
dGlvbk5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQotICAg
ICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPmFuaW1hdGUobV9jb21wb3NpdGVBbmltYXRp
b24sIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBmb3IgKFZlY3RvcjxBdG9taWNTdHJpbmdJbXBs
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmJlZ2lu
KCk7IGl0ICE9IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5lbmQoKTsgKytpdCkgeworICAg
ICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmdldCgqaXQpOworICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQorICAgICAgICAg
ICAga2V5ZnJhbWVBbmltLT5hbmltYXRlKG1fY29tcG9zaXRlQW5pbWF0aW9uLCByZW5kZXJlciwg
Y3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOwogICAgIH0KIAogICAgIGNs
ZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMocmVuZGVyZXIpOwpAQCAtMjk2LDYgKzMxMSwyNCBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpCiAgICAgcmV0dXJuIHJlc3Vs
dFN0eWxlID8gcmVzdWx0U3R5bGUucmVsZWFzZSgpIDogdGFyZ2V0U3R5bGU7CiB9CiAKK1Bhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmdldEFuaW1hdGVk
U3R5bGUoKQoreworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7CisgICAgQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9u
cy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT5zZWNvbmQu
Z2V0KCkpCisgICAgICAgICAgICBpbXBsaWNpdEFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShy
ZXN1bHRTdHlsZSk7CisgICAgfQorCisgICAgZm9yIChWZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5iZWdpbigp
OyBpdCAhPSBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW1hdGlvbiA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmdldCgqaXQpOworICAgICAgICBpZiAoa2V5ZnJhbWVBbmltYXRpb24pCisg
ICAgICAgICAgICBrZXlmcmFtZUFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHls
ZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHRTdHlsZTsKK30KKwogLy8gImFuaW1h
dGluZyIgbWVhbnMgdGhhdCBzb21ldGhpbmcgaXMgcnVubmluZyB0aGF0IHJlcXVpcmVzIHRoZSB0
aW1lciB0byBrZWVwIGZpcmluZwogdm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpzZXRB
bmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCiB7CkBAIC00MDksMzIgKzQ0Miw2IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6Y2xlYW51cEYKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uUHJpdmF0ZTo6c2V0QW5pbWF0aW9uU3RhcnRUaW1lKGRvdWJsZSB0KQotewot
ICAgIC8vIFNldCBzdGFydCB0aW1lIG9uIGFsbCBhbmltYXRpb25zIHdhaXRpbmcgZm9yIGl0Ci0g
ICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5k
KCk7Ci0gICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAgICAg
ICAgIGlmIChhbmltICYmIGFuaW0tPndhaXRpbmdGb3JTdGFydFRpbWUoKSkKLSAgICAgICAgICAg
ICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGVJbnB1dFN0YXJ0VGltZVNldCwgdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6c2V0VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVy
dHksIGRvdWJsZSB0KQotewotICAgIC8vIFNldCB0aGUgc3RhcnQgdGltZSBmb3IgZ2l2ZW4gcHJv
cGVydHkgdHJhbnNpdGlvbgotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90
cmFuc2l0aW9ucy5lbmQoKTsKLSAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQu
Z2V0KCk7Ci0gICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53YWl0aW5nRm9yU3RhcnRUaW1l
KCkgJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAg
ICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGVJbnB1dFN0YXJ0VGltZVNldCwgdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoKQogewogICAgIGlmICht
X2lzU3VzcGVuZGVkKQpAQCAtNTQxLDYgKzU0OCwxNiBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
blByaXZhdGU6OnJlbW92ZUZyCiAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5yZW1vdmVGcm9t
U3R5bGVBdmFpbGFibGVXYWl0TGlzdChhbmltYXRpb24pOwogfQogCit2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvblByaXZhdGU6OmFkZFRvU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdChBbmltYXRpb25C
YXNlKiBhbmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQoreworICAgIG1fYW5pbWF0aW9u
Q29udHJvbGxlci0+YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KGFuaW1hdGlvbiwgd2ls
bEdldFJlc3BvbnNlKTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjpyZW1v
dmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb24p
Cit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5yZW1vdmVGcm9tU3RhcnRUaW1lUmVzcG9u
c2VXYWl0TGlzdChhbmltYXRpb24pOworfQorCiBib29sIENvbXBvc2l0ZUFuaW1hdGlvblByaXZh
dGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgZG91Ymxl
IHQpCiB7CiAgICAgaWYgKCFuYW1lKQpAQCAtNjI2LDYgKzY0MywxMSBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpCiAgICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0ZShy
ZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7CiB9CiAKK1Bhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSgpCit7CisgICAg
cmV0dXJuIG1fZGF0YS0+Z2V0QW5pbWF0ZWRTdHlsZSgpOworfQorCiBkb3VibGUgQ29tcG9zaXRl
QW5pbWF0aW9uOjp3aWxsTmVlZFNlcnZpY2UoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEt
PndpbGxOZWVkU2VydmljZSgpOwpAQCAtNjQxLDYgKzY2MywxNiBAQCB2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvbjo6cmVtb3ZlRnJvbVN0eWxlCiAgICAgbV9kYXRhLT5yZW1vdmVGcm9tU3R5bGVBdmFp
bGFibGVXYWl0TGlzdChhbmltYXRpb24pOwogfQogCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6
YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiwg
Ym9vbCB3aWxsR2V0UmVzcG9uc2UpCit7CisgICAgbV9kYXRhLT5hZGRUb1N0YXJ0VGltZVJlc3Bv
bnNlV2FpdExpc3QoYW5pbWF0aW9uLCB3aWxsR2V0UmVzcG9uc2UpOworfQorCit2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0
aW9uQmFzZSogYW5pbWF0aW9uKQoreworICAgIG1fZGF0YS0+cmVtb3ZlRnJvbVN0YXJ0VGltZVJl
c3BvbnNlV2FpdExpc3QoYW5pbWF0aW9uKTsKK30KKwogdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OnN1c3BlbmRBbmltYXRpb25zKCkKIHsKICAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKCk7
CkBAIC02NzYsMTYgKzcwOCw2IEBAIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IENvbXBv
c2l0ZUEKICAgICByZXR1cm4gbV9kYXRhLT5nZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0
eSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpb25TdGFydFRpbWUo
ZG91YmxlIHQpCi17Ci0gICAgbV9kYXRhLT5zZXRBbmltYXRpb25TdGFydFRpbWUodCk7Ci19Ci0K
LXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBwcm9w
ZXJ0eSwgZG91YmxlIHQpCi17Ci0gICAgbV9kYXRhLT5zZXRUcmFuc2l0aW9uU3RhcnRUaW1lKHBy
b3BlcnR5LCB0KTsKLX0KLQogdm9pZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGlj
aXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSkKIHsKICAgICBtX2RhdGEtPm92ZXJyaWRlSW1wbGlj
aXRBbmltYXRpb25zKHByb3BlcnR5KTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29t
cG9zaXRlQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uaAkocmV2aXNpb24gNDA2MjcpCisrKyBXZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMCArNTcs
MTggQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJSZW5kZXJlcigpOwogCiAgICAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IGdldEFuaW1hdGVkU3R5bGUoKTsKKwogICAgIGRvdWJsZSB3aWxsTmVlZFNlcnZpY2Uo
KSBjb25zdDsKICAgICAKICAgICBBbmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9s
bGVyKCk7CiAKKyAgICB2b2lkIGFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25C
YXNlKik7CisgICAgdm9pZCByZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRp
b25CYXNlKik7CisKKyAgICB2b2lkIGFkZFRvU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdChBbmlt
YXRpb25CYXNlKiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOworICAgIHZvaWQgcmVtb3ZlRnJvbVN0
YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSopOworCiAgICAgdm9pZCBzdXNw
ZW5kQW5pbWF0aW9ucygpOwogICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwogICAgIGJvb2wg
aXNTdXNwZW5kZWQoKSBjb25zdDsKQEAgLTcyLDEwICs4MCw2IEBAIHB1YmxpYzoKICAgICAKICAg
ICBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShp
bnQgcHJvcGVydHkpOwogCi0KLSAgICB2b2lkIHNldEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUg
dCk7Ci0gICAgdm9pZCBzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBwcm9wZXJ0eSwgZG91Ymxl
IHQpOwotCiAgICAgdm9pZCBvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkp
OwogICAgIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVy
dHkpOwogCkBAIC04Myw5ICs4Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIHBhdXNlVHJhbnNpdGlv
bkF0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkVG9TdHlsZUF2YWlsYWJsZVdh
aXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21TdHlsZUF2YWlsYWJs
ZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKLQogcHJpdmF0ZToKICAgICBDb21wb3NpdGVBbmlt
YXRpb24oQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlcik7CiAgICAgCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkocmV2
aXNpb24gNDA2MjcpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsMTAgQEAKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIKICNpbmNsdWRlICJLZXlmcmFt
ZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisKKyNpbmNsdWRlIDx3
dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSw3ICs1OCw3
IEBAIEltcGxpY2l0QW5pbWF0aW9uOjp+SW1wbGljaXRBbmltYXRpb24oKQogICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFuaW1hdGlvbiwgLTEpOwogfQog
Ci1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1
bWVudDo6TGlzdGVuZXJUeXBlIGluTGlzdGVuZXJUeXBlKQorYm9vbCBJbXBsaWNpdEFuaW1hdGlv
bjo6c2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxp
c3RlbmVyVHlwZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCktPmhh
c0xpc3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CiB9CkBAIC03NiwxMyArNzksNDcgQEAgdm9p
ZCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdAogICAgIGlmICghYW5pbWF0ZWRT
dHlsZSkKICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSh0YXJnZXRT
dHlsZSk7CiAKLSAgICBpZiAoYmxlbmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVy
dHksIGFuaW1hdGVkU3R5bGUuZ2V0KCksIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0
KCksIHByb2dyZXNzKDEsIDAsIDApKSkKKyAgICBib29sIG5lZWRzQW5pbSA9IGJsZW5kUHJvcGVy
dGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zy
b21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygxLCAwLCAwKSk7CisgICAg
aWYgKG5lZWRzQW5pbSB8fCBtX2ZhbGxiYWNrQW5pbWF0aW5nKQogICAgICAgICBzZXRBbmltYXRp
bmcoKTsKIAogICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCiAgICAgZmly
ZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7CiB9CiAKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246
OmdldEFuaW1hdGVkU3R5bGUoUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK3sK
KyAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCisgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y2xvbmUobV90b1N0eWxlLmdldCgpKTsKKworICAgIGJsZW5kUHJvcGVydGllcyh0aGlz
LCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5n
ZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygxLCAwLCAwKSk7Cit9CisKK2Jvb2wgSW1w
bGljaXRBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdpblRpbWUpCit7CisgICAg
VU5VU0VEX1BBUkFNKGJlZ2luVGltZSk7CisgICAgCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+aGFzTGF5ZXIoKSkgeworICAg
ICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveChtX29iamVjdCktPmxheWVyKCk7
CisgICAgICAgIGlmIChsYXllci0+aXNDb21wb3NpdGVkKCkpCisgICAgICAgICAgICByZXR1cm4g
bGF5ZXItPmJhY2tpbmcoKS0+c3RhcnRUcmFuc2l0aW9uKGJlZ2luVGltZSwgbV9hbmltYXRpbmdQ
cm9wZXJ0eSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHlsZS5nZXQoKSk7CisgICAgfQorI2Vu
ZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjplbmRB
bmltYXRpb24oYm9vbCAvKnJlc2V0Ki8pCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+aGFzTGF5ZXIoKSkgeworICAgICAg
ICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveChtX29iamVjdCktPmxheWVyKCk7Cisg
ICAgICAgIGlmIChsYXllci0+aXNDb21wb3NpdGVkKCkpCisgICAgICAgICAgICBsYXllci0+YmFj
a2luZygpLT50cmFuc2l0aW9uRmluaXNoZWQobV9hbmltYXRpbmdQcm9wZXJ0eSk7CisgICAgfQor
I2VuZGlmCit9CisKIHZvaWQgSW1wbGljaXRBbmltYXRpb246Om9uQW5pbWF0aW9uRW5kKGRvdWJs
ZSBlbGFwc2VkVGltZSkKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEga2V5ZnJhbWUgYW5pbWF0aW9u
IG9uIHRoaXMgcHJvcGVydHksIHRoaXMgdHJhbnNpdGlvbiBpcyBiZWluZyBvdmVycmlkZGVuLiBU
aGUga2V5ZnJhbWUKQEAgLTIwOSw0ICsyNDYsMjEgQEAgdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6
dmFsaWRhdGVUcmFuc2ZvcgogICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQgPSB0cnVl
OwogfQogCitkb3VibGUgSW1wbGljaXRBbmltYXRpb246OndpbGxOZWVkU2VydmljZSgpCit7Cisg
ICAgZG91YmxlIHQgPSBBbmltYXRpb25CYXNlOjp3aWxsTmVlZFNlcnZpY2UoKTsKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKHQgIT0gMCB8fCBwcmVBY3RpdmUoKSkK
KyAgICAgICAgcmV0dXJuIHQ7CisgICAgICAgIAorICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAg
bWVhbnMgd2UgbmVlZCBzZXJ2aWNlLiBCdXQgaWYgdGhpcyBpcyBhIEhXIGFuaW1hdGlvbiB3ZSAK
KyAgICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2l0aW9uCisg
ICAgaWYgKGlzUHJvcGVydHlIV0FuaW1hdGVkKG1fYW5pbWF0aW5nUHJvcGVydHkpKSB7CisgICAg
ICAgIGJvb2wgaXNMb29waW5nOworICAgICAgICBnZXRUaW1lVG9OZXh0RXZlbnQodCwgaXNMb29w
aW5nKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gdDsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
aAkocmV2aXNpb24gNDA2MjcpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5p
bWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDExIEBAIHB1YmxpYzoKICAgICBp
bnQgYW5pbWF0aW5nUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGluZ1Byb3BlcnR5
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1l
KTsKLQorICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQpOworICAgIAogICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRy
PFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CisgICAgdmlydHVhbCB2b2lkIGdldEFuaW1h
dGVkU3R5bGUoUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CiAgICAgdmlydHVh
bCB2b2lkIHJlc2V0KFJlbmRlclN0eWxlKiB0byk7CiAKICAgICB2b2lkIHNldE92ZXJyaWRkZW4o
Ym9vbCk7CkBAIC02Miw4ICs2NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGJsZW5kUHJvcGVy
dHlWYWx1ZUluU3R5bGUoaW50LCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlKTsKIAorICAgIHZp
cnR1YWwgZG91YmxlIHdpbGxOZWVkU2VydmljZSgpOworCiBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBz
aG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlKTsgICAgCisg
ICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBl
KSBjb25zdDsgICAgCiAgICAgYm9vbCBzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYsIGRvdWJsZSBlbGFwc2VkVGltZSk7CiAKICAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3Jt
RnVuY3Rpb25MaXN0KCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5p
bWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gNDA2MjcpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsMTAgQEAK
ICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0
aW9uLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCisKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC01OSw2ICs2Miw0NCBAQCBLZXlmcmFtZUFuaW1hdGlvbjo6fktleWZyYW1lQW5pbWF0
aW9uKCkKICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXRFbmRB
bmltYXRpb24sIC0xKTsKIH0KIAordm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Z2V0S2V5ZnJhbWVB
bmltYXRpb25JbnRlcnZhbChjb25zdCBSZW5kZXJTdHlsZSomIGZyb21TdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqJiB0b1N0eWxlLCBkb3VibGUmIHByb2cpIGNvbnN0Cit7CisgICAgLy8gRmluZCB0
aGUgZmlyc3Qga2V5CisgICAgZG91YmxlIGVsYXBzZWRUaW1lID0gZ2V0RWxhcHNlZFRpbWUoKTsK
KworICAgIGRvdWJsZSB0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUg
LyBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkgOiAxOworICAgIGludCBpID0gc3RhdGljX2Nhc3Q8
aW50Pih0KTsKKyAgICB0IC09IGk7CisgICAgaWYgKG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSAm
JiAoaSAmIDEpKQorICAgICAgICB0ID0gMSAtIHQ7CisKKyAgICBkb3VibGUgc2NhbGUgPSAxOwor
ICAgIGRvdWJsZSBvZmZzZXQgPSAwOworICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuZW5kS2V5ZnJhbWVzKCk7CisgICAg
Zm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFt
ZXMuYmVnaW5LZXlmcmFtZXMoKTsgaXQgIT0gZW5kS2V5ZnJhbWVzOyArK2l0KSB7CisgICAgICAg
IGlmICh0IDwgaXQtPmtleSgpKSB7CisgICAgICAgICAgICAvLyBUaGUgZmlyc3Qga2V5IHNob3Vs
ZCBhbHdheXMgYmUgMCwgc28gd2Ugc2hvdWxkIG5ldmVyIHN1Y2NlZWQgb24gdGhlIGZpcnN0IGtl
eQorICAgICAgICAgICAgaWYgKCFmcm9tU3R5bGUpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBzY2FsZSA9IDEuMCAvIChpdC0+a2V5KCkgLSBvZmZzZXQpOworICAgICAgICAg
ICAgdG9TdHlsZSA9IGl0LT5zdHlsZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBvZmZzZXQgPSBpdC0+a2V5KCk7CisgICAgICAgIGZyb21TdHlsZSA9IGl0LT5z
dHlsZSgpOworICAgIH0KKworICAgIGlmICghZnJvbVN0eWxlIHx8ICF0b1N0eWxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24gPSAw
OworICAgIGlmIChmcm9tU3R5bGUtPmFuaW1hdGlvbnMoKSAmJiBmcm9tU3R5bGUtPmFuaW1hdGlv
bnMoKS0+c2l6ZSgpID4gMCkKKyAgICAgICAgdGltaW5nRnVuY3Rpb24gPSAmKGZyb21TdHlsZS0+
YW5pbWF0aW9ucygpLT5hbmltYXRpb24oMCktPnRpbWluZ0Z1bmN0aW9uKCkpOworCisgICAgcHJv
ZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZzZXQsIHRpbWluZ0Z1bmN0aW9uKTsKK30KKwogdm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
UmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBz
dGFydCB0aW1lb3V0IGlmIG5lZWRlZApAQCAtODQsMzQgKzEyNSwxMiBAQCB2b2lkIEtleWZyYW1l
QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0CiAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBi
ZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1pbmluZyB3aGljaCBrZXlmcmFtZXMgd2UgYXJl
IGFuaW1hdGluZyBiZXR3ZWVuLgogICAgIC8vIFdlIHNob3VsZCBjYWNoZSB0aGUgbGFzdCBwYWly
IG9yIHNvbWV0aGluZy4KLQotICAgIC8vIEZpbmQgdGhlIGZpcnN0IGtleQotICAgIGRvdWJsZSBl
bGFwc2VkVGltZSA9IGdldEVsYXBzZWRUaW1lKCk7Ci0KLSAgICBkb3VibGUgdCA9IG1fYW5pbWF0
aW9uLT5kdXJhdGlvbigpID8gKGVsYXBzZWRUaW1lIC8gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkp
IDogMTsKLSAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4odCk7Ci0gICAgdCAtPSBpOwotICAg
IGlmIChtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgJiYgKGkgJiAxKSkKLSAgICAgICAgdCA9IDEg
LSB0OwotCisgICAgCisgICAgLy8gR2V0IHRoZSBmcm9tL3RvIHN0eWxlcyBhbmQgcHJvZ3Jlc3Mg
YmV0d2VlbgogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSAwOwogICAgIGNvbnN0
IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gMDsKLSAgICBkb3VibGUgc2NhbGUgPSAxOwotICAgIGRv
dWJsZSBvZmZzZXQgPSAwOwotICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0
b3IgZW5kS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuZW5kS2V5ZnJhbWVzKCk7Ci0gICAgZm9yIChW
ZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVn
aW5LZXlmcmFtZXMoKTsgaXQgIT0gZW5kS2V5ZnJhbWVzOyArK2l0KSB7Ci0gICAgICAgIGlmICh0
IDwgaXQtPmtleSgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgZmlyc3Qga2V5IHNob3VsZCBhbHdh
eXMgYmUgMCwgc28gd2Ugc2hvdWxkIG5ldmVyIHN1Y2NlZWQgb24gdGhlIGZpcnN0IGtleQotICAg
ICAgICAgICAgaWYgKCFmcm9tU3R5bGUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBzY2FsZSA9IDEuMCAvIChpdC0+a2V5KCkgLSBvZmZzZXQpOwotICAgICAgICAgICAgdG9T
dHlsZSA9IGl0LT5zdHlsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBvZmZzZXQgPSBpdC0+a2V5KCk7Ci0gICAgICAgIGZyb21TdHlsZSA9IGl0LT5zdHlsZSgp
OwotICAgIH0KKyAgICBkb3VibGUgcHJvZzsKKyAgICBnZXRLZXlmcmFtZUFuaW1hdGlvbkludGVy
dmFsKGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZyk7CiAKICAgICAvLyBJZiBlaXRoZXIgc3R5bGUg
aXMgMCB3ZSBoYXZlIGFuIGludmFsaWQgY2FzZSwganVzdCBzdG9wIHRoZSBhbmltYXRpb24uCiAg
ICAgaWYgKCFmcm9tU3R5bGUgfHwgIXRvU3R5bGUpIHsKQEAgLTEyNCwxOSArMTQzLDM0IEBAIHZv
aWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXQKICAgICBpZiAoIWFuaW1hdGVk
U3R5bGUpCiAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUodGFyZ2V0
U3R5bGUpOwogCi0gICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uID0gMDsK
LSAgICBpZiAoZnJvbVN0eWxlLT5hbmltYXRpb25zKCkgJiYgZnJvbVN0eWxlLT5hbmltYXRpb25z
KCktPnNpemUoKSA+IDApCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gJihmcm9tU3R5bGUtPmFu
aW1hdGlvbnMoKS0+YW5pbWF0aW9uKDApLT50aW1pbmdGdW5jdGlvbigpKTsKLQotICAgIGRvdWJs
ZSBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgdGltaW5nRnVuY3Rpb24pOwotCiAgICAg
SGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmRQcm9wZXJ0aWVzID0gbV9rZXlmcmFtZXMu
ZW5kUHJvcGVydGllcygpOwogICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBlbmRQcm9wZXJ0aWVzOyAr
K2l0KSB7Ci0gICAgICAgIGlmIChibGVuZFByb3BlcnRpZXModGhpcywgKml0LCBhbmltYXRlZFN0
eWxlLmdldCgpLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2cpKQorICAgICAgICBib29sIG5lZWRz
QW5pbSA9IGJsZW5kUHJvcGVydGllcyh0aGlzLCAqaXQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZy
b21TdHlsZSwgdG9TdHlsZSwgcHJvZyk7CisgICAgICAgIGlmIChuZWVkc0FuaW0gfHwgbV9mYWxs
YmFja0FuaW1hdGluZykKICAgICAgICAgICAgIHNldEFuaW1hdGluZygpOwogICAgIH0KIH0KIAor
dm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZShSZWZQdHI8UmVuZGVyU3R5
bGU+JiBhbmltYXRlZFN0eWxlKQoreworICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5k
IHByb2dyZXNzIGJldHdlZW4KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlID0gMDsK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSA9IDA7CisgICAgZG91YmxlIHByb2c7Cisg
ICAgZ2V0S2V5ZnJhbWVBbmltYXRpb25JbnRlcnZhbChmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2cp
OworCisgICAgLy8gSWYgZWl0aGVyIHN0eWxlIGlzIDAgd2UgaGF2ZSBhbiBpbnZhbGlkIGNhc2UK
KyAgICBpZiAoIWZyb21TdHlsZSB8fCAhdG9TdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFhbmltYXRlZFN0eWxlKQorICAgICAgICBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6
OmNsb25lKG1fb2JqZWN0LT5zdHlsZSgpKTsKKworICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRl
cmF0b3IgZW5kUHJvcGVydGllcyA9IG1fa2V5ZnJhbWVzLmVuZFByb3BlcnRpZXMoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpblBy
b3BlcnRpZXMoKTsgaXQgIT0gZW5kUHJvcGVydGllczsgKytpdCkKKyAgICAgICAgYmxlbmRQcm9w
ZXJ0aWVzKHRoaXMsICppdCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxl
LCBwcm9nKTsKK30KKwogYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6aGFzQW5pbWF0aW9uRm9yUHJv
cGVydHkoaW50IHByb3BlcnR5KSBjb25zdAogewogICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9rZXlmcmFtZXMuZW5kUHJvcGVydGllcygpOwpAQCAtMTQ4LDExICsxODIs
MzggQEAgYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6aGFzQW5pbWF0aW9uRm9yUAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wp
Citib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1l
KQogewotICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAg
IGlmIChtX29iamVjdCkKKyAgICBVTlVTRURfUEFSQU0oYmVnaW5UaW1lKTsKKyAgICAKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0
LT5oYXNMYXllcigpKSB7CisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IHRvUmVuZGVyQm94
KG1fb2JqZWN0KS0+bGF5ZXIoKTsKKyAgICAgICAgaWYgKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSkK
KyAgICAgICAgICAgIHJldHVybiBsYXllci0+YmFja2luZygpLT5zdGFydEFuaW1hdGlvbihiZWdp
blRpbWUsIG1fYW5pbWF0aW9uLmdldCgpLCBtX2tleWZyYW1lcyk7CisgICAgfQorI2VuZGlmCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjplbmRBbmltYXRp
b24oYm9vbAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICByZXNldAorI2Vu
ZGlmCisgICAgKQoreworICAgIGlmIChtX29iamVjdCkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5oYXNMYXllcigpKSB7CisgICAgICAg
ICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveChtX29iamVjdCktPmxheWVyKCk7
CisgICAgICAgICAgICBpZiAobGF5ZXItPmlzQ29tcG9zaXRlZCgpKQorICAgICAgICAgICAgICAg
IGxheWVyLT5iYWNraW5nKCktPmFuaW1hdGlvbkZpbmlzaGVkKG1fa2V5ZnJhbWVzLmFuaW1hdGlv
bk5hbWUoKSwgMCwgcmVzZXQpOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgCisgICAgICAg
IC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQogICAgICAgICBzZXRD
aGFuZ2VkKG1fb2JqZWN0LT5lbGVtZW50KCkpOworICAgIH0KIH0KIAogYm9vbCBLZXlmcmFtZUFu
aW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlw
ZSBsaXN0ZW5lclR5cGUpCkBAIC0yODcsNCArMzQ4LDMxIEBAIHZvaWQgS2V5ZnJhbWVBbmltYXRp
b246OnZhbGlkYXRlVHJhbnNmb3IKICAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkID0g
dHJ1ZTsKIH0KIAorZG91YmxlIEtleWZyYW1lQW5pbWF0aW9uOjp3aWxsTmVlZFNlcnZpY2UoKQor
eworICAgIGRvdWJsZSB0ID0gQW5pbWF0aW9uQmFzZTo6d2lsbE5lZWRTZXJ2aWNlKCk7CisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICh0ICE9IDAgfHwgcHJlQWN0aXZl
KCkpCisgICAgICAgIHJldHVybiB0OworICAgICAgICAKKyAgICAvLyBBIHJldHVybiB2YWx1ZSBv
ZiAwIG1lYW5zIHdlIG5lZWQgc2VydmljZS4gQnV0IGlmIHdlIG9ubHkgaGF2ZSBIVyBhbmltYXRp
b25zIHdlIAorICAgIC8vIG9ubHkgbmVlZCBzZXJ2aWNlIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5z
aXRpb24KKyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRpZXMgPSBt
X2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7CisgICAgYm9vbCBpc09ubHlIVyA9IHRydWU7Cisg
ICAgCisgICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFt
ZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZFByb3BlcnRpZXM7ICsraXQpIHsKKyAgICAg
ICAgaWYgKCFpc1Byb3BlcnR5SFdBbmltYXRlZCgqaXQpKSB7CisgICAgICAgICAgICBpc09ubHlI
VyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoaXNPbmx5SFcpIHsKKyAgICAgICAgYm9vbCBpc0xvb3Bpbmc7CisgICAgICAgIGdldFRpbWVU
b05leHRFdmVudCh0LCBpc0xvb3BpbmcpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiB0Owor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5oCShyZXZpc2lvbiA0MDYyNykKKysrIFdlYkNvcmUvcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYs
NyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21w
b3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJTdHls
ZT4mIGFuaW1hdGVkU3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKFJl
ZlB0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOwogCiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpOyB9
CiAgICAgaW50IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQpAQCAtNTYsMTAgKzU3
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVuYW5pbWF0ZWRTdHlsZShQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZSkgeyBtX3VuYW5pbWF0ZWRTdHlsZSA9IHN0eWxlOyB9CiAgICAgUmVu
ZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5hbmltYXRlZFN0
eWxlLmdldCgpOyB9CiAKKyAgICB2aXJ0dWFsIGRvdWJsZSB3aWxsTmVlZFNlcnZpY2UoKTsKKwog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFw
c2VkVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBl
bGFwc2VkVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFw
c2VkVGltZSk7CisgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdpblRp
bWUpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCByZXNldCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCk7CkBAIC03Niw2ICs4MCw5IEBAIHByaXZh
dGU6CiAgICAgS2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFJl
bmRlck9iamVjdCosIGludCBpbmRleCwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUq
IHVuYW5pbWF0ZWRTdHlsZSk7CiAgICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKICAg
ICAKKyAgICAvLyBHZXQgdGhlIHN0eWxlcyBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRp
b24gdGltZSBhbmQgdGhlIHByb2dyZXNzIGJldHdlZW4gdGhlbQorICAgIHZvaWQgZ2V0S2V5ZnJh
bWVBbmltYXRpb25JbnRlcnZhbChjb25zdCBSZW5kZXJTdHlsZSomIGZyb21TdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqJiBmcm9tU3R5bGUsIGRvdWJsZSYgcHJvZykgY29uc3Q7CisKICAgICAvLyBU
aGUga2V5ZnJhbWVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgogICAgIEtleWZyYW1lTGlzdCBtX2tl
eWZyYW1lczsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQ2xpZW50LmgJKHJldmlzaW9uIDQwNjI3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDbGllbnQoKSB7fQogCiAgICAg
Ly8gQ2FsbGJhY2tzIGZvciB3aGVuIGhhcmR3YXJlLWFjY2VsZXJhdGVkIHRyYW5zaXRpb25zIGFu
ZCBhbmltYXRpb24gc3RhcnRlZAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlUcmFuc2l0aW9uU3Rh
cnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgQW5pbWF0ZWRQcm9wZXJ0eUlELCBkb3VibGUgdGlt
ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgPSAwOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFw
aGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSA9IDA7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1t
CShyZXZpc2lvbiA0MDYyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzTGF5ZXJDQS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAwLDExICsxMDAsNyBAQCBzdGF0aWMg
TlNTdHJpbmcqIGNvbnN0IFdlYkFuaW1hdGlvbkNTU1ByCiAgICAgICAgIHJldHVybjsKIAogICAg
IGRvdWJsZSBzdGFydFRpbWUgPSBXZWJDb3JlOjptZWRpYVRpbWVUb0N1cnJlbnRUaW1lKFthbmlt
YXRpb24gYmVnaW5UaW1lXSk7Ci0gICAgV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3Ag
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBbmltYXRlZFByb3BlcnR5SUQ+KFtbYW5pbWF0aW9uIHZh
bHVlRm9yS2V5OldlYkFuaW1hdGlvbkNTU1Byb3BlcnR5S2V5XSBpbnRWYWx1ZV0pOwotICAgIGlm
IChwcm9wICE9IFdlYkNvcmU6OkFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKQotICAgICAgICBtX2dy
YXBoaWNzTGF5ZXItPmNsaWVudCgpLT5ub3RpZnlUcmFuc2l0aW9uU3RhcnRlZChtX2dyYXBoaWNz
TGF5ZXIsIHByb3AsIHN0YXJ0VGltZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2dyYXBoaWNzTGF5
ZXItPmNsaWVudCgpLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKG1fZ3JhcGhpY3NMYXllciwgc3Rh
cnRUaW1lKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmNsaWVudCgpLT5ub3RpZnlBbmltYXRpb25T
dGFydGVkKG1fZ3JhcGhpY3NMYXllciwgc3RhcnRUaW1lKTsKIH0KIAogLSAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBKilncmFwaGljc0xheWVyCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDQwNjI3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk2LDExICs4OTYsNiBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRUcmFuc2l0aW9uCiAgICAgcmV0dXJuIGRp
ZEFuaW1hdGU7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpub3RpZnlUcmFuc2l0aW9u
U3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5
LCBkb3VibGUgdGltZSkKLXsKLSAgICByZW5kZXJlcigpLT5ub3RpZnlUcmFuc2l0aW9uU3RhcnRl
ZChncmFwaGljc0xheWVyVG9DU1NQcm9wZXJ0eShwcm9wZXJ0eSksIHRpbWUpOwotfQotCiB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGlj
c0xheWVyKiwgZG91YmxlIHRpbWUpCiB7CiAgICAgcmVuZGVyZXIoKS0+bm90aWZ5QW5pbWF0aW9u
U3RhcnRlZCh0aW1lKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
CShyZXZpc2lvbiA0MDYyNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsOCArMTA2LDcgQEAgcHVibGljOgogICAgIHZvaWQg
aW52YWxpZGF0ZURyYXdpbmdPcHRpbWl6YXRpb25zKCk7CiAKICAgICAvLyBHcmFwaGljc0xheWVy
Q2xpZW50IGludGVyZmFjZQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlUcmFuc2l0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgQW5pbWF0ZWRQcm9wZXJ0eUlELCBkb3VibGUgc3RhcnRU
aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFw
aGljc0xheWVyKiwgZG91YmxlIHN0YXJ0VGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoZG91YmxlIHN0YXJ0VGltZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGNsaXApOwogCg==
</data>
<flag name="review"
          id="13193"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>