<?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>186520</bug_id>
          
          <creation_ts>2018-06-11 06:28:19 -0700</creation_ts>
          <short_desc>Add performance logging for slow cache retrieves</short_desc>
          <delta_ts>2018-06-12 10:53:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>krollin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1431864</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-06-11 06:28:19 -0700</bug_when>
    <thetext>We sometimes see slow cache retrieves in logs. Add some more logging for these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431865</commentid>
    <comment_count>1</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-06-11 06:28:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/41002070&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431868</commentid>
    <comment_count>2</comment_count>
      <attachid>342423</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-06-11 06:43:04 -0700</bug_when>
    <thetext>Created attachment 342423
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431871</commentid>
    <comment_count>3</comment_count>
      <attachid>342424</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-06-11 06:53:52 -0700</bug_when>
    <thetext>Created attachment 342424
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431875</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-06-11 07:00:22 -0700</bug_when>
    <thetext>Attachment 342424 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/NetworkCache.h:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h:80:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h:83:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431876</commentid>
    <comment_count>5</comment_count>
      <attachid>342427</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-06-11 07:01:18 -0700</bug_when>
    <thetext>Created attachment 342427
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431877</commentid>
    <comment_count>6</comment_count>
      <attachid>342428</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-06-11 07:01:58 -0700</bug_when>
    <thetext>Created attachment 342428
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431878</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-06-11 07:03:34 -0700</bug_when>
    <thetext>Attachment 342428 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/NetworkCache.h:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h:80:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h:83:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431920</commentid>
    <comment_count>8</comment_count>
      <attachid>342428</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-06-11 09:30:41 -0700</bug_when>
    <thetext>Comment on attachment 342428
patch

Shouldn&apos;t all these WallTimes be MonotonicTimes?

I don&apos;t think we want logs that claim large time values or negative time values when the user crosses daylight savings time or syncs with Apple&apos;s time server or something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431933</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-06-11 09:56:50 -0700</bug_when>
    <thetext>&gt; Shouldn&apos;t all these WallTimes be MonotonicTimes?

Yeah, I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432006</commentid>
    <comment_count>10</comment_count>
      <attachid>342455</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-06-11 12:38:06 -0700</bug_when>
    <thetext>Created attachment 342455
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432008</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-06-11 12:39:05 -0700</bug_when>
    <thetext>Attachment 342455 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/NetworkCache.h:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432365</commentid>
    <comment_count>12</comment_count>
      <attachid>342455</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-12 10:53:08 -0700</bug_when>
    <thetext>Comment on attachment 342455
patch

Clearing flags on attachment: 342455

Committed r232759: &lt;https://trac.webkit.org/changeset/232759&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432366</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-12 10:53:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342423</attachid>
            <date>2018-06-11 06:43:04 -0700</date>
            <delta_ts>2018-06-11 06:53:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>cache-retrieve-timing-logging.patch</filename>
            <type>text/plain</type>
            <size>22698</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzI3MDkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE4LTA2LTExICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBmb3Igc2xvdyBjYWNoZSByZXRyaWV2ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NjUyMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDEwMDIw
NzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
c29tZXRpbWVzIHNlZSBzbG93IGNhY2hlIHJldHJpZXZlcyBpbiBsb2dzLiBBZGQgc29tZSBtb3Jl
IGxvZ2dpbmcgdG8gYmV0dGVyIGFuYWx5emUgdGhlc2UgY2FzZXMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRpbWluZ3MgdG8gYWxsIGNhY2hlIHN0b3JhZ2UgcmV0cmlldmUgb3BlcmF0aW9u
cyBhbmQgcGFzc2VzIHRoZW0gdXAgdG8gdGhlIGNsaWVudC4KKyAgICAgICAgV2UgdGhlbiBsb2cg
dGhlIHRpbWluZ3Mgb24gTmV0d29ya1Jlc291cmNlTG9hZGVyIGxldmVscyBpZiBuZWVkZWQuIEl0
ZW1zIGxvZ2dlZCBpbmNsdWRlCisKKyAgICAgICAgLSB0b3RhbCByZXRyaWV2ZSB0aW1lCisgICAg
ICAgIC0gZGlzcGF0Y2ggZGVsYXkgYW5kIG51bWJlciBvZiByZXNvdXJjZXMgZGlzcGF0Y2hlZCBi
ZWZvcmUgdGhpcyBvbmUKKyAgICAgICAgLSByZWNvcmQgSS9PIHRpbWUKKyAgICAgICAgLSBibG9i
IEkvTyB0aW1lCisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzaHJpbmsgd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzeW5jaHJvbml6YXRpb24gd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gY2FuY2VsbGF0aW9uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6bG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZCk6CisKKyAgICAgICAgTG9n
IGlmIHRoZSByZXRyaWV2ZSB0b29rIG1vcmUgdGhhbiAxcy4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6
OmNvbXBsZXRlUmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
OjpyZXRyaWV2ZURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldHJpZXZlRW50cnlGcm9tU3RvcmFnZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmlldmVT
dWJyZXNvdXJjZXNFbnRyeSk6CisKKyAgICAgICAgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciBkb2Vz
IG5vdCByZWNvcmRzIHNwZWNpZmljIHRpbWluZ3MgeWV0IGJ1dCBhdCBsZWFzdCB3ZSBkbyBsb2cg
d2hlbiB0aGV5IG9jY3VyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFn
ZTo6UmVhZE9wZXJhdGlvbjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5pc2gpOgorCisgICAgICAgIFJlY29yZCB0aW1p
bmcgaW5mbyBpbiBSZWFkT3BlcmF0aW9ucy4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6cmV0cmlldmVGcm9tTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpTdG9yYWdlOjpyZXRyaWV2ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgorCiAyMDE4LTA2LTEwICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCBBUEkg
cnVuIHJ1biBqYXZhc2NyaXB0IGZyb20gYSBXZWJLaXRXZWJWaWV3IGluIGFuIGlzb2xhdGVkIHdv
cmxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cmV0cmlldmVD
YWNoCiAgICAgQVNTRVJUKGNhblVzZUNhY2hlKHJlcXVlc3QpKTsKIAogICAgIFJlZlB0cjxOZXR3
b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRlcih0aGlzKTsKLSAgICBtX2NhY2hlLT5yZXRyaWV2ZShy
ZXF1ZXN0LCB7IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlE
IH0sIFt0aGlzLCBsb2FkZXIgPSBXVEZNb3ZlKGxvYWRlciksIHJlcXVlc3QgPSBSZXNvdXJjZVJl
cXVlc3QgeyByZXF1ZXN0IH1dKGF1dG8gZW50cnkpIG11dGFibGUgeworICAgIG1fY2FjaGUtPnJl
dHJpZXZlKHJlcXVlc3QsIHsgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndl
YkZyYW1lSUQgfSwgW3RoaXMsIGxvYWRlciA9IFdURk1vdmUobG9hZGVyKSwgcmVxdWVzdCA9IFJl
c291cmNlUmVxdWVzdCB7IHJlcXVlc3QgfV0oYXV0byBlbnRyeSwgYXV0byBpbmZvKSBtdXRhYmxl
IHsKICNpZiBSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgICAgICBVTlVTRURfUEFSQU0odGhpcyk7
CiAjZW5kaWYKQEAgLTIyMyw2ICsyMjMsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
cmV0cmlldmVDYWNoCiAgICAgICAgICAgICAvLyBUaGUgbG9hZGVyIGhhcyBiZWVuIGFib3J0ZWQg
YW5kIGlzIG9ubHkgaGVsZCBhbGl2ZSBieSB0aGlzIGxhbWJkYS4KICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQorCisgICAgICAgIGxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQoaW5m
byk7CisKICAgICAgICAgaWYgKCFlbnRyeSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZf
QUxMT1dFRCgicmV0cmlldmVDYWNoZUVudHJ5OiBSZXNvdXJjZSBub3QgaW4gY2FjaGUgKHBhZ2VJ
RCA9ICUiIFBSSXU2NCAiLCBmcmFtZUlEID0gJSIgUFJJdTY0ICIsIHJlc291cmNlSUQgPSAlIiBQ
Ukl1NjQgIiwgaXNNYWluUmVzb3VyY2UgPSAlZCwgaXNTeW5jaHJvbm91cyA9ICVkKSIsIG1fcGFy
YW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBtX3BhcmFtZXRlcnMu
aWRlbnRpZmllciwgaXNNYWluUmVzb3VyY2UoKSwgaXNTeW5jaHJvbm91cygpKTsKICAgICAgICAg
ICAgIGxvYWRlci0+c3RhcnROZXR3b3JrTG9hZChXVEZNb3ZlKHJlcXVlc3QpLCBGaXJzdExvYWQ6
Olllcyk7CkBAIC0xMDgxLDQgKzEwODQsMzQgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmVucXVldWVTZWN1cgogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVucXVldWVTZWN1cml0
eVBvbGljeVZpb2xhdGlvbkV2ZW50IHsgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIFdURk1vdmUo
ZXZlbnRJbml0KSB9LCBtX3BhcmFtZXRlcnMud2ViUGFnZUlEKTsKIH0KIAordm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQoY29uc3QgTmV0d29y
a0NhY2hlOjpDYWNoZTo6UmV0cmlldmVJbmZvJiBpbmZvKQoreworICAgIGlmICghaXNBbHdheXNP
bkxvZ2dpbmdBbGxvd2VkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGR1cmF0aW9uID0g
aW5mby5jb21wbGV0aW9uVGltZSAtIGluZm8uc3RhcnRUaW1lOworICAgIGlmIChkdXJhdGlvbiA8
IDFfcykKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Ns
b3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFNsb3cgY2FjaGUgcmV0cmlldmUsIHRvb2sgJS4wZm1z
IiwgZHVyYXRpb24ubWlsbGlzZWNvbmRzKCkpOworICAgIGlmIChpbmZvLndhc1NwZWN1bGF0aXZl
TG9hZCkKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0cmll
dmVJZk5lZWRlZDogV2FzIHNwZWN1bGF0aXZlIGxvYWQiKTsKKyAgICBpZiAoIWluZm8uc3RvcmFn
ZVRpbWluZ3Muc3RhcnRUaW1lKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9MT0dfSUZf
QUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZDogU3RvcmFnZSByZXRyaWV2ZSB0
aW1lICUuMGZtcyIsIChpbmZvLnN0b3JhZ2VUaW1pbmdzLmNvbXBsZXRpb25UaW1lIC0gaW5mby5z
dG9yYWdlVGltaW5ncy5zdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpKTsKKyAgICBpZiAoaW5mby5z
dG9yYWdlVGltaW5ncy5kaXNwYXRjaFRpbWUpIHsKKyAgICAgICAgYXV0byB0aW1lID0gKGluZm8u
c3RvcmFnZVRpbWluZ3MuZGlzcGF0Y2hUaW1lIC0gaW5mby5zdG9yYWdlVGltaW5ncy5zdGFydFRp
bWUpLm1pbGxpc2Vjb25kcygpOworICAgICAgICBhdXRvIGNvdW50ID0gaW5mby5zdG9yYWdlVGlt
aW5ncy5kaXNwYXRjaENvdW50QXREaXNwYXRjaCAtIGluZm8uc3RvcmFnZVRpbWluZ3MuZGlzcGF0
Y2hDb3VudEF0U3RhcnQ7CisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dD
YWNoZVJldHJpZXZlSWZOZWVkZWQ6IERpc3BhdGNoIGRlbGF5ICUuMGZtcywgZGlzcGF0Y2hlZCAl
bHUgcmVzb3VyY2VzIGZpcnN0IiwgdGltZSwgY291bnQpOworICAgIH0KKyAgICBpZiAoaW5mby5z
dG9yYWdlVGltaW5ncy5yZWNvcmRJT1N0YXJ0VGltZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZf
QUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZDogUmVjb3JkIEkvTyB0aW1lICUu
MGZtcyIsIChpbmZvLnN0b3JhZ2VUaW1pbmdzLnJlY29yZElPRW5kVGltZSAtIGluZm8uc3RvcmFn
ZVRpbWluZ3MucmVjb3JkSU9TdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpKTsKKyAgICBpZiAoaW5m
by5zdG9yYWdlVGltaW5ncy5ibG9iSU9TdGFydFRpbWUpCisgICAgICAgIFJFTEVBU0VfTE9HX0lG
X0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IEJsb2IgSS9PIHRpbWUgJS4w
Zm1zIiwgKGluZm8uc3RvcmFnZVRpbWluZ3MuYmxvYklPRW5kVGltZSAtIGluZm8uc3RvcmFnZVRp
bWluZ3MuYmxvYklPU3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CisgICAgaWYgKGluZm8uc3Rv
cmFnZVRpbWluZ3Muc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzc0F0RGlzcGF0Y2gpCisgICAgICAg
IFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFN5
bmNocm9uaXphdGlvbiB3YXMgaW4gcHJvZ3Jlc3MiKTsKKyAgICBpZiAoaW5mby5zdG9yYWdlVGlt
aW5ncy5zaHJpbmtJblByb2dyZXNzQXREaXNwYXRjaCkKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZf
QUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZDogU2hyaW5rIHdhcyBpbiBwcm9n
cmVzcyIpOworICAgIGlmIChpbmZvLnN0b3JhZ2VUaW1pbmdzLndhc0NhbmNlbGVkKQorICAgICAg
ICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBS
ZXRyaWV2ZSB3YXMgY2FuY2VsZWQiKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmgJKHJldmlzaW9uIDIzMjUzOCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VuZENTUFZpb2xhdGlvblJlcG9ydChXZWJDb3JlOjpV
UkwmJiwgUmVmPFdlYkNvcmU6OkZvcm1EYXRhPiYmKSBmaW5hbDsKICAgICB2b2lkIGVucXVldWVT
ZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50KFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5VmlvbGF0
aW9uRXZlbnQ6OkluaXQmJikgZmluYWw7CiAKKyAgICB2b2lkIGxvZ1Nsb3dDYWNoZVJldHJpZXZl
SWZOZWVkZWQoY29uc3QgTmV0d29ya0NhY2hlOjpDYWNoZTo6UmV0cmlldmVJbmZvJik7CisKICAg
ICBjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CiAKICAg
ICBSZWY8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvbjsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9uIDIzMjUzOCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgQ2FjaGVzOjpyZWFkUmVj
b3JkKGNvbnN0IE5ldHdvcmtDYWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc3Rv
cmFnZS0+cmV0cmlldmUoa2V5LCA0LCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3Rv
cmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6dW5pcXVlX3B0cjxTdG9y
YWdlOjpSZWNvcmQ+IHN0b3JhZ2UpIG11dGFibGUgeworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUo
a2V5LCA0LCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHN0
b3JhZ2UsIGNvbnN0IFN0b3JhZ2U6OlRpbWluZ3MmKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCFz
dG9yYWdlKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVh
ZERpc2spKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlzaW9u
IDIzMjUzOCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw3IEBAIHN0YXRpYyBTdG9yZURl
Y2lzaW9uIG1ha2VTdG9yZURlY2lzaW9uKGMKICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6WWVz
OwogfQogCi12b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIEZ1bmN0aW9uPHZvaWQg
KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBDYWNo
ZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0lu
SFRUUEZhbWlseSgpKTsKIApAQCAtMzIwLDYgKzMyMCw5IEBAIHZvaWQgQ2FjaGU6OnJldHJpZXZl
KGNvbnN0IFdlYkNvcmU6OlJlc28KIAogICAgIEtleSBzdG9yYWdlS2V5ID0gbWFrZUNhY2hlS2V5
KHJlcXVlc3QpOwogCisgICAgUmV0cmlldmVJbmZvIGluZm87CisgICAgaW5mby5zdGFydFRpbWUg
PSBXYWxsVGltZTo6bm93KCk7CisKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElW
RV9SRVZBTElEQVRJT04pCiAgICAgYm9vbCBjYW5Vc2VTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbiA9
IG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlciAmJiAhcmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkgJiYg
IWNhY2hlUG9saWN5QWxsb3dzRXhwaXJlZChyZXF1ZXN0LmNhY2hlUG9saWN5KCkpOwogICAgIGlm
IChjYW5Vc2VTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbikKQEAgLTMzMSwzMyArMzM0LDM1IEBAIHZv
aWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc28KICAgICAgICAgaWYgKG1fc3Rh
dGlzdGljcykKICAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkTm90VXNpbmdDYWNoZUZv
clJlcXVlc3QoZnJhbWVJRC5maXJzdCwgc3RvcmFnZUtleSwgcmVxdWVzdCwgcmV0cmlldmVEZWNp
c2lvbik7CiAKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgIGNv
bXBsZXRlUmV0cmlldmUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG51bGxwdHIsIGluZm8p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BF
Q1VMQVRJVkVfUkVWQUxJREFUSU9OKQogICAgIGlmIChjYW5Vc2VTcGVjdWxhdGl2ZVJldmFsaWRh
dGlvbiAmJiBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXItPmNhblJldHJpZXZlKHN0b3JhZ2VLZXks
IHJlcXVlc3QsIGZyYW1lSUQpKSB7Ci0gICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+
cmV0cmlldmUoc3RvcmFnZUtleSwgW3JlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnkpIHsKKyAg
ICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBbcmVx
dWVzdCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgaW5m
byA9IFdURk1vdmUoaW5mbyldKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnkpIG11dGFibGUg
eworICAgICAgICAgICAgaW5mby53YXNTcGVjdWxhdGl2ZUxvYWQgPSB0cnVlOwogICAgICAgICAg
ICAgaWYgKGVudHJ5ICYmIFdlYkNvcmU6OnZlcmlmeVZhcnlpbmdSZXF1ZXN0SGVhZGVycyhlbnRy
eS0+dmFyeWluZ1JlcXVlc3RIZWFkZXJzKCksIHJlcXVlc3QpKQotICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZW50cnkpKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0
ZVJldHJpZXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBXVEZNb3ZlKGVudHJ5KSwgaW5m
byk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0cik7CisgICAgICAgICAgICAgICAgY29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgbnVsbHB0ciwgaW5mbyk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBhdXRvIHN0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3co
KTsKICAgICBhdXRvIHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlcXVlc3QucHJp
b3JpdHkoKSk7CiAKLSAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCByZXF1ZXN0LCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGFydFRpbWUsIHN0b3Jh
Z2VLZXksIGZyYW1lSURdKGF1dG8gcmVjb3JkKSB7CisgICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShz
dG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgcmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgaW5mbyA9IFdURk1vdmUoaW5mbyksIHN0b3JhZ2VLZXksIGZyYW1lSURdKGF1dG8gcmVjb3Jk
LCBhdXRvIHRpbWluZ3MpIG11dGFibGUgeworICAgICAgICBpbmZvLnN0b3JhZ2VUaW1pbmdzID0g
dGltaW5nczsKKwogICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAgICAgTE9HKE5ldHdv
cmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgbm90IGZvdW5kIGluIHN0b3JhZ2UiKTsKIAogICAg
ICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKICAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3Mt
PnJlY29yZFJldHJpZXZhbEZhaWx1cmUoZnJhbWVJRC5maXJzdCwgc3RvcmFnZUtleSwgcmVxdWVz
dCk7CiAKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICAg
ICAgY29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbnVsbHB0ciwg
aW5mbyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMzc3LDEy
ICszODIsMTIgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzbwogICAg
ICAgICB9OwogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgICAgICBhdXRvIGVsYXBzZWQgPSBXYWxs
VGltZTo6bm93KCkgLSBzdGFydFRpbWU7CisgICAgICAgIGF1dG8gZWxhcHNlZCA9IFdhbGxUaW1l
Ojpub3coKSAtIGluZm8uc3RhcnRUaW1lOwogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSByZXRyaWV2ZSBjb21wbGV0ZSB1c2VEZWNpc2lvbj0lZCBwcmlvcml0eT0l
ZCB0aW1lPSUiIFBSSWk2NCAibXMiLCBzdGF0aWNfY2FzdDxpbnQ+KHVzZURlY2lzaW9uKSwgc3Rh
dGljX2Nhc3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkpLCBlbGFwc2VkLm1pbGxpc2Vjb25kc0Fz
PGludDY0X3Q+KCkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHN0YXJ0VGltZSk7CiAj
ZW5kaWYKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlbnRyeSkpOworICAgICAg
ICBjb21wbGV0ZVJldHJpZXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBXVEZNb3ZlKGVu
dHJ5KSwgaW5mbyk7CiAKICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKICAgICAgICAgICAgIG1f
c3RhdGlzdGljcy0+cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkoZnJhbWVJRC5maXJzdCwgc3Rv
cmFnZUtleSwgcmVxdWVzdCwgdXNlRGVjaXNpb24pOwpAQCAtMzkwLDYgKzM5NSwxMSBAQCB2b2lk
IENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgfSk7CiB9CiAKK3ZvaWQg
Q2FjaGU6OmNvbXBsZXRlUmV0cmlldmUoUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRs
ZXIsIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnksIFJldHJpZXZlSW5mbyYgaW5mbykKK3sK
KyAgICBpbmZvLmNvbXBsZXRpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIGhhbmRsZXIo
V1RGTW92ZShlbnRyeSksIGluZm8pOworfQogICAgIAogc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBD
YWNoZTo6bWFrZUVudHJ5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhKQogewpAQCAtNjIxLDcgKzYzMSw3IEBAIFN0
cmluZyBDYWNoZTo6cmVjb3Jkc1BhdGgoKSBjb25zdAogdm9pZCBDYWNoZTo6cmV0cmlldmVEYXRh
KGNvbnN0IERhdGFLZXkmIGRhdGFLZXksIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgS2V5IGtleSB7IGRh
dGFLZXksIG1fc3RvcmFnZS0+c2FsdCgpIH07Ci0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShrZXks
IDQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0
byByZWNvcmQpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvIHJlY29yZCwgYXV0bykg
ewogICAgICAgICBpZiAoIXJlY29yZCB8fCAhcmVjb3JkLT5ib2R5LnNpemUoKSkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgMCk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuaAkocmV2aXNpb24gMjMyNTM4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEw
MiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYXBhY2l0eShzaXplX3QpOwogCiAgICAgLy8g
Q29tcGxldGlvbiBoYW5kbGVyIG1heSBnZXQgY2FsbGVkIGJhY2sgc3luY2hyb25vdXNseSBvbiBm
YWlsdXJlLgotICAgIHZvaWQgcmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIEZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxF
bnRyeT4pPiYmKTsKKyAgICBzdHJ1Y3QgUmV0cmlldmVJbmZvIHsKKyAgICAgICAgV2FsbFRpbWUg
c3RhcnRUaW1lOworICAgICAgICBXYWxsVGltZSBjb21wbGV0aW9uVGltZTsKKyAgICAgICAgU3Rv
cmFnZTo6VGltaW5ncyBzdG9yYWdlVGltaW5nczsKKyAgICAgICAgYm9vbCB3YXNTcGVjdWxhdGl2
ZUxvYWQgeyBmYWxzZSB9OworCisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IH07CisgICAgdXNpbmcgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQg
KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4sIGNvbnN0IFJldHJpZXZlSW5mbyYpPjsKKyAgICB2b2lk
IHJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEdsb2JhbEZy
YW1lSUQmLCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYpOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxFbnRyeT4gc3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYs
IEZ1bmN0aW9uPHZvaWQgKE1hcHBlZEJvZHkmKT4mJik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVu
dHJ5PiBzdG9yZVJlZGlyZWN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlZGlyZWN0UmVxdWVzdCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiB1cGRhdGUo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNv
bnN0IEVudHJ5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jl
c3BvbnNlKTsKQEAgLTE0MCw2ICsxNDksOCBAQCBwcml2YXRlOgogCiAgICAgS2V5IG1ha2VDYWNo
ZUtleShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKIAorICAgIHN0YXRpYyB2b2lk
IGNvbXBsZXRlUmV0cmlldmUoUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmLCBzdGQ6OnVuaXF1
ZV9wdHI8RW50cnk+LCBSZXRyaWV2ZUluZm8mKTsKKwogICAgIFN0cmluZyBkdW1wRmlsZVBhdGgo
KSBjb25zdDsKICAgICB2b2lkIGRlbGV0ZUR1bXBGaWxlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjMyNTM4KQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxh
dGl2ZUxvYWRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE2LDcgKzQxNiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6YWRkUHJlbG9hZGUKIAogdm9pZCBTcGVjdWxhdGl2
ZUxvYWRNYW5hZ2VyOjpyZXRyaWV2ZUVudHJ5RnJvbVN0b3JhZ2UoY29uc3QgU3VicmVzb3VyY2VJ
bmZvJiBpbmZvLCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgbV9zdG9yYWdlLnJldHJpZXZlKGluZm8ua2V5KCksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmZvLnByaW9yaXR5KCkpLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYXV0byByZWNvcmQpIHsKKyAgICBtX3N0b3JhZ2UucmV0cmlldmUoaW5m
by5rZXkoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZm8ucHJpb3JpdHkoKSksIFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIHJlY29yZCwgYXV0
byB0aW1pbmdzKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU3MSw3
ICs1NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldHJpZXZlU3ViCiB7CiAg
ICAgQVNTRVJUKHN0b3JhZ2VLZXkudHlwZSgpID09ICJSZXNvdXJjZSIpOwogICAgIGF1dG8gc3Vi
cmVzb3VyY2VzU3RvcmFnZUtleSA9IG1ha2VTdWJyZXNvdXJjZXNLZXkoc3RvcmFnZUtleSwgbV9z
dG9yYWdlLnNhbHQoKSk7Ci0gICAgbV9zdG9yYWdlLnJldHJpZXZlKHN1YnJlc291cmNlc1N0b3Jh
Z2VLZXksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVt
KSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8g
cmVjb3JkKSB7CisgICAgbV9zdG9yYWdlLnJldHJpZXZlKHN1YnJlc291cmNlc1N0b3JhZ2VLZXks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtKSwgW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gcmVjb3Jk
LCBhdXRvIHRpbWluZ3MpIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICBCbG9iU3RvcmFnZTo6QmxvYiByZXN1
bHRCb2R5QmxvYjsKICAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gYWN0aXZlQ291bnQgeyAwIH07
CiAgICAgYm9vbCBpc0NhbmNlbGVkIHsgZmFsc2UgfTsKKyAgICBUaW1pbmdzIHRpbWluZ3M7CiB9
OwogCiB2b2lkIFN0b3JhZ2U6OlJlYWRPcGVyYXRpb246OmNhbmNlbCgpCkBAIC03OSw4ICs4MCwx
MCBAQCB2b2lkIFN0b3JhZ2U6OlJlYWRPcGVyYXRpb246OmNhbmNlbCgpCiAKICAgICBpZiAoaXND
YW5jZWxlZCkKICAgICAgICAgcmV0dXJuOworICAgIHRpbWluZ3MuY29tcGxldGlvblRpbWUgPSBX
YWxsVGltZTo6bm93KCk7CisgICAgdGltaW5ncy53YXNDYW5jZWxlZCA9IHRydWU7CiAgICAgaXND
YW5jZWxlZCA9IHRydWU7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgY29t
cGxldGlvbkhhbmRsZXIobnVsbHB0ciwgdGltaW5ncyk7CiB9CiAKIGJvb2wgU3RvcmFnZTo6UmVh
ZE9wZXJhdGlvbjo6ZmluaXNoKCkKQEAgLTk1LDcgKzk4LDggQEAgYm9vbCBTdG9yYWdlOjpSZWFk
T3BlcmF0aW9uOjpmaW5pc2goKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHRSZWNv
cmQgPSBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShyZXN1bHRSZWNvcmQpKTsKKyAgICB0aW1pbmdzLmNvbXBsZXRpb25UaW1lID0gV2FsbFRpbWU6
Om5vdygpOworICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdFJlY29y
ZCksIHRpbWluZ3MpOwogfQogCiBzdHJ1Y3QgU3RvcmFnZTo6V3JpdGVPcGVyYXRpb24gewpAQCAt
NjQ0LDYgKzY0OCwxMyBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbihzdGQ6
CiAgICAgYXV0byYgcmVhZE9wZXJhdGlvbiA9ICpyZWFkT3BlcmF0aW9uUHRyOwogICAgIG1fYWN0
aXZlUmVhZE9wZXJhdGlvbnMuYWRkKFdURk1vdmUocmVhZE9wZXJhdGlvblB0cikpOwogCisgICAg
cmVhZE9wZXJhdGlvbi50aW1pbmdzLmRpc3BhdGNoVGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAg
ICByZWFkT3BlcmF0aW9uLnRpbWluZ3Muc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzc0F0RGlzcGF0
Y2ggPSBtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3M7CisgICAgcmVhZE9wZXJhdGlvbi50aW1p
bmdzLnNocmlua0luUHJvZ3Jlc3NBdERpc3BhdGNoID0gbV9zaHJpbmtJblByb2dyZXNzOworICAg
IHJlYWRPcGVyYXRpb24udGltaW5ncy5kaXNwYXRjaENvdW50QXREaXNwYXRjaCA9IG1fcmVhZE9w
ZXJhdGlvbkRpc3BhdGNoQ291bnQ7CisKKyAgICArK21fcmVhZE9wZXJhdGlvbkRpc3BhdGNoQ291
bnQ7CisKICAgICAvLyBBdm9pZCByYW5kb21uZXNzIGR1cmluZyB0ZXN0aW5nLgogICAgIGlmICht
X21vZGUgIT0gTW9kZTo6VGVzdGluZykgewogICAgICAgICAvLyBJL08gcHJlc3N1cmUgbWF5IG1h
a2UgZGlzayBvcGVyYXRpb25zIHNsb3cuIElmIHRoZXkgc3RhcnQgdGFraW5nIHZlcnkgbG9uZyB0
aW1lIHdlIHJhdGhlciBnbyB0byBuZXR3b3JrLgpAQCAtNjYwLDggKzY3MSwxMSBAQCB2b2lkIFN0
b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbihzdGQ6CiAgICAgICAgIGlmIChzaG91bGRHZXRC
b2R5QmxvYikKICAgICAgICAgICAgICsrcmVhZE9wZXJhdGlvbi5hY3RpdmVDb3VudDsKIAorICAg
ICAgICByZWFkT3BlcmF0aW9uLnRpbWluZ3MucmVjb3JkSU9TdGFydFRpbWUgPSBXYWxsVGltZTo6
bm93KCk7CisKICAgICAgICAgYXV0byBjaGFubmVsID0gSU9DaGFubmVsOjpvcGVuKHJlY29yZFBh
dGgsIElPQ2hhbm5lbDo6VHlwZTo6UmVhZCk7CiAgICAgICAgIGNoYW5uZWwtPnJlYWQoMCwgc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgJmlvUXVldWUoKSwgW3RoaXMsICZyZWFk
T3BlcmF0aW9uXShjb25zdCBEYXRhJiBmaWxlRGF0YSwgaW50IGVycm9yKSB7CisgICAgICAgICAg
ICByZWFkT3BlcmF0aW9uLnRpbWluZ3MucmVjb3JkSU9FbmRUaW1lID0gV2FsbFRpbWU6Om5vdygp
OwogICAgICAgICAgICAgaWYgKCFlcnJvcikKICAgICAgICAgICAgICAgICByZWFkUmVjb3JkKHJl
YWRPcGVyYXRpb24sIGZpbGVEYXRhKTsKICAgICAgICAgICAgIGZpbmlzaFJlYWRPcGVyYXRpb24o
cmVhZE9wZXJhdGlvbik7CkBAIC02NjksOCArNjgzLDEyIEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0
Y2hSZWFkT3BlcmF0aW9uKHN0ZDoKIAogICAgICAgICBpZiAoc2hvdWxkR2V0Qm9keUJsb2IpIHsK
ICAgICAgICAgICAgIC8vIFJlYWQgdGhlIGJsb2IgaW4gcGFyYWxsZWwgd2l0aCB0aGUgcmVjb3Jk
IHJlYWQuCisgICAgICAgICAgICByZWFkT3BlcmF0aW9uLnRpbWluZ3MuYmxvYklPU3RhcnRUaW1l
ID0gV2FsbFRpbWU6Om5vdygpOworCiAgICAgICAgICAgICBhdXRvIGJsb2JQYXRoID0gYmxvYlBh
dGhGb3JLZXkocmVhZE9wZXJhdGlvbi5rZXkpOwogICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi5y
ZXN1bHRCb2R5QmxvYiA9IG1fYmxvYlN0b3JhZ2UuZ2V0KGJsb2JQYXRoKTsKKworICAgICAgICAg
ICAgcmVhZE9wZXJhdGlvbi50aW1pbmdzLmJsb2JJT0VuZFRpbWUgPSBXYWxsVGltZTo6bm93KCk7
CiAgICAgICAgICAgICBmaW5pc2hSZWFkT3BlcmF0aW9uKHJlYWRPcGVyYXRpb24pOwogICAgICAg
ICB9CiAgICAgfSk7CkBAIC03NDcsNyArNzY1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wg
cmV0cmlldmVGcm9tTWVtbwogICAgICAgICBpZiAob3BlcmF0aW9uLT5yZWNvcmQua2V5ID09IGtl
eSkgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nl
c3MpIGZvdW5kIHdyaXRlIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyIpOwogICAgICAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtyZWNvcmQgPSBvcGVyYXRpb24tPnJlY29yZCwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bWFrZV91bmlxdWU8U3RvcmFnZTo6UmVjb3JkPihy
ZWNvcmQpKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om1ha2VfdW5p
cXVlPFN0b3JhZ2U6OlJlY29yZD4ocmVjb3JkKSwgeyB9KTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTgzOSwxMiArODU3LDEyIEBAIHZv
aWQgU3RvcmFnZTo6cmV0cmlldmUoY29uc3QgS2V5JiBrZXksIHUKICAgICBBU1NFUlQoIWtleS5p
c051bGwoKSk7CiAKICAgICBpZiAoIW1fY2FwYWNpdHkpIHsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIHsgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIW1heUNvbnRhaW4oa2V5KSkgewot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0ciwgeyB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODU0LDYg
Kzg3MiwxMCBAQCB2b2lkIFN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0IEtleSYga2V5LCB1CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGF1dG8gcmVhZE9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
UmVhZE9wZXJhdGlvbj4oKnRoaXMsIGtleSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
CisgICAgcmVhZE9wZXJhdGlvbi0+dGltaW5ncy5zdGFydFRpbWUgPSBXYWxsVGltZTo6bm93KCk7
CisgICAgcmVhZE9wZXJhdGlvbi0+dGltaW5ncy5kaXNwYXRjaENvdW50QXRTdGFydCA9IG1fcmVh
ZE9wZXJhdGlvbkRpc3BhdGNoQ291bnQ7CisKICAgICBtX3BlbmRpbmdSZWFkT3BlcmF0aW9uc0J5
UHJpb3JpdHlbcHJpb3JpdHldLnByZXBlbmQoV1RGTW92ZShyZWFkT3BlcmF0aW9uKSk7CiAgICAg
ZGlzcGF0Y2hQZW5kaW5nUmVhZE9wZXJhdGlvbnMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5o
CShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTkgKzUwLDM3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPFN0b3JhZ2U+IG9wZW4oY29uc3QgU3RyaW5nJiBj
YWNoZVBhdGgsIE1vZGUpOwogCiAgICAgc3RydWN0IFJlY29yZCB7Ci0gICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKICAgICAgICAgS2V5IGtleTsKICAgICAgICAg
V2FsbFRpbWUgdGltZVN0YW1wOwogICAgICAgICBEYXRhIGhlYWRlcjsKICAgICAgICAgRGF0YSBi
b2R5OwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFNIQTE6OkRpZ2VzdD4gYm9keUhhc2g7CisKKyAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgfTsKKworICAgIHN0cnVjdCBUaW1p
bmdzIHsKKyAgICAgICAgV2FsbFRpbWUgc3RhcnRUaW1lOworICAgICAgICBXYWxsVGltZSBkaXNw
YXRjaFRpbWU7CisgICAgICAgIFdhbGxUaW1lIHJlY29yZElPU3RhcnRUaW1lOworICAgICAgICBX
YWxsVGltZSByZWNvcmRJT0VuZFRpbWU7CisgICAgICAgIFdhbGxUaW1lIGJsb2JJT1N0YXJ0VGlt
ZTsKKyAgICAgICAgV2FsbFRpbWUgYmxvYklPRW5kVGltZTsKKyAgICAgICAgV2FsbFRpbWUgY29t
cGxldGlvblRpbWU7CisgICAgICAgIHNpemVfdCBkaXNwYXRjaENvdW50QXRTdGFydCB7IDAgfTsK
KyAgICAgICAgc2l6ZV90IGRpc3BhdGNoQ291bnRBdERpc3BhdGNoIHsgMCB9OworICAgICAgICBi
b29sIHN5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3NBdERpc3BhdGNoIHsgZmFsc2UgfTsKKyAgICAg
ICAgYm9vbCBzaHJpbmtJblByb2dyZXNzQXREaXNwYXRjaCB7IGZhbHNlIH07CisgICAgICAgIGJv
b2wgd2FzQ2FuY2VsZWQgeyBmYWxzZSB9OworCisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIH07CisKICAgICAvLyBUaGlzIG1heSBjYWxsIGNvbXBsZXRpb24gaGFuZGxlciBz
eW5jaHJvbm91c2x5IG9uIGZhaWx1cmUuCi0gICAgdHlwZWRlZiBGdW5jdGlvbjxib29sIChzdGQ6
OnVuaXF1ZV9wdHI8UmVjb3JkPik+IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXI7CisgICAgdXNp
bmcgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciA9IEZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5pcXVl
X3B0cjxSZWNvcmQ+LCBjb25zdCBUaW1pbmdzJik+OwogICAgIHZvaWQgcmV0cmlldmUoY29uc3Qg
S2V5JiwgdW5zaWduZWQgcHJpb3JpdHksIFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJik7CiAK
LSAgICB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IERhdGEmIG1hcHBlZEJvZHkpPiBNYXBw
ZWRCb2R5SGFuZGxlcjsKKyAgICB1c2luZyBNYXBwZWRCb2R5SGFuZGxlciA9IEZ1bmN0aW9uPHZv
aWQgKGNvbnN0IERhdGEmIG1hcHBlZEJvZHkpPjsKICAgICB2b2lkIHN0b3JlKGNvbnN0IFJlY29y
ZCYsIE1hcHBlZEJvZHlIYW5kbGVyJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IHsg
fSk7CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXkmKTsKQEAgLTE2Myw2ICsxODEsNyBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9zaHJpbmtJblByb2dyZXNzIHsgZmFsc2UgfTsKKyAgICBzaXplX3QgbV9y
ZWFkT3BlcmF0aW9uRGlzcGF0Y2hDb3VudCB7IDAgfTsKIAogICAgIFZlY3RvcjxLZXk6Okhhc2hU
eXBlPiBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uOwogICAg
IFZlY3RvcjxLZXk6Okhhc2hUeXBlPiBtX2Jsb2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNo
cm9uaXphdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342424</attachid>
            <date>2018-06-11 06:53:52 -0700</date>
            <delta_ts>2018-06-11 07:01:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>cache-retrieve-timing-logging-2.patch</filename>
            <type>text/plain</type>
            <size>22849</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzI3MDkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE4LTA2LTExICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBmb3Igc2xvdyBjYWNoZSByZXRyaWV2ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NjUyMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDEwMDIw
NzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
c29tZXRpbWVzIHNlZSBzbG93IGNhY2hlIHJldHJpZXZlcyBpbiBsb2dzLiBBZGQgc29tZSBtb3Jl
IGxvZ2dpbmcgdG8gYmV0dGVyIGFuYWx5emUgdGhlc2UgY2FzZXMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRpbWluZ3MgdG8gYWxsIGNhY2hlIHN0b3JhZ2UgcmV0cmlldmUgb3BlcmF0aW9u
cyBhbmQgcGFzc2VzIHRoZW0gdXAgdG8gdGhlIGNsaWVudC4KKyAgICAgICAgV2UgdGhlbiBsb2cg
dGhlIHRpbWluZ3Mgb24gTmV0d29ya1Jlc291cmNlTG9hZGVyIGxldmVscyBpZiBuZWVkZWQuIEl0
ZW1zIGxvZ2dlZCBpbmNsdWRlCisKKyAgICAgICAgLSB0b3RhbCByZXRyaWV2ZSB0aW1lCisgICAg
ICAgIC0gZGlzcGF0Y2ggZGVsYXkgYW5kIG51bWJlciBvZiByZXNvdXJjZXMgZGlzcGF0Y2hlZCBi
ZWZvcmUgdGhpcyBvbmUKKyAgICAgICAgLSByZWNvcmQgSS9PIHRpbWUKKyAgICAgICAgLSBibG9i
IEkvTyB0aW1lCisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzaHJpbmsgd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzeW5jaHJvbml6YXRpb24gd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gY2FuY2VsbGF0aW9uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6bG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZCk6CisKKyAgICAgICAgTG9n
IGlmIHRoZSByZXRyaWV2ZSB0b29rIG1vcmUgdGhhbiAxcy4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6
OmNvbXBsZXRlUmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
OjpyZXRyaWV2ZURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldHJpZXZlRW50cnlGcm9tU3RvcmFnZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmlldmVT
dWJyZXNvdXJjZXNFbnRyeSk6CisKKyAgICAgICAgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciBkb2Vz
IG5vdCByZWNvcmRzIHNwZWNpZmljIHRpbWluZ3MgeWV0IGJ1dCBhdCBsZWFzdCB3ZSBkbyBsb2cg
d2hlbiB0aGV5IG9jY3VyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFn
ZTo6UmVhZE9wZXJhdGlvbjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5pc2gpOgorCisgICAgICAgIFJlY29yZCB0aW1p
bmcgaW5mbyBpbiBSZWFkT3BlcmF0aW9ucy4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6cmV0cmlldmVGcm9tTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpTdG9yYWdlOjpyZXRyaWV2ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgorCiAyMDE4LTA2LTEwICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCBBUEkg
cnVuIHJ1biBqYXZhc2NyaXB0IGZyb20gYSBXZWJLaXRXZWJWaWV3IGluIGFuIGlzb2xhdGVkIHdv
cmxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cmV0cmlldmVD
YWNoCiAgICAgQVNTRVJUKGNhblVzZUNhY2hlKHJlcXVlc3QpKTsKIAogICAgIFJlZlB0cjxOZXR3
b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRlcih0aGlzKTsKLSAgICBtX2NhY2hlLT5yZXRyaWV2ZShy
ZXF1ZXN0LCB7IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlE
IH0sIFt0aGlzLCBsb2FkZXIgPSBXVEZNb3ZlKGxvYWRlciksIHJlcXVlc3QgPSBSZXNvdXJjZVJl
cXVlc3QgeyByZXF1ZXN0IH1dKGF1dG8gZW50cnkpIG11dGFibGUgeworICAgIG1fY2FjaGUtPnJl
dHJpZXZlKHJlcXVlc3QsIHsgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndl
YkZyYW1lSUQgfSwgW3RoaXMsIGxvYWRlciA9IFdURk1vdmUobG9hZGVyKSwgcmVxdWVzdCA9IFJl
c291cmNlUmVxdWVzdCB7IHJlcXVlc3QgfV0oYXV0byBlbnRyeSwgYXV0byBpbmZvKSBtdXRhYmxl
IHsKICNpZiBSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgICAgICBVTlVTRURfUEFSQU0odGhpcyk7
CiAjZW5kaWYKQEAgLTIyMyw2ICsyMjMsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
cmV0cmlldmVDYWNoCiAgICAgICAgICAgICAvLyBUaGUgbG9hZGVyIGhhcyBiZWVuIGFib3J0ZWQg
YW5kIGlzIG9ubHkgaGVsZCBhbGl2ZSBieSB0aGlzIGxhbWJkYS4KICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQorCisgICAgICAgIGxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQoaW5m
byk7CisKICAgICAgICAgaWYgKCFlbnRyeSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZf
QUxMT1dFRCgicmV0cmlldmVDYWNoZUVudHJ5OiBSZXNvdXJjZSBub3QgaW4gY2FjaGUgKHBhZ2VJ
RCA9ICUiIFBSSXU2NCAiLCBmcmFtZUlEID0gJSIgUFJJdTY0ICIsIHJlc291cmNlSUQgPSAlIiBQ
Ukl1NjQgIiwgaXNNYWluUmVzb3VyY2UgPSAlZCwgaXNTeW5jaHJvbm91cyA9ICVkKSIsIG1fcGFy
YW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBtX3BhcmFtZXRlcnMu
aWRlbnRpZmllciwgaXNNYWluUmVzb3VyY2UoKSwgaXNTeW5jaHJvbm91cygpKTsKICAgICAgICAg
ICAgIGxvYWRlci0+c3RhcnROZXR3b3JrTG9hZChXVEZNb3ZlKHJlcXVlc3QpLCBGaXJzdExvYWQ6
Olllcyk7CkBAIC0xMDgxLDQgKzEwODQsMzQgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmVucXVldWVTZWN1cgogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVucXVldWVTZWN1cml0
eVBvbGljeVZpb2xhdGlvbkV2ZW50IHsgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIFdURk1vdmUo
ZXZlbnRJbml0KSB9LCBtX3BhcmFtZXRlcnMud2ViUGFnZUlEKTsKIH0KIAordm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQoY29uc3QgTmV0d29y
a0NhY2hlOjpDYWNoZTo6UmV0cmlldmVJbmZvJiBpbmZvKQoreworICAgIGlmICghaXNBbHdheXNP
bkxvZ2dpbmdBbGxvd2VkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGR1cmF0aW9uID0g
aW5mby5jb21wbGV0aW9uVGltZSAtIGluZm8uc3RhcnRUaW1lOworICAgIGlmIChkdXJhdGlvbiA8
IDFfcykKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Ns
b3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFRvb2sgJS4wZm1zLCBwcmlvcml0eSAlZCIsIGR1cmF0
aW9uLm1pbGxpc2Vjb25kcygpLCBpbmZvLnByaW9yaXR5KTsKKyAgICBpZiAoaW5mby53YXNTcGVj
dWxhdGl2ZUxvYWQpCisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNo
ZVJldHJpZXZlSWZOZWVkZWQ6IFdhcyBzcGVjdWxhdGl2ZSBsb2FkIik7CisgICAgaWYgKCFpbmZv
LnN0b3JhZ2VUaW1pbmdzLnN0YXJ0VGltZSkKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFN0b3JhZ2UgcmV0
cmlldmUgdGltZSAlLjBmbXMiLCAoaW5mby5zdG9yYWdlVGltaW5ncy5jb21wbGV0aW9uVGltZSAt
IGluZm8uc3RvcmFnZVRpbWluZ3Muc3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CisgICAgaWYg
KGluZm8uc3RvcmFnZVRpbWluZ3MuZGlzcGF0Y2hUaW1lKSB7CisgICAgICAgIGF1dG8gdGltZSA9
IChpbmZvLnN0b3JhZ2VUaW1pbmdzLmRpc3BhdGNoVGltZSAtIGluZm8uc3RvcmFnZVRpbWluZ3Mu
c3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKTsKKyAgICAgICAgYXV0byBjb3VudCA9IGluZm8uc3Rv
cmFnZVRpbWluZ3MuZGlzcGF0Y2hDb3VudEF0RGlzcGF0Y2ggLSBpbmZvLnN0b3JhZ2VUaW1pbmdz
LmRpc3BhdGNoQ291bnRBdFN0YXJ0OworICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJs
b2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBEaXNwYXRjaCBkZWxheSAlLjBmbXMsIGRpc3Bh
dGNoZWQgJWx1IHJlc291cmNlcyBmaXJzdCIsIHRpbWUsIGNvdW50KTsKKyAgICB9CisgICAgaWYg
KGluZm8uc3RvcmFnZVRpbWluZ3MucmVjb3JkSU9TdGFydFRpbWUpCisgICAgICAgIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFJlY29yZCBJL08g
dGltZSAlLjBmbXMiLCAoaW5mby5zdG9yYWdlVGltaW5ncy5yZWNvcmRJT0VuZFRpbWUgLSBpbmZv
LnN0b3JhZ2VUaW1pbmdzLnJlY29yZElPU3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CisgICAg
aWYgKGluZm8uc3RvcmFnZVRpbWluZ3MuYmxvYklPU3RhcnRUaW1lKQorICAgICAgICBSRUxFQVNF
X0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBCbG9iIEkvTyB0
aW1lICUuMGZtcyIsIChpbmZvLnN0b3JhZ2VUaW1pbmdzLmJsb2JJT0VuZFRpbWUgLSBpbmZvLnN0
b3JhZ2VUaW1pbmdzLmJsb2JJT1N0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkpOworICAgIGlmIChp
bmZvLnN0b3JhZ2VUaW1pbmdzLnN5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3NBdERpc3BhdGNoKQor
ICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVl
ZGVkOiBTeW5jaHJvbml6YXRpb24gd2FzIGluIHByb2dyZXNzIik7CisgICAgaWYgKGluZm8uc3Rv
cmFnZVRpbWluZ3Muc2hyaW5rSW5Qcm9ncmVzc0F0RGlzcGF0Y2gpCisgICAgICAgIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFNocmluayB3YXMg
aW4gcHJvZ3Jlc3MiKTsKKyAgICBpZiAoaW5mby5zdG9yYWdlVGltaW5ncy53YXNDYW5jZWxlZCkK
KyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5l
ZWRlZDogUmV0cmlldmUgd2FzIGNhbmNlbGVkIik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcs
NiArMTc3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNlbmRDU1BWaW9sYXRpb25SZXBvcnQoV2Vi
Q29yZTo6VVJMJiYsIFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mJikgZmluYWw7CiAgICAgdm9pZCBl
bnF1ZXVlU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudChXZWJDb3JlOjpTZWN1cml0eVBvbGlj
eVZpb2xhdGlvbkV2ZW50OjpJbml0JiYpIGZpbmFsOwogCisgICAgdm9pZCBsb2dTbG93Q2FjaGVS
ZXRyaWV2ZUlmTmVlZGVkKGNvbnN0IE5ldHdvcmtDYWNoZTo6Q2FjaGU6OlJldHJpZXZlSW5mbyYp
OworCiAgICAgY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJz
OwogCiAgICAgUmVmPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247
CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyMzI1MzgpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw3ICs1MDgsNyBAQCB2b2lkIENhY2hlczo6
cmVhZFJlY29yZChjb25zdCBOZXR3b3JrQ2FjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX3N0b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVm
KCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6OnVuaXF1ZV9w
dHI8U3RvcmFnZTo6UmVjb3JkPiBzdG9yYWdlKSBtdXRhYmxlIHsKKyAgICBtX3N0b3JhZ2UtPnJl
dHJpZXZlKGtleSwgNCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVj
b3JkPiBzdG9yYWdlLCBjb25zdCBTdG9yYWdlOjpUaW1pbmdzJikgbXV0YWJsZSB7CiAgICAgICAg
IGlmICghc3RvcmFnZSkgewogICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJy
b3I6OlJlYWREaXNrKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCShy
ZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMg
U3RvcmVEZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjCiAgICAgcmV0dXJuIFN0b3JlRGVjaXNp
b246OlllczsKIH0KIAotdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBGdW5jdGlv
bjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3Zv
aWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxl
ciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChyZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSk7CiAKQEAgLTMxOSw2ICszMTksMTEgQEAgdm9pZCBDYWNoZTo6
cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzbwogICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29y
ZFJldHJpZXZhbFJlcXVlc3QoZnJhbWVJRC5maXJzdCk7CiAKICAgICBLZXkgc3RvcmFnZUtleSA9
IG1ha2VDYWNoZUtleShyZXF1ZXN0KTsKKyAgICBhdXRvIHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJlcXVlc3QucHJpb3JpdHkoKSk7CisKKyAgICBSZXRyaWV2ZUluZm8gaW5mbzsK
KyAgICBpbmZvLnN0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBpbmZvLnByaW9yaXR5
ID0gcHJpb3JpdHk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZB
TElEQVRJT04pCiAgICAgYm9vbCBjYW5Vc2VTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbiA9IG1fc3Bl
Y3VsYXRpdmVMb2FkTWFuYWdlciAmJiAhcmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkgJiYgIWNhY2hl
UG9saWN5QWxsb3dzRXhwaXJlZChyZXF1ZXN0LmNhY2hlUG9saWN5KCkpOwpAQCAtMzMxLDMzICsz
MzYsMzMgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzbwogICAgICAg
ICBpZiAobV9zdGF0aXN0aWNzKQogICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmROb3RV
c2luZ0NhY2hlRm9yUmVxdWVzdChmcmFtZUlELmZpcnN0LCBzdG9yYWdlS2V5LCByZXF1ZXN0LCBy
ZXRyaWV2ZURlY2lzaW9uKTsKIAotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
KyAgICAgICAgY29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbnVs
bHB0ciwgaW5mbyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCiAgICAgaWYgKGNhblVzZVNwZWN1bGF0
aXZlUmV2YWxpZGF0aW9uICYmIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+Y2FuUmV0cmlldmUo
c3RvcmFnZUtleSwgcmVxdWVzdCwgZnJhbWVJRCkpIHsKLSAgICAgICAgbV9zcGVjdWxhdGl2ZUxv
YWRNYW5hZ2VyLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBbcmVxdWVzdCwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBl
bnRyeSkgeworICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXItPnJldHJpZXZlKHN0b3Jh
Z2VLZXksIFtyZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCBpbmZvID0gV1RGTW92ZShpbmZvKV0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRy
eSkgbXV0YWJsZSB7CisgICAgICAgICAgICBpbmZvLndhc1NwZWN1bGF0aXZlTG9hZCA9IHRydWU7
CiAgICAgICAgICAgICBpZiAoZW50cnkgJiYgV2ViQ29yZTo6dmVyaWZ5VmFyeWluZ1JlcXVlc3RI
ZWFkZXJzKGVudHJ5LT52YXJ5aW5nUmVxdWVzdEhlYWRlcnMoKSwgcmVxdWVzdCkpCi0gICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlbnRyeSkpOworICAgICAgICAgICAg
ICAgIGNvbXBsZXRlUmV0cmlldmUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFdURk1vdmUo
ZW50cnkpLCBpbmZvKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZVJldHJpZXZlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBudWxscHRyLCBpbmZvKTsKICAgICAgICAgfSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGF1dG8gc3RhcnRUaW1lID0gV2Fs
bFRpbWU6Om5vdygpOwotICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cmVxdWVzdC5wcmlvcml0eSgpKTsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXks
IHByaW9yaXR5LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCByZXF1ZXN0
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBpbmZvID0g
V1RGTW92ZShpbmZvKSwgc3RvcmFnZUtleSwgZnJhbWVJRF0oYXV0byByZWNvcmQsIGF1dG8gdGlt
aW5ncykgbXV0YWJsZSB7CisgICAgICAgIGluZm8uc3RvcmFnZVRpbWluZ3MgPSB0aW1pbmdzOwog
Ci0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCBmcmFt
ZUlEXShhdXRvIHJlY29yZCkgewogICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAgICAg
TE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgbm90IGZvdW5kIGluIHN0b3JhZ2Ui
KTsKIAogICAgICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKICAgICAgICAgICAgICAgICBtX3N0
YXRpc3RpY3MtPnJlY29yZFJldHJpZXZhbEZhaWx1cmUoZnJhbWVJRC5maXJzdCwgc3RvcmFnZUtl
eSwgcmVxdWVzdCk7CiAKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwor
ICAgICAgICAgICAgY29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
bnVsbHB0ciwgaW5mbyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApA
QCAtMzc3LDEyICszODIsMTAgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6
UmVzbwogICAgICAgICB9OwogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgICAgICBhdXRvIGVsYXBz
ZWQgPSBXYWxsVGltZTo6bm93KCkgLSBzdGFydFRpbWU7CisgICAgICAgIGF1dG8gZWxhcHNlZCA9
IFdhbGxUaW1lOjpub3coKSAtIGluZm8uc3RhcnRUaW1lOwogICAgICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2ZSBjb21wbGV0ZSB1c2VEZWNpc2lvbj0lZCBw
cmlvcml0eT0lZCB0aW1lPSUiIFBSSWk2NCAibXMiLCBzdGF0aWNfY2FzdDxpbnQ+KHVzZURlY2lz
aW9uKSwgc3RhdGljX2Nhc3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkpLCBlbGFwc2VkLm1pbGxp
c2Vjb25kc0FzPGludDY0X3Q+KCkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN0YXJ0
VGltZSk7CiAjZW5kaWYKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlbnRyeSkp
OworICAgICAgICBjb21wbGV0ZVJldHJpZXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBX
VEZNb3ZlKGVudHJ5KSwgaW5mbyk7CiAKICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKICAgICAg
ICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkoZnJhbWVJRC5m
aXJzdCwgc3RvcmFnZUtleSwgcmVxdWVzdCwgdXNlRGVjaXNpb24pOwpAQCAtMzkwLDYgKzM5Mywx
MSBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgfSk7CiB9
CiAKK3ZvaWQgQ2FjaGU6OmNvbXBsZXRlUmV0cmlldmUoUmV0cmlldmVDb21wbGV0aW9uSGFuZGxl
ciYmIGhhbmRsZXIsIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnksIFJldHJpZXZlSW5mbyYg
aW5mbykKK3sKKyAgICBpbmZvLmNvbXBsZXRpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAg
IGhhbmRsZXIoV1RGTW92ZShlbnRyeSksIGluZm8pOworfQogICAgIAogc3RkOjp1bmlxdWVfcHRy
PEVudHJ5PiBDYWNoZTo6bWFrZUVudHJ5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhKQogewpAQCAtNjIxLDcgKzYy
OSw3IEBAIFN0cmluZyBDYWNoZTo6cmVjb3Jkc1BhdGgoKSBjb25zdAogdm9pZCBDYWNoZTo6cmV0
cmlldmVEYXRhKGNvbnN0IERhdGFLZXkmIGRhdGFLZXksIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgS2V5
IGtleSB7IGRhdGFLZXksIG1fc3RvcmFnZS0+c2FsdCgpIH07Ci0gICAgbV9zdG9yYWdlLT5yZXRy
aWV2ZShrZXksIDQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoYXV0byByZWNvcmQpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvIHJlY29y
ZCwgYXV0bykgewogICAgICAgICBpZiAoIXJlY29yZCB8fCAhcmVjb3JkLT5ib2R5LnNpemUoKSkg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgMCk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkocmV2aXNpb24gMjMyNTM4KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDcgKzEwMiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYXBhY2l0eShzaXplX3QpOwog
CiAgICAgLy8gQ29tcGxldGlvbiBoYW5kbGVyIG1heSBnZXQgY2FsbGVkIGJhY2sgc3luY2hyb25v
dXNseSBvbiBmYWlsdXJlLgotICAgIHZvaWQgcmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIEZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5p
cXVlX3B0cjxFbnRyeT4pPiYmKTsKKyAgICBzdHJ1Y3QgUmV0cmlldmVJbmZvIHsKKyAgICAgICAg
V2FsbFRpbWUgc3RhcnRUaW1lOworICAgICAgICBXYWxsVGltZSBjb21wbGV0aW9uVGltZTsKKyAg
ICAgICAgdW5zaWduZWQgcHJpb3JpdHk7CisgICAgICAgIFN0b3JhZ2U6OlRpbWluZ3Mgc3RvcmFn
ZVRpbWluZ3M7CisgICAgICAgIGJvb2wgd2FzU3BlY3VsYXRpdmVMb2FkIHsgZmFsc2UgfTsKKwor
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICB9OworICAgIHVzaW5nIFJldHJp
ZXZlQ29tcGxldGlvbkhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50
cnk+LCBjb25zdCBSZXRyaWV2ZUluZm8mKT47CisgICAgdm9pZCByZXRyaWV2ZShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgUmV0cmlldmVDb21w
bGV0aW9uSGFuZGxlciYmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IHN0b3JlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBGdW5jdGlvbjx2b2lkIChNYXBw
ZWRCb2R5Jik+JiYpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gc3RvcmVSZWRpcmVjdChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3Qp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gdXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBjb25zdCBFbnRyeSYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CkBAIC0xNDAsNiAr
MTUwLDggQEAgcHJpdmF0ZToKIAogICAgIEtleSBtYWtlQ2FjaGVLZXkoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jik7CiAKKyAgICBzdGF0aWMgdm9pZCBjb21wbGV0ZVJldHJpZXZlKFJl
dHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJiwgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiwgUmV0cmll
dmVJbmZvJik7CisKICAgICBTdHJpbmcgZHVtcEZpbGVQYXRoKCkgY29uc3Q7CiAgICAgdm9pZCBk
ZWxldGVEdW1wRmlsZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRp
dmVMb2FkTWFuYWdlci5jcHAJKHJldmlzaW9uIDIzMjUzOCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxNiw3ICs0MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlTG9hZE1h
bmFnZXI6OmFkZFByZWxvYWRlCiAKIHZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmll
dmVFbnRyeUZyb21TdG9yYWdlKGNvbnN0IFN1YnJlc291cmNlSW5mbyYgaW5mbywgUmV0cmlldmVD
b21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fc3RvcmFnZS5y
ZXRyaWV2ZShpbmZvLmtleSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5wcmlvcml0eSgp
KSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8g
cmVjb3JkKSB7CisgICAgbV9zdG9yYWdlLnJldHJpZXZlKGluZm8ua2V5KCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmZvLnByaW9yaXR5KCkpLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byByZWNvcmQsIGF1dG8gdGltaW5ncykgewogICAgICAg
ICBpZiAoIXJlY29yZCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NzEsNyArNTcxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZXRyaWV2ZVN1YgogewogICAgIEFTU0VSVChzdG9yYWdlS2V5
LnR5cGUoKSA9PSAiUmVzb3VyY2UiKTsKICAgICBhdXRvIHN1YnJlc291cmNlc1N0b3JhZ2VLZXkg
PSBtYWtlU3VicmVzb3VyY2VzS2V5KHN0b3JhZ2VLZXksIG1fc3RvcmFnZS5zYWx0KCkpOwotICAg
IG1fc3RvcmFnZS5yZXRyaWV2ZShzdWJyZXNvdXJjZXNTdG9yYWdlS2V5LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSksIFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIHJlY29yZCkgeworICAgIG1fc3Rv
cmFnZS5yZXRyaWV2ZShzdWJyZXNvdXJjZXNTdG9yYWdlS2V5LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIHJlY29yZCwgYXV0byB0aW1pbmdzKSB7CiAg
ICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNw
cAkocmV2aXNpb24gMjMyNTM4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBA
QCBwdWJsaWM6CiAgICAgQmxvYlN0b3JhZ2U6OkJsb2IgcmVzdWx0Qm9keUJsb2I7CiAgICAgc3Rk
OjphdG9taWM8dW5zaWduZWQ+IGFjdGl2ZUNvdW50IHsgMCB9OwogICAgIGJvb2wgaXNDYW5jZWxl
ZCB7IGZhbHNlIH07CisgICAgVGltaW5ncyB0aW1pbmdzOwogfTsKIAogdm9pZCBTdG9yYWdlOjpS
ZWFkT3BlcmF0aW9uOjpjYW5jZWwoKQpAQCAtNzksOCArODAsMTAgQEAgdm9pZCBTdG9yYWdlOjpS
ZWFkT3BlcmF0aW9uOjpjYW5jZWwoKQogCiAgICAgaWYgKGlzQ2FuY2VsZWQpCiAgICAgICAgIHJl
dHVybjsKKyAgICB0aW1pbmdzLmNvbXBsZXRpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAg
IHRpbWluZ3Mud2FzQ2FuY2VsZWQgPSB0cnVlOwogICAgIGlzQ2FuY2VsZWQgPSB0cnVlOwotICAg
IGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIsIHRpbWluZ3MpOwogfQogCiBib29sIFN0b3JhZ2U6OlJlYWRPcGVyYXRpb246OmZpbmlzaCgp
CkBAIC05NSw3ICs5OCw4IEBAIGJvb2wgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6ZmluaXNoKCkK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0UmVjb3JkID0gbnVsbHB0cjsKICAgICB9
Ci0gICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0UmVjb3JkKSk7Cisg
ICAgdGltaW5ncy5jb21wbGV0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHRSZWNvcmQpLCB0aW1pbmdzKTsKIH0KIAog
c3RydWN0IFN0b3JhZ2U6OldyaXRlT3BlcmF0aW9uIHsKQEAgLTY0NCw2ICs2NDgsMTMgQEAgdm9p
ZCBTdG9yYWdlOjpkaXNwYXRjaFJlYWRPcGVyYXRpb24oc3RkOgogICAgIGF1dG8mIHJlYWRPcGVy
YXRpb24gPSAqcmVhZE9wZXJhdGlvblB0cjsKICAgICBtX2FjdGl2ZVJlYWRPcGVyYXRpb25zLmFk
ZChXVEZNb3ZlKHJlYWRPcGVyYXRpb25QdHIpKTsKIAorICAgIHJlYWRPcGVyYXRpb24udGltaW5n
cy5kaXNwYXRjaFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgcmVhZE9wZXJhdGlvbi50aW1p
bmdzLnN5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3NBdERpc3BhdGNoID0gbV9zeW5jaHJvbml6YXRp
b25JblByb2dyZXNzOworICAgIHJlYWRPcGVyYXRpb24udGltaW5ncy5zaHJpbmtJblByb2dyZXNz
QXREaXNwYXRjaCA9IG1fc2hyaW5rSW5Qcm9ncmVzczsKKyAgICByZWFkT3BlcmF0aW9uLnRpbWlu
Z3MuZGlzcGF0Y2hDb3VudEF0RGlzcGF0Y2ggPSBtX3JlYWRPcGVyYXRpb25EaXNwYXRjaENvdW50
OworCisgICAgKyttX3JlYWRPcGVyYXRpb25EaXNwYXRjaENvdW50OworCiAgICAgLy8gQXZvaWQg
cmFuZG9tbmVzcyBkdXJpbmcgdGVzdGluZy4KICAgICBpZiAobV9tb2RlICE9IE1vZGU6OlRlc3Rp
bmcpIHsKICAgICAgICAgLy8gSS9PIHByZXNzdXJlIG1heSBtYWtlIGRpc2sgb3BlcmF0aW9ucyBz
bG93LiBJZiB0aGV5IHN0YXJ0IHRha2luZyB2ZXJ5IGxvbmcgdGltZSB3ZSByYXRoZXIgZ28gdG8g
bmV0d29yay4KQEAgLTY2MCw4ICs2NzEsMTEgQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaFJlYWRP
cGVyYXRpb24oc3RkOgogICAgICAgICBpZiAoc2hvdWxkR2V0Qm9keUJsb2IpCiAgICAgICAgICAg
ICArK3JlYWRPcGVyYXRpb24uYWN0aXZlQ291bnQ7CiAKKyAgICAgICAgcmVhZE9wZXJhdGlvbi50
aW1pbmdzLnJlY29yZElPU3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworCiAgICAgICAgIGF1
dG8gY2hhbm5lbCA9IElPQ2hhbm5lbDo6b3BlbihyZWNvcmRQYXRoLCBJT0NoYW5uZWw6OlR5cGU6
OlJlYWQpOwogICAgICAgICBjaGFubmVsLT5yZWFkKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCksICZpb1F1ZXVlKCksIFt0aGlzLCAmcmVhZE9wZXJhdGlvbl0oY29uc3QgRGF0
YSYgZmlsZURhdGEsIGludCBlcnJvcikgeworICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi50aW1p
bmdzLnJlY29yZElPRW5kVGltZSA9IFdhbGxUaW1lOjpub3coKTsKICAgICAgICAgICAgIGlmICgh
ZXJyb3IpCiAgICAgICAgICAgICAgICAgcmVhZFJlY29yZChyZWFkT3BlcmF0aW9uLCBmaWxlRGF0
YSk7CiAgICAgICAgICAgICBmaW5pc2hSZWFkT3BlcmF0aW9uKHJlYWRPcGVyYXRpb24pOwpAQCAt
NjY5LDggKzY4MywxMiBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbihzdGQ6
CiAKICAgICAgICAgaWYgKHNob3VsZEdldEJvZHlCbG9iKSB7CiAgICAgICAgICAgICAvLyBSZWFk
IHRoZSBibG9iIGluIHBhcmFsbGVsIHdpdGggdGhlIHJlY29yZCByZWFkLgorICAgICAgICAgICAg
cmVhZE9wZXJhdGlvbi50aW1pbmdzLmJsb2JJT1N0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsK
KwogICAgICAgICAgICAgYXV0byBibG9iUGF0aCA9IGJsb2JQYXRoRm9yS2V5KHJlYWRPcGVyYXRp
b24ua2V5KTsKICAgICAgICAgICAgIHJlYWRPcGVyYXRpb24ucmVzdWx0Qm9keUJsb2IgPSBtX2Js
b2JTdG9yYWdlLmdldChibG9iUGF0aCk7CisKKyAgICAgICAgICAgIHJlYWRPcGVyYXRpb24udGlt
aW5ncy5ibG9iSU9FbmRUaW1lID0gV2FsbFRpbWU6Om5vdygpOwogICAgICAgICAgICAgZmluaXNo
UmVhZE9wZXJhdGlvbihyZWFkT3BlcmF0aW9uKTsKICAgICAgICAgfQogICAgIH0pOwpAQCAtNzQ3
LDcgKzc2NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUPiBib29sIHJldHJpZXZlRnJvbU1lbW8KICAg
ICAgICAgaWYgKG9wZXJhdGlvbi0+cmVjb3JkLmtleSA9PSBrZXkpIHsKICAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBmb3VuZCB3cml0ZSBvcGVy
YXRpb24gaW4gcHJvZ3Jlc3MiKTsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbcmVjb3JkID0gb3BlcmF0aW9uLT5yZWNvcmQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihzdGQ6Om1ha2VfdW5pcXVlPFN0b3JhZ2U6OlJlY29yZD4ocmVjb3JkKSk7CisgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjptYWtlX3VuaXF1ZTxTdG9yYWdlOjpSZWNvcmQ+
KHJlY29yZCksIHsgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CkBAIC04MzksMTIgKzg1NywxMiBAQCB2b2lkIFN0b3JhZ2U6OnJldHJpZXZl
KGNvbnN0IEtleSYga2V5LCB1CiAgICAgQVNTRVJUKCFrZXkuaXNOdWxsKCkpOwogCiAgICAgaWYg
KCFtX2NhcGFjaXR5KSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCB7IH0pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKCFtYXlDb250YWluKGtleSkpIHsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0cik7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIHsgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg1NCw2ICs4NzIsMTAgQEAgdm9pZCBTdG9y
YWdlOjpyZXRyaWV2ZShjb25zdCBLZXkmIGtleSwgdQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvIHJlYWRPcGVyYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlYWRPcGVyYXRpb24+KCp0aGlz
LCBrZXksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKworICAgIHJlYWRPcGVyYXRpb24t
PnRpbWluZ3Muc3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIHJlYWRPcGVyYXRpb24t
PnRpbWluZ3MuZGlzcGF0Y2hDb3VudEF0U3RhcnQgPSBtX3JlYWRPcGVyYXRpb25EaXNwYXRjaENv
dW50OworCiAgICAgbV9wZW5kaW5nUmVhZE9wZXJhdGlvbnNCeVByaW9yaXR5W3ByaW9yaXR5XS5w
cmVwZW5kKFdURk1vdmUocmVhZE9wZXJhdGlvbikpOwogICAgIGRpc3BhdGNoUGVuZGluZ1JlYWRP
cGVyYXRpb25zKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkocmV2aXNpb24gMjMyNTM4KQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE5ICs1MCwzNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZlB0cjxTdG9yYWdlPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBNb2RlKTsKIAog
ICAgIHN0cnVjdCBSZWNvcmQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICBwdWJsaWM6CiAgICAgICAgIEtleSBrZXk7CiAgICAgICAgIFdhbGxUaW1lIHRpbWVTdGFtcDsK
ICAgICAgICAgRGF0YSBoZWFkZXI7CiAgICAgICAgIERhdGEgYm9keTsKICAgICAgICAgc3RkOjpv
cHRpb25hbDxTSEExOjpEaWdlc3Q+IGJvZHlIYXNoOworCisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIH07CisKKyAgICBzdHJ1Y3QgVGltaW5ncyB7CisgICAgICAgIFdhbGxU
aW1lIHN0YXJ0VGltZTsKKyAgICAgICAgV2FsbFRpbWUgZGlzcGF0Y2hUaW1lOworICAgICAgICBX
YWxsVGltZSByZWNvcmRJT1N0YXJ0VGltZTsKKyAgICAgICAgV2FsbFRpbWUgcmVjb3JkSU9FbmRU
aW1lOworICAgICAgICBXYWxsVGltZSBibG9iSU9TdGFydFRpbWU7CisgICAgICAgIFdhbGxUaW1l
IGJsb2JJT0VuZFRpbWU7CisgICAgICAgIFdhbGxUaW1lIGNvbXBsZXRpb25UaW1lOworICAgICAg
ICBzaXplX3QgZGlzcGF0Y2hDb3VudEF0U3RhcnQgeyAwIH07CisgICAgICAgIHNpemVfdCBkaXNw
YXRjaENvdW50QXREaXNwYXRjaCB7IDAgfTsKKyAgICAgICAgYm9vbCBzeW5jaHJvbml6YXRpb25J
blByb2dyZXNzQXREaXNwYXRjaCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgc2hyaW5rSW5Qcm9n
cmVzc0F0RGlzcGF0Y2ggeyBmYWxzZSB9OworICAgICAgICBib29sIHdhc0NhbmNlbGVkIHsgZmFs
c2UgfTsKKworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICB9OworCiAgICAg
Ly8gVGhpcyBtYXkgY2FsbCBjb21wbGV0aW9uIGhhbmRsZXIgc3luY2hyb25vdXNseSBvbiBmYWls
dXJlLgotICAgIHR5cGVkZWYgRnVuY3Rpb248Ym9vbCAoc3RkOjp1bmlxdWVfcHRyPFJlY29yZD4p
PiBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyOworICAgIHVzaW5nIFJldHJpZXZlQ29tcGxldGlv
bkhhbmRsZXIgPSBGdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1ZV9wdHI8UmVjb3JkPiwgY29uc3Qg
VGltaW5ncyYpPjsKICAgICB2b2lkIHJldHJpZXZlKGNvbnN0IEtleSYsIHVuc2lnbmVkIHByaW9y
aXR5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYpOwogCi0gICAgdHlwZWRlZiBGdW5jdGlv
bjx2b2lkIChjb25zdCBEYXRhJiBtYXBwZWRCb2R5KT4gTWFwcGVkQm9keUhhbmRsZXI7CisgICAg
dXNpbmcgTWFwcGVkQm9keUhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkIChjb25zdCBEYXRhJiBtYXBw
ZWRCb2R5KT47CiAgICAgdm9pZCBzdG9yZShjb25zdCBSZWNvcmQmLCBNYXBwZWRCb2R5SGFuZGxl
ciYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSB7IH0pOwogCiAgICAgdm9pZCByZW1v
dmUoY29uc3QgS2V5Jik7CkBAIC0xNjMsNiArMTgxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bV9zeW5jaHJvbml6YXRpb25JblByb2dyZXNzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hyaW5r
SW5Qcm9ncmVzcyB7IGZhbHNlIH07CisgICAgc2l6ZV90IG1fcmVhZE9wZXJhdGlvbkRpc3BhdGNo
Q291bnQgeyAwIH07CiAKICAgICBWZWN0b3I8S2V5OjpIYXNoVHlwZT4gbV9yZWNvcmRGaWx0ZXJI
YXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbjsKICAgICBWZWN0b3I8S2V5OjpIYXNoVHlw
ZT4gbV9ibG9iRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342427</attachid>
            <date>2018-06-11 07:01:18 -0700</date>
            <delta_ts>2018-06-11 07:01:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>cache-retrieve-timing-logging-3.patch</filename>
            <type>text/plain</type>
            <size>22902</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzI3MDkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE4LTA2LTExICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBmb3Igc2xvdyBjYWNoZSByZXRyaWV2ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NjUyMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDEwMDIw
NzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
c29tZXRpbWVzIHNlZSBzbG93IGNhY2hlIHJldHJpZXZlcyBpbiBsb2dzLiBBZGQgc29tZSBtb3Jl
IGxvZ2dpbmcgdG8gYmV0dGVyIGFuYWx5emUgdGhlc2UgY2FzZXMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRpbWluZ3MgdG8gYWxsIGNhY2hlIHN0b3JhZ2UgcmV0cmlldmUgb3BlcmF0aW9u
cyBhbmQgcGFzc2VzIHRoZW0gdXAgdG8gdGhlIGNsaWVudC4KKyAgICAgICAgV2UgdGhlbiBsb2cg
dGhlIHRpbWluZ3Mgb24gTmV0d29ya1Jlc291cmNlTG9hZGVyIGxldmVscyBpZiBuZWVkZWQuIEl0
ZW1zIGxvZ2dlZCBpbmNsdWRlCisKKyAgICAgICAgLSB0b3RhbCByZXRyaWV2ZSB0aW1lCisgICAg
ICAgIC0gZGlzcGF0Y2ggZGVsYXkgYW5kIG51bWJlciBvZiByZXNvdXJjZXMgZGlzcGF0Y2hlZCBi
ZWZvcmUgdGhpcyBvbmUKKyAgICAgICAgLSByZWNvcmQgSS9PIHRpbWUKKyAgICAgICAgLSBibG9i
IEkvTyB0aW1lCisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzaHJpbmsgd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzeW5jaHJvbml6YXRpb24gd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gY2FuY2VsbGF0aW9uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6bG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZCk6CisKKyAgICAgICAgTG9n
IGlmIHRoZSByZXRyaWV2ZSB0b29rIG1vcmUgdGhhbiAxcy4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6
OmNvbXBsZXRlUmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
OjpyZXRyaWV2ZURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldHJpZXZlRW50cnlGcm9tU3RvcmFnZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmlldmVT
dWJyZXNvdXJjZXNFbnRyeSk6CisKKyAgICAgICAgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciBkb2Vz
IG5vdCByZWNvcmRzIHNwZWNpZmljIHRpbWluZ3MgeWV0IGJ1dCBhdCBsZWFzdCB3ZSBkbyBsb2cg
d2hlbiB0aGV5IG9jY3VyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFn
ZTo6UmVhZE9wZXJhdGlvbjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5pc2gpOgorCisgICAgICAgIFJlY29yZCB0aW1p
bmcgaW5mbyBpbiBSZWFkT3BlcmF0aW9ucy4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6cmV0cmlldmVGcm9tTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpTdG9yYWdlOjpyZXRyaWV2ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgorCiAyMDE4LTA2LTEwICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCBBUEkg
cnVuIHJ1biBqYXZhc2NyaXB0IGZyb20gYSBXZWJLaXRXZWJWaWV3IGluIGFuIGlzb2xhdGVkIHdv
cmxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSwxNCArMjE1LDE1IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRyaWV2
ZUNhY2gKICAgICBBU1NFUlQoY2FuVXNlQ2FjaGUocmVxdWVzdCkpOwogCiAgICAgUmVmUHRyPE5l
dHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAgIG1fY2FjaGUtPnJldHJpZXZl
KHJlcXVlc3QsIHsgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1l
SUQgfSwgW3RoaXMsIGxvYWRlciA9IFdURk1vdmUobG9hZGVyKSwgcmVxdWVzdCA9IFJlc291cmNl
UmVxdWVzdCB7IHJlcXVlc3QgfV0oYXV0byBlbnRyeSkgbXV0YWJsZSB7Ci0jaWYgUkVMRUFTRV9M
T0dfRElTQUJMRUQKLSAgICAgICAgVU5VU0VEX1BBUkFNKHRoaXMpOwotI2VuZGlmCisgICAgbV9j
YWNoZS0+cmV0cmlldmUocmVxdWVzdCwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFt
ZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhpcywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpLCByZXF1
ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0IHsgcmVxdWVzdCB9XShhdXRvIGVudHJ5LCBhdXRvIGluZm8p
IG11dGFibGUgeworCiAgICAgICAgIGlmIChsb2FkZXItPmhhc09uZVJlZigpKSB7CiAgICAgICAg
ICAgICAvLyBUaGUgbG9hZGVyIGhhcyBiZWVuIGFib3J0ZWQgYW5kIGlzIG9ubHkgaGVsZCBhbGl2
ZSBieSB0aGlzIGxhbWJkYS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAg
ICAgIGxvYWRlci0+bG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZChpbmZvKTsKKwogICAgICAg
ICBpZiAoIWVudHJ5KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJyZXRy
aWV2ZUNhY2hlRW50cnk6IFJlc291cmNlIG5vdCBpbiBjYWNoZSAocGFnZUlEID0gJSIgUFJJdTY0
ICIsIGZyYW1lSUQgPSAlIiBQUkl1NjQgIiwgcmVzb3VyY2VJRCA9ICUiIFBSSXU2NCAiLCBpc01h
aW5SZXNvdXJjZSA9ICVkLCBpc1N5bmNocm9ub3VzID0gJWQpIiwgbV9wYXJhbWV0ZXJzLndlYlBh
Z2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIG1fcGFyYW1ldGVycy5pZGVudGlmaWVyLCBp
c01haW5SZXNvdXJjZSgpLCBpc1N5bmNocm9ub3VzKCkpOwogICAgICAgICAgICAgbG9hZGVyLT5z
dGFydE5ldHdvcmtMb2FkKFdURk1vdmUocmVxdWVzdCksIEZpcnN0TG9hZDo6WWVzKTsKQEAgLTEw
ODEsNCArMTA4MiwzOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZW5xdWV1ZVNlY3Vy
CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RW5xdWV1ZVNlY3VyaXR5UG9saWN5VmlvbGF0
aW9uRXZlbnQgeyBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgV1RGTW92ZShldmVudEluaXQpIH0s
IG1fcGFyYW1ldGVycy53ZWJQYWdlSUQpOwogfQogCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6bG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZChjb25zdCBOZXR3b3JrQ2FjaGU6OkNhY2hl
OjpSZXRyaWV2ZUluZm8mIGluZm8pCit7CisjaWYgUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBV
TlVTRURfUEFSQU0oaW5mbyk7CisjZWxzZQorICAgIGlmICghaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGR1cmF0aW9uID0gaW5mby5jb21wbGV0
aW9uVGltZSAtIGluZm8uc3RhcnRUaW1lOworICAgIGlmIChkdXJhdGlvbiA8IDFfcykKKyAgICAg
ICAgcmV0dXJuOworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJp
ZXZlSWZOZWVkZWQ6IFRvb2sgJS4wZm1zLCBwcmlvcml0eSAlZCIsIGR1cmF0aW9uLm1pbGxpc2Vj
b25kcygpLCBpbmZvLnByaW9yaXR5KTsKKyAgICBpZiAoaW5mby53YXNTcGVjdWxhdGl2ZUxvYWQp
CisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZO
ZWVkZWQ6IFdhcyBzcGVjdWxhdGl2ZSBsb2FkIik7CisgICAgaWYgKCFpbmZvLnN0b3JhZ2VUaW1p
bmdzLnN0YXJ0VGltZSkKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9X
RUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFN0b3JhZ2UgcmV0cmlldmUgdGltZSAl
LjBmbXMiLCAoaW5mby5zdG9yYWdlVGltaW5ncy5jb21wbGV0aW9uVGltZSAtIGluZm8uc3RvcmFn
ZVRpbWluZ3Muc3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CisgICAgaWYgKGluZm8uc3RvcmFn
ZVRpbWluZ3MuZGlzcGF0Y2hUaW1lKSB7CisgICAgICAgIGF1dG8gdGltZSA9IChpbmZvLnN0b3Jh
Z2VUaW1pbmdzLmRpc3BhdGNoVGltZSAtIGluZm8uc3RvcmFnZVRpbWluZ3Muc3RhcnRUaW1lKS5t
aWxsaXNlY29uZHMoKTsKKyAgICAgICAgYXV0byBjb3VudCA9IGluZm8uc3RvcmFnZVRpbWluZ3Mu
ZGlzcGF0Y2hDb3VudEF0RGlzcGF0Y2ggLSBpbmZvLnN0b3JhZ2VUaW1pbmdzLmRpc3BhdGNoQ291
bnRBdFN0YXJ0OworICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVS
ZXRyaWV2ZUlmTmVlZGVkOiBEaXNwYXRjaCBkZWxheSAlLjBmbXMsIGRpc3BhdGNoZWQgJWx1IHJl
c291cmNlcyBmaXJzdCIsIHRpbWUsIGNvdW50KTsKKyAgICB9CisgICAgaWYgKGluZm8uc3RvcmFn
ZVRpbWluZ3MucmVjb3JkSU9TdGFydFRpbWUpCisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9X
RUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFJlY29yZCBJL08gdGltZSAlLjBmbXMi
LCAoaW5mby5zdG9yYWdlVGltaW5ncy5yZWNvcmRJT0VuZFRpbWUgLSBpbmZvLnN0b3JhZ2VUaW1p
bmdzLnJlY29yZElPU3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CisgICAgaWYgKGluZm8uc3Rv
cmFnZVRpbWluZ3MuYmxvYklPU3RhcnRUaW1lKQorICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBCbG9iIEkvTyB0aW1lICUuMGZtcyIs
IChpbmZvLnN0b3JhZ2VUaW1pbmdzLmJsb2JJT0VuZFRpbWUgLSBpbmZvLnN0b3JhZ2VUaW1pbmdz
LmJsb2JJT1N0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkpOworICAgIGlmIChpbmZvLnN0b3JhZ2VU
aW1pbmdzLnN5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3NBdERpc3BhdGNoKQorICAgICAgICBSRUxF
QVNFX0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBTeW5jaHJv
bml6YXRpb24gd2FzIGluIHByb2dyZXNzIik7CisgICAgaWYgKGluZm8uc3RvcmFnZVRpbWluZ3Mu
c2hyaW5rSW5Qcm9ncmVzc0F0RGlzcGF0Y2gpCisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9X
RUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFNocmluayB3YXMgaW4gcHJvZ3Jlc3Mi
KTsKKyAgICBpZiAoaW5mby5zdG9yYWdlVGltaW5ncy53YXNDYW5jZWxlZCkKKyAgICAgICAgUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZDogUmV0cmll
dmUgd2FzIGNhbmNlbGVkIik7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmgJKHJldmlzaW9uIDIzMjUzOCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsx
NzcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VuZENTUFZpb2xhdGlvblJlcG9ydChXZWJDb3Jl
OjpVUkwmJiwgUmVmPFdlYkNvcmU6OkZvcm1EYXRhPiYmKSBmaW5hbDsKICAgICB2b2lkIGVucXVl
dWVTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50KFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5Vmlv
bGF0aW9uRXZlbnQ6OkluaXQmJikgZmluYWw7CiAKKyAgICB2b2lkIGxvZ1Nsb3dDYWNoZVJldHJp
ZXZlSWZOZWVkZWQoY29uc3QgTmV0d29ya0NhY2hlOjpDYWNoZTo6UmV0cmlldmVJbmZvJik7CisK
ICAgICBjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CiAK
ICAgICBSZWY8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvbjsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAJKHJldmlzaW9uIDIzMjUzOCkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgQ2FjaGVzOjpyZWFk
UmVjb3JkKGNvbnN0IE5ldHdvcmtDYWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
c3RvcmFnZS0+cmV0cmlldmUoa2V5LCA0LCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1f
c3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6dW5pcXVlX3B0cjxT
dG9yYWdlOjpSZWNvcmQ+IHN0b3JhZ2UpIG11dGFibGUgeworICAgIG1fc3RvcmFnZS0+cmV0cmll
dmUoa2V5LCA0LCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+
IHN0b3JhZ2UsIGNvbnN0IFN0b3JhZ2U6OlRpbWluZ3MmKSBtdXRhYmxlIHsKICAgICAgICAgaWYg
KCFzdG9yYWdlKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChFcnJvcjo6
UmVhZERpc2spKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHJldmlz
aW9uIDIzMjUzOCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw3IEBAIHN0YXRpYyBTdG9y
ZURlY2lzaW9uIG1ha2VTdG9yZURlY2lzaW9uKGMKICAgICByZXR1cm4gU3RvcmVEZWNpc2lvbjo6
WWVzOwogfQogCi12b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGZyYW1lSUQsIEZ1bmN0aW9uPHZv
aWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBD
YWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKTsKIApAQCAtMzE5LDYgKzMxOSwxMSBAQCB2b2lkIENhY2hlOjpyZXRy
aWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkUmV0
cmlldmFsUmVxdWVzdChmcmFtZUlELmZpcnN0KTsKIAogICAgIEtleSBzdG9yYWdlS2V5ID0gbWFr
ZUNhY2hlS2V5KHJlcXVlc3QpOworICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmVxdWVzdC5wcmlvcml0eSgpKTsKKworICAgIFJldHJpZXZlSW5mbyBpbmZvOworICAg
IGluZm8uc3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIGluZm8ucHJpb3JpdHkgPSBw
cmlvcml0eTsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURB
VElPTikKICAgICBib29sIGNhblVzZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uID0gbV9zcGVjdWxh
dGl2ZUxvYWRNYW5hZ2VyICYmICFyZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSAmJiAhY2FjaGVQb2xp
Y3lBbGxvd3NFeHBpcmVkKHJlcXVlc3QuY2FjaGVQb2xpY3koKSk7CkBAIC0zMzEsMzMgKzMzNiwz
MyBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgICAgIGlm
IChtX3N0YXRpc3RpY3MpCiAgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5vdFVzaW5n
Q2FjaGVGb3JSZXF1ZXN0KGZyYW1lSUQuZmlyc3QsIHN0b3JhZ2VLZXksIHJlcXVlc3QsIHJldHJp
ZXZlRGVjaXNpb24pOwogCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAg
ICAgICBjb21wbGV0ZVJldHJpZXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBudWxscHRy
LCBpbmZvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICAgICBpZiAoY2FuVXNlU3BlY3VsYXRpdmVS
ZXZhbGlkYXRpb24gJiYgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLT5jYW5SZXRyaWV2ZShzdG9y
YWdlS2V5LCByZXF1ZXN0LCBmcmFtZUlEKSkgewotICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1h
bmFnZXItPnJldHJpZXZlKHN0b3JhZ2VLZXksIFtyZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVudHJ5
KSB7CisgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+cmV0cmlldmUoc3RvcmFnZUtl
eSwgW3JlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIGluZm8gPSBXVEZNb3ZlKGluZm8pXShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVudHJ5KSBt
dXRhYmxlIHsKKyAgICAgICAgICAgIGluZm8ud2FzU3BlY3VsYXRpdmVMb2FkID0gdHJ1ZTsKICAg
ICAgICAgICAgIGlmIChlbnRyeSAmJiBXZWJDb3JlOjp2ZXJpZnlWYXJ5aW5nUmVxdWVzdEhlYWRl
cnMoZW50cnktPnZhcnlpbmdSZXF1ZXN0SGVhZGVycygpLCByZXF1ZXN0KSkKLSAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICAgICAg
Y29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZShlbnRy
eSksIGluZm8pOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKG51bGxwdHIpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlUmV0cmlldmUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIG51bGxwdHIsIGluZm8pOwogICAgICAgICB9KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgYXV0byBzdGFydFRpbWUgPSBXYWxsVGlt
ZTo6bm93KCk7Ci0gICAgYXV0byBwcmlvcml0eSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXF1
ZXN0LnByaW9yaXR5KCkpOworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcHJp
b3JpdHksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHJlcXVlc3QsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGluZm8gPSBXVEZN
b3ZlKGluZm8pLCBzdG9yYWdlS2V5LCBmcmFtZUlEXShhdXRvIHJlY29yZCwgYXV0byB0aW1pbmdz
KSBtdXRhYmxlIHsKKyAgICAgICAgaW5mby5zdG9yYWdlVGltaW5ncyA9IHRpbWluZ3M7CiAKLSAg
ICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCByZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGFydFRpbWUsIHN0b3JhZ2VLZXksIGZyYW1lSURd
KGF1dG8gcmVjb3JkKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAgICAgICBMT0co
TmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIpOwog
CiAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQogICAgICAgICAgICAgICAgIG1fc3RhdGlz
dGljcy0+cmVjb3JkUmV0cmlldmFsRmFpbHVyZShmcmFtZUlELmZpcnN0LCBzdG9yYWdlS2V5LCBy
ZXF1ZXN0KTsKIAotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAg
ICAgICAgICBjb21wbGV0ZVJldHJpZXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBudWxs
cHRyLCBpbmZvKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC0z
NzcsMTIgKzM4MiwxMCBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNv
CiAgICAgICAgIH07CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgICAgIGF1dG8gZWxhcHNlZCA9
IFdhbGxUaW1lOjpub3coKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgYXV0byBlbGFwc2VkID0gV2Fs
bFRpbWU6Om5vdygpIC0gaW5mby5zdGFydFRpbWU7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIHJldHJpZXZlIGNvbXBsZXRlIHVzZURlY2lzaW9uPSVkIHByaW9y
aXR5PSVkIHRpbWU9JSIgUFJJaTY0ICJtcyIsIHN0YXRpY19jYXN0PGludD4odXNlRGVjaXNpb24p
LCBzdGF0aWNfY2FzdDxpbnQ+KHJlcXVlc3QucHJpb3JpdHkoKSksIGVsYXBzZWQubWlsbGlzZWNv
bmRzQXM8aW50NjRfdD4oKSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc3RhcnRUaW1l
KTsKICNlbmRpZgotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVudHJ5KSk7Cisg
ICAgICAgIGNvbXBsZXRlUmV0cmlldmUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFdURk1v
dmUoZW50cnkpLCBpbmZvKTsKIAogICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQogICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeShmcmFtZUlELmZpcnN0
LCBzdG9yYWdlS2V5LCByZXF1ZXN0LCB1c2VEZWNpc2lvbik7CkBAIC0zOTAsNiArMzkzLDExIEBA
IHZvaWQgQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc28KICAgICB9KTsKIH0KIAor
dm9pZCBDYWNoZTo6Y29tcGxldGVSZXRyaWV2ZShSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYg
aGFuZGxlciwgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeSwgUmV0cmlldmVJbmZvJiBpbmZv
KQoreworICAgIGluZm8uY29tcGxldGlvblRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgaGFu
ZGxlcihXVEZNb3ZlKGVudHJ5KSwgaW5mbyk7Cit9CiAgICAgCiBzdGQ6OnVuaXF1ZV9wdHI8RW50
cnk+IENhY2hlOjptYWtlRW50cnkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZURhdGEpCiB7CkBAIC02MjEsNyArNjI5LDcg
QEAgU3RyaW5nIENhY2hlOjpyZWNvcmRzUGF0aCgpIGNvbnN0CiB2b2lkIENhY2hlOjpyZXRyaWV2
ZURhdGEoY29uc3QgRGF0YUtleSYgZGF0YUtleSwgRnVuY3Rpb248dm9pZCAoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBLZXkga2V5
IHsgZGF0YUtleSwgbV9zdG9yYWdlLT5zYWx0KCkgfTsKLSAgICBtX3N0b3JhZ2UtPnJldHJpZXZl
KGtleSwgNCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChhdXRvIHJlY29yZCkgeworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoa2V5LCA0LCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8gcmVjb3JkLCBh
dXRvKSB7CiAgICAgICAgIGlmICghcmVjb3JkIHx8ICFyZWNvcmQtPmJvZHkuc2l6ZSgpKSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCAwKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZS5oCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NyArMTAyLDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhcGFjaXR5KHNpemVfdCk7CiAKICAg
ICAvLyBDb21wbGV0aW9uIGhhbmRsZXIgbWF5IGdldCBjYWxsZWQgYmFjayBzeW5jaHJvbm91c2x5
IG9uIGZhaWx1cmUuCi0gICAgdm9pZCByZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgRnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVf
cHRyPEVudHJ5Pik+JiYpOworICAgIHN0cnVjdCBSZXRyaWV2ZUluZm8geworICAgICAgICBXYWxs
VGltZSBzdGFydFRpbWU7CisgICAgICAgIFdhbGxUaW1lIGNvbXBsZXRpb25UaW1lOworICAgICAg
ICB1bnNpZ25lZCBwcmlvcml0eTsKKyAgICAgICAgU3RvcmFnZTo6VGltaW5ncyBzdG9yYWdlVGlt
aW5nczsKKyAgICAgICAgYm9vbCB3YXNTcGVjdWxhdGl2ZUxvYWQgeyBmYWxzZSB9OworCisgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIH07CisgICAgdXNpbmcgUmV0cmlldmVD
b21wbGV0aW9uSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4s
IGNvbnN0IFJldHJpZXZlSW5mbyYpPjsKKyAgICB2b2lkIHJldHJpZXZlKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBSZXRyaWV2ZUNvbXBsZXRp
b25IYW5kbGVyJiYpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gc3RvcmUoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYs
IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIEZ1bmN0aW9uPHZvaWQgKE1hcHBlZEJv
ZHkmKT4mJik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBzdG9yZVJlZGlyZWN0KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlZGlyZWN0UmVxdWVzdCk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiB1cGRhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIGNvbnN0IEVudHJ5JiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKQEAgLTE0MCw2ICsxNTAs
OCBAQCBwcml2YXRlOgogCiAgICAgS2V5IG1ha2VDYWNoZUtleShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKTsKIAorICAgIHN0YXRpYyB2b2lkIGNvbXBsZXRlUmV0cmlldmUoUmV0cmll
dmVDb21wbGV0aW9uSGFuZGxlciYmLCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+LCBSZXRyaWV2ZUlu
Zm8mKTsKKwogICAgIFN0cmluZyBkdW1wRmlsZVBhdGgoKSBjb25zdDsKICAgICB2b2lkIGRlbGV0
ZUR1bXBGaWxlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxv
YWRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjMyNTM4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDE2LDcgKzQxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdl
cjo6YWRkUHJlbG9hZGUKIAogdm9pZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjpyZXRyaWV2ZUVu
dHJ5RnJvbVN0b3JhZ2UoY29uc3QgU3VicmVzb3VyY2VJbmZvJiBpbmZvLCBSZXRyaWV2ZUNvbXBs
ZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9zdG9yYWdlLnJldHJp
ZXZlKGluZm8ua2V5KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmZvLnByaW9yaXR5KCkpLCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byByZWNv
cmQpIHsKKyAgICBtX3N0b3JhZ2UucmV0cmlldmUoaW5mby5rZXkoKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZm8ucHJpb3JpdHkoKSksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXShhdXRvIHJlY29yZCwgYXV0byB0aW1pbmdzKSB7CiAgICAgICAgIGlm
ICghcmVjb3JkKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU3MSw3ICs1NzEsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlTG9hZE1hbmFnZXI6OnJldHJpZXZlU3ViCiB7CiAgICAgQVNTRVJUKHN0b3JhZ2VLZXkudHlw
ZSgpID09ICJSZXNvdXJjZSIpOwogICAgIGF1dG8gc3VicmVzb3VyY2VzU3RvcmFnZUtleSA9IG1h
a2VTdWJyZXNvdXJjZXNLZXkoc3RvcmFnZUtleSwgbV9zdG9yYWdlLnNhbHQoKSk7Ci0gICAgbV9z
dG9yYWdlLnJldHJpZXZlKHN1YnJlc291cmNlc1N0b3JhZ2VLZXksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtKSwgW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gcmVjb3JkKSB7CisgICAgbV9zdG9yYWdl
LnJldHJpZXZlKHN1YnJlc291cmNlc1N0b3JhZ2VLZXksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtKSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gcmVjb3JkLCBhdXRvIHRpbWluZ3MpIHsKICAgICAg
ICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCShy
ZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHB1
YmxpYzoKICAgICBCbG9iU3RvcmFnZTo6QmxvYiByZXN1bHRCb2R5QmxvYjsKICAgICBzdGQ6OmF0
b21pYzx1bnNpZ25lZD4gYWN0aXZlQ291bnQgeyAwIH07CiAgICAgYm9vbCBpc0NhbmNlbGVkIHsg
ZmFsc2UgfTsKKyAgICBUaW1pbmdzIHRpbWluZ3M7CiB9OwogCiB2b2lkIFN0b3JhZ2U6OlJlYWRP
cGVyYXRpb246OmNhbmNlbCgpCkBAIC03OSw4ICs4MCwxMCBAQCB2b2lkIFN0b3JhZ2U6OlJlYWRP
cGVyYXRpb246OmNhbmNlbCgpCiAKICAgICBpZiAoaXNDYW5jZWxlZCkKICAgICAgICAgcmV0dXJu
OworICAgIHRpbWluZ3MuY29tcGxldGlvblRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgdGlt
aW5ncy53YXNDYW5jZWxlZCA9IHRydWU7CiAgICAgaXNDYW5jZWxlZCA9IHRydWU7Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwg
dGltaW5ncyk7CiB9CiAKIGJvb2wgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6ZmluaXNoKCkKQEAg
LTk1LDcgKzk4LDggQEAgYm9vbCBTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5pc2goKQogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHRSZWNvcmQgPSBudWxscHRyOwogICAgIH0KLSAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHRSZWNvcmQpKTsKKyAgICB0
aW1pbmdzLmNvbXBsZXRpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdFJlY29yZCksIHRpbWluZ3MpOwogfQogCiBzdHJ1
Y3QgU3RvcmFnZTo6V3JpdGVPcGVyYXRpb24gewpAQCAtNjQ0LDYgKzY0OCwxMyBAQCB2b2lkIFN0
b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbihzdGQ6CiAgICAgYXV0byYgcmVhZE9wZXJhdGlv
biA9ICpyZWFkT3BlcmF0aW9uUHRyOwogICAgIG1fYWN0aXZlUmVhZE9wZXJhdGlvbnMuYWRkKFdU
Rk1vdmUocmVhZE9wZXJhdGlvblB0cikpOwogCisgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdzLmRp
c3BhdGNoVGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAgICByZWFkT3BlcmF0aW9uLnRpbWluZ3Mu
c3luY2hyb25pemF0aW9uSW5Qcm9ncmVzc0F0RGlzcGF0Y2ggPSBtX3N5bmNocm9uaXphdGlvbklu
UHJvZ3Jlc3M7CisgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdzLnNocmlua0luUHJvZ3Jlc3NBdERp
c3BhdGNoID0gbV9zaHJpbmtJblByb2dyZXNzOworICAgIHJlYWRPcGVyYXRpb24udGltaW5ncy5k
aXNwYXRjaENvdW50QXREaXNwYXRjaCA9IG1fcmVhZE9wZXJhdGlvbkRpc3BhdGNoQ291bnQ7CisK
KyAgICArK21fcmVhZE9wZXJhdGlvbkRpc3BhdGNoQ291bnQ7CisKICAgICAvLyBBdm9pZCByYW5k
b21uZXNzIGR1cmluZyB0ZXN0aW5nLgogICAgIGlmIChtX21vZGUgIT0gTW9kZTo6VGVzdGluZykg
ewogICAgICAgICAvLyBJL08gcHJlc3N1cmUgbWF5IG1ha2UgZGlzayBvcGVyYXRpb25zIHNsb3cu
IElmIHRoZXkgc3RhcnQgdGFraW5nIHZlcnkgbG9uZyB0aW1lIHdlIHJhdGhlciBnbyB0byBuZXR3
b3JrLgpAQCAtNjYwLDggKzY3MSwxMSBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJh
dGlvbihzdGQ6CiAgICAgICAgIGlmIChzaG91bGRHZXRCb2R5QmxvYikKICAgICAgICAgICAgICsr
cmVhZE9wZXJhdGlvbi5hY3RpdmVDb3VudDsKIAorICAgICAgICByZWFkT3BlcmF0aW9uLnRpbWlu
Z3MucmVjb3JkSU9TdGFydFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisKICAgICAgICAgYXV0byBj
aGFubmVsID0gSU9DaGFubmVsOjpvcGVuKHJlY29yZFBhdGgsIElPQ2hhbm5lbDo6VHlwZTo6UmVh
ZCk7CiAgICAgICAgIGNoYW5uZWwtPnJlYWQoMCwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSwgJmlvUXVldWUoKSwgW3RoaXMsICZyZWFkT3BlcmF0aW9uXShjb25zdCBEYXRhJiBm
aWxlRGF0YSwgaW50IGVycm9yKSB7CisgICAgICAgICAgICByZWFkT3BlcmF0aW9uLnRpbWluZ3Mu
cmVjb3JkSU9FbmRUaW1lID0gV2FsbFRpbWU6Om5vdygpOwogICAgICAgICAgICAgaWYgKCFlcnJv
cikKICAgICAgICAgICAgICAgICByZWFkUmVjb3JkKHJlYWRPcGVyYXRpb24sIGZpbGVEYXRhKTsK
ICAgICAgICAgICAgIGZpbmlzaFJlYWRPcGVyYXRpb24ocmVhZE9wZXJhdGlvbik7CkBAIC02Njks
OCArNjgzLDEyIEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKHN0ZDoKIAog
ICAgICAgICBpZiAoc2hvdWxkR2V0Qm9keUJsb2IpIHsKICAgICAgICAgICAgIC8vIFJlYWQgdGhl
IGJsb2IgaW4gcGFyYWxsZWwgd2l0aCB0aGUgcmVjb3JkIHJlYWQuCisgICAgICAgICAgICByZWFk
T3BlcmF0aW9uLnRpbWluZ3MuYmxvYklPU3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworCiAg
ICAgICAgICAgICBhdXRvIGJsb2JQYXRoID0gYmxvYlBhdGhGb3JLZXkocmVhZE9wZXJhdGlvbi5r
ZXkpOwogICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi5yZXN1bHRCb2R5QmxvYiA9IG1fYmxvYlN0
b3JhZ2UuZ2V0KGJsb2JQYXRoKTsKKworICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdz
LmJsb2JJT0VuZFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CiAgICAgICAgICAgICBmaW5pc2hSZWFk
T3BlcmF0aW9uKHJlYWRPcGVyYXRpb24pOwogICAgICAgICB9CiAgICAgfSk7CkBAIC03NDcsNyAr
NzY1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmV0cmlldmVGcm9tTWVtbwogICAgICAg
ICBpZiAob3BlcmF0aW9uLT5yZWNvcmQua2V5ID09IGtleSkgewogICAgICAgICAgICAgTE9HKE5l
dHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGZvdW5kIHdyaXRlIG9wZXJhdGlv
biBpbiBwcm9ncmVzcyIpOwogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFty
ZWNvcmQgPSBvcGVyYXRpb24tPnJlY29yZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0
ZDo6bWFrZV91bmlxdWU8U3RvcmFnZTo6UmVjb3JkPihyZWNvcmQpKTsKKyAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om1ha2VfdW5pcXVlPFN0b3JhZ2U6OlJlY29yZD4ocmVj
b3JkKSwgeyB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KQEAgLTgzOSwxMiArODU3LDEyIEBAIHZvaWQgU3RvcmFnZTo6cmV0cmlldmUoY29u
c3QgS2V5JiBrZXksIHUKICAgICBBU1NFUlQoIWtleS5pc051bGwoKSk7CiAKICAgICBpZiAoIW1f
Y2FwYWNpdHkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIHsgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoIW1heUNvbnRhaW4oa2V5KSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihudWxscHRyKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgeyB9KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODU0LDYgKzg3MiwxMCBAQCB2b2lkIFN0b3JhZ2U6
OnJldHJpZXZlKGNvbnN0IEtleSYga2V5LCB1CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8g
cmVhZE9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVhZE9wZXJhdGlvbj4oKnRoaXMsIGtl
eSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisgICAgcmVhZE9wZXJhdGlvbi0+dGlt
aW5ncy5zdGFydFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgcmVhZE9wZXJhdGlvbi0+dGlt
aW5ncy5kaXNwYXRjaENvdW50QXRTdGFydCA9IG1fcmVhZE9wZXJhdGlvbkRpc3BhdGNoQ291bnQ7
CisKICAgICBtX3BlbmRpbmdSZWFkT3BlcmF0aW9uc0J5UHJpb3JpdHlbcHJpb3JpdHldLnByZXBl
bmQoV1RGTW92ZShyZWFkT3BlcmF0aW9uKSk7CiAgICAgZGlzcGF0Y2hQZW5kaW5nUmVhZE9wZXJh
dGlvbnMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiAyMzI1MzgpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMTkgKzUwLDM3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
UHRyPFN0b3JhZ2U+IG9wZW4oY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgsIE1vZGUpOwogCiAgICAg
c3RydWN0IFJlY29yZCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1
YmxpYzoKICAgICAgICAgS2V5IGtleTsKICAgICAgICAgV2FsbFRpbWUgdGltZVN0YW1wOwogICAg
ICAgICBEYXRhIGhlYWRlcjsKICAgICAgICAgRGF0YSBib2R5OwogICAgICAgICBzdGQ6Om9wdGlv
bmFsPFNIQTE6OkRpZ2VzdD4gYm9keUhhc2g7CisKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgfTsKKworICAgIHN0cnVjdCBUaW1pbmdzIHsKKyAgICAgICAgV2FsbFRpbWUg
c3RhcnRUaW1lOworICAgICAgICBXYWxsVGltZSBkaXNwYXRjaFRpbWU7CisgICAgICAgIFdhbGxU
aW1lIHJlY29yZElPU3RhcnRUaW1lOworICAgICAgICBXYWxsVGltZSByZWNvcmRJT0VuZFRpbWU7
CisgICAgICAgIFdhbGxUaW1lIGJsb2JJT1N0YXJ0VGltZTsKKyAgICAgICAgV2FsbFRpbWUgYmxv
YklPRW5kVGltZTsKKyAgICAgICAgV2FsbFRpbWUgY29tcGxldGlvblRpbWU7CisgICAgICAgIHNp
emVfdCBkaXNwYXRjaENvdW50QXRTdGFydCB7IDAgfTsKKyAgICAgICAgc2l6ZV90IGRpc3BhdGNo
Q291bnRBdERpc3BhdGNoIHsgMCB9OworICAgICAgICBib29sIHN5bmNocm9uaXphdGlvbkluUHJv
Z3Jlc3NBdERpc3BhdGNoIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBzaHJpbmtJblByb2dyZXNz
QXREaXNwYXRjaCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgd2FzQ2FuY2VsZWQgeyBmYWxzZSB9
OworCisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIH07CisKICAgICAvLyBU
aGlzIG1heSBjYWxsIGNvbXBsZXRpb24gaGFuZGxlciBzeW5jaHJvbm91c2x5IG9uIGZhaWx1cmUu
Ci0gICAgdHlwZWRlZiBGdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1ZV9wdHI8UmVjb3JkPik+IFJl
dHJpZXZlQ29tcGxldGlvbkhhbmRsZXI7CisgICAgdXNpbmcgUmV0cmlldmVDb21wbGV0aW9uSGFu
ZGxlciA9IEZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmQ+LCBjb25zdCBUaW1p
bmdzJik+OwogICAgIHZvaWQgcmV0cmlldmUoY29uc3QgS2V5JiwgdW5zaWduZWQgcHJpb3JpdHks
IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJik7CiAKLSAgICB0eXBlZGVmIEZ1bmN0aW9uPHZv
aWQgKGNvbnN0IERhdGEmIG1hcHBlZEJvZHkpPiBNYXBwZWRCb2R5SGFuZGxlcjsKKyAgICB1c2lu
ZyBNYXBwZWRCb2R5SGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQgKGNvbnN0IERhdGEmIG1hcHBlZEJv
ZHkpPjsKICAgICB2b2lkIHN0b3JlKGNvbnN0IFJlY29yZCYsIE1hcHBlZEJvZHlIYW5kbGVyJiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IHsgfSk7CiAKICAgICB2b2lkIHJlbW92ZShj
b25zdCBLZXkmKTsKQEAgLTE2Myw2ICsxODEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3N5
bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaHJpbmtJblBy
b2dyZXNzIHsgZmFsc2UgfTsKKyAgICBzaXplX3QgbV9yZWFkT3BlcmF0aW9uRGlzcGF0Y2hDb3Vu
dCB7IDAgfTsKIAogICAgIFZlY3RvcjxLZXk6Okhhc2hUeXBlPiBtX3JlY29yZEZpbHRlckhhc2hl
c0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uOwogICAgIFZlY3RvcjxLZXk6Okhhc2hUeXBlPiBt
X2Jsb2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342428</attachid>
            <date>2018-06-11 07:01:58 -0700</date>
            <delta_ts>2018-06-11 12:38:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>cache-retrieve-timing-logging-4.patch</filename>
            <type>text/plain</type>
            <size>22900</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzI3MDkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE4LTA2LTExICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBmb3Igc2xvdyBjYWNoZSByZXRyaWV2ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NjUyMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDEwMDIw
NzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
c29tZXRpbWVzIHNlZSBzbG93IGNhY2hlIHJldHJpZXZlcyBpbiBsb2dzLiBBZGQgc29tZSBtb3Jl
IGxvZ2dpbmcgdG8gYmV0dGVyIGFuYWx5emUgdGhlc2UgY2FzZXMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRpbWluZ3MgdG8gYWxsIGNhY2hlIHN0b3JhZ2UgcmV0cmlldmUgb3BlcmF0aW9u
cyBhbmQgcGFzc2VzIHRoZW0gdXAgdG8gdGhlIGNsaWVudC4KKyAgICAgICAgV2UgdGhlbiBsb2cg
dGhlIHRpbWluZ3Mgb24gTmV0d29ya1Jlc291cmNlTG9hZGVyIGxldmVscyBpZiBuZWVkZWQuIEl0
ZW1zIGxvZ2dlZCBpbmNsdWRlCisKKyAgICAgICAgLSB0b3RhbCByZXRyaWV2ZSB0aW1lCisgICAg
ICAgIC0gZGlzcGF0Y2ggZGVsYXkgYW5kIG51bWJlciBvZiByZXNvdXJjZXMgZGlzcGF0Y2hlZCBi
ZWZvcmUgdGhpcyBvbmUKKyAgICAgICAgLSByZWNvcmQgSS9PIHRpbWUKKyAgICAgICAgLSBibG9i
IEkvTyB0aW1lCisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzaHJpbmsgd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzeW5jaHJvbml6YXRpb24gd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gY2FuY2VsbGF0aW9uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6bG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZCk6CisKKyAgICAgICAgTG9n
IGlmIHRoZSByZXRyaWV2ZSB0b29rIG1vcmUgdGhhbiAxcy4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6
OmNvbXBsZXRlUmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
OjpyZXRyaWV2ZURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldHJpZXZlRW50cnlGcm9tU3RvcmFnZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmlldmVT
dWJyZXNvdXJjZXNFbnRyeSk6CisKKyAgICAgICAgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciBkb2Vz
IG5vdCByZWNvcmRzIHNwZWNpZmljIHRpbWluZ3MgeWV0IGJ1dCBhdCBsZWFzdCB3ZSBkbyBsb2cg
d2hlbiB0aGV5IG9jY3VyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFn
ZTo6UmVhZE9wZXJhdGlvbjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5pc2gpOgorCisgICAgICAgIFJlY29yZCB0aW1p
bmcgaW5mbyBpbiBSZWFkT3BlcmF0aW9ucy4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6cmV0cmlldmVGcm9tTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpTdG9yYWdlOjpyZXRyaWV2ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgorCiAyMDE4LTA2LTEwICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCBBUEkg
cnVuIHJ1biBqYXZhc2NyaXB0IGZyb20gYSBXZWJLaXRXZWJWaWV3IGluIGFuIGlzb2xhdGVkIHdv
cmxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSwxNCArMjE1LDE0IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRyaWV2
ZUNhY2gKICAgICBBU1NFUlQoY2FuVXNlQ2FjaGUocmVxdWVzdCkpOwogCiAgICAgUmVmUHRyPE5l
dHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAgIG1fY2FjaGUtPnJldHJpZXZl
KHJlcXVlc3QsIHsgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1l
SUQgfSwgW3RoaXMsIGxvYWRlciA9IFdURk1vdmUobG9hZGVyKSwgcmVxdWVzdCA9IFJlc291cmNl
UmVxdWVzdCB7IHJlcXVlc3QgfV0oYXV0byBlbnRyeSkgbXV0YWJsZSB7Ci0jaWYgUkVMRUFTRV9M
T0dfRElTQUJMRUQKLSAgICAgICAgVU5VU0VEX1BBUkFNKHRoaXMpOwotI2VuZGlmCisgICAgbV9j
YWNoZS0+cmV0cmlldmUocmVxdWVzdCwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFt
ZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhpcywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpLCByZXF1
ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0IHsgcmVxdWVzdCB9XShhdXRvIGVudHJ5LCBhdXRvIGluZm8p
IG11dGFibGUgewogICAgICAgICBpZiAobG9hZGVyLT5oYXNPbmVSZWYoKSkgewogICAgICAgICAg
ICAgLy8gVGhlIGxvYWRlciBoYXMgYmVlbiBhYm9ydGVkIGFuZCBpcyBvbmx5IGhlbGQgYWxpdmUg
YnkgdGhpcyBsYW1iZGEuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAg
ICBsb2FkZXItPmxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQoaW5mbyk7CisKICAgICAgICAg
aWYgKCFlbnRyeSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgicmV0cmll
dmVDYWNoZUVudHJ5OiBSZXNvdXJjZSBub3QgaW4gY2FjaGUgKHBhZ2VJRCA9ICUiIFBSSXU2NCAi
LCBmcmFtZUlEID0gJSIgUFJJdTY0ICIsIHJlc291cmNlSUQgPSAlIiBQUkl1NjQgIiwgaXNNYWlu
UmVzb3VyY2UgPSAlZCwgaXNTeW5jaHJvbm91cyA9ICVkKSIsIG1fcGFyYW1ldGVycy53ZWJQYWdl
SUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBtX3BhcmFtZXRlcnMuaWRlbnRpZmllciwgaXNN
YWluUmVzb3VyY2UoKSwgaXNTeW5jaHJvbm91cygpKTsKICAgICAgICAgICAgIGxvYWRlci0+c3Rh
cnROZXR3b3JrTG9hZChXVEZNb3ZlKHJlcXVlc3QpLCBGaXJzdExvYWQ6Olllcyk7CkBAIC0xMDgx
LDQgKzEwODEsMzggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmVucXVldWVTZWN1cgog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVucXVldWVTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50IHsgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIFdURk1vdmUoZXZlbnRJbml0KSB9LCBt
X3BhcmFtZXRlcnMud2ViUGFnZUlEKTsKIH0KIAordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQoY29uc3QgTmV0d29ya0NhY2hlOjpDYWNoZTo6
UmV0cmlldmVJbmZvJiBpbmZvKQoreworI2lmIFJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgVU5V
U0VEX1BBUkFNKGluZm8pOworI2Vsc2UKKyAgICBpZiAoIWlzQWx3YXlzT25Mb2dnaW5nQWxsb3dl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBkdXJhdGlvbiA9IGluZm8uY29tcGxldGlv
blRpbWUgLSBpbmZvLnN0YXJ0VGltZTsKKyAgICBpZiAoZHVyYXRpb24gPCAxX3MpCisgICAgICAg
IHJldHVybjsKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2
ZUlmTmVlZGVkOiBUb29rICUuMGZtcywgcHJpb3JpdHkgJWQiLCBkdXJhdGlvbi5taWxsaXNlY29u
ZHMoKSwgaW5mby5wcmlvcml0eSk7CisgICAgaWYgKGluZm8ud2FzU3BlY3VsYXRpdmVMb2FkKQor
ICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVl
ZGVkOiBXYXMgc3BlY3VsYXRpdmUgbG9hZCIpOworICAgIGlmICghaW5mby5zdG9yYWdlVGltaW5n
cy5zdGFydFRpbWUpCisgICAgICAgIHJldHVybjsKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBTdG9yYWdlIHJldHJpZXZlIHRpbWUgJS4w
Zm1zIiwgKGluZm8uc3RvcmFnZVRpbWluZ3MuY29tcGxldGlvblRpbWUgLSBpbmZvLnN0b3JhZ2VU
aW1pbmdzLnN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkpOworICAgIGlmIChpbmZvLnN0b3JhZ2VU
aW1pbmdzLmRpc3BhdGNoVGltZSkgeworICAgICAgICBhdXRvIHRpbWUgPSAoaW5mby5zdG9yYWdl
VGltaW5ncy5kaXNwYXRjaFRpbWUgLSBpbmZvLnN0b3JhZ2VUaW1pbmdzLnN0YXJ0VGltZSkubWls
bGlzZWNvbmRzKCk7CisgICAgICAgIGF1dG8gY291bnQgPSBpbmZvLnN0b3JhZ2VUaW1pbmdzLmRp
c3BhdGNoQ291bnRBdERpc3BhdGNoIC0gaW5mby5zdG9yYWdlVGltaW5ncy5kaXNwYXRjaENvdW50
QXRTdGFydDsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0
cmlldmVJZk5lZWRlZDogRGlzcGF0Y2ggZGVsYXkgJS4wZm1zLCBkaXNwYXRjaGVkICVsdSByZXNv
dXJjZXMgZmlyc3QiLCB0aW1lLCBjb3VudCk7CisgICAgfQorICAgIGlmIChpbmZvLnN0b3JhZ2VU
aW1pbmdzLnJlY29yZElPU3RhcnRUaW1lKQorICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBSZWNvcmQgSS9PIHRpbWUgJS4wZm1zIiwg
KGluZm8uc3RvcmFnZVRpbWluZ3MucmVjb3JkSU9FbmRUaW1lIC0gaW5mby5zdG9yYWdlVGltaW5n
cy5yZWNvcmRJT1N0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkpOworICAgIGlmIChpbmZvLnN0b3Jh
Z2VUaW1pbmdzLmJsb2JJT1N0YXJ0VGltZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZDogQmxvYiBJL08gdGltZSAlLjBmbXMiLCAo
aW5mby5zdG9yYWdlVGltaW5ncy5ibG9iSU9FbmRUaW1lIC0gaW5mby5zdG9yYWdlVGltaW5ncy5i
bG9iSU9TdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpKTsKKyAgICBpZiAoaW5mby5zdG9yYWdlVGlt
aW5ncy5zeW5jaHJvbml6YXRpb25JblByb2dyZXNzQXREaXNwYXRjaCkKKyAgICAgICAgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZDogU3luY2hyb25p
emF0aW9uIHdhcyBpbiBwcm9ncmVzcyIpOworICAgIGlmIChpbmZvLnN0b3JhZ2VUaW1pbmdzLnNo
cmlua0luUHJvZ3Jlc3NBdERpc3BhdGNoKQorICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBTaHJpbmsgd2FzIGluIHByb2dyZXNzIik7
CisgICAgaWYgKGluZm8uc3RvcmFnZVRpbWluZ3Mud2FzQ2FuY2VsZWQpCisgICAgICAgIFJFTEVB
U0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFJldHJpZXZl
IHdhcyBjYW5jZWxlZCIpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5oCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNlbmRDU1BWaW9sYXRpb25SZXBvcnQoV2ViQ29yZTo6
VVJMJiYsIFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mJikgZmluYWw7CiAgICAgdm9pZCBlbnF1ZXVl
U2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudChXZWJDb3JlOjpTZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50OjpJbml0JiYpIGZpbmFsOwogCisgICAgdm9pZCBsb2dTbG93Q2FjaGVSZXRyaWV2
ZUlmTmVlZGVkKGNvbnN0IE5ldHdvcmtDYWNoZTo6Q2FjaGU6OlJldHJpZXZlSW5mbyYpOworCiAg
ICAgY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogCiAg
ICAgUmVmPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyMzI1MzgpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw3ICs1MDgsNyBAQCB2b2lkIENhY2hlczo6cmVhZFJl
Y29yZChjb25zdCBOZXR3b3JrQ2FjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0
b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0
b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6OnVuaXF1ZV9wdHI8U3Rv
cmFnZTo6UmVjb3JkPiBzdG9yYWdlKSBtdXRhYmxlIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZl
KGtleSwgNCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiBz
dG9yYWdlLCBjb25zdCBTdG9yYWdlOjpUaW1pbmdzJikgbXV0YWJsZSB7CiAgICAgICAgIGlmICgh
c3RvcmFnZSkgewogICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJl
YWREaXNrKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCShyZXZpc2lv
biAyMzI1MzgpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgU3RvcmVE
ZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjCiAgICAgcmV0dXJuIFN0b3JlRGVjaXNpb246Olll
czsKIH0KIAotdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lk
IChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ2Fj
aGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJ
bkhUVFBGYW1pbHkoKSk7CiAKQEAgLTMxOSw2ICszMTksMTEgQEAgdm9pZCBDYWNoZTo6cmV0cmll
dmUoY29uc3QgV2ViQ29yZTo6UmVzbwogICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJp
ZXZhbFJlcXVlc3QoZnJhbWVJRC5maXJzdCk7CiAKICAgICBLZXkgc3RvcmFnZUtleSA9IG1ha2VD
YWNoZUtleShyZXF1ZXN0KTsKKyAgICBhdXRvIHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJlcXVlc3QucHJpb3JpdHkoKSk7CisKKyAgICBSZXRyaWV2ZUluZm8gaW5mbzsKKyAgICBp
bmZvLnN0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBpbmZvLnByaW9yaXR5ID0gcHJp
b3JpdHk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJ
T04pCiAgICAgYm9vbCBjYW5Vc2VTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbiA9IG1fc3BlY3VsYXRp
dmVMb2FkTWFuYWdlciAmJiAhcmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkgJiYgIWNhY2hlUG9saWN5
QWxsb3dzRXhwaXJlZChyZXF1ZXN0LmNhY2hlUG9saWN5KCkpOwpAQCAtMzMxLDMzICszMzYsMzMg
QEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzbwogICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzKQogICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmROb3RVc2luZ0Nh
Y2hlRm9yUmVxdWVzdChmcmFtZUlELmZpcnN0LCBzdG9yYWdlS2V5LCByZXF1ZXN0LCByZXRyaWV2
ZURlY2lzaW9uKTsKIAotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAg
ICAgY29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbnVsbHB0ciwg
aW5mbyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCiAgICAgaWYgKGNhblVzZVNwZWN1bGF0aXZlUmV2
YWxpZGF0aW9uICYmIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+Y2FuUmV0cmlldmUoc3RvcmFn
ZUtleSwgcmVxdWVzdCwgZnJhbWVJRCkpIHsKLSAgICAgICAgbV9zcGVjdWxhdGl2ZUxvYWRNYW5h
Z2VyLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBbcmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeSkg
eworICAgICAgICBtX3NwZWN1bGF0aXZlTG9hZE1hbmFnZXItPnJldHJpZXZlKHN0b3JhZ2VLZXks
IFtyZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBpbmZvID0gV1RGTW92ZShpbmZvKV0oc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeSkgbXV0
YWJsZSB7CisgICAgICAgICAgICBpbmZvLndhc1NwZWN1bGF0aXZlTG9hZCA9IHRydWU7CiAgICAg
ICAgICAgICBpZiAoZW50cnkgJiYgV2ViQ29yZTo6dmVyaWZ5VmFyeWluZ1JlcXVlc3RIZWFkZXJz
KGVudHJ5LT52YXJ5aW5nUmVxdWVzdEhlYWRlcnMoKSwgcmVxdWVzdCkpCi0gICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlbnRyeSkpOworICAgICAgICAgICAgICAgIGNv
bXBsZXRlUmV0cmlldmUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIFdURk1vdmUoZW50cnkp
LCBpbmZvKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihudWxscHRyKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZVJldHJpZXZlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBudWxscHRyLCBpbmZvKTsKICAgICAgICAgfSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGF1dG8gc3RhcnRUaW1lID0gV2FsbFRpbWU6
Om5vdygpOwotICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVxdWVz
dC5wcmlvcml0eSgpKTsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9y
aXR5LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCByZXF1ZXN0LCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBpbmZvID0gV1RGTW92
ZShpbmZvKSwgc3RvcmFnZUtleSwgZnJhbWVJRF0oYXV0byByZWNvcmQsIGF1dG8gdGltaW5ncykg
bXV0YWJsZSB7CisgICAgICAgIGluZm8uc3RvcmFnZVRpbWluZ3MgPSB0aW1pbmdzOwogCi0gICAg
bV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCBmcmFtZUlEXShh
dXRvIHJlY29yZCkgewogICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAgICAgTE9HKE5l
dHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgbm90IGZvdW5kIGluIHN0b3JhZ2UiKTsKIAog
ICAgICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKICAgICAgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3MtPnJlY29yZFJldHJpZXZhbEZhaWx1cmUoZnJhbWVJRC5maXJzdCwgc3RvcmFnZUtleSwgcmVx
dWVzdCk7CiAKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAg
ICAgICAgY29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbnVsbHB0
ciwgaW5mbyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMzc3
LDEyICszODIsMTAgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzbwog
ICAgICAgICB9OwogCiAjaWYgIUxPR19ESVNBQkxFRAotICAgICAgICBhdXRvIGVsYXBzZWQgPSBX
YWxsVGltZTo6bm93KCkgLSBzdGFydFRpbWU7CisgICAgICAgIGF1dG8gZWxhcHNlZCA9IFdhbGxU
aW1lOjpub3coKSAtIGluZm8uc3RhcnRUaW1lOwogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2ZSBjb21wbGV0ZSB1c2VEZWNpc2lvbj0lZCBwcmlvcml0
eT0lZCB0aW1lPSUiIFBSSWk2NCAibXMiLCBzdGF0aWNfY2FzdDxpbnQ+KHVzZURlY2lzaW9uKSwg
c3RhdGljX2Nhc3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkpLCBlbGFwc2VkLm1pbGxpc2Vjb25k
c0FzPGludDY0X3Q+KCkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN0YXJ0VGltZSk7
CiAjZW5kaWYKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlbnRyeSkpOworICAg
ICAgICBjb21wbGV0ZVJldHJpZXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBXVEZNb3Zl
KGVudHJ5KSwgaW5mbyk7CiAKICAgICAgICAgaWYgKG1fc3RhdGlzdGljcykKICAgICAgICAgICAg
IG1fc3RhdGlzdGljcy0+cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkoZnJhbWVJRC5maXJzdCwg
c3RvcmFnZUtleSwgcmVxdWVzdCwgdXNlRGVjaXNpb24pOwpAQCAtMzkwLDYgKzM5MywxMSBAQCB2
b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgfSk7CiB9CiAKK3Zv
aWQgQ2FjaGU6OmNvbXBsZXRlUmV0cmlldmUoUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmIGhh
bmRsZXIsIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gZW50cnksIFJldHJpZXZlSW5mbyYgaW5mbykK
K3sKKyAgICBpbmZvLmNvbXBsZXRpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIGhhbmRs
ZXIoV1RGTW92ZShlbnRyeSksIGluZm8pOworfQogICAgIAogc3RkOjp1bmlxdWVfcHRyPEVudHJ5
PiBDYWNoZTo6bWFrZUVudHJ5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhKQogewpAQCAtNjIxLDcgKzYyOSw3IEBA
IFN0cmluZyBDYWNoZTo6cmVjb3Jkc1BhdGgoKSBjb25zdAogdm9pZCBDYWNoZTo6cmV0cmlldmVE
YXRhKGNvbnN0IERhdGFLZXkmIGRhdGFLZXksIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgS2V5IGtleSB7
IGRhdGFLZXksIG1fc3RvcmFnZS0+c2FsdCgpIH07Ci0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShr
ZXksIDQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
YXV0byByZWNvcmQpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvIHJlY29yZCwgYXV0
bykgewogICAgICAgICBpZiAoIXJlY29yZCB8fCAhcmVjb3JkLT5ib2R5LnNpemUoKSkgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgMCk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGUuaAkocmV2aXNpb24gMjMyNTM4KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcg
KzEwMiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYXBhY2l0eShzaXplX3QpOwogCiAgICAg
Ly8gQ29tcGxldGlvbiBoYW5kbGVyIG1heSBnZXQgY2FsbGVkIGJhY2sgc3luY2hyb25vdXNseSBv
biBmYWlsdXJlLgotICAgIHZvaWQgcmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIEZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0
cjxFbnRyeT4pPiYmKTsKKyAgICBzdHJ1Y3QgUmV0cmlldmVJbmZvIHsKKyAgICAgICAgV2FsbFRp
bWUgc3RhcnRUaW1lOworICAgICAgICBXYWxsVGltZSBjb21wbGV0aW9uVGltZTsKKyAgICAgICAg
dW5zaWduZWQgcHJpb3JpdHk7CisgICAgICAgIFN0b3JhZ2U6OlRpbWluZ3Mgc3RvcmFnZVRpbWlu
Z3M7CisgICAgICAgIGJvb2wgd2FzU3BlY3VsYXRpdmVMb2FkIHsgZmFsc2UgfTsKKworICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICB9OworICAgIHVzaW5nIFJldHJpZXZlQ29t
cGxldGlvbkhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+LCBj
b25zdCBSZXRyaWV2ZUluZm8mKT47CisgICAgdm9pZCByZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgUmV0cmlldmVDb21wbGV0aW9u
SGFuZGxlciYmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IHN0b3JlKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBGdW5jdGlvbjx2b2lkIChNYXBwZWRCb2R5
Jik+JiYpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gc3RvcmVSZWRpcmVjdChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3QpOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4gdXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IEdsb2JhbEZyYW1lSUQmLCBjb25zdCBFbnRyeSYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CkBAIC0xNDAsNiArMTUwLDgg
QEAgcHJpdmF0ZToKIAogICAgIEtleSBtYWtlQ2FjaGVLZXkoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Jik7CiAKKyAgICBzdGF0aWMgdm9pZCBjb21wbGV0ZVJldHJpZXZlKFJldHJpZXZl
Q29tcGxldGlvbkhhbmRsZXImJiwgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiwgUmV0cmlldmVJbmZv
Jik7CisKICAgICBTdHJpbmcgZHVtcEZpbGVQYXRoKCkgY29uc3Q7CiAgICAgdm9pZCBkZWxldGVE
dW1wRmlsZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2Fk
TWFuYWdlci5jcHAJKHJldmlzaW9uIDIzMjUzOCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxNiw3ICs0MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlTG9hZE1hbmFnZXI6
OmFkZFByZWxvYWRlCiAKIHZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmlldmVFbnRy
eUZyb21TdG9yYWdlKGNvbnN0IFN1YnJlc291cmNlSW5mbyYgaW5mbywgUmV0cmlldmVDb21wbGV0
aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fc3RvcmFnZS5yZXRyaWV2
ZShpbmZvLmtleSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5wcmlvcml0eSgpKSwgW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gcmVjb3Jk
KSB7CisgICAgbV9zdG9yYWdlLnJldHJpZXZlKGluZm8ua2V5KCksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmZvLnByaW9yaXR5KCkpLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYXV0byByZWNvcmQsIGF1dG8gdGltaW5ncykgewogICAgICAgICBpZiAo
IXJlY29yZCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NzEsNyArNTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUxvYWRNYW5hZ2VyOjpyZXRyaWV2ZVN1YgogewogICAgIEFTU0VSVChzdG9yYWdlS2V5LnR5cGUo
KSA9PSAiUmVzb3VyY2UiKTsKICAgICBhdXRvIHN1YnJlc291cmNlc1N0b3JhZ2VLZXkgPSBtYWtl
U3VicmVzb3VyY2VzS2V5KHN0b3JhZ2VLZXksIG1fc3RvcmFnZS5zYWx0KCkpOwotICAgIG1fc3Rv
cmFnZS5yZXRyaWV2ZShzdWJyZXNvdXJjZXNTdG9yYWdlS2V5LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIHJlY29yZCkgeworICAgIG1fc3RvcmFnZS5y
ZXRyaWV2ZShzdWJyZXNvdXJjZXNTdG9yYWdlS2V5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVz
b3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bSksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShhdXRvIHJlY29yZCwgYXV0byB0aW1pbmdzKSB7CiAgICAgICAg
IGlmICghcmVjb3JkKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2
aXNpb24gMjMyNTM4KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwdWJs
aWM6CiAgICAgQmxvYlN0b3JhZ2U6OkJsb2IgcmVzdWx0Qm9keUJsb2I7CiAgICAgc3RkOjphdG9t
aWM8dW5zaWduZWQ+IGFjdGl2ZUNvdW50IHsgMCB9OwogICAgIGJvb2wgaXNDYW5jZWxlZCB7IGZh
bHNlIH07CisgICAgVGltaW5ncyB0aW1pbmdzOwogfTsKIAogdm9pZCBTdG9yYWdlOjpSZWFkT3Bl
cmF0aW9uOjpjYW5jZWwoKQpAQCAtNzksOCArODAsMTAgQEAgdm9pZCBTdG9yYWdlOjpSZWFkT3Bl
cmF0aW9uOjpjYW5jZWwoKQogCiAgICAgaWYgKGlzQ2FuY2VsZWQpCiAgICAgICAgIHJldHVybjsK
KyAgICB0aW1pbmdzLmNvbXBsZXRpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIHRpbWlu
Z3Mud2FzQ2FuY2VsZWQgPSB0cnVlOwogICAgIGlzQ2FuY2VsZWQgPSB0cnVlOwotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIHRp
bWluZ3MpOwogfQogCiBib29sIFN0b3JhZ2U6OlJlYWRPcGVyYXRpb246OmZpbmlzaCgpCkBAIC05
NSw3ICs5OCw4IEBAIGJvb2wgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6ZmluaXNoKCkKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0UmVjb3JkID0gbnVsbHB0cjsKICAgICB9Ci0gICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0UmVjb3JkKSk7CisgICAgdGlt
aW5ncy5jb21wbGV0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHRSZWNvcmQpLCB0aW1pbmdzKTsKIH0KIAogc3RydWN0
IFN0b3JhZ2U6OldyaXRlT3BlcmF0aW9uIHsKQEAgLTY0NCw2ICs2NDgsMTMgQEAgdm9pZCBTdG9y
YWdlOjpkaXNwYXRjaFJlYWRPcGVyYXRpb24oc3RkOgogICAgIGF1dG8mIHJlYWRPcGVyYXRpb24g
PSAqcmVhZE9wZXJhdGlvblB0cjsKICAgICBtX2FjdGl2ZVJlYWRPcGVyYXRpb25zLmFkZChXVEZN
b3ZlKHJlYWRPcGVyYXRpb25QdHIpKTsKIAorICAgIHJlYWRPcGVyYXRpb24udGltaW5ncy5kaXNw
YXRjaFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdzLnN5
bmNocm9uaXphdGlvbkluUHJvZ3Jlc3NBdERpc3BhdGNoID0gbV9zeW5jaHJvbml6YXRpb25JblBy
b2dyZXNzOworICAgIHJlYWRPcGVyYXRpb24udGltaW5ncy5zaHJpbmtJblByb2dyZXNzQXREaXNw
YXRjaCA9IG1fc2hyaW5rSW5Qcm9ncmVzczsKKyAgICByZWFkT3BlcmF0aW9uLnRpbWluZ3MuZGlz
cGF0Y2hDb3VudEF0RGlzcGF0Y2ggPSBtX3JlYWRPcGVyYXRpb25EaXNwYXRjaENvdW50OworCisg
ICAgKyttX3JlYWRPcGVyYXRpb25EaXNwYXRjaENvdW50OworCiAgICAgLy8gQXZvaWQgcmFuZG9t
bmVzcyBkdXJpbmcgdGVzdGluZy4KICAgICBpZiAobV9tb2RlICE9IE1vZGU6OlRlc3RpbmcpIHsK
ICAgICAgICAgLy8gSS9PIHByZXNzdXJlIG1heSBtYWtlIGRpc2sgb3BlcmF0aW9ucyBzbG93LiBJ
ZiB0aGV5IHN0YXJ0IHRha2luZyB2ZXJ5IGxvbmcgdGltZSB3ZSByYXRoZXIgZ28gdG8gbmV0d29y
ay4KQEAgLTY2MCw4ICs2NzEsMTEgQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaFJlYWRPcGVyYXRp
b24oc3RkOgogICAgICAgICBpZiAoc2hvdWxkR2V0Qm9keUJsb2IpCiAgICAgICAgICAgICArK3Jl
YWRPcGVyYXRpb24uYWN0aXZlQ291bnQ7CiAKKyAgICAgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdz
LnJlY29yZElPU3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworCiAgICAgICAgIGF1dG8gY2hh
bm5lbCA9IElPQ2hhbm5lbDo6b3BlbihyZWNvcmRQYXRoLCBJT0NoYW5uZWw6OlR5cGU6OlJlYWQp
OwogICAgICAgICBjaGFubmVsLT5yZWFkKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCksICZpb1F1ZXVlKCksIFt0aGlzLCAmcmVhZE9wZXJhdGlvbl0oY29uc3QgRGF0YSYgZmls
ZURhdGEsIGludCBlcnJvcikgeworICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdzLnJl
Y29yZElPRW5kVGltZSA9IFdhbGxUaW1lOjpub3coKTsKICAgICAgICAgICAgIGlmICghZXJyb3Ip
CiAgICAgICAgICAgICAgICAgcmVhZFJlY29yZChyZWFkT3BlcmF0aW9uLCBmaWxlRGF0YSk7CiAg
ICAgICAgICAgICBmaW5pc2hSZWFkT3BlcmF0aW9uKHJlYWRPcGVyYXRpb24pOwpAQCAtNjY5LDgg
KzY4MywxMiBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbihzdGQ6CiAKICAg
ICAgICAgaWYgKHNob3VsZEdldEJvZHlCbG9iKSB7CiAgICAgICAgICAgICAvLyBSZWFkIHRoZSBi
bG9iIGluIHBhcmFsbGVsIHdpdGggdGhlIHJlY29yZCByZWFkLgorICAgICAgICAgICAgcmVhZE9w
ZXJhdGlvbi50aW1pbmdzLmJsb2JJT1N0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKKwogICAg
ICAgICAgICAgYXV0byBibG9iUGF0aCA9IGJsb2JQYXRoRm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5
KTsKICAgICAgICAgICAgIHJlYWRPcGVyYXRpb24ucmVzdWx0Qm9keUJsb2IgPSBtX2Jsb2JTdG9y
YWdlLmdldChibG9iUGF0aCk7CisKKyAgICAgICAgICAgIHJlYWRPcGVyYXRpb24udGltaW5ncy5i
bG9iSU9FbmRUaW1lID0gV2FsbFRpbWU6Om5vdygpOwogICAgICAgICAgICAgZmluaXNoUmVhZE9w
ZXJhdGlvbihyZWFkT3BlcmF0aW9uKTsKICAgICAgICAgfQogICAgIH0pOwpAQCAtNzQ3LDcgKzc2
NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUPiBib29sIHJldHJpZXZlRnJvbU1lbW8KICAgICAgICAg
aWYgKG9wZXJhdGlvbi0+cmVjb3JkLmtleSA9PSBrZXkpIHsKICAgICAgICAgICAgIExPRyhOZXR3
b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBmb3VuZCB3cml0ZSBvcGVyYXRpb24g
aW4gcHJvZ3Jlc3MiKTsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcmVj
b3JkID0gb3BlcmF0aW9uLT5yZWNvcmQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6
Om1ha2VfdW5pcXVlPFN0b3JhZ2U6OlJlY29yZD4ocmVjb3JkKSk7CisgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoc3RkOjptYWtlX3VuaXF1ZTxTdG9yYWdlOjpSZWNvcmQ+KHJlY29y
ZCksIHsgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkBAIC04MzksMTIgKzg1NywxMiBAQCB2b2lkIFN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0
IEtleSYga2V5LCB1CiAgICAgQVNTRVJUKCFrZXkuaXNOdWxsKCkpOwogCiAgICAgaWYgKCFtX2Nh
cGFjaXR5KSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihudWxscHRyLCB7IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKCFtYXlDb250YWluKGtleSkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0cik7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIHsgfSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg1NCw2ICs4NzIsMTAgQEAgdm9pZCBTdG9yYWdlOjpy
ZXRyaWV2ZShjb25zdCBLZXkmIGtleSwgdQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHJl
YWRPcGVyYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlYWRPcGVyYXRpb24+KCp0aGlzLCBrZXks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKworICAgIHJlYWRPcGVyYXRpb24tPnRpbWlu
Z3Muc3RhcnRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIHJlYWRPcGVyYXRpb24tPnRpbWlu
Z3MuZGlzcGF0Y2hDb3VudEF0U3RhcnQgPSBtX3JlYWRPcGVyYXRpb25EaXNwYXRjaENvdW50Owor
CiAgICAgbV9wZW5kaW5nUmVhZE9wZXJhdGlvbnNCeVByaW9yaXR5W3ByaW9yaXR5XS5wcmVwZW5k
KFdURk1vdmUocmVhZE9wZXJhdGlvbikpOwogICAgIGRpc3BhdGNoUGVuZGluZ1JlYWRPcGVyYXRp
b25zKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkocmV2aXNpb24gMjMyNTM4KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDE5ICs1MCwzNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0
cjxTdG9yYWdlPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBNb2RlKTsKIAogICAgIHN0
cnVjdCBSZWNvcmQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJs
aWM6CiAgICAgICAgIEtleSBrZXk7CiAgICAgICAgIFdhbGxUaW1lIHRpbWVTdGFtcDsKICAgICAg
ICAgRGF0YSBoZWFkZXI7CiAgICAgICAgIERhdGEgYm9keTsKICAgICAgICAgc3RkOjpvcHRpb25h
bDxTSEExOjpEaWdlc3Q+IGJvZHlIYXNoOworCisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIH07CisKKyAgICBzdHJ1Y3QgVGltaW5ncyB7CisgICAgICAgIFdhbGxUaW1lIHN0
YXJ0VGltZTsKKyAgICAgICAgV2FsbFRpbWUgZGlzcGF0Y2hUaW1lOworICAgICAgICBXYWxsVGlt
ZSByZWNvcmRJT1N0YXJ0VGltZTsKKyAgICAgICAgV2FsbFRpbWUgcmVjb3JkSU9FbmRUaW1lOwor
ICAgICAgICBXYWxsVGltZSBibG9iSU9TdGFydFRpbWU7CisgICAgICAgIFdhbGxUaW1lIGJsb2JJ
T0VuZFRpbWU7CisgICAgICAgIFdhbGxUaW1lIGNvbXBsZXRpb25UaW1lOworICAgICAgICBzaXpl
X3QgZGlzcGF0Y2hDb3VudEF0U3RhcnQgeyAwIH07CisgICAgICAgIHNpemVfdCBkaXNwYXRjaENv
dW50QXREaXNwYXRjaCB7IDAgfTsKKyAgICAgICAgYm9vbCBzeW5jaHJvbml6YXRpb25JblByb2dy
ZXNzQXREaXNwYXRjaCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgc2hyaW5rSW5Qcm9ncmVzc0F0
RGlzcGF0Y2ggeyBmYWxzZSB9OworICAgICAgICBib29sIHdhc0NhbmNlbGVkIHsgZmFsc2UgfTsK
KworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICB9OworCiAgICAgLy8gVGhp
cyBtYXkgY2FsbCBjb21wbGV0aW9uIGhhbmRsZXIgc3luY2hyb25vdXNseSBvbiBmYWlsdXJlLgot
ICAgIHR5cGVkZWYgRnVuY3Rpb248Ym9vbCAoc3RkOjp1bmlxdWVfcHRyPFJlY29yZD4pPiBSZXRy
aWV2ZUNvbXBsZXRpb25IYW5kbGVyOworICAgIHVzaW5nIFJldHJpZXZlQ29tcGxldGlvbkhhbmRs
ZXIgPSBGdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1ZV9wdHI8UmVjb3JkPiwgY29uc3QgVGltaW5n
cyYpPjsKICAgICB2b2lkIHJldHJpZXZlKGNvbnN0IEtleSYsIHVuc2lnbmVkIHByaW9yaXR5LCBS
ZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYpOwogCi0gICAgdHlwZWRlZiBGdW5jdGlvbjx2b2lk
IChjb25zdCBEYXRhJiBtYXBwZWRCb2R5KT4gTWFwcGVkQm9keUhhbmRsZXI7CisgICAgdXNpbmcg
TWFwcGVkQm9keUhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkIChjb25zdCBEYXRhJiBtYXBwZWRCb2R5
KT47CiAgICAgdm9pZCBzdG9yZShjb25zdCBSZWNvcmQmLCBNYXBwZWRCb2R5SGFuZGxlciYmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSB7IH0pOwogCiAgICAgdm9pZCByZW1vdmUoY29u
c3QgS2V5Jik7CkBAIC0xNjMsNiArMTgxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9zeW5j
aHJvbml6YXRpb25JblByb2dyZXNzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hyaW5rSW5Qcm9n
cmVzcyB7IGZhbHNlIH07CisgICAgc2l6ZV90IG1fcmVhZE9wZXJhdGlvbkRpc3BhdGNoQ291bnQg
eyAwIH07CiAKICAgICBWZWN0b3I8S2V5OjpIYXNoVHlwZT4gbV9yZWNvcmRGaWx0ZXJIYXNoZXNB
ZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbjsKICAgICBWZWN0b3I8S2V5OjpIYXNoVHlwZT4gbV9i
bG9iRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342455</attachid>
            <date>2018-06-11 12:38:06 -0700</date>
            <delta_ts>2018-06-12 10:53:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>cache-retrieve-timing-logging-5.patch</filename>
            <type>text/plain</type>
            <size>23211</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzI3MjEpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE4LTA2LTExICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBmb3Igc2xvdyBjYWNoZSByZXRyaWV2ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NjUyMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDEwMDIw
NzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
c29tZXRpbWVzIHNlZSBzbG93IGNhY2hlIHJldHJpZXZlcyBpbiBsb2dzLiBBZGQgc29tZSBtb3Jl
IGxvZ2dpbmcgdG8gYmV0dGVyIGFuYWx5emUgdGhlc2UgY2FzZXMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRpbWluZ3MgdG8gYWxsIGNhY2hlIHN0b3JhZ2UgcmV0cmlldmUgb3BlcmF0aW9u
cyBhbmQgcGFzc2VzIHRoZW0gdXAgdG8gdGhlIGNsaWVudC4KKyAgICAgICAgV2UgdGhlbiBsb2cg
dGhlIHRpbWluZ3Mgb24gTmV0d29ya1Jlc291cmNlTG9hZGVyIGxldmVscyBpZiBuZWVkZWQuIEl0
ZW1zIGxvZ2dlZCBpbmNsdWRlCisKKyAgICAgICAgLSB0b3RhbCByZXRyaWV2ZSB0aW1lCisgICAg
ICAgIC0gZGlzcGF0Y2ggZGVsYXkgYW5kIG51bWJlciBvZiByZXNvdXJjZXMgZGlzcGF0Y2hlZCBi
ZWZvcmUgdGhpcyBvbmUKKyAgICAgICAgLSByZWNvcmQgSS9PIHRpbWUKKyAgICAgICAgLSBibG9i
IEkvTyB0aW1lCisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzaHJpbmsgd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gd2hldGhlciBjYWNoZSBzeW5jaHJvbml6YXRpb24gd2FzIGluIHByb2dyZXNz
CisgICAgICAgIC0gY2FuY2VsbGF0aW9uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6bG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZCk6CisKKyAgICAgICAgTG9n
IGlmIHRoZSByZXRyaWV2ZSB0b29rIG1vcmUgdGhhbiAxcy4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkUmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkNhY2hlOjpyZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6
OmNvbXBsZXRlUmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hl
OjpyZXRyaWV2ZURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1
bGF0aXZlTG9hZE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlNw
ZWN1bGF0aXZlTG9hZE1hbmFnZXI6OnJldHJpZXZlRW50cnlGcm9tU3RvcmFnZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmlldmVT
dWJyZXNvdXJjZXNFbnRyeSk6CisKKyAgICAgICAgU3BlY3VsYXRpdmVMb2FkTWFuYWdlciBkb2Vz
IG5vdCByZWNvcmRzIHNwZWNpZmljIHRpbWluZ3MgeWV0IGJ1dCBhdCBsZWFzdCB3ZSBkbyBsb2cg
d2hlbiB0aGV5IG9jY3VyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFn
ZTo6UmVhZE9wZXJhdGlvbjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5pc2gpOgorCisgICAgICAgIFJlY29yZCB0aW1p
bmcgaW5mbyBpbiBSZWFkT3BlcmF0aW9ucy4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6cmV0cmlldmVGcm9tTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpTdG9yYWdlOjpyZXRyaWV2ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgorCiAyMDE4LTA2LTEwICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCBBUEkg
cnVuIHJ1biBqYXZhc2NyaXB0IGZyb20gYSBXZWJLaXRXZWJWaWV3IGluIGFuIGlzb2xhdGVkIHdv
cmxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMzI3MjEpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSwxNCArMjE1LDE0IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXRyaWV2
ZUNhY2gKICAgICBBU1NFUlQoY2FuVXNlQ2FjaGUocmVxdWVzdCkpOwogCiAgICAgUmVmUHRyPE5l
dHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAgIG1fY2FjaGUtPnJldHJpZXZl
KHJlcXVlc3QsIHsgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1l
SUQgfSwgW3RoaXMsIGxvYWRlciA9IFdURk1vdmUobG9hZGVyKSwgcmVxdWVzdCA9IFJlc291cmNl
UmVxdWVzdCB7IHJlcXVlc3QgfV0oYXV0byBlbnRyeSkgbXV0YWJsZSB7Ci0jaWYgUkVMRUFTRV9M
T0dfRElTQUJMRUQKLSAgICAgICAgVU5VU0VEX1BBUkFNKHRoaXMpOwotI2VuZGlmCisgICAgbV9j
YWNoZS0+cmV0cmlldmUocmVxdWVzdCwgeyBtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFt
ZXRlcnMud2ViRnJhbWVJRCB9LCBbdGhpcywgbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpLCByZXF1
ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0IHsgcmVxdWVzdCB9XShhdXRvIGVudHJ5LCBhdXRvIGluZm8p
IG11dGFibGUgewogICAgICAgICBpZiAobG9hZGVyLT5oYXNPbmVSZWYoKSkgewogICAgICAgICAg
ICAgLy8gVGhlIGxvYWRlciBoYXMgYmVlbiBhYm9ydGVkIGFuZCBpcyBvbmx5IGhlbGQgYWxpdmUg
YnkgdGhpcyBsYW1iZGEuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAg
ICBsb2FkZXItPmxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQoaW5mbyk7CisKICAgICAgICAg
aWYgKCFlbnRyeSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgicmV0cmll
dmVDYWNoZUVudHJ5OiBSZXNvdXJjZSBub3QgaW4gY2FjaGUgKHBhZ2VJRCA9ICUiIFBSSXU2NCAi
LCBmcmFtZUlEID0gJSIgUFJJdTY0ICIsIHJlc291cmNlSUQgPSAlIiBQUkl1NjQgIiwgaXNNYWlu
UmVzb3VyY2UgPSAlZCwgaXNTeW5jaHJvbm91cyA9ICVkKSIsIG1fcGFyYW1ldGVycy53ZWJQYWdl
SUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBtX3BhcmFtZXRlcnMuaWRlbnRpZmllciwgaXNN
YWluUmVzb3VyY2UoKSwgaXNTeW5jaHJvbm91cygpKTsKICAgICAgICAgICAgIGxvYWRlci0+c3Rh
cnROZXR3b3JrTG9hZChXVEZNb3ZlKHJlcXVlc3QpLCBGaXJzdExvYWQ6Olllcyk7CkBAIC0xMDgx
LDQgKzEwODEsMzggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmVucXVldWVTZWN1cgog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVucXVldWVTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50IHsgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIFdURk1vdmUoZXZlbnRJbml0KSB9LCBt
X3BhcmFtZXRlcnMud2ViUGFnZUlEKTsKIH0KIAordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQoY29uc3QgTmV0d29ya0NhY2hlOjpDYWNoZTo6
UmV0cmlldmVJbmZvJiBpbmZvKQoreworI2lmIFJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgVU5V
U0VEX1BBUkFNKGluZm8pOworI2Vsc2UKKyAgICBpZiAoIWlzQWx3YXlzT25Mb2dnaW5nQWxsb3dl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBkdXJhdGlvbiA9IGluZm8uY29tcGxldGlv
blRpbWUgLSBpbmZvLnN0YXJ0VGltZTsKKyAgICBpZiAoZHVyYXRpb24gPCAxX3MpCisgICAgICAg
IHJldHVybjsKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2
ZUlmTmVlZGVkOiBUb29rICUuMGZtcywgcHJpb3JpdHkgJWQiLCBkdXJhdGlvbi5taWxsaXNlY29u
ZHMoKSwgaW5mby5wcmlvcml0eSk7CisgICAgaWYgKGluZm8ud2FzU3BlY3VsYXRpdmVMb2FkKQor
ICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVl
ZGVkOiBXYXMgc3BlY3VsYXRpdmUgbG9hZCIpOworICAgIGlmICghaW5mby5zdG9yYWdlVGltaW5n
cy5zdGFydFRpbWUpCisgICAgICAgIHJldHVybjsKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBTdG9yYWdlIHJldHJpZXZlIHRpbWUgJS4w
Zm1zIiwgKGluZm8uc3RvcmFnZVRpbWluZ3MuY29tcGxldGlvblRpbWUgLSBpbmZvLnN0b3JhZ2VU
aW1pbmdzLnN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkpOworICAgIGlmIChpbmZvLnN0b3JhZ2VU
aW1pbmdzLmRpc3BhdGNoVGltZSkgeworICAgICAgICBhdXRvIHRpbWUgPSAoaW5mby5zdG9yYWdl
VGltaW5ncy5kaXNwYXRjaFRpbWUgLSBpbmZvLnN0b3JhZ2VUaW1pbmdzLnN0YXJ0VGltZSkubWls
bGlzZWNvbmRzKCk7CisgICAgICAgIGF1dG8gY291bnQgPSBpbmZvLnN0b3JhZ2VUaW1pbmdzLmRp
c3BhdGNoQ291bnRBdERpc3BhdGNoIC0gaW5mby5zdG9yYWdlVGltaW5ncy5kaXNwYXRjaENvdW50
QXRTdGFydDsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0
cmlldmVJZk5lZWRlZDogRGlzcGF0Y2ggZGVsYXkgJS4wZm1zLCBkaXNwYXRjaGVkICVsdSByZXNv
dXJjZXMgZmlyc3QiLCB0aW1lLCBjb3VudCk7CisgICAgfQorICAgIGlmIChpbmZvLnN0b3JhZ2VU
aW1pbmdzLnJlY29yZElPU3RhcnRUaW1lKQorICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBSZWNvcmQgSS9PIHRpbWUgJS4wZm1zIiwg
KGluZm8uc3RvcmFnZVRpbWluZ3MucmVjb3JkSU9FbmRUaW1lIC0gaW5mby5zdG9yYWdlVGltaW5n
cy5yZWNvcmRJT1N0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkpOworICAgIGlmIChpbmZvLnN0b3Jh
Z2VUaW1pbmdzLmJsb2JJT1N0YXJ0VGltZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZDogQmxvYiBJL08gdGltZSAlLjBmbXMiLCAo
aW5mby5zdG9yYWdlVGltaW5ncy5ibG9iSU9FbmRUaW1lIC0gaW5mby5zdG9yYWdlVGltaW5ncy5i
bG9iSU9TdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpKTsKKyAgICBpZiAoaW5mby5zdG9yYWdlVGlt
aW5ncy5zeW5jaHJvbml6YXRpb25JblByb2dyZXNzQXREaXNwYXRjaCkKKyAgICAgICAgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRCgibG9nU2xvd0NhY2hlUmV0cmlldmVJZk5lZWRlZDogU3luY2hyb25p
emF0aW9uIHdhcyBpbiBwcm9ncmVzcyIpOworICAgIGlmIChpbmZvLnN0b3JhZ2VUaW1pbmdzLnNo
cmlua0luUHJvZ3Jlc3NBdERpc3BhdGNoKQorICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJsb2dTbG93Q2FjaGVSZXRyaWV2ZUlmTmVlZGVkOiBTaHJpbmsgd2FzIGluIHByb2dyZXNzIik7
CisgICAgaWYgKGluZm8uc3RvcmFnZVRpbWluZ3Mud2FzQ2FuY2VsZWQpCisgICAgICAgIFJFTEVB
U0VfTE9HX0lGX0FMTE9XRUQoImxvZ1Nsb3dDYWNoZVJldHJpZXZlSWZOZWVkZWQ6IFJldHJpZXZl
IHdhcyBjYW5jZWxlZCIpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5oCShyZXZpc2lvbiAyMzI3MjEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNlbmRDU1BWaW9sYXRpb25SZXBvcnQoV2ViQ29yZTo6
VVJMJiYsIFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mJikgZmluYWw7CiAgICAgdm9pZCBlbnF1ZXVl
U2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudChXZWJDb3JlOjpTZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50OjpJbml0JiYpIGZpbmFsOwogCisgICAgdm9pZCBsb2dTbG93Q2FjaGVSZXRyaWV2
ZUlmTmVlZGVkKGNvbnN0IE5ldHdvcmtDYWNoZTo6Q2FjaGU6OlJldHJpZXZlSW5mbyYpOworCiAg
ICAgY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogCiAg
ICAgUmVmPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCShyZXZpc2lvbiAyMzI3MjEpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw3ICs1MDgsNyBAQCB2b2lkIENhY2hlczo6cmVhZFJl
Y29yZChjb25zdCBOZXR3b3JrQ2FjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0
b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0
b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6OnVuaXF1ZV9wdHI8U3Rv
cmFnZTo6UmVjb3JkPiBzdG9yYWdlKSBtdXRhYmxlIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZl
KGtleSwgNCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiBz
dG9yYWdlLCBjb25zdCBTdG9yYWdlOjpUaW1pbmdzJikgbXV0YWJsZSB7CiAgICAgICAgIGlmICgh
c3RvcmFnZSkgewogICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJl
YWREaXNrKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCShyZXZpc2lv
biAyMzI3MjEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgU3RvcmVE
ZWNpc2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjCiAgICAgcmV0dXJuIFN0b3JlRGVjaXNpb246Olll
czsKIH0KIAotdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBHbG9iYWxGcmFtZUlEJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lk
IChzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ2Fj
aGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgR2xvYmFsRnJhbWVJRCYgZnJhbWVJRCwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJ
bkhUVFBGYW1pbHkoKSk7CiAKQEAgLTMxOSw2ICszMTksMTEgQEAgdm9pZCBDYWNoZTo6cmV0cmll
dmUoY29uc3QgV2ViQ29yZTo6UmVzbwogICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJp
ZXZhbFJlcXVlc3QoZnJhbWVJRC5maXJzdCk7CiAKICAgICBLZXkgc3RvcmFnZUtleSA9IG1ha2VD
YWNoZUtleShyZXF1ZXN0KTsKKyAgICBhdXRvIHByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJlcXVlc3QucHJpb3JpdHkoKSk7CisKKyAgICBSZXRyaWV2ZUluZm8gaW5mbzsKKyAgICBp
bmZvLnN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIGluZm8ucHJpb3JpdHkg
PSBwcmlvcml0eTsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFM
SURBVElPTikKICAgICBib29sIGNhblVzZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uID0gbV9zcGVj
dWxhdGl2ZUxvYWRNYW5hZ2VyICYmICFyZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSAmJiAhY2FjaGVQ
b2xpY3lBbGxvd3NFeHBpcmVkKHJlcXVlc3QuY2FjaGVQb2xpY3koKSk7CkBAIC0zMzEsMzMgKzMz
NiwzMyBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvCiAgICAgICAg
IGlmIChtX3N0YXRpc3RpY3MpCiAgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5vdFVz
aW5nQ2FjaGVGb3JSZXF1ZXN0KGZyYW1lSUQuZmlyc3QsIHN0b3JhZ2VLZXksIHJlcXVlc3QsIHJl
dHJpZXZlRGVjaXNpb24pOwogCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwor
ICAgICAgICBjb21wbGV0ZVJldHJpZXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBudWxs
cHRyLCBpbmZvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICAgICBpZiAoY2FuVXNlU3BlY3VsYXRp
dmVSZXZhbGlkYXRpb24gJiYgbV9zcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLT5jYW5SZXRyaWV2ZShz
dG9yYWdlS2V5LCByZXF1ZXN0LCBmcmFtZUlEKSkgewotICAgICAgICBtX3NwZWN1bGF0aXZlTG9h
ZE1hbmFnZXItPnJldHJpZXZlKHN0b3JhZ2VLZXksIFtyZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVu
dHJ5KSB7CisgICAgICAgIG1fc3BlY3VsYXRpdmVMb2FkTWFuYWdlci0+cmV0cmlldmUoc3RvcmFn
ZUtleSwgW3JlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIGluZm8gPSBXVEZNb3ZlKGluZm8pXShzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVudHJ5
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGluZm8ud2FzU3BlY3VsYXRpdmVMb2FkID0gdHJ1ZTsK
ICAgICAgICAgICAgIGlmIChlbnRyeSAmJiBXZWJDb3JlOjp2ZXJpZnlWYXJ5aW5nUmVxdWVzdEhl
YWRlcnMoZW50cnktPnZhcnlpbmdSZXF1ZXN0SGVhZGVycygpLCByZXF1ZXN0KSkKLSAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICAg
ICAgY29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZShl
bnRyeSksIGluZm8pOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlUmV0cmlldmUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG51bGxwdHIsIGluZm8pOwogICAgICAgICB9KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgYXV0byBzdGFydFRpbWUgPSBXYWxs
VGltZTo6bm93KCk7Ci0gICAgYXV0byBwcmlvcml0eSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
ZXF1ZXN0LnByaW9yaXR5KCkpOworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwg
cHJpb3JpdHksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHJlcXVlc3Qs
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGluZm8gPSBX
VEZNb3ZlKGluZm8pLCBzdG9yYWdlS2V5LCBmcmFtZUlEXShhdXRvIHJlY29yZCwgYXV0byB0aW1p
bmdzKSBtdXRhYmxlIHsKKyAgICAgICAgaW5mby5zdG9yYWdlVGltaW5ncyA9IHRpbWluZ3M7CiAK
LSAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCByZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGFydFRpbWUsIHN0b3JhZ2VLZXksIGZyYW1l
SURdKGF1dG8gcmVjb3JkKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAgICAgICBM
T0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBub3QgZm91bmQgaW4gc3RvcmFnZSIp
OwogCiAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQogICAgICAgICAgICAgICAgIG1fc3Rh
dGlzdGljcy0+cmVjb3JkUmV0cmlldmFsRmFpbHVyZShmcmFtZUlELmZpcnN0LCBzdG9yYWdlS2V5
LCByZXF1ZXN0KTsKIAotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7Cisg
ICAgICAgICAgICBjb21wbGV0ZVJldHJpZXZlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBu
dWxscHRyLCBpbmZvKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBA
IC0zNzcsMTIgKzM4MiwxMCBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpS
ZXNvCiAgICAgICAgIH07CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgICAgIGF1dG8gZWxhcHNl
ZCA9IFdhbGxUaW1lOjpub3coKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgYXV0byBlbGFwc2VkID0g
TW9ub3RvbmljVGltZTo6bm93KCkgLSBpbmZvLnN0YXJ0VGltZTsKICAgICAgICAgTE9HKE5ldHdv
cmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgcmV0cmlldmUgY29tcGxldGUgdXNlRGVjaXNpb249
JWQgcHJpb3JpdHk9JWQgdGltZT0lIiBQUklpNjQgIm1zIiwgc3RhdGljX2Nhc3Q8aW50Pih1c2VE
ZWNpc2lvbiksIHN0YXRpY19jYXN0PGludD4ocmVxdWVzdC5wcmlvcml0eSgpKSwgZWxhcHNlZC5t
aWxsaXNlY29uZHNBczxpbnQ2NF90PigpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShz
dGFydFRpbWUpOwogI2VuZGlmCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZW50
cnkpKTsKKyAgICAgICAgY29tcGxldGVSZXRyaWV2ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgV1RGTW92ZShlbnRyeSksIGluZm8pOwogCiAgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCiAg
ICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5KGZyYW1l
SUQuZmlyc3QsIHN0b3JhZ2VLZXksIHJlcXVlc3QsIHVzZURlY2lzaW9uKTsKQEAgLTM5MCw2ICsz
OTMsMTEgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzbwogICAgIH0p
OwogfQogCit2b2lkIENhY2hlOjpjb21wbGV0ZVJldHJpZXZlKFJldHJpZXZlQ29tcGxldGlvbkhh
bmRsZXImJiBoYW5kbGVyLCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGVudHJ5LCBSZXRyaWV2ZUlu
Zm8mIGluZm8pCit7CisgICAgaW5mby5jb21wbGV0aW9uVGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgIGhhbmRsZXIoV1RGTW92ZShlbnRyeSksIGluZm8pOworfQogICAgIAogc3RkOjp1
bmlxdWVfcHRyPEVudHJ5PiBDYWNoZTo6bWFrZUVudHJ5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhKQogewpAQCAt
NjIxLDcgKzYyOSw3IEBAIFN0cmluZyBDYWNoZTo6cmVjb3Jkc1BhdGgoKSBjb25zdAogdm9pZCBD
YWNoZTo6cmV0cmlldmVEYXRhKGNvbnN0IERhdGFLZXkmIGRhdGFLZXksIEZ1bmN0aW9uPHZvaWQg
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgS2V5IGtleSB7IGRhdGFLZXksIG1fc3RvcmFnZS0+c2FsdCgpIH07Ci0gICAgbV9zdG9y
YWdlLT5yZXRyaWV2ZShrZXksIDQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoYXV0byByZWNvcmQpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKGtl
eSwgNCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChh
dXRvIHJlY29yZCwgYXV0bykgewogICAgICAgICBpZiAoIXJlY29yZCB8fCAhcmVjb3JkLT5ib2R5
LnNpemUoKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgMCk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkocmV2aXNpb24gMjMyNzIxKQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDcgKzEwMiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYXBhY2l0eShz
aXplX3QpOwogCiAgICAgLy8gQ29tcGxldGlvbiBoYW5kbGVyIG1heSBnZXQgY2FsbGVkIGJhY2sg
c3luY2hyb25vdXNseSBvbiBmYWlsdXJlLgotICAgIHZvaWQgcmV0cmlldmUoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJhbWVJRCYsIEZ1bmN0aW9uPHZvaWQg
KHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiYmKTsKKyAgICBzdHJ1Y3QgUmV0cmlldmVJbmZvIHsK
KyAgICAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7CisgICAgICAgIE1vbm90b25pY1RpbWUg
Y29tcGxldGlvblRpbWU7CisgICAgICAgIHVuc2lnbmVkIHByaW9yaXR5OworICAgICAgICBTdG9y
YWdlOjpUaW1pbmdzIHN0b3JhZ2VUaW1pbmdzOworICAgICAgICBib29sIHdhc1NwZWN1bGF0aXZl
TG9hZCB7IGZhbHNlIH07CisKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
fTsKKyAgICB1c2luZyBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyID0gRnVuY3Rpb248dm9pZCAo
c3RkOjp1bmlxdWVfcHRyPEVudHJ5PiwgY29uc3QgUmV0cmlldmVJbmZvJik+OworICAgIHZvaWQg
cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgR2xvYmFsRnJh
bWVJRCYsIFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJik7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEVudHJ5PiBzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwg
RnVuY3Rpb248dm9pZCAoTWFwcGVkQm9keSYpPiYmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50
cnk+IHN0b3JlUmVkaXJlY3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVkaXJlY3RSZXF1ZXN0KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IHVwZGF0ZShj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBHbG9iYWxGcmFtZUlEJiwgY29u
c3QgRW50cnkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVz
cG9uc2UpOwpAQCAtMTQwLDYgKzE1MCw4IEBAIHByaXZhdGU6CiAKICAgICBLZXkgbWFrZUNhY2hl
S2V5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogCisgICAgc3RhdGljIHZvaWQg
Y29tcGxldGVSZXRyaWV2ZShSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYsIHN0ZDo6dW5pcXVl
X3B0cjxFbnRyeT4sIFJldHJpZXZlSW5mbyYpOworCiAgICAgU3RyaW5nIGR1bXBGaWxlUGF0aCgp
IGNvbnN0OwogICAgIHZvaWQgZGVsZXRlRHVtcEZpbGUoKTsKIApJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMzI3MjEpCisr
KyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0
aXZlTG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsNyArNDE2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyOjphZGRQcmVsb2FkZQogCiB2b2lkIFNwZWN1bGF0aXZl
TG9hZE1hbmFnZXI6OnJldHJpZXZlRW50cnlGcm9tU3RvcmFnZShjb25zdCBTdWJyZXNvdXJjZUlu
Zm8mIGluZm8sIFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBtX3N0b3JhZ2UucmV0cmlldmUoaW5mby5rZXkoKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGluZm8ucHJpb3JpdHkoKSksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShhdXRvIHJlY29yZCkgeworICAgIG1fc3RvcmFnZS5yZXRyaWV2ZShpbmZv
LmtleSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5mby5wcmlvcml0eSgpKSwgW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gcmVjb3JkLCBhdXRv
IHRpbWluZ3MpIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTcxLDcg
KzU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVMb2FkTWFuYWdlcjo6cmV0cmlldmVTdWIKIHsKICAg
ICBBU1NFUlQoc3RvcmFnZUtleS50eXBlKCkgPT0gIlJlc291cmNlIik7CiAgICAgYXV0byBzdWJy
ZXNvdXJjZXNTdG9yYWdlS2V5ID0gbWFrZVN1YnJlc291cmNlc0tleShzdG9yYWdlS2V5LCBtX3N0
b3JhZ2Uuc2FsdCgpKTsKLSAgICBtX3N0b3JhZ2UucmV0cmlldmUoc3VicmVzb3VyY2VzU3RvcmFn
ZUtleSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRpdW0p
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byBy
ZWNvcmQpIHsKKyAgICBtX3N0b3JhZ2UucmV0cmlldmUoc3VicmVzb3VyY2VzU3RvcmFnZUtleSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRpdW0pLCBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byByZWNvcmQs
IGF1dG8gdGltaW5ncykgewogICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDIzMjcyMSkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDYgKzcxLDcgQEAgcHVibGljOgogICAgIEJsb2JTdG9yYWdlOjpCbG9iIHJlc3Vs
dEJvZHlCbG9iOwogICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBhY3RpdmVDb3VudCB7IDAgfTsK
ICAgICBib29sIGlzQ2FuY2VsZWQgeyBmYWxzZSB9OworICAgIFRpbWluZ3MgdGltaW5nczsKIH07
CiAKIHZvaWQgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6Y2FuY2VsKCkKQEAgLTc5LDggKzgwLDEw
IEBAIHZvaWQgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6Y2FuY2VsKCkKIAogICAgIGlmIChpc0Nh
bmNlbGVkKQogICAgICAgICByZXR1cm47CisgICAgdGltaW5ncy5jb21wbGV0aW9uVGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOworICAgIHRpbWluZ3Mud2FzQ2FuY2VsZWQgPSB0cnVlOwogICAg
IGlzQ2FuY2VsZWQgPSB0cnVlOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAg
IGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIHRpbWluZ3MpOwogfQogCiBib29sIFN0b3JhZ2U6
OlJlYWRPcGVyYXRpb246OmZpbmlzaCgpCkBAIC05NSw3ICs5OCw4IEBAIGJvb2wgU3RvcmFnZTo6
UmVhZE9wZXJhdGlvbjo6ZmluaXNoKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0
UmVjb3JkID0gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUocmVzdWx0UmVjb3JkKSk7CisgICAgdGltaW5ncy5jb21wbGV0aW9uVGltZSA9IE1vbm90
b25pY1RpbWU6Om5vdygpOworICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJl
c3VsdFJlY29yZCksIHRpbWluZ3MpOwogfQogCiBzdHJ1Y3QgU3RvcmFnZTo6V3JpdGVPcGVyYXRp
b24gewpAQCAtNjQ0LDYgKzY0OCwxMyBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJh
dGlvbihzdGQ6CiAgICAgYXV0byYgcmVhZE9wZXJhdGlvbiA9ICpyZWFkT3BlcmF0aW9uUHRyOwog
ICAgIG1fYWN0aXZlUmVhZE9wZXJhdGlvbnMuYWRkKFdURk1vdmUocmVhZE9wZXJhdGlvblB0cikp
OwogCisgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdzLmRpc3BhdGNoVGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOworICAgIHJlYWRPcGVyYXRpb24udGltaW5ncy5zeW5jaHJvbml6YXRpb25JblBy
b2dyZXNzQXREaXNwYXRjaCA9IG1fc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzczsKKyAgICByZWFk
T3BlcmF0aW9uLnRpbWluZ3Muc2hyaW5rSW5Qcm9ncmVzc0F0RGlzcGF0Y2ggPSBtX3Nocmlua0lu
UHJvZ3Jlc3M7CisgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdzLmRpc3BhdGNoQ291bnRBdERpc3Bh
dGNoID0gbV9yZWFkT3BlcmF0aW9uRGlzcGF0Y2hDb3VudDsKKworICAgICsrbV9yZWFkT3BlcmF0
aW9uRGlzcGF0Y2hDb3VudDsKKwogICAgIC8vIEF2b2lkIHJhbmRvbW5lc3MgZHVyaW5nIHRlc3Rp
bmcuCiAgICAgaWYgKG1fbW9kZSAhPSBNb2RlOjpUZXN0aW5nKSB7CiAgICAgICAgIC8vIEkvTyBw
cmVzc3VyZSBtYXkgbWFrZSBkaXNrIG9wZXJhdGlvbnMgc2xvdy4gSWYgdGhleSBzdGFydCB0YWtp
bmcgdmVyeSBsb25nIHRpbWUgd2UgcmF0aGVyIGdvIHRvIG5ldHdvcmsuCkBAIC02NjAsOCArNjcx
LDExIEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKHN0ZDoKICAgICAgICAg
aWYgKHNob3VsZEdldEJvZHlCbG9iKQogICAgICAgICAgICAgKytyZWFkT3BlcmF0aW9uLmFjdGl2
ZUNvdW50OwogCisgICAgICAgIHJlYWRPcGVyYXRpb24udGltaW5ncy5yZWNvcmRJT1N0YXJ0VGlt
ZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworCiAgICAgICAgIGF1dG8gY2hhbm5lbCA9IElPQ2hh
bm5lbDo6b3BlbihyZWNvcmRQYXRoLCBJT0NoYW5uZWw6OlR5cGU6OlJlYWQpOwogICAgICAgICBj
aGFubmVsLT5yZWFkKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksICZpb1F1
ZXVlKCksIFt0aGlzLCAmcmVhZE9wZXJhdGlvbl0oY29uc3QgRGF0YSYgZmlsZURhdGEsIGludCBl
cnJvcikgeworICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi50aW1pbmdzLnJlY29yZElPRW5kVGlt
ZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgICAgICAgICAgaWYgKCFlcnJvcikKICAgICAg
ICAgICAgICAgICByZWFkUmVjb3JkKHJlYWRPcGVyYXRpb24sIGZpbGVEYXRhKTsKICAgICAgICAg
ICAgIGZpbmlzaFJlYWRPcGVyYXRpb24ocmVhZE9wZXJhdGlvbik7CkBAIC02NjksOCArNjgzLDEz
IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKHN0ZDoKIAogICAgICAgICBp
ZiAoc2hvdWxkR2V0Qm9keUJsb2IpIHsKICAgICAgICAgICAgIC8vIFJlYWQgdGhlIGJsb2IgaW4g
cGFyYWxsZWwgd2l0aCB0aGUgcmVjb3JkIHJlYWQuCisgICAgICAgICAgICByZWFkT3BlcmF0aW9u
LnRpbWluZ3MuYmxvYklPU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisKICAgICAg
ICAgICAgIGF1dG8gYmxvYlBhdGggPSBibG9iUGF0aEZvcktleShyZWFkT3BlcmF0aW9uLmtleSk7
CiAgICAgICAgICAgICByZWFkT3BlcmF0aW9uLnJlc3VsdEJvZHlCbG9iID0gbV9ibG9iU3RvcmFn
ZS5nZXQoYmxvYlBhdGgpOworCisgICAgICAgICAgICByZWFkT3BlcmF0aW9uLnRpbWluZ3MuYmxv
YklPRW5kVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworCiAgICAgICAgICAgICBmaW5pc2hS
ZWFkT3BlcmF0aW9uKHJlYWRPcGVyYXRpb24pOwogICAgICAgICB9CiAgICAgfSk7CkBAIC03NDcs
NyArNzY2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmV0cmlldmVGcm9tTWVtbwogICAg
ICAgICBpZiAob3BlcmF0aW9uLT5yZWNvcmQua2V5ID09IGtleSkgewogICAgICAgICAgICAgTE9H
KE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGZvdW5kIHdyaXRlIG9wZXJh
dGlvbiBpbiBwcm9ncmVzcyIpOwogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtyZWNvcmQgPSBvcGVyYXRpb24tPnJlY29yZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHN0ZDo6bWFrZV91bmlxdWU8U3RvcmFnZTo6UmVjb3JkPihyZWNvcmQpKTsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om1ha2VfdW5pcXVlPFN0b3JhZ2U6OlJlY29yZD4o
cmVjb3JkKSwgeyB9KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KQEAgLTgzOSwxMiArODU4LDEyIEBAIHZvaWQgU3RvcmFnZTo6cmV0cmlldmUo
Y29uc3QgS2V5JiBrZXksIHUKICAgICBBU1NFUlQoIWtleS5pc051bGwoKSk7CiAKICAgICBpZiAo
IW1fY2FwYWNpdHkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIHsgfSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoIW1heUNvbnRhaW4oa2V5KSkgewotICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihudWxscHRyKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgeyB9KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODU0LDYgKzg3MywxMCBAQCB2b2lkIFN0b3Jh
Z2U6OnJldHJpZXZlKGNvbnN0IEtleSYga2V5LCB1CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gcmVhZE9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVhZE9wZXJhdGlvbj4oKnRoaXMs
IGtleSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisgICAgcmVhZE9wZXJhdGlvbi0+
dGltaW5ncy5zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICByZWFkT3BlcmF0
aW9uLT50aW1pbmdzLmRpc3BhdGNoQ291bnRBdFN0YXJ0ID0gbV9yZWFkT3BlcmF0aW9uRGlzcGF0
Y2hDb3VudDsKKwogICAgIG1fcGVuZGluZ1JlYWRPcGVyYXRpb25zQnlQcmlvcml0eVtwcmlvcml0
eV0ucHJlcGVuZChXVEZNb3ZlKHJlYWRPcGVyYXRpb24pKTsKICAgICBkaXNwYXRjaFBlbmRpbmdS
ZWFkT3BlcmF0aW9ucygpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgJKHJldmlzaW9uIDIzMjcy
MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUu
aD4KQEAgLTUwLDE5ICs1MSwzNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxTdG9yYWdl
PiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoLCBNb2RlKTsKIAogICAgIHN0cnVjdCBSZWNv
cmQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6CiAgICAg
ICAgIEtleSBrZXk7CiAgICAgICAgIFdhbGxUaW1lIHRpbWVTdGFtcDsKICAgICAgICAgRGF0YSBo
ZWFkZXI7CiAgICAgICAgIERhdGEgYm9keTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxTSEExOjpE
aWdlc3Q+IGJvZHlIYXNoOworCisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IH07CisKKyAgICBzdHJ1Y3QgVGltaW5ncyB7CisgICAgICAgIE1vbm90b25pY1RpbWUgc3RhcnRU
aW1lOworICAgICAgICBNb25vdG9uaWNUaW1lIGRpc3BhdGNoVGltZTsKKyAgICAgICAgTW9ub3Rv
bmljVGltZSByZWNvcmRJT1N0YXJ0VGltZTsKKyAgICAgICAgTW9ub3RvbmljVGltZSByZWNvcmRJ
T0VuZFRpbWU7CisgICAgICAgIE1vbm90b25pY1RpbWUgYmxvYklPU3RhcnRUaW1lOworICAgICAg
ICBNb25vdG9uaWNUaW1lIGJsb2JJT0VuZFRpbWU7CisgICAgICAgIE1vbm90b25pY1RpbWUgY29t
cGxldGlvblRpbWU7CisgICAgICAgIHNpemVfdCBkaXNwYXRjaENvdW50QXRTdGFydCB7IDAgfTsK
KyAgICAgICAgc2l6ZV90IGRpc3BhdGNoQ291bnRBdERpc3BhdGNoIHsgMCB9OworICAgICAgICBi
b29sIHN5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3NBdERpc3BhdGNoIHsgZmFsc2UgfTsKKyAgICAg
ICAgYm9vbCBzaHJpbmtJblByb2dyZXNzQXREaXNwYXRjaCB7IGZhbHNlIH07CisgICAgICAgIGJv
b2wgd2FzQ2FuY2VsZWQgeyBmYWxzZSB9OworCisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIH07CisKICAgICAvLyBUaGlzIG1heSBjYWxsIGNvbXBsZXRpb24gaGFuZGxlciBz
eW5jaHJvbm91c2x5IG9uIGZhaWx1cmUuCi0gICAgdHlwZWRlZiBGdW5jdGlvbjxib29sIChzdGQ6
OnVuaXF1ZV9wdHI8UmVjb3JkPik+IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXI7CisgICAgdXNp
bmcgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciA9IEZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5pcXVl
X3B0cjxSZWNvcmQ+LCBjb25zdCBUaW1pbmdzJik+OwogICAgIHZvaWQgcmV0cmlldmUoY29uc3Qg
S2V5JiwgdW5zaWduZWQgcHJpb3JpdHksIFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJik7CiAK
LSAgICB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQgKGNvbnN0IERhdGEmIG1hcHBlZEJvZHkpPiBNYXBw
ZWRCb2R5SGFuZGxlcjsKKyAgICB1c2luZyBNYXBwZWRCb2R5SGFuZGxlciA9IEZ1bmN0aW9uPHZv
aWQgKGNvbnN0IERhdGEmIG1hcHBlZEJvZHkpPjsKICAgICB2b2lkIHN0b3JlKGNvbnN0IFJlY29y
ZCYsIE1hcHBlZEJvZHlIYW5kbGVyJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IHsg
fSk7CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXkmKTsKQEAgLTE2Myw2ICsxODIsNyBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9zaHJpbmtJblByb2dyZXNzIHsgZmFsc2UgfTsKKyAgICBzaXplX3QgbV9y
ZWFkT3BlcmF0aW9uRGlzcGF0Y2hDb3VudCB7IDAgfTsKIAogICAgIFZlY3RvcjxLZXk6Okhhc2hU
eXBlPiBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uOwogICAg
IFZlY3RvcjxLZXk6Okhhc2hUeXBlPiBtX2Jsb2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNo
cm9uaXphdGlvbjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>