<?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>164282</bug_id>
          
          <creation_ts>2016-11-01 12:05:33 -0700</creation_ts>
          <short_desc>Concurrent GC should be able to run splay in debug mode and earley/raytrace in release mode with no perf regression</short_desc>
          <delta_ts>2016-11-18 14:12:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1246958</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-01 12:05:33 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246959</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-01 12:07:43 -0700</bug_when>
    <thetext>Here&apos;s a sequence of events.  I will mark events that happen with the world stopped with an *.

(0) GC is running, mutator has heap access
(1) op_enter in codeBlock
(2) writeBarrier(codeBlock)
(3) codeBlock.visitChildren
(4) valueProfile(codeBlock)
(5) codeBlock no longer on the stack
(6*) scan stack
(7*) end marking
(8*) run all unconditional finalizers, including codeBlock&apos;s.

In this world, the value profile update will not be handled by the GC because that&apos;s done in visitChildren and visitChildren will not run after the value profiling.

But we already have finalizers that can do this, and the ValueProfile work is finalization (it clears references to things) not marking (it never marks things).

So, to fix this bug, we just need to move the ValueProfile logic into the UnconditionalFinalizer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252210</commentid>
    <comment_count>2</comment_count>
      <attachid>295029</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-16 22:17:48 -0800</bug_when>
    <thetext>Created attachment 295029
possible patch

This also fixes a bug that caused very bad performance on earley and raytrace.

I&apos;m still getting the hang of scheduling a retreating wavefront collector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252782</commentid>
    <comment_count>3</comment_count>
      <attachid>295178</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-18 12:31:14 -0800</bug_when>
    <thetext>Created attachment 295178
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252792</commentid>
    <comment_count>4</comment_count>
      <attachid>295178</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-18 12:59:49 -0800</bug_when>
    <thetext>Comment on attachment 295178
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252794</commentid>
    <comment_count>5</comment_count>
      <attachid>295178</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-11-18 13:01:13 -0800</bug_when>
    <thetext>Comment on attachment 295178
the patch

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

r=me

&gt; PerformanceTests/JetStream/cdjs/benchmark.js:49
&gt; +        print(result.time);

debugging comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252833</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-18 13:53:02 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 295178 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295178&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; PerformanceTests/JetStream/cdjs/benchmark.js:49
&gt; &gt; +        print(result.time);
&gt; 
&gt; debugging comment?

Good catch!  Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252851</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-18 14:12:15 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/208897</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295029</attachid>
            <date>2016-11-16 22:17:48 -0800</date>
            <delta_ts>2016-11-18 12:31:14 -0800</delta_ts>
            <desc>possible patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26525</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAyMDg4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3Myw3ICsxODczLDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlcigwKQogICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6bm93KCkpCiB7Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2Us
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2Fs
bGVkID0gZmFsc2U7CiAKICAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOwogICAgIEFT
U0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKQEAgLTE5MzIsNyArMTkzMiw3IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXIoMCkKICAgICAsIG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6Om5vdygpKQogewotICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0
b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBtX3Zpc2l0V2Vha2x5
SGFzQmVlbkNhbGxlZCA9IGZhbHNlOwogCiAgICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZlcnJlZCgp
KTsKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CkBAIC0yNTA4LDE4ICsy
NTA4LDIwIEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpzcGVjaWFsT1NSRW50cnlCbG8KIAogdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGJv
b2wgc2V0QnlNZSA9ICFtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5jb21wYXJlRXhjaGFuZ2VT
dHJvbmcoZmFsc2UsIHRydWUpOwotICAgIGlmICghc2V0QnlNZSkKKyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
KQogICAgICAgICByZXR1cm47CisgICAgCisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQg
PSB0cnVlOwogCiAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseSgpKSB7CisgICAgaWYg
KHNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
CisgICAgCiAgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0
aW9uYWwgZmluYWxpemVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCiAgICAgLy8gYW5kIGpldHRp
c29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUg
b2YgdGhvc2UgdGhpbmdzCiAgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28g
d2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdApAQCAtMjU0OSwx
MCArMjU1MSwxMCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImCiAg
ICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4KIAogICAg
IG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwotICAgIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKHZpc2l0b3IpOworICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlz
aXRvcik7CiAKICAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92
ZWQgPSBmYWxzZTsKLSAgICBkZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKKyAgICBkZXRlcm1p
bmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCkBAIC0yNTc1LDYgKzI1NzcsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogeworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAv
LyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5hbGl6
ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKICAgICAvLyBhbmQgamV0dGlzb25pbmcuIFRoZSBw
cm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSB0aGlu
Z3MKICAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5v
IG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CkBAIC0yNTkyLDE5ICsyNTk1LDE5IEBA
IHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG8KICAgICAgICAgdmlzaXRv
ci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9m
KEluc3RydWN0aW9uKSAvIHJlZkNvdW50KTsKICAgICB9CiAKLSAgICBzdHJvbmdseVZpc2l0U3Ry
b25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKLSAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMo
dmlzaXRvcik7CisgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMobG9ja2VyLCB2aXNp
dG9yKTsKKyAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB2aXNpdG9yKTsK
IAogICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwotICAgIHByb3Bh
Z2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKGxvY2tl
ciwgdmlzaXRvcik7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkK
K2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2VyKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUNvZGVCbG9ja0xpdmVuZXNz
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9P
bGRBZ2UoKSkKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShsb2NrZXIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklU
IENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KQEAgLTI2NTYsNyAr
MjY1OSw3IEBAIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0wKICAgICB9
CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKK2Jvb2wg
Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYpCiB7CiAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjgzLDcgKzI2ODYsNyBAQCBzdGF0aWMgYm9vbCBzaG91
bGRNYXJrVHJhbnNpdGlvbihERkc6OldlCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAK
LXZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7CiAKQEAgLTI3NjQsNyArMjc2Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhTbG8KICAgICAgICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0g
dHJ1ZTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVOVVNFRF9QQVJB
TSh2aXNpdG9yKTsKICAgICAKQEAgLTI4MTAsOSArMjgxMyw5IEBAIHZvaWQgQ29kZUJsb2NrOjpX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyOjoKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9CiAgICAg
ICAgIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIpKTsKLQotICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRv
cik7Ci0gICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKKyAgICAKKyAg
ICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKE5vTG9ja2luZ05lY2Vzc2FyeSwgdmlz
aXRvcik7CisgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyhOb0xvY2tpbmdOZWNlc3Nh
cnksIHZpc2l0b3IpOwogfQogCiB2b2lkIENvZGVCbG9jazo6Y2xlYXJMTEludEdldEJ5SWRDYWNo
ZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0yOTUxLDcgKzI5NTQsOSBAQCB2b2lkIENv
ZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6CiB7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCiAgICAgICAgIGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3VuY29uZGl0aW9uYWxG
aW5hbGl6ZXIpKTsKLQorICAgIAorICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMo
KTsKKyAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRK
ZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpKSB7CiAgICAgICAgIGNvZGVCbG9jay0+amV0dGlz
b24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKTsKQEAgLTI5NTksNyArMjk2
NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjoKICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0
aXNvbkR1ZVRvT2xkQWdlKCkpIHsKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1
ZVRvT2xkQWdlKE5vTG9ja2luZ05lY2Vzc2FyeSkpIHsKICAgICAgICAgY29kZUJsb2NrLT5qZXR0
aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zMDk5LDcgKzMxMDQsNyBAQCB2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkK
IH0KICNlbmRpZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIC8vIFdl
IHN0cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0
byBkZWFsIHdpdGgKICAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFuIGV4aXQg
dGFyZ2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCkBAIC0zMTE5LDcgKzMxMjQsNyBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhTbG90CiAjZW5kaWYKIH0KIAotdm9pZCBD
b2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZt
X293bmVyRXhlY3V0YWJsZSk7CkBAIC0zMTQxLDEzICszMTQ2LDExIEBAIHZvaWQgQ29kZUJsb2Nr
OjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlm
IChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgdmlzaXRPU1JF
eGl0VGFyZ2V0cyh2aXNpdG9yKTsKKyAgICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0cyhsb2NrZXIs
IHZpc2l0b3IpOwogI2VuZGlmCi0KLSAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogfQogCi12
b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVT
RURfUEFSQU0odmlzaXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwODgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODM2LDcgKzgzNiw3IEBA
IHB1YmxpYzoKICAgICAvLyBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZHMgZmluaXNoIHdo
YXQgdGhleSdyZSBkb2luZy4KICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwog
Ci0gICAgQXRvbWljPGJvb2w+IG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkOworICAgIGJvb2wg
bV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQ7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUg
dG8gaXQuCiAKQEAgLTk0NywxNiArOTQ3LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkdW1wUmFy
ZUNhc2VQcm9maWxlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogbmFtZSwgUmFyZUNhc2VQcm9m
aWxlKiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAgdm9pZCBkdW1wQXJpdGhQcm9m
aWxlKFByaW50U3RyZWFtJiwgQXJpdGhQcm9maWxlKiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGlu
Zyk7CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoKTsKKyAgICBib29sIHNob3VsZFZp
c2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAgICAgYm9vbCBzaG91bGRK
ZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVU
b09sZEFnZSgpOworICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZShjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKTsKICAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhTbG90VmlzaXRvciYpOwor
ICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGRldGVybWluZUxpdmVuZXNzKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAotICAgIHZvaWQgc3Ryb25nbHlW
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5Vmlz
aXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFy
Z2V0cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5j
ZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHN0
cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90
VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyB0aW1lU2luY2VDcmVhdGlvbigpCiAgICAgewpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgaW5saW5l
IFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoVgogCiBpbmxpbmUgdm9pZCBDb2RlQmxv
Y2s6OmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCkKIHsKLSAgICBtX3Zpc2l0V2Vha2x5
SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Cisg
ICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIEV4ZWN1dGFibGVUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAyMDg4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw4ICs5NCw3
IEBAIHZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmUKICAgICB9CiAKICAg
ICAvLyBBbnkgcmVtYWluaW5nIHlvdW5nIENvZGVCbG9ja3MgYXJlIGxpdmUgYW5kIG5lZWQgdG8g
YmUgcHJvbW90ZWQgdG8gdGhlIHNldCBvZiBvbGQgQ29kZUJsb2Nrcy4KLSAgICBpZiAoc2NvcGUg
PT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKQotICAgICAgICBwcm9tb3RlWW91bmdDb2RlQmxvY2tz
KGxvY2tlcik7CisgICAgcHJvbW90ZVlvdW5nQ29kZUJsb2Nrcyhsb2NrZXIpOwogfQogCiBib29s
IENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvbGRlciYsIHZvaWQqIGNhbmRpZGF0
ZUNvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAyMDg4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkgewogICAgICAgICAgICAgZG91YmxlIHRoaXNQYXVzZU1TID0gKE1v
bm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOwot
ICAgICAgICAgICAgZGF0YUxvZyh0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVMo
dGhpc1BhdXNlTVMpLCAiKS4uLl1cbiIpOworICAgICAgICAgICAgZGF0YUxvZygicD0iLCB0aGlz
UGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMpLCAiKS4uLl1cbiIp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsK
QEAgLTU0MiwxOSArNTQyLDM2IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdj
U3RhcnQKICAgICBjb25zdCBTZWNvbmRzIHBlcmlvZCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29u
ZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSk7CiAgICAgCiAgICAgY29uc3QgZG91
YmxlIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcgPSBtX2J5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlOwotICAgIGNvbnN0IGRvdWJsZSBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0
VGhlRW5kID0gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyAqIE9wdGlvbnM6
OmNvbmN1cnJlbnRHQ0hlYWRyb29tUmF0aW8oKTsKKyAgICBjb25zdCBkb3VibGUgYnl0ZXNBbGxv
Y2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCA9CisgICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01h
eEhlYWRyb29tKCkgKgorICAgICAgICBzdGQ6Om1heCgKKyAgICAgICAgICAgIGJ5dGVzQWxsb2Nh
dGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1fbWF4RWRlblNpemUpKTsKICAgICAKLSAgICBhdXRvIHRhcmdldENvbGxlY3RvclV0aWxp
emF0aW9uID0gWyZdICgpIC0+IGRvdWJsZSB7CisgICAgYXV0byB0YXJnZXRNdXRhdG9yVXRpbGl6
YXRpb24gPSBbJl0gKCkgLT4gZG91YmxlIHsKICAgICAgICAgZG91YmxlIGhlYWRyb29tRnVsbG5l
c3MgPQogICAgICAgICAgICAgKG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLSBieXRlc0FsbG9j
YXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKSAvCiAgICAgICAgICAgICAoYnl0ZXNBbGxvY2F0
ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5p
bmcpOwogICAgICAgICAKKyAgICAgICAgLy8gaGVhZHJvb21GdWxsbmVzcyBjYW4gYmUgTmFOIGFu
ZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAgICAgICAgLy8gYnl0ZXNBbGxvY2F0ZWRU
aGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUgdGhhdCBpbiBkZWJ1ZyB0ZXN0
cy4gVGhpcyBjb2RlCisgICAgICAgIC8vIGRlZmVuZHMgYWdhaW5zdCBhbGwgZmxvYXRpbmcgcG9p
bnQgZHJhZ29ucy4KKyAgICAgICAgCiAgICAgICAgIGlmICghKGhlYWRyb29tRnVsbG5lc3MgPj0g
MCkpCiAgICAgICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsKICAgICAgICAgaWYgKCEoaGVh
ZHJvb21GdWxsbmVzcyA8PSAxKSkKICAgICAgICAgICAgIGhlYWRyb29tRnVsbG5lc3MgPSAxOwog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIGhlYWRyb29tRnVsbG5lc3M7CisgICAgICAgIGRvdWJs
ZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxsbmVzczsKKyAgICAgICAgCisg
ICAgICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9uIGludG8gdGhlIHBlcm1pdHRl
ZCB3aW5kb3cuCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiA9CisgICAgICAgICAgICBPcHRp
b25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKworICAgICAgICAgICAgbXV0YXRvclV0
aWxpemF0aW9uICogKAorICAgICAgICAgICAgICAgIE9wdGlvbnM6Om1heGltdW1NdXRhdG9yVXRp
bGl6YXRpb24oKSAtCisgICAgICAgICAgICAgICAgT3B0aW9uczo6bWluaW11bU11dGF0b3JVdGls
aXphdGlvbigpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtdXRhdG9yVXRpbGl6YXRpb247
CiAgICAgfTsKICAgICAKICAgICBhdXRvIGVsYXBzZWRJblBlcmlvZCA9IFsmXSAoTW9ub3Rvbmlj
VGltZSBub3cpIC0+IFNlY29uZHMgewpAQCAtNTY2LDIyICs1ODMsMjYgQEAgdm9pZCBIZWFwOjpt
YXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgIH07CiAgICAgCiAgICAgYXV0byBzaG91
bGRCZVJlc3VtZWQgPSBbJl0gKE1vbm90b25pY1RpbWUgbm93KSAtPiBib29sIHsKLSAgICAgICAg
cmV0dXJuIHBoYXNlKG5vdykgPiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOworICAgICAg
ICByZXR1cm4gcGhhc2Uobm93KSA8PSB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKICAgICB9
OwogICAgIAogICAgIGF1dG8gdGltZVRvUmVzdW1lID0gWyZdIChNb25vdG9uaWNUaW1lIG5vdykg
LT4gTW9ub3RvbmljVGltZSB7CiAgICAgICAgIEFTU0VSVCghc2hvdWxkQmVSZXN1bWVkKG5vdykp
OwotICAgICAgICByZXR1cm4gbm93IC0gZWxhcHNlZEluUGVyaW9kKG5vdykgKyBwZXJpb2QgKiB0
YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOworICAgICAgICByZXR1cm4gbm93IC0gZWxhcHNl
ZEluUGVyaW9kKG5vdykgKyBwZXJpb2Q7CiAgICAgfTsKICAgICAKICAgICBhdXRvIHRpbWVUb1N0
b3AgPSBbJl0gKE1vbm90b25pY1RpbWUgbm93KSAtPiBNb25vdG9uaWNUaW1lIHsKICAgICAgICAg
QVNTRVJUKHNob3VsZEJlUmVzdW1lZChub3cpKTsKLSAgICAgICAgcmV0dXJuIG5vdyAtIGVsYXBz
ZWRJblBlcmlvZChub3cpICsgcGVyaW9kOworICAgICAgICByZXR1cm4gbm93IC0gZWxhcHNlZElu
UGVyaW9kKG5vdykgKyBwZXJpb2QgKiB0YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24oKTsKICAgICB9
OwogICAgIAorICAgIGNvbnN0IGRvdWJsZSBleHRyYVBhdXNlUmF0aW9Hcm93dGhSYXRlID0gMS4x
OworICAgIGRvdWJsZSBleHRyYVBhdXNlUmF0aW8gPSAxOworICAgIAogICAgIGZvciAodW5zaWdu
ZWQgaXRlcmF0aW9uID0gMTsgOyArK2l0ZXJhdGlvbikgewogICAgICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkKICAgICAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9uLCAiICIpOworICAg
ICAgICBNb25vdG9uaWNUaW1lIHRvcE9mTG9vcCA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAg
ICAgICB7CiAgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3Bl
KCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAg
ICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKQEAgLTY0
Miw2ICs2NjMsOSBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAg
ICAgICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9y
KTsKICAgICAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9y
LT5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CiAgICAgICAgIAor
ICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cobV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+Y29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1fbXV0
YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0YXRvck1h
cmtTdGFjaygpLnNpemUoKSwgIiwgYT0iLCBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlIC8gMTAy
NCwgIiBrYiwgbXU9IiwgdGFyZ2V0TXV0YXRvclV0aWxpemF0aW9uKCksICIgIik7CisgICAgICAg
IAogICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJl
IHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQogICAgICAgICAvLyBydW5u
aW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRl
ciogd2UgbWFyayB0aGUgY29kZSBibG9jawogICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9y
IHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhpcyBoYXMgdG8gaGFw
cGVuIGFmdGVyIHRoZQpAQCAtNjYxLDMxICs2ODUsNDMgQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhw
b2ludChkb3VibGUgZ2NTdGFydAogICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpc
biIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAgICAgICAgCi0gICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0YUxvZyhtX2NvbGxlY3RvclNsb3RWaXNpdG9y
LT5jb2xsZWN0b3JNYXJrU3RhY2soKS5zaXplKCksICIrIiwgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+bXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiBtdT0iLCAxIC0gdGFyZ2V0Q29sbGVjdG9y
VXRpbGl6YXRpb24oKSwgIiAiKTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBiZWZvcmVDb252ZXJn
ZW5jZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgICAgICAKICAgICAgICAgewogICAgICAg
ICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0Zp
eHBvaW50IHRyYWNpbmciKTsKICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNl
Q29sbGVjdG9yVGltZXNsaWNpbmcoKSkgewotICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgIGF1dG8gdGltZXNsaWNlID0gWyZdICgpIHsKKyAgICAgICAgICAgICAgICAvLyBC
ZWZvcmUgd2UgeWllbGQgdG8gdGhlIG11dGF0b3IsIHdlIHNob3VsZCBkbyBHQyB3b3JrIHByb3Bv
cnRpb25hbCB0byB0aGUgdGltZSB3ZQorICAgICAgICAgICAgICAgIC8vIHNwZW50IHBhdXNlZC4g
V2UgaW5pdGlhbGl6ZSB0aGUgdGltZXNsaWNlciB0byBzdGFydCBhZnRlciB0aGlzICJtYW5kYXRv
cnkiIHBhdXNlCisgICAgICAgICAgICAgICAgLy8gY29tcGxldGVzLgorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJl
c3VsdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTZWNvbmRzIGV4dHJhUGF1
c2UgPSAoYmVmb3JlQ29udmVyZ2VuY2UgLSB0b3BPZkxvb3ApICogZXh0cmFQYXVzZVJhdGlvOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRyYWluUmVzdWx0ID0gbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+ZHJhaW5JblBhcmFsbGVsKGJlZm9yZUNvbnZlcmdlbmNlICsgZXh0cmFQ
YXVzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgd2hpbGUgKGRyYWluUmVz
dWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgewogICAgICAgICAg
ICAgICAgICAgICBNb25vdG9uaWNUaW1lIG5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAg
ICAgICAgICAgICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5SZXN1
bHQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRCZVJlc3VtZWQobm93KSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNj
b3BlKCp0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWluUmVzdWx0ID0gbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5JblBhcmFsbGVsKHRpbWVUb1N0b3Aobm93KSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgZHJhaW5SZXN1
bHQgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkluUGFyYWxsZWwodGltZVRvUmVzdW1l
KG5vdykpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgPT0gU2xvdFZpc2l0
b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb2xsZWN0b3JU
aW1lc2xpY2luZygpKQorICAgICAgICAgICAgICAgIHRpbWVzbGljZSgpOworICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gRGlzYWJsaW5nIGNvbGxlY3RvciB0aW1lc2xpY2lu
ZyBpcyBtZWFudCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAgICAgICAgICAgICAgICAvLyAt
LWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSB0byBtYXhpbWl6ZSB0aGUgb3Bwb3J0dW5pdHkgZm9y
IGhhcm1mdWwgcmFjZXMuCiAgICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1
bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKICAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5kcmFpbkluUGFyYWxsZWwoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZXh0cmFQYXVzZVJhdGlvICo9IGV4dHJhUGF1c2VSYXRpb0dyb3d0aFJh
dGU7CiAgICAgfQogCiAgICAgewpAQCAtMTE2Niw3ICsxMjAyLDcgQEAgdm9pZCBIZWFwOjpjb2xs
ZWN0SW5UaHJlYWQoKQogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIE1vbm90
b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICAgICAgZG91YmxlIHRo
aXNQYXVzZU1TID0gKGFmdGVyIC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCk7Ci0gICAgICAg
IGRhdGFMb2codGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBtYXhQYXVzZU1TKHRoaXNQYXVzZU1T
KSwgIiksIGN5Y2xlICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgRU5E
XVxuIik7CisgICAgICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMsICIgbXMgKG1heCAiLCBt
YXhQYXVzZU1TKHRoaXNQYXVzZU1TKSwgIiksIGN5Y2xlICIsIChhZnRlciAtIGJlZm9yZSkubWls
bGlzZWNvbmRzKCksICIgbXMgRU5EXVxuIik7CiAgICAgfQogICAgIAogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODgyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw4IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIHdyaXRlQmFycmllcldpdGhvdXRGZW5jZShjb25zdCBK
U0NlbGwqIGZyb20pOwogICAgIAorICAgIHZvaWQgbXV0YXRvckZlbmNlKCk7CisgICAgCiAgICAg
Ly8gVGFrZSB0aGlzIGlmIHlvdSBrbm93IHRoYXQgZnJvbS0+Y2VsbFN0YXRlKCkgPCBiYXJyaWVy
VGhyZXNob2xkLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVCYXJyaWVyU2xvd1Bh
dGgoY29uc3QgSlNDZWxsKiBmcm9tKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyMDg4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDEyIEBA
IGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcldpdGhvdXRGZW4KICAgICAgICAgYWRkVG9S
ZW1lbWJlcmVkU2V0KGZyb20pOwogfQogCitpbmxpbmUgdm9pZCBIZWFwOjptdXRhdG9yRmVuY2Uo
KQoreworICAgIGlmIChpc1g4NigpIHx8IFVOTElLRUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgp
KSkKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9jayhjb25zdCBGdW5j
dG9yJiBmdW5jKQogewogICAgIGZvckVhY2hDb2RlQmxvY2tJbXBsKHNjb3BlZExhbWJkYVJlZjxi
b29sKENvZGVCbG9jayopPihmdW5jKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDg4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDgg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NvbnN0IHNpemVfdCBNYXJrZWRCbG9jazo6YmxvY2tT
aXplOworCiBzdGF0aWMgY29uc3QgYm9vbCBjb21wdXRlQmFsYW5jZSA9IGZhbHNlOwogc3RhdGlj
IHNpemVfdCBiYWxhbmNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMDg4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYw
LDcgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogewogICAgIC8v
IFRoaXMgb2JqZWN0IGlzIHJlYWR5IHRvIGJlIGVzY2FwZWQgc28gdGhlIGNvbmN1cnJlbnQgR0Mg
bWF5IHNlZSBpdCBhdCBhbnkgdGltZS4gV2UgaGF2ZQogICAgIC8vIHRvIG1ha2Ugc3VyZSB0aGF0
IG5vbmUgb2Ygb3VyIHN0b3JlcyBzaW5rIGJlbG93IGhlcmUuCi0gICAgaWYgKGlzWDg2KCkgfHwg
VU5MSUtFTFkodm0uaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSkpCi0gICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgdm0uaGVhcC5tdXRhdG9yRmVuY2UoKTsKICNpZiBFTkFC
TEUoR0NfVkFMSURBVElPTikKICAgICBBU1NFUlQodm0uaXNJbml0aWFsaXppbmdPYmplY3QoKSk7
CiAgICAgdm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoMCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA4
ODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Nyw5ICsxNjcsOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6
cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5lQ2FwYWNpdHkgPSBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKAogICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LAotICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkgewotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgewotICAgICAgICAgICAgICAgIGJ1dHRl
cmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNhcGFj
aXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBbJl0gKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWdu
ZWQgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIGlmIChuZXdPdXRPZkxpbmVD
YXBhY2l0eSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNhcGFj
aXR5LCBuZXdPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKICAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZseSk7
CiAgICAgICAgICAgICB9CkBAIC0yNjYsMTUgKzI2NiwxNCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNhcGFj
aXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgICAgICBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgICAgICB2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAotICAgICAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsKKyAgICAgICAgICAg
IFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCB1bnNpZ25lZCBuZXdPdXRPZkxpbmVDYXBhY2l0eSkgewogICAgICAgICAgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0
eSkgewotICAgICAgICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxp
bmVTdG9yYWdlKHZtLCBvbGRPdXRPZkxpbmVDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3T3V0T2ZMaW5lQ2FwYWNpdHkgIT0g
b2xkT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0g
YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIG5l
d091dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBidXR0ZXJmbHkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZz
ZXQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7CiAgICAgICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAg
ICAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCShyZXZpc2lvbiAyMDg4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsOSBAQCB0eXBlZGVmIGNvbnN0
IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGRvdWJsZSwgbWVkaXVtSGVhcEdyb3d0aEZhY3Rv
ciwgMS41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgbGFyZ2VIZWFwR3Jvd3Ro
RmFjdG9yLCAxLjI0LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUNvbGxlY3Rv
clRpbWVzbGljaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGRvdWJsZSwgY29u
Y3VycmVudEdDSGVhZHJvb21SYXRpbywgMS41LCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGRv
dWJsZSwgbWluaW11bU11dGF0b3JVdGlsaXphdGlvbiwgMCwgTm9ybWFsLCBudWxscHRyKSBcCisg
ICAgdihkb3VibGUsIG1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24sIDEsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoZG91YmxlLCBjb25jdXJyZW50R0NNYXhIZWFkcm9vbSwgMS41LCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgY29uY3VycmVudEdDUGVyaW9kTVMsIDIsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwg
Tm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIwODgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0Myw3ICs5NDMsNyBA
QCBWZWN0b3I8UHJvcGVydHlNYXBFbnRyeT4gU3RydWN0dXJlOjpnZXRQCiAKIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcykKIHsKLSAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9m
ZnNldCkgeyB9KTsKKyAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgdW5z
aWduZWQpIHsgfSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjA4ODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwyNiArMjk0LDExIEBA
IHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5KCkgY29uc3QKICAgICB7
Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgIHVuc2lnbmVkIG91dE9mTGluZVNpemUgPSB0aGlzLT5vdXRPZkxpbmVTaXplKCk7
Ci0KLSAgICAgICAgaWYgKCFvdXRPZkxpbmVTaXplKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgaWYgKG91dE9mTGluZVNpemUgPD0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KQot
ICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eTsKLQotICAgICAgICBB
U1NFUlQob3V0T2ZMaW5lU2l6ZSA+IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7Ci0gICAgICAg
IENPTVBJTEVfQVNTRVJUKG91dE9mTGluZUdyb3d0aEZhY3RvciA9PSAyLCBvdXRPZkxpbmVHcm93
dGhGYWN0b3JfaXNfdHdvKTsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvUG93ZXJPZlR3
byhvdXRPZkxpbmVTaXplKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUNhcGFjaXR5KG1fb2Zm
c2V0KTsKICAgICB9CiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU2l6ZSgpIGNvbnN0CiAgICAgewot
ICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpKTsKLSAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgICAgICAgICAgCi0gICAg
ICAgIHJldHVybiBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCk7
CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVTaXplKG1fb2Zmc2V0KTsKICAgICB9CiAgICAgYm9v
bCBoYXNJbmxpbmVTdG9yYWdlKCkgY29uc3QKICAgICB7CkBAIC02MzYsNiArNjIxLDMzIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihW
ZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRh
YmxlKiYpOwogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRp
b24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CisgICAgCisgICAgdW5zaWduZWQgb3V0
T2ZMaW5lQ2FwYWNpdHkoUHJvcGVydHlPZmZzZXQgbGFzdE9mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIG91dE9mTGluZVNpemUgPSB0aGlzLT5vdXRPZkxpbmVTaXplKGxhc3RP
ZmZzZXQpOworCisgICAgICAgIC8vIFRoaXMgYWxnb3JpdGhtIGNvbXBsZXRlbHkgZGV0ZXJtaW5l
cyB0aGUgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSBncm93dGggYWxnb3JpdGhtLgorICAg
ICAgICAvLyBUaGUgSlNPYmplY3QgY29kZSB3aWxsIG9ubHkgdHJpZ2dlciBhIHJlc2l6ZSBpZiB0
aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBhbGdvcml0aG0KKyAgICAgICAgLy8gY2hhbmdlZCBi
ZXR3ZWVuIHRoZSBuZXcgYW5kIG9sZCBzdHJ1Y3R1cmUuIFNvLCBpdCdzIGltcG9ydGFudCB0byBr
ZWVwIHRoaXMgc2ltcGxlIGJlY2F1c2UKKyAgICAgICAgLy8gaXQncyBvbiBhIGZhc3QgcGF0aC4K
KyAgICAgICAgCisgICAgICAgIGlmICghb3V0T2ZMaW5lU2l6ZSkKKyAgICAgICAgICAgIHJldHVy
biAwOworCisgICAgICAgIGlmIChvdXRPZkxpbmVTaXplIDw9IGluaXRpYWxPdXRPZkxpbmVDYXBh
Y2l0eSkKKyAgICAgICAgICAgIHJldHVybiBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHk7CisKKyAg
ICAgICAgQVNTRVJUKG91dE9mTGluZVNpemUgPiBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwor
ICAgICAgICBDT01QSUxFX0FTU0VSVChvdXRPZkxpbmVHcm93dGhGYWN0b3IgPT0gMiwgb3V0T2ZM
aW5lR3Jvd3RoRmFjdG9yX2lzX3R3byk7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb1Bv
d2VyT2ZUd28ob3V0T2ZMaW5lU2l6ZSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG91dE9m
TGluZVNpemUoUHJvcGVydHlPZmZzZXQgbGFzdE9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKKyAgICAgICAgICAg
IAorICAgICAgICByZXR1cm4gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobGFz
dE9mZnNldCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICBQcm9w
ZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNv
bnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDIwODgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDEx
ICszMDQsMTQgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJgogCiAg
ICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVD
YXBhY2l0eSk7CiAgICAgCi0gICAgdGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3
T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zm
c2V0TWF5Q2hhbmdlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdMYXN0T2Zmc2V0ID0gbV9vZmZz
ZXQ7CisgICAgdGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRy
aWJ1dGVzKSwgbmV3TGFzdE9mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlD
aGFuZ2UpOwogICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBmdW5jKGxvY2tlciwg
bmV3T2Zmc2V0LCBvdXRPZkxpbmVDYXBhY2l0eShuZXdMYXN0T2Zmc2V0KSk7CisgICAgdm0uaGVh
cC5tdXRhdG9yRmVuY2UoKTsKKyAgICBtX29mZnNldCA9IG5ld0xhc3RPZmZzZXQ7CiAKLSAgICBm
dW5jKGxvY2tlciwgbmV3T2Zmc2V0KTsKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgcmV0
dXJuIG5ld09mZnNldDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295178</attachid>
            <date>2016-11-18 12:31:14 -0800</date>
            <delta_ts>2016-11-18 12:59:49 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>39124</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg4ODYpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE2LTExLTE4ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29uY3VycmVudCBHQyBz
aG91bGQgYmUgYWJsZSB0byBydW4gc3BsYXkgaW4gZGVidWcgbW9kZSBhbmQgZWFybGV5L3JheXRy
YWNlIGluIHJlbGVhc2UgbW9kZSB3aXRoIG5vIHBlcmYgcmVncmVzc2lvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MjgyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBDRGpzIGlzIGEgZnVu
IGJlbmNobWFyayBmb3Igc3RyZXNzaW5nIGNvbmN1cnJlbnQgR0NzLCBidXQgdG8gcmVhbGx5IGdp
dmUgdGhlIEdDIGEgZ29vZAorICAgICAgICB3b3Jrb3V0IHlvdSBuZWVkIHRvIGluY3JlYXNlIHRo
ZSBhbW91bnQgb2Ygd29yayB0aGF0IHRoZSB0ZXN0IGRvZXMuIFRoaXMgYWRkcyBhIHNlY29uZAor
ICAgICAgICBjb25maWd1cmF0aW9uIG9mIHRoZSBiZW5jaG1hcmsgdGhhdCBoYXMgbW9yZSBhaXJj
cmFmdC4gSXQgdXNlcyBtdWNoIG1vcmUgbWVtb3J5IGFuZCBjYXVzZXMgdXMKKyAgICAgICAgdG8g
ZG8gbW9yZSBHQ3MgYW5kIHRob3NlIEdDcyB0YWtlIGxvbmdlci4KKworICAgICAgICAqIEpldFN0
cmVhbS9jZGpzL2JlbmNobWFyay5qczoKKyAgICAgICAgKGJlbmNobWFya0ltcGwpOgorICAgICAg
ICAoYmVuY2htYXJrKToKKyAgICAgICAgKiBKZXRTdHJlYW0vY2Rqcy9sYXJnZS5qczogQWRkZWQu
CisKIDIwMTYtMTEtMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByZXZlcnQgdW5pbnRlbmRlZCBjaGFuZ2UuCkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbS9jZGpzL2JlbmNobWFyay5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2JlbmNobWFyay5qcwkocmV2aXNpb24gMjA4ODYwKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9iZW5jaG1hcmsuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLyBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVl
IFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gCiAvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMjMsMTIgKzIzLDEyIEBACiAvLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwogLy8gU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKLWZ1bmN0aW9uIGJlbmNobWFyaygpIHsKLSAgICB2YXIgdmVyYm9z
aXR5ID0gMDsKLSAgICB2YXIgbnVtQWlyY3JhZnQgPSAxMDAwOwotICAgIHZhciBudW1GcmFtZXMg
PSAyMDA7Ci0gICAgdmFyIGV4cGVjdGVkQ29sbGlzaW9ucyA9IDE0NDg0OwotICAgIHZhciBwZXJj
ZW50aWxlID0gOTU7CitmdW5jdGlvbiBiZW5jaG1hcmtJbXBsKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICB2YXIgdmVyYm9zaXR5ID0gY29uZmlndXJhdGlvbi52ZXJib3NpdHk7CisgICAgdmFyIG51bUFp
cmNyYWZ0ID0gY29uZmlndXJhdGlvbi5udW1BaXJjcmFmdDsKKyAgICB2YXIgbnVtRnJhbWVzID0g
Y29uZmlndXJhdGlvbi5udW1GcmFtZXM7CisgICAgdmFyIGV4cGVjdGVkQ29sbGlzaW9ucyA9IGNv
bmZpZ3VyYXRpb24uZXhwZWN0ZWRDb2xsaXNpb25zOworICAgIHZhciBwZXJjZW50aWxlID0gY29u
ZmlndXJhdGlvbi5wZXJjZW50aWxlOwogCiAgICAgdmFyIHNpbXVsYXRvciA9IG5ldyBTaW11bGF0
b3IobnVtQWlyY3JhZnQpOwogICAgIHZhciBkZXRlY3RvciA9IG5ldyBDb2xsaXNpb25EZXRlY3Rv
cigpOwpAQCAtNDYsNiArNDYsNyBAQCBmdW5jdGlvbiBiZW5jaG1hcmsoKSB7CiAgICAgICAgICAg
ICB0aW1lOiBhZnRlciAtIGJlZm9yZSwKICAgICAgICAgICAgIG51bUNvbGxpc2lvbnM6IGNvbGxp
c2lvbnMubGVuZ3RoCiAgICAgICAgIH07CisgICAgICAgIHByaW50KHJlc3VsdC50aW1lKTsKICAg
ICAgICAgaWYgKHZlcmJvc2l0eSA+PSAyKQogICAgICAgICAgICAgcmVzdWx0LmNvbGxpc2lvbnMg
PSBjb2xsaXNpb25zOwogICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTsKQEAgLTc4LDMgKzc5
LDI0IEBAIGZ1bmN0aW9uIGJlbmNobWFyaygpIHsKICAgICAKICAgICByZXR1cm4gYXZlcmFnZUFi
b3ZlUGVyY2VudGlsZSh0aW1lcywgcGVyY2VudGlsZSk7CiB9CisKK2Z1bmN0aW9uIGJlbmNobWFy
aygpIHsKKyAgICByZXR1cm4gYmVuY2htYXJrSW1wbCh7CisgICAgICAgIHZlcmJvc2l0eTogMCwK
KyAgICAgICAgbnVtQWlyY3JhZnQ6IDEwMDAsCisgICAgICAgIG51bUZyYW1lczogMjAwLAorICAg
ICAgICBleHBlY3RlZENvbGxpc2lvbnM6IDE0NDg0LAorICAgICAgICBwZXJjZW50aWxlOiA5NQor
ICAgIH0pOworfQorCitmdW5jdGlvbiBsYXJnZUJlbmNobWFyaygpIHsKKyAgICByZXR1cm4gYmVu
Y2htYXJrSW1wbCh7CisgICAgICAgIHZlcmJvc2l0eTogMCwKKyAgICAgICAgbnVtQWlyY3JhZnQ6
IDIwMDAwLAorICAgICAgICBudW1GcmFtZXM6IDEwMCwKKyAgICAgICAgZXhwZWN0ZWRDb2xsaXNp
b25zOiA1ODI3LAorICAgICAgICBwZXJjZW50aWxlOiA5NQorICAgIH0pOworfQorCkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbS9jZGpzL2xhcmdlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL2NkanMvbGFyZ2UuanMJKG5vbmV4aXN0ZW50KQorKysg
UGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0vY2Rqcy9sYXJnZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMCwgUHVyZHVlIFVuaXZl
cnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgorLy8gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICogTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgUHVyZHVlIFVuaXZlcnNpdHkgbm9yIHRoZQorLy8gICAgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy8vICAg
IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorLy8gCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisvLyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorLy8gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkKKy8vIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisvLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisvLyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKy8vIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworLy8gU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKy8vIFRoaXMgaXMgcnVuIGFzIGEgSlNDIHN0cmVzcyB0ZXN0LiBMZXQgdGhlIGhhcm5lc3Mg
a25vdyB0aGF0IHRoaXMgaXMgYSBzbG93IHRlc3QuCisvL0Agc2xvdyEKKworbG9hZCgiY29uc3Rh
bnRzLmpzIik7Citsb2FkKCJ1dGlsLmpzIik7Citsb2FkKCJyZWRfYmxhY2tfdHJlZS5qcyIpOwor
bG9hZCgiY2FsbF9zaWduLmpzIik7Citsb2FkKCJ2ZWN0b3JfMmQuanMiKTsKK2xvYWQoInZlY3Rv
cl8zZC5qcyIpOworbG9hZCgibW90aW9uLmpzIik7Citsb2FkKCJyZWR1Y2VfY29sbGlzaW9uX3Nl
dC5qcyIpOworbG9hZCgic2ltdWxhdG9yLmpzIik7Citsb2FkKCJjb2xsaXNpb24uanMiKTsKK2xv
YWQoImNvbGxpc2lvbl9kZXRlY3Rvci5qcyIpOworbG9hZCgiYmVuY2htYXJrLmpzIik7CisKK3Zh
ciByZXN1bHQgPSBsYXJnZUJlbmNobWFyaygpOworCitwcmludCgiQXZlcmFnZSB3b3JzdCBjYXNl
OiAiICsgcmVzdWx0ICsgIiBtcy4iKTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDg4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTYtMTEtMTggIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBDb25jdXJyZW50IEdDIHNob3VsZCBiZSBhYmxlIHRv
IHJ1biBzcGxheSBpbiBkZWJ1ZyBtb2RlIGFuZCBlYXJsZXkvcmF5dHJhY2UgaW4gcmVsZWFzZSBt
b2RlIHdpdGggbm8gcGVyZiByZWdyZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoZSB0d28gdGhyZWUgcmVtYWluaW5nIGJ1Z3Mg
d2VyZToKKworICAgICAgICAtIEltcHJvcGVyIG9yZGVyaW5nIGluc2lkZSBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbigpIGFuZCBmcmllbmRzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZQorICAgICAg
ICAgIHRoYXQgdGhlIEdDIGRvZXNuJ3Qgc2VlIHRoZSBzdG9yZSB0byBTdHJ1Y3R1cmU6Om1fb2Zm
c2V0IHVudGlsIHdlJ3ZlIHJlc2l6ZWQgdGhlIGJ1dHRlcmZseS4KKyAgICAgICAgICBUaGF0IHBy
b3ZlZCBhIGJpdCB0cmlja3kuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIG1lYW5zIHRoYXQgd2Ug
Y291bGQgcHJvYmFibHkgcmVtb3ZlIHRoZQorICAgICAgICAgIHJlcXVpcmVtZW50IHRoYXQgdGhl
IEdDIGhvbGRzIHRoZSBTdHJ1Y3R1cmUgbG9jayBpbiBzb21lIGNhc2VzLiBJIGhhdmVuJ3QgcmVt
b3ZlZCB0aGF0IGxvY2sKKyAgICAgICAgICB5ZXQgYmVjYXVzZSBJIHN0aWxsIHRoaW5rIGl0IG1p
Z2h0IHByb3RlY3Qgc29tZSB3ZWlyZCBjYXNlcywgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBjb3N0
IHVzCisgICAgICAgICAgYW55dGhpbmcuCisgICAgICAgIAorICAgICAgICAtIENvZGVCbG9jaydz
IEdDIHN0cmF0ZWd5IG5lZWRlZCB0byBiZSBtYWRlIHRocmVhZC1zYWZlICh2aXNpdFdlYWtseSwg
dmlzaXRDaGlsZHJlbiwgYW5kCisgICAgICAgICAgdGhlaXIgZnJpZW5kcyBub3cgaG9sZCBsb2Nr
cykgYW5kIGluY3JlbWVudGFsLXNhZmUgKHdlIG5lZWQgdG8gdXBkYXRlIHByZWRpY3Rpb25zIGlu
IHRoZQorICAgICAgICAgIGZpbmFsaXplciB0byBtYWtlIHN1cmUgd2UgY2xlYXIgYW55dGhpbmcg
dGhhdCB3YXMgcHV0IGludG8gYSB2YWx1ZSBwcm9maWxlIHRvd2FyZHMgdGhlIGVuZAorICAgICAg
ICAgIG9mIEdDKS4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIEdDIHRpbWVzbGljaW5nIHNjaGVk
dWxlciBuZWVkZWQgdG8gYmUgbWFkZSBhIGJpdCBtb3JlIGFnZ3Jlc3NpdmUgdG8gZGVhbCB3aXRo
CisgICAgICAgICAgZ2VuZXJhdGlvbmFsIHdvcmtsb2FkcyBsaWtlIGVhcmxleSwgcmF5dHJhY2Us
IGFuZCBDRGpzLiBPbmNlIEkgZ290IHRob3NlIGJlbmNobWFya3MgdG8gcnVuLAorICAgICAgICAg
IEkgZm91bmQgdGhhdCB0aGV5IHdvdWxkIGRvIG1hbnkgdXNlbGVzcyBpdGVyYXRpb25zIG9mIEdD
IGJlY2F1c2UgdGhleSB3b3VsZG4ndCBwYXVzZSBsb25nCisgICAgICAgICAgZW5vdWdoIGFmdGVy
IHJlc2Nhbm5pbmcgd2VhayByZWZlcmVuY2VzIGFuZCByb290cy4gSSBhZGRlZCBhIGJ1bmNoIG9m
IGtub2JzIGZvciBmb3JjaW5nIGEKKyAgICAgICAgICBwYXVzZS4gSW4gdGhlIGVuZCwgSSByZWFs
aXplZCB0aGF0IEkgY291bGQgZ2V0IHRoZSBkZXNpcmVkIGVmZmVjdCBieSBwdXR0aW5nIGEgY2Vp
bGluZyBvbgorICAgICAgICAgIG11dGF0b3IgdXRpbGl6YXRpb24uIFdlIHdhbnQgdGhlIEdDIHRv
IGZpbmlzaCBxdWlja2x5IGlmIGl0IGlzIHBvc3NpYmxlIHRvIGRvIHNvLCBldmVuIGlmCisgICAg
ICAgICAgdGhlIGFtb3VudCBvZiBhbGxvY2F0aW9uIHRoYXQgdGhlIG11dGF0b3IgaGFkIGRvbmUg
aXMgbG93LiBIYXZpbmcgYSB1dGlsaXphdGlvbiBjZWlsaW5nCisgICAgICAgICAgc2VlbXMgdG8g
YWNjb21wbGlzaCB0aGlzIGZvciBiZW5jaG1hcmtzIHdpdGggdHJpdmlhbCBoZWFwcyAoZWFybGV5
IGFuZCByYXl0cmFjZSkgYXMgd2VsbCBhcworICAgICAgICAgIGh1Z2UgaGVhcHMgKGxpa2UgQ0Rq
cyBpbiBpdHMgImxhcmdlIiBjb25maWd1cmF0aW9uKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cHJlc2VydmVzIHNwbGF5IHBlcmZvcm1hbmNlLCBtYWtlcyB0aGUgY29uY3VycmVudCBHQyBtb3Jl
IHN0YWJsZSwgYW5kIG1ha2VzIHRoZQorICAgICAgICBjb25jdXJyZW50IEdDIG5vdCBhIHBlcmYg
cmVncmVzc2lvbiBvbiBlYXJsZXkgb3IgcmF5dHJhY2UuIEl0IHNlZW1zIHRvIGdpdmUgdXMgZ3Jl
YXQgQ0RqcworICAgICAgICBwZXJmb3JtYW5jZSBhcyB3ZWxsLCBidXQgdGhpcyBpcyBzdGlsbCBo
YXJkIHRvIHRlbGwgYmVjYXVzZSB3ZSBjcmFzaCBhIGxvdCBpbiB0aGF0IGJlbmNobWFyay4KKwor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdFdlYWtseSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVy
Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpVbmNvbmRp
dGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWtseUhhc0Jl
ZW5DYWxsZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0LmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6UmVzdW1lVGhlV29ybGRTY29w
ZTo6UmVzdW1lVGhlV29ybGRTY29wZSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtUb0ZpeHBv
aW50KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdElu
VGhyZWFkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Om11dGF0b3JGZW5jZSk6CisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorCiAyMDE2LTExLTE3ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgU3BlY3VsYXRpdmVseSBkaXNhYmxlIGVh
Z2VyIG9iamVjdCB6ZXJvLWZpbGwgb24gbm90LXg4NiB0byBsZXQgdGhlIGJvdHMgZGVjaWRlIGlm
IHRoYXQncyBhIHByb2JsZW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDg4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3Myw3ICsxODcz
LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpj
aHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkpCiB7Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5D
YWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIG1fdmlz
aXRXZWFrbHlIYXNCZWVuQ2FsbGVkID0gZmFsc2U7CiAKICAgICBBU1NFUlQoaGVhcCgpLT5pc0Rl
ZmVycmVkKCkpOwogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKQEAgLTE5
MzIsNyArMTkzMiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiAK
ICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKICAgICAsIG1fY3JlYXRpb25U
aW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpKQogewotICAgIG1fdmlzaXRXZWFr
bHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsK
KyAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCA9IGZhbHNlOwogCiAgICAgQVNTRVJUKGhl
YXAoKS0+aXNEZWZlcnJlZCgpKTsKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwo
KSk7CkBAIC0yNTA4LDE4ICsyNTA4LDIwIEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpzcGVjaWFs
T1NSRW50cnlCbG8KIAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewotICAgIGJvb2wgc2V0QnlNZSA9ICFtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxl
ZC5jb21wYXJlRXhjaGFuZ2VTdHJvbmcoZmFsc2UsIHRydWUpOwotICAgIGlmICghc2V0QnlNZSkK
KyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG1fdmlzaXRX
ZWFrbHlIYXNCZWVuQ2FsbGVkKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgbV92aXNpdFdl
YWtseUhhc0JlZW5DYWxsZWQgPSB0cnVlOwogCiAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHRoaXMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc2hvdWxkVmlzaXRTdHJv
bmdseSgpKSB7CisgICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkobG9ja2VyKSkgewogICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotCisgICAgCiAgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhh
dCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmluYWxpemVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5n
CiAgICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0
byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzCiAgICAgLy8gaXMgcHJvYmFibHkgcXVp
dGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBy
dW5zLCBpdApAQCAtMjU0OSwxMCArMjU1MSwxMCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFr
bHkoU2xvdFZpc2l0b3ImCiAgICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1Jl
ZmVyZW5jZXMoKS4KIAogICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNl
OwotICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworICAgIHByb3BhZ2F0ZVRyYW5z
aXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiAKICAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5s
aXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSBmYWxzZTsKLSAgICBkZXRlcm1pbmVMaXZlbmVzcyh2aXNp
dG9yKTsKKyAgICBkZXRlcm1pbmVMaXZlbmVzcyhsb2NrZXIsIHZpc2l0b3IpOwogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogfQogCkBAIC0yNTc1LDYgKzI1NzcsNyBAQCB2b2lkIENvZGVCbG9j
azo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKICAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5j
b25kaXRpb25hbCBmaW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKICAgICAvLyBhbmQg
amV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0
IG9uZSBvZiB0aG9zZSB0aGluZ3MKICAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAx
LiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CkBAIC0y
NTkyLDE5ICsyNTk1LDE5IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG8KICAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9pbnN0cnVjdGlv
bnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIHJlZkNvdW50KTsKICAgICB9CiAKLSAg
ICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKLSAgICBzdHJvbmdseVZp
c2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMobG9ja2VyLCB2aXNpdG9yKTsKKyAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMo
bG9ja2VyLCB2aXNpdG9yKTsKIAogICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9
IGZhbHNlOwotICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworICAgIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKGxvY2tlciwgdmlzaXRvcik7CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91
bGRWaXNpdFN0cm9uZ2x5KCkKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogewogICAgIGlmIChPcHRpb25zOjpmb3Jj
ZUNvZGVCbG9ja0xpdmVuZXNzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNo
b3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09s
ZEFnZShsb2NrZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJbnRlcnByZXRl
ciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVk
IHdoZW4KQEAgLTI2NTYsNyArMjY1OSw3IEBAIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIHRpbWVUb0wKICAgICB9CiB9CiAKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1
ZVRvT2xkQWdlKCkKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjgzLDcgKzI2ODYsNyBA
QCBzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlCiB9CiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCiAKLXZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAKQEAgLTI3NjQsNyArMjc2Nyw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG8KICAgICAgICAgbV9hbGxUcmFuc2l0aW9u
c0hhdmVCZWVuTWFya2VkID0gdHJ1ZTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKICAgICAKQEAgLTI4MTAsOSArMjgxMyw5IEBA
IHZvaWQgQ29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjoKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9CiAgICAgICAgIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKICAgICAgICAg
ICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpKTsKLQotICAgIGNvZGVCbG9jay0+cHJvcGFnYXRl
VHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyh2
aXNpdG9yKTsKKyAgICAKKyAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRpb25zKE5vTG9j
a2luZ05lY2Vzc2FyeSwgdmlzaXRvcik7CisgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVz
cyhOb0xvY2tpbmdOZWNlc3NhcnksIHZpc2l0b3IpOwogfQogCiB2b2lkIENvZGVCbG9jazo6Y2xl
YXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCkBAIC0yOTUxLDcg
KzI5NTQsOSBAQCB2b2lkIENvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6CiB7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCiAgICAg
ICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpKTsKLQorICAgIAorICAgIGNvZGVCbG9jay0+dXBk
YXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpKSB7CiAgICAgICAg
IGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNl
KTsKQEAgLTI5NTksNyArMjk2NCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmlu
YWxpemVyOjoKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSAgICBpZiAoY29k
ZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkpIHsKKyAgICBpZiAoY29kZUJsb2Nr
LT5zaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKE5vTG9ja2luZ05lY2Vzc2FyeSkpIHsKICAgICAg
ICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDk5LDcgKzMxMDQsNyBAQCB2b2lkIENvZGVCbG9j
azo6cmVzZXRKSVREYXRhKCkKIH0KICNlbmRpZgogCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JF
eGl0VGFyZ2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdE9T
UkV4aXRUYXJnZXRzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1
c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGgKICAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBn
ZW5lcmF0aW5nIGFuIGV4aXQgdGFyZ2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCkBAIC0zMTE5
LDcgKzMxMjQsNyBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhTbG90CiAj
ZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJv
bmdSZWZlcmVuY2VzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3QpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0YWJsZSk7CkBAIC0zMTQxLDEzICszMTQ2LDEx
IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKIAogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
LSAgICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0cyh2aXNpdG9yKTsKKyAgICAgICAgdmlzaXRPU1JF
eGl0VGFyZ2V0cyhsb2NrZXIsIHZpc2l0b3IpOwogI2VuZGlmCi0KLSAgICB1cGRhdGVBbGxQcmVk
aWN0aW9ucygpOwogfQogCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRX
ZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwODg2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtODM2LDcgKzgzNiw3IEBAIHB1YmxpYzoKICAgICAvLyBjb25jdXJyZW50IGNvbXBpbGF0aW9u
IHRocmVhZHMgZmluaXNoIHdoYXQgdGhleSdyZSBkb2luZy4KICAgICBtdXRhYmxlIENvbmN1cnJl
bnRKU0xvY2sgbV9sb2NrOwogCi0gICAgQXRvbWljPGJvb2w+IG1fdmlzaXRXZWFrbHlIYXNCZWVu
Q2FsbGVkOworICAgIGJvb2wgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQ7CiAKICAgICBib29s
IG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBK
SVQgd2FudHMgdG8gc3RvcmUgdG8gaXQuCiAKQEAgLTk0NywxNiArOTQ3LDE2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkdW1wUmFyZUNhc2VQcm9maWxlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
bmFtZSwgUmFyZUNhc2VQcm9maWxlKiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAg
dm9pZCBkdW1wQXJpdGhQcm9maWxlKFByaW50U3RyZWFtJiwgQXJpdGhQcm9maWxlKiwgYm9vbCYg
aGFzUHJpbnRlZFByb2ZpbGluZyk7CiAKLSAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoKTsK
KyAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7
CiAgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpOwotICAgIGJvb2wg
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpOworICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVU
b09sZEFnZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKICAgICAKLSAgICB2b2lkIHByb3Bh
Z2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVz
cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGRldGVybWluZUxpdmVu
ZXNzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAot
ICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwotICAgIHZv
aWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgc3Ryb25nbHlW
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0
b3ImKTsKKyAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0
cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lU2luY2VDcmVhdGlvbigpCiAgICAgewpAQCAtMTA3OSw3
ICsxMDc5LDcgQEAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoVgogCiBp
bmxpbmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCkKIHsK
LSAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCk7CisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEV4ZWN1dGFibGVUeXBlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAyMDg4NjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw4ICs5NCw3IEBAIHZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFu
ZFVucmUKICAgICB9CiAKICAgICAvLyBBbnkgcmVtYWluaW5nIHlvdW5nIENvZGVCbG9ja3MgYXJl
IGxpdmUgYW5kIG5lZWQgdG8gYmUgcHJvbW90ZWQgdG8gdGhlIHNldCBvZiBvbGQgQ29kZUJsb2Nr
cy4KLSAgICBpZiAoc2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKQotICAgICAgICBwcm9t
b3RlWW91bmdDb2RlQmxvY2tzKGxvY2tlcik7CisgICAgcHJvbW90ZVlvdW5nQ29kZUJsb2Nrcyhs
b2NrZXIpOwogfQogCiBib29sIENvZGVCbG9ja1NldDo6Y29udGFpbnMoY29uc3QgTG9ja0hvbGRl
ciYsIHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAyMDg4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewogICAgICAgICAgICAgZG91Ymxl
IHRoaXNQYXVzZU1TID0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUp
Lm1pbGxpc2Vjb25kcygpOwotICAgICAgICAgICAgZGF0YUxvZyh0aGlzUGF1c2VNUywgIiBtcyAo
bWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMpLCAiKS4uLl1cbiIpOworICAgICAgICAgICAg
ZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1Bh
dXNlTVMpLCAiKS4uLl1cbiIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2hlYXAu
cmVzdW1lVGhlV29ybGQoKTsKQEAgLTU0MiwxOSArNTQyLDQwIEBAIHZvaWQgSGVhcDo6bWFya1Rv
Rml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICBjb25zdCBTZWNvbmRzIHBlcmlvZCA9IFNlY29u
ZHM6OmZyb21NaWxsaXNlY29uZHMoT3B0aW9uczo6Y29uY3VycmVudEdDUGVyaW9kTVMoKSk7CiAg
ICAgCiAgICAgY29uc3QgZG91YmxlIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5p
bmcgPSBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgIGNvbnN0IGRvdWJsZSBieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZUF0VGhlRW5kID0gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJl
Z2lubmluZyAqIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ0hlYWRyb29tUmF0aW8oKTsKKyAgICBjb25z
dCBkb3VibGUgYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCA9CisgICAgICAgIE9wdGlv
bnM6OmNvbmN1cnJlbnRHQ01heEhlYWRyb29tKCkgKgorICAgICAgICBzdGQ6Om1heCgKKyAgICAg
ICAgICAgIGJ5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fbWF4RWRlblNpemUpKTsKICAgICAKLSAgICBhdXRvIHRh
cmdldENvbGxlY3RvclV0aWxpemF0aW9uID0gWyZdICgpIC0+IGRvdWJsZSB7CisgICAgYXV0byB0
YXJnZXRNdXRhdG9yVXRpbGl6YXRpb24gPSBbJl0gKCkgLT4gZG91YmxlIHsKICAgICAgICAgZG91
YmxlIGhlYWRyb29tRnVsbG5lc3MgPQogICAgICAgICAgICAgKG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGUgLSBieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nKSAvCiAgICAgICAg
ICAgICAoYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIGJ5dGVzQWxsb2NhdGVkVGhp
c0N5Y2xlQXRUaGVCZWdpbm5pbmcpOwogICAgICAgICAKKyAgICAgICAgLy8gaGVhZHJvb21GdWxs
bmVzcyBjYW4gYmUgTmFOIGFuZCBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MgaWYKKyAgICAgICAg
Ly8gYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUJlZ2lubmluZyBpcyB6ZXJvLiBXZSBzZWUg
dGhhdCBpbiBkZWJ1ZyB0ZXN0cy4gVGhpcyBjb2RlCisgICAgICAgIC8vIGRlZmVuZHMgYWdhaW5z
dCBhbGwgZmxvYXRpbmcgcG9pbnQgZHJhZ29ucy4KKyAgICAgICAgCiAgICAgICAgIGlmICghKGhl
YWRyb29tRnVsbG5lc3MgPj0gMCkpCiAgICAgICAgICAgICBoZWFkcm9vbUZ1bGxuZXNzID0gMDsK
ICAgICAgICAgaWYgKCEoaGVhZHJvb21GdWxsbmVzcyA8PSAxKSkKICAgICAgICAgICAgIGhlYWRy
b29tRnVsbG5lc3MgPSAxOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGhlYWRyb29tRnVsbG5l
c3M7CisgICAgICAgIGRvdWJsZSBtdXRhdG9yVXRpbGl6YXRpb24gPSAxIC0gaGVhZHJvb21GdWxs
bmVzczsKKyAgICAgICAgCisgICAgICAgIC8vIFNjYWxlIHRoZSBtdXRhdG9yIHV0aWxpemF0aW9u
IGludG8gdGhlIHBlcm1pdHRlZCB3aW5kb3cuCisgICAgICAgIG11dGF0b3JVdGlsaXphdGlvbiA9
CisgICAgICAgICAgICBPcHRpb25zOjptaW5pbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgKworICAg
ICAgICAgICAgbXV0YXRvclV0aWxpemF0aW9uICogKAorICAgICAgICAgICAgICAgIE9wdGlvbnM6
Om1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24oKSAtCisgICAgICAgICAgICAgICAgT3B0aW9uczo6
bWluaW11bU11dGF0b3JVdGlsaXphdGlvbigpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBt
dXRhdG9yVXRpbGl6YXRpb247CisgICAgfTsKKyAgICAKKyAgICBhdXRvIHRhcmdldENvbGxlY3Rv
clV0aWxpemF0aW9uID0gWyZdICgpIC0+IGRvdWJsZSB7CisgICAgICAgIHJldHVybiAxIC0gdGFy
Z2V0TXV0YXRvclV0aWxpemF0aW9uKCk7CiAgICAgfTsKICAgICAKICAgICBhdXRvIGVsYXBzZWRJ
blBlcmlvZCA9IFsmXSAoTW9ub3RvbmljVGltZSBub3cpIC0+IFNlY29uZHMgewpAQCAtNTY2LDIy
ICs1ODcsNDEgQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAg
IH07CiAgICAgCiAgICAgYXV0byBzaG91bGRCZVJlc3VtZWQgPSBbJl0gKE1vbm90b25pY1RpbWUg
bm93KSAtPiBib29sIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3Vt
ZUZpcnN0KCkpCisgICAgICAgICAgICByZXR1cm4gcGhhc2Uobm93KSA8PSB0YXJnZXRNdXRhdG9y
VXRpbGl6YXRpb24oKTsKICAgICAgICAgcmV0dXJuIHBoYXNlKG5vdykgPiB0YXJnZXRDb2xsZWN0
b3JVdGlsaXphdGlvbigpOwogICAgIH07CiAgICAgCiAgICAgYXV0byB0aW1lVG9SZXN1bWUgPSBb
Jl0gKE1vbm90b25pY1RpbWUgbm93KSAtPiBNb25vdG9uaWNUaW1lIHsKICAgICAgICAgQVNTRVJU
KCFzaG91bGRCZVJlc3VtZWQobm93KSk7CisgICAgICAgIGlmIChPcHRpb25zOjpjb2xsZWN0b3JT
aG91bGRSZXN1bWVGaXJzdCgpKQorICAgICAgICAgICAgcmV0dXJuIG5vdyAtIGVsYXBzZWRJblBl
cmlvZChub3cpICsgcGVyaW9kOwogICAgICAgICByZXR1cm4gbm93IC0gZWxhcHNlZEluUGVyaW9k
KG5vdykgKyBwZXJpb2QgKiB0YXJnZXRDb2xsZWN0b3JVdGlsaXphdGlvbigpOwogICAgIH07CiAg
ICAgCiAgICAgYXV0byB0aW1lVG9TdG9wID0gWyZdIChNb25vdG9uaWNUaW1lIG5vdykgLT4gTW9u
b3RvbmljVGltZSB7CiAgICAgICAgIEFTU0VSVChzaG91bGRCZVJlc3VtZWQobm93KSk7Ci0gICAg
ICAgIHJldHVybiBub3cgLSBlbGFwc2VkSW5QZXJpb2Qobm93KSArIHBlcmlvZDsKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmNvbGxlY3RvclNob3VsZFJlc3VtZUZpcnN0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gbm93IC0gZWxhcHNlZEluUGVyaW9kKG5vdykgKyBwZXJpb2QgKiB0YXJnZXRNdXRhdG9y
VXRpbGl6YXRpb24oKTsKKyAgICAgICAgcmV0dXJuIG5vdyAtICAtIGVsYXBzZWRJblBlcmlvZChu
b3cpICsgcGVyaW9kOwogICAgIH07CiAgICAgCisgICAgLy8gQWRqdXN0IHRoZSB0YXJnZXQgZXh0
cmEgcGF1c2UgcmF0aW8gYXMgbmVjZXNzYXJ5LgorICAgIGRvdWJsZSByYXRlT2ZDb2xsZWN0aW9u
ID0KKyAgICAgICAgKG1fbGFzdEdDRW5kVGltZSAtIG1fbGFzdEdDU3RhcnRUaW1lKSAvCisgICAg
ICAgIChtX2N1cnJlbnRHQ1N0YXJ0VGltZSAtIG1fbGFzdEdDU3RhcnRUaW1lKTsKKyAgICAKKyAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgZGF0YUxvZygiY3I9IiwgcmF0ZU9mQ29s
bGVjdGlvbiwgIiAiKTsKKyAgICAKKyAgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGlmIHRoaXMgaXMg
dXNlZnVsIG9yIGdldCByaWQgb2YgaXQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDk0MAorICAgIGRvdWJsZSBleHRyYVBhdXNlUmF0aW8gPSBPcHRp
b25zOjppbml0aWFsRXh0cmFQYXVzZVJhdGlvKCk7CisgICAgCiAgICAgZm9yICh1bnNpZ25lZCBp
dGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKQogICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIgIik7CisgICAgICAg
IE1vbm90b25pY1RpbWUgdG9wT2ZMb29wID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgICAg
IHsKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAgICAgICAg
ICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwpAQCAtNjQyLDYg
KzY4Miw5IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAg
ICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwog
ICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmlz
RW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKICAgICAgICAgCisgICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZyhtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5jb2xsZWN0b3JNYXJrU3RhY2soKS5zaXplKCksICIrIiwgbV9tdXRhdG9y
TWFya1N0YWNrLT5zaXplKCkgKyBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0
YWNrKCkuc2l6ZSgpLCAiLCBhPSIsIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgLyAxMDI0LCAi
IGtiLCBiPSIsIG1fYmFycmllcnNFeGVjdXRlZCwgIiwgbXU9IiwgdGFyZ2V0TXV0YXRvclV0aWxp
emF0aW9uKCksICIgIik7CisgICAgICAgIAogICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMg
dG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0
aGF0IGFyZQogICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0
byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jawogICAgICAg
ICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmll
ci4gQWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQpAQCAtNjYxLDIzICs3MDQsMzAg
QEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCiAgICAgICAgICAgICBkYXRh
TG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICAgICAgZGF0YUxv
ZyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jb2xsZWN0b3JNYXJrU3RhY2soKS5zaXplKCksICIr
IiwgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiBt
dT0iLCAxIC0gdGFyZ2V0Q29sbGVjdG9yVXRpbGl6YXRpb24oKSwgIiAiKTsKKyAgICAgICAgTW9u
b3RvbmljVGltZSBiZWZvcmVDb252ZXJnZW5jZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAg
ICAgICAKICAgICAgICAgewogICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKICAgICAgICAgICAgIFBh
cmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VDb2xsZWN0b3JUaW1lc2xpY2lu
ZygpKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIC8vIEJl
Zm9yZSB3ZSB5aWVsZCB0byB0aGUgbXV0YXRvciwgd2Ugc2hvdWxkIGRvIEdDIHdvcmsgcHJvcG9y
dGlvbmFsIHRvIHRoZSB0aW1lIHdlCisgICAgICAgICAgICAgICAgLy8gc3BlbnQgcGF1c2VkLiBX
ZSBpbml0aWFsaXplIHRoZSB0aW1lc2xpY2VyIHRvIHN0YXJ0IGFmdGVyIHRoaXMgIm1hbmRhdG9y
eSIgcGF1c2UKKyAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZXMuCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVz
dWx0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFNlY29uZHMgZXh0cmFQYXVz
ZSA9IChiZWZvcmVDb252ZXJnZW5jZSAtIHRvcE9mTG9vcCkgKiBleHRyYVBhdXNlUmF0aW87Cisg
ICAgICAgICAgICAgICAgaW5pdGlhbFRpbWUgPSBiZWZvcmVDb252ZXJnZW5jZSArIGV4dHJhUGF1
c2U7CisgICAgICAgICAgICAgICAgZHJhaW5SZXN1bHQgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9y
LT5kcmFpbkluUGFyYWxsZWwoaW5pdGlhbFRpbWUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHdoaWxlIChkcmFpblJlc3VsdCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5S
ZXN1bHQ6OkRvbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTW9ub3RvbmljVGltZSBub3cgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0OwogICAgICAgICAgICAgICAgICAgICBpZiAoc2hv
dWxkQmVSZXN1bWVkKG5vdykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdv
cmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkcmFpblJlc3VsdCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluSW5QYXJhbGxl
bCh0aW1lVG9TdG9wKG5vdykpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRyYWluUmVzdWx0ID0gbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJh
aW5JblBhcmFsbGVsKHRpbWVUb1Jlc3VtZShub3cpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGRyYWluUmVzdWx0ID09IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gRGlzYWJsaW5nIGNvbGxlY3RvciB0aW1l
c2xpY2luZyBpcyBtZWFudCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKQEAgLTY4Niw2ICs3MzYs
OCBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgICAgICAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5JblBhcmFsbGVsKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4dHJhUGF1c2VSYXRpbyAqPSBP
cHRpb25zOjpleHRyYVBhdXNlUmF0aW9JdGVyYXRpb25Hcm93dGhSYXRlKCk7CiAgICAgfQogCiAg
ICAgewpAQCAtNzMwLDYgKzc4Miw3IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICBt
X29iamVjdFNwYWNlLmJlZ2luTWFya2luZygpOwogICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2Vk
ID0gdHJ1ZTsKICAgICBtX2JhcnJpZXJUaHJlc2hvbGQgPSB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQ7
CisgICAgbV9iYXJyaWVyc0V4ZWN1dGVkID0gMDsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdENvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKQEAgLTk4Niw2ICsxMDM5LDcg
QEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VS
VChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXND
b21waWxhdGlvblRocmVhZCgpKTsKKyAgICBtX2JhcnJpZXJzRXhlY3V0ZWQrKzsKICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CiAgICAgICAgIC8vIER1cmluZyBh
IGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFk
IHN1cml2aXZlZCBwYXN0CiAgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMg
YSBzdG9yZSB0byBhbiB1bm1hcmtlZCBibGFjayBvYmplY3QuIElmIHRoZSBvYmplY3QgZ2V0cwpA
QCAtMTA4Miw2ICsxMTM2LDggQEAgYm9vbCBIZWFwOjpzaG91bGRDb2xsZWN0SW5UaHJlYWQoY29u
c3QgTAogCiB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiB7CisgICAgbV9jdXJyZW50R0NT
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAKICAgICBPcHRpb25hbDxDb2xs
ZWN0aW9uU2NvcGU+IHNjb3BlOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
dGhyZWFkTG9jayk7CkBAIC0xMTY2LDcgKzEyMjIsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRo
cmVhZCgpCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKICAgICAgICAgTW9ub3RvbmljVGlt
ZSBhZnRlciA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgICAgICBkb3VibGUgdGhpc1BhdXNl
TVMgPSAoYWZ0ZXIgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsKLSAgICAgICAgZGF0YUxv
Zyh0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNlTVModGhpc1BhdXNlTVMpLCAiKSwg
Y3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtcyBFTkRdXG4iKTsK
KyAgICAgICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIiBtcyAobWF4ICIsIG1heFBhdXNl
TVModGhpc1BhdXNlTVMpLCAiKSwgY3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29u
ZHMoKSwgIiBtcyBFTkRdXG4iKTsKICAgICB9CiAgICAgCiAgICAgewpAQCAtMTE3OSw2ICsxMjM1
LDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogCiAgICAgc2V0TmVlZEZpbmFsaXpl
KCk7CiAgICAgcmVzdW1lVGhlV29ybGQoKTsKKyAgICAKKyAgICBtX2xhc3RHQ1N0YXJ0VGltZSA9
IG1fY3VycmVudEdDU3RhcnRUaW1lOworICAgIG1fbGFzdEdDRW5kVGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOwogfQogCiB2b2lkIEhlYXA6OnN0b3BUaGVXb3JsZCgpCkBAIC0xNjk4LDcgKzE3
NTcsNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKQogICAgIG1fYnl0ZXNB
bGxvY2F0ZWRUaGlzQ3ljbGUgPSAwOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAg
ICAgIGRhdGFMb2coY3VycmVudEhlYXBTaXplIC8gMTAyNCwgIiBrYiwgIik7CisgICAgICAgIGRh
dGFMb2coIj0+ICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICIga2IsICIpOwogfQogCiB2b2lk
IEhlYXA6OmRpZEZpbmlzaENvbGxlY3Rpb24oZG91YmxlIGdjU3RhcnRUaW1lKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA4ODYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgd3JpdGVCYXJyaWVyV2l0aG91dEZlbmNlKGNvbnN0IEpT
Q2VsbCogZnJvbSk7CiAgICAgCisgICAgdm9pZCBtdXRhdG9yRmVuY2UoKTsKKyAgICAKICAgICAv
LyBUYWtlIHRoaXMgaWYgeW91IGtub3cgdGhhdCBmcm9tLT5jZWxsU3RhdGUoKSA8IGJhcnJpZXJU
aHJlc2hvbGQuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXJTbG93UGF0
aChjb25zdCBKU0NlbGwqIGZyb20pOwogCkBAIC02MDUsNiArNjA3LDEyIEBAIHByaXZhdGU6CiAg
ICAgQm94PExvY2s+IG1fdGhyZWFkTG9jazsKICAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29u
ZGl0aW9uPiBtX3RocmVhZENvbmRpdGlvbjsgLy8gVGhlIG11dGF0b3IgbXVzdCBub3Qgd2FpdCBv
biB0aGlzLiBJdCB3b3VsZCBjYXVzZSBhIGRlYWRsb2NrLgogICAgIFJlZlB0cjxBdXRvbWF0aWNU
aHJlYWQ+IG1fdGhyZWFkOworICAgIAorICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NTdGFydFRp
bWU7CisgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ0VuZFRpbWU7CisgICAgTW9ub3RvbmljVGlt
ZSBtX2N1cnJlbnRHQ1N0YXJ0VGltZTsKKyAgICAKKyAgICB1aW50cHRyX3QgbV9iYXJyaWVyc0V4
ZWN1dGVkIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIwODg2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
Nyw2ICsxNTcsMTIgQEAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyV2l0aG91dEZlbgog
ICAgICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKK2lubGluZSB2b2lkIEhlYXA6
Om11dGF0b3JGZW5jZSgpCit7CisgICAgaWYgKGlzWDg2KCkgfHwgVU5MSUtFTFkobXV0YXRvclNo
b3VsZEJlRmVuY2VkKCkpKQorICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworfQorCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBIZWFwOjpmb3JFYWNoQ29kZUJs
b2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB7CiAgICAgZm9yRWFjaENvZGVCbG9ja0ltcGwoc2Nv
cGVkTGFtYmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODg2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3Qgc2l6ZV90IE1hcmtl
ZEJsb2NrOjpibG9ja1NpemU7CisKIHN0YXRpYyBjb25zdCBib29sIGNvbXB1dGVCYWxhbmNlID0g
ZmFsc2U7CiBzdGF0aWMgc2l6ZV90IGJhbGFuY2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwODg2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjAsOCArNjAsNyBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmZpbmlzaENyZWF0aW9uKFZN
JiB2CiB7CiAgICAgLy8gVGhpcyBvYmplY3QgaXMgcmVhZHkgdG8gYmUgZXNjYXBlZCBzbyB0aGUg
Y29uY3VycmVudCBHQyBtYXkgc2VlIGl0IGF0IGFueSB0aW1lLiBXZSBoYXZlCiAgICAgLy8gdG8g
bWFrZSBzdXJlIHRoYXQgbm9uZSBvZiBvdXIgc3RvcmVzIHNpbmsgYmVsb3cgaGVyZS4KLSAgICBp
ZiAoaXNYODYoKSB8fCBVTkxJS0VMWSh2bS5oZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkK
LSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICB2bS5oZWFwLm11dGF0b3JGZW5j
ZSgpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIEFTU0VSVCh2bS5pc0luaXRpYWxp
emluZ09iamVjdCgpKTsKICAgICB2bS5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygwKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CShyZXZpc2lvbiAyMDg4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDkgKzE2Nyw5IEBAIGlubGluZSB2
b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICB1bnNpZ25lZCBvbGRPdXRPZkxp
bmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBzdHJ1Y3R1
cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCiAgICAgICAgIHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsCi0gICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7Ci0gICAgICAg
ICAgICAgICAgYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xk
T3V0T2ZMaW5lQ2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAg
ICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCB1bnNpZ25lZCBuZXdPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAgaWYg
KG5ld091dE9mTGluZUNhcGFjaXR5ICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAg
ICAgICAgICAgYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xk
T3V0T2ZMaW5lQ2FwYWNpdHksIG5ld091dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2
bSwgYnV0dGVyZmx5KTsKICAgICAgICAgICAgIH0KQEAgLTI2NiwxNSArMjY2LDE0IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgdW5zaWduZWQgb2xk
T3V0T2ZMaW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAg
ICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKICAg
ICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCi0gICAgICAgICAgICBbJl0g
KGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkg
eworICAgICAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIG5ld091dE9mTGluZUNhcGFjaXR5KSB7CiAgICAg
ICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZE91
dE9mTGluZUNhcGFjaXR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IGFsbG9j
YXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNhcGFjaXR5LCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAgIGlmIChuZXdPdXRPZkxp
bmVDYXBhY2l0eSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAgICAgICAg
ICBidXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRPdXRPZkxp
bmVDYXBhY2l0eSwgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHko
dm0sIGJ1dHRlcmZseSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOwogICAgICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwODg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDggKzE5NSwxMyBA
QCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGRvdWJsZSwgbWVkaXVt
SGVhcEdyb3d0aEZhY3RvciwgMS41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwg
bGFyZ2VIZWFwR3Jvd3RoRmFjdG9yLCAxLjI0LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJv
b2wsIHVzZUNvbGxlY3RvclRpbWVzbGljaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAg
ICB2KGRvdWJsZSwgY29uY3VycmVudEdDSGVhZHJvb21SYXRpbywgMS41LCBOb3JtYWwsIG51bGxw
dHIpIFwKKyAgICB2KGRvdWJsZSwgbWluaW11bU11dGF0b3JVdGlsaXphdGlvbiwgMCwgTm9ybWFs
LCBudWxscHRyKSBcCisgICAgdihkb3VibGUsIG1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24sIDAu
NywgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihkb3VibGUsIGNvbmN1cnJlbnRHQ01heEhlYWRy
b29tLCAxLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBjb25jdXJyZW50R0NQ
ZXJpb2RNUywgMiwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihkb3VibGUsIGluaXRpYWxFeHRy
YVBhdXNlUmF0aW8sIDAsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoZG91YmxlLCBleHRyYVBh
dXNlUmF0aW9JdGVyYXRpb25Hcm93dGhSYXRlLCAxLjEsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoYm9vbCwgY29sbGVjdG9yU2hvdWxkUmVzdW1lRmlyc3QsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIGxhcmdlQWxsb2NhdGlvbkN1dG9mZiwgMTAwMDAw
LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjA4ODYwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQzLDcgKzk0Myw3
IEBAIFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5
T2Zmc2V0KSB7IH0pOworICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCB1
bnNpZ25lZCkgeyB9KTsKIH0KIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyMDg4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDI2ICsyOTQsMTEg
QEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgb3V0T2ZMaW5lQ2FwYWNpdHkoKSBjb25zdAogICAg
IHsKLSAgICAgICAgQVNTRVJUKGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU2l6ZSA9IHRoaXMtPm91dE9mTGluZVNpemUo
KTsKLQotICAgICAgICBpZiAoIW91dE9mTGluZVNpemUpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LQotICAgICAgICBpZiAob3V0T2ZMaW5lU2l6ZSA8PSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkp
Ci0gICAgICAgICAgICByZXR1cm4gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5OwotCi0gICAgICAg
IEFTU0VSVChvdXRPZkxpbmVTaXplID4gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKLSAgICAg
ICAgQ09NUElMRV9BU1NFUlQob3V0T2ZMaW5lR3Jvd3RoRmFjdG9yID09IDIsIG91dE9mTGluZUdy
b3d0aEZhY3Rvcl9pc190d28pOwotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9Qb3dlck9m
VHdvKG91dE9mTGluZVNpemUpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQ2FwYWNpdHkobV9v
ZmZzZXQpOwogICAgIH0KICAgICB1bnNpZ25lZCBvdXRPZkxpbmVTaXplKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZVNpemUobV9vZmZzZXQpOwogICAgIH0KICAgICBi
b29sIGhhc0lubGluZVN0b3JhZ2UoKSBjb25zdAogICAgIHsKQEAgLTYzNiw2ICs2MjEsMzMgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9u
KFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiYgc3RydWN0dXJlcywgU3RydWN0dXJlKiYsIFByb3BlcnR5
VGFibGUqJik7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNp
dGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBv
dXRPZkxpbmVDYXBhY2l0eShQcm9wZXJ0eU9mZnNldCBsYXN0T2Zmc2V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgb3V0T2ZMaW5lU2l6ZSA9IHRoaXMtPm91dE9mTGluZVNpemUobGFz
dE9mZnNldCk7CisKKyAgICAgICAgLy8gVGhpcyBhbGdvcml0aG0gY29tcGxldGVseSBkZXRlcm1p
bmVzIHRoZSBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlIGdyb3d0aCBhbGdvcml0aG0uCisg
ICAgICAgIC8vIFRoZSBKU09iamVjdCBjb2RlIHdpbGwgb25seSB0cmlnZ2VyIGEgcmVzaXplIGlm
IHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGFsZ29yaXRobQorICAgICAgICAvLyBjaGFuZ2Vk
IGJldHdlZW4gdGhlIG5ldyBhbmQgb2xkIHN0cnVjdHVyZS4gU28sIGl0J3MgaW1wb3J0YW50IHRv
IGtlZXAgdGhpcyBzaW1wbGUgYmVjYXVzZQorICAgICAgICAvLyBpdCdzIG9uIGEgZmFzdCBwYXRo
LgorICAgICAgICAKKyAgICAgICAgaWYgKCFvdXRPZkxpbmVTaXplKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgaWYgKG91dE9mTGluZVNpemUgPD0gaW5pdGlhbE91dE9mTGluZUNh
cGFjaXR5KQorICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eTsKKwor
ICAgICAgICBBU1NFUlQob3V0T2ZMaW5lU2l6ZSA+IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7
CisgICAgICAgIENPTVBJTEVfQVNTRVJUKG91dE9mTGluZUdyb3d0aEZhY3RvciA9PSAyLCBvdXRP
ZkxpbmVHcm93dGhGYWN0b3JfaXNfdHdvKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRv
UG93ZXJPZlR3byhvdXRPZkxpbmVTaXplKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgb3V0
T2ZMaW5lU2l6ZShQcm9wZXJ0eU9mZnNldCBsYXN0T2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOworICAgICAgICAg
ICAgCisgICAgICAgIHJldHVybiBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChs
YXN0T2Zmc2V0KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIFBy
b3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywg
Y29uc3QgRnVuYyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjA4ODYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQs
MTEgKzMwNCwxNCBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mCiAK
ICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChtX2lubGlu
ZUNhcGFjaXR5KTsKICAgICAKLSAgICB0YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBu
ZXdPZmZzZXQsIGF0dHJpYnV0ZXMpLCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlP
ZmZzZXRNYXlDaGFuZ2UpOworICAgIFByb3BlcnR5T2Zmc2V0IG5ld0xhc3RPZmZzZXQgPSBtX29m
ZnNldDsKKyAgICB0YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0
dHJpYnV0ZXMpLCBuZXdMYXN0T2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1h
eUNoYW5nZSk7CiAgICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGZ1bmMobG9ja2Vy
LCBuZXdPZmZzZXQsIG91dE9mTGluZUNhcGFjaXR5KG5ld0xhc3RPZmZzZXQpKTsKKyAgICB2bS5o
ZWFwLm11dGF0b3JGZW5jZSgpOworICAgIG1fb2Zmc2V0ID0gbmV3TGFzdE9mZnNldDsKIAotICAg
IGZ1bmMobG9ja2VyLCBuZXdPZmZzZXQpOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBy
ZXR1cm4gbmV3T2Zmc2V0OwogfQogCg==
</data>
<flag name="review"
          id="317793"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>