<?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>237078</bug_id>
          
          <creation_ts>2022-02-23 03:50:54 -0800</creation_ts>
          <short_desc>Have SourceBufferParserWebM use SharedBuffer internally</short_desc>
          <delta_ts>2022-03-08 16:16:42 -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>Media</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>237075</dependson>
          <blocked>236754</blocked>
    
    <blocked>237472</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jean-Yves Avenard [:jya]">jean-yves.avenard</reporter>
          <assigned_to name="Jean-Yves Avenard [:jya]">jean-yves.avenard</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1845080</commentid>
    <comment_count>0</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-23 03:50:54 -0800</bug_when>
    <thetext>Sub-task of bug 236754.

We can simplify the inner workings of SourceBufferParserWebM by using SharedBuffer instead of building CMBlockBuffer progressively. We can reduce the amount of memory used as CMBlockBuffer always allocate more memory than is actually needed.

It will also simplify the resolution of bug 236754.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845082</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-23 04:12:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/89348752&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845092</commentid>
    <comment_count>2</comment_count>
      <attachid>452964</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-23 05:14:53 -0800</bug_when>
    <thetext>Created attachment 452964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845097</commentid>
    <comment_count>3</comment_count>
      <attachid>452967</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-23 05:22:23 -0800</bug_when>
    <thetext>Created attachment 452967
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845589</commentid>
    <comment_count>4</comment_count>
      <attachid>453094</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-24 05:36:33 -0800</bug_when>
    <thetext>Created attachment 453094
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845591</commentid>
    <comment_count>5</comment_count>
      <attachid>453095</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-24 05:37:09 -0800</bug_when>
    <thetext>Created attachment 453095
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845755</commentid>
    <comment_count>6</comment_count>
      <attachid>453138</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-24 14:27:33 -0800</bug_when>
    <thetext>Created attachment 453138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845758</commentid>
    <comment_count>7</comment_count>
      <attachid>453139</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-24 14:29:31 -0800</bug_when>
    <thetext>Created attachment 453139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845874</commentid>
    <comment_count>8</comment_count>
      <attachid>453163</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-24 18:53:49 -0800</bug_when>
    <thetext>Created attachment 453163
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845875</commentid>
    <comment_count>9</comment_count>
      <attachid>453164</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-24 18:54:43 -0800</bug_when>
    <thetext>Created attachment 453164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849464</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-08 16:16:38 -0800</bug_when>
    <thetext>Committed r291020 (248194@main): &lt;https://commits.webkit.org/248194@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453163.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452964</attachid>
            <date>2022-02-23 05:14:53 -0800</date>
            <delta_ts>2022-02-24 05:36:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237078-20220224001451.patch</filename>
            <type>text/plain</type>
            <size>31736</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDQzN2JhN2JmYTA1NDNk
ZWJjZWMxMTk0NzdlYjk2Zjg4ZGNlNDAxMy4uNTIwMjBmNmNmZWEwMjc5NGY0NWY3MDQ1NTUxYTk5
YTA1MmRkZWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIHVzZSBTaGFyZWRCdWZmZXIgaW50ZXJuYWxseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc4CisgICAgICAgIHJkYXI6Ly84
OTM0ODc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSByZWZhY3RvciB0byBhbGxvdyBTb3VyY2VCdWZmZXJQYXJzZXIgdG8gcmV0dXJu
IFNoYXJlZEJ1ZmZlcgorICAgICAgICByYXRoZXIgdGhhbiBDTUJsb2NrQnVmZmVyLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBvYnNlcnZhYmxlIGJlaGF2aW91cnMuCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6
OnJlZW5xdWV1ZU1lZGlhRm9yVGltZSk6IEZseS1ieSBmaXg6IHR5cG8uCisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKTogRmx5LWJ5IGZpeCwg
IGV4aXQgZWFybHkKKyAgICAgICAgaWYgZW5kIHRpbWUgaXMgbG93ZXIgdGhhbiBzdGFydCB0aW1l
IHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGR1cmF0aW9uIGlzCisgICAgICAgIHNtYWxsZXIgdGhh
biBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
VlA4RnJhbWVIZWFkZXIpOiBNYWtlIG1ldGhvZHMgY29uc3QuCisKIDIwMjItMDItMjMgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYWJpbGl0eSB0byBj
b252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRl
LmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0YzliNjY0Li4wZjg2
ZjAxNDM0YTBmYTdlZDU1ZWJkZTQ2NGExMmE1YjE1N2U1NWI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApA
QCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6cmVlbnF1ZXVlTWVk
aWFGb3JUaW1lKFRyYWNrQnVmZmVyJiB0cmFja0J1ZmZlciwgY29uc3QKICAgICAgICAgfHwgKGN1
cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+Zmlyc3QgLSB0aW1lKSA+IHRpbWVGdWRnZUZhY3Rvcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBTZWFjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZp
b3VzIHN5bmMgc2FtcGxlLgorICAgIC8vIFNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3Vz
IHN5bmMgc2FtcGxlLgogICAgIERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlIGRlY29kZUtl
eShjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+ZGVjb2RlVGltZSgpLCBjdXJyZW50
U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKICAgICBhdXRv
IGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZGVjb2RlT3Jk
ZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtleShkZWNvZGVLZXkpOwogICAgIEFTU0VSVChjdXJy
ZW50U2FtcGxlRFRTSXRlcmF0b3IgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigp
LmVuZCgpKTsKQEAgLTExNzIsNiArMTE3Miw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6
ZGlkUmVjZWl2ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgb3JpZ2luYWxTYW1wbGUpCiAgICAg
ICAgICAgICAgICAgTWVkaWFUaW1lIGVyYXNlQmVnaW5UaW1lID0gdHJhY2tCdWZmZXIuaGlnaGVz
dFByZXNlbnRhdGlvblRpbWVzdGFtcDsKICAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VF
bmRUaW1lID0gZnJhbWVFbmRUaW1lc3RhbXAgLSBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2U7CiAK
KyAgICAgICAgICAgICAgICBpZiAoZXJhc2VFbmRUaW1lID49IGVyYXNlQmVnaW5UaW1lKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgcmFuZ2U7CiAgICAg
ICAgICAgICAgICAgaWYgKGhpZ2hlc3RCdWZmZXJlZFRpbWUgLSB0cmFja0J1ZmZlci5oaWdoZXN0
UHJlc2VudGF0aW9uVGltZXN0YW1wIDwgdHJhY2tCdWZmZXIubGFzdEZyYW1lRHVyYXRpb24pIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyBmcmFtZSBpcyBhdCB0aGUgZW5kIG9m
IHRoZSBidWZmZXJlZCByYW5nZXMsIHBlcmZvcm0gYSBzZXF1ZW50aWFsIHNjYW4gZnJvbSBlbmQg
KE8oMSkpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAppbmRleCBhZTE2NDE0ZjIx
YzY4NDZjMTg5NzcwOWUxNDI0ZTRhNmE0Yjc2MWEwLi4zYzIxYzQzMDc2ZGM4ODVmYWU3YzE5YWE1
ODBiZDVmOWYzZTBlMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcApAQCAt
MzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2Vy
LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29j
b2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZVdlYk0uaCIKICNpbmNsdWRlICJXZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oIgpAQCAtMzY1LDIxICszNjQsMTMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a1dvdWxkQmxvY2spOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIEZyZWVTaGFyZWRCdWZmZXIodm9pZCogcmVmY29uLCB2b2lkKiwgc2l6ZV90KQor
ICAgIFN0YXR1cyBSZWFkSW50byhzdGQ6OnNpemVfdCBudW1Ub1JlYWQsIFNoYXJlZEJ1ZmZlckJ1
aWxkZXImIG91dHB1dEJ1ZmZlciwgdWludDY0X3QqIG51bUFjdHVhbGx5UmVhZCkKICAgICB7Ci0g
ICAgICAgIGF1dG8qIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2hhcmVkQnVmZmVyKj4ocmVm
Y29uKTsKLSAgICAgICAgYnVmZmVyLT5kZXJlZigpOwotICAgIH0KLQotICAgIFN0YXR1cyBSZWFk
SW50byhzdGQ6OnNpemVfdCBudW1Ub1JlYWQsIENNQmxvY2tCdWZmZXJSZWYgb3V0cHV0QnVmZmVy
LCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG91dHB1
dEJ1ZmZlciAmJiBudW1BY3R1YWxseVJlYWQpOworICAgICAgICBBU1NFUlQobnVtQWN0dWFsbHlS
ZWFkKTsKICAgICAgICAgaWYgKCFudW1BY3R1YWxseVJlYWQpCiAgICAgICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7CiAKICAgICAgICAgKm51bUFjdHVhbGx5
UmVhZCA9IDA7Ci0gICAgICAgIGlmICghb3V0cHV0QnVmZmVyKQotICAgICAgICAgICAgcmV0dXJu
IFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwogCiAgICAgICAgIHdoaWxlIChudW1U
b1JlYWQgJiYgbV9jdXJyZW50U2VnbWVudCAhPSBtX2RhdGEuZW5kKCkpIHsKICAgICAgICAgICAg
IGF1dG8mIGN1cnJlbnRTZWdtZW50ID0gKm1fY3VycmVudFNlZ21lbnQ7CkBAIC0zODksNDQgKzM4
MCwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIgPSBjdXJyZW50
U2VnbWVudC5nZXRTaGFyZWRCdWZmZXIoKTsKLSAgICAgICAgICAgIENNQmxvY2tCdWZmZXJSZWYg
cmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAgICAgICAgdWludDY0X3QgbGFzdFJlYWQg
PSAwOworICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmF3QmxvY2tCdWZmZXI7CiAg
ICAgICAgICAgICBpZiAoIXNoYXJlZEJ1ZmZlcikgewogICAgICAgICAgICAgICAgIC8vIFdlIGNv
dWxkIHBvdGVudGlhbGx5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gbmVlZGVkIGlmIHRoZSBy
ZWFkIGlzIHBhcnRpYWwuCi0gICAgICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tC
dWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2soa0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwg
bnVtVG9SZWFkLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCAwLCBudW1Ub1JlYWQsIGtD
TUJsb2NrQnVmZmVyQXNzdXJlTWVtb3J5Tm93RmxhZywgJnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAg
ICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAg
ICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOwotICAgICAgICAgICAgICAgIGVy
ciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKHJhd0Jsb2NrQnVmZmVyLCAwLCAm
c2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEp
OwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKKyAgICAg
ICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAgICAgICAgICAgICAgIGlmICgh
YnVmZmVyLnRyeVJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtVG9SZWFkKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwotICAgICAg
ICAgICAgICAgIGF1dG8gcmVhZFJlc3VsdCA9IGN1cnJlbnRTZWdtZW50LnJlYWQobV9wb3NpdGlv
bldpdGhpblNlZ21lbnQsIG51bVRvUmVhZCwgYmxvY2tCdWZmZXJEYXRhKTsKKyAgICAgICAgICAg
ICAgICBidWZmZXIucmVzaXplKG51bVRvUmVhZCk7CisgICAgICAgICAgICAgICAgYXV0byByZWFk
UmVzdWx0ID0gY3VycmVudFNlZ21lbnQucmVhZChtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwgbnVt
VG9SZWFkLCBidWZmZXIuZGF0YSgpKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlYWRSZXN1bHQu
aGFzX3ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50UmVhZEVycm9y
VG9XZWJtU3RhdHVzKHJlYWRSZXN1bHQuZXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgbGFzdFJl
YWQgPSByZWFkUmVzdWx0LnZhbHVlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIC8vIFRPRE86IGNvdWxkIHdlIG9ubHkgY3JlYXRlIGEgbmV3IENNQmxvY2tCdWZmZXIg
aWYgdGhlIGJhY2tlbmQgbWVtb3J5IGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIG9uZT8KLSAg
ICAgICAgICAgICAgICBzaXplX3QgY2FuUmVhZCA9IHN0ZDo6bWluPHNpemVfdD4obnVtVG9SZWFk
LCBzaGFyZWRCdWZmZXItPnNpemUoKSAtIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50KTsKLSAgICAg
ICAgICAgICAgICAvLyBGcm9tIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSBkb2N1bWVu
dGF0aW9uOgotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBmb3IgNjQtYml0IGFyY2hpdGVj
dHVyZXMsIHRoaXMgc3RydWN0IGNvbnRhaW5zIG1pc2FsaWduZWQgZnVuY3Rpb24gcG9pbnRlcnMu
Ci0gICAgICAgICAgICAgICAgLy8gVG8gYXZvaWQgbGluay10aW1lIGlzc3VlcywgaXQgaXMgcmVj
b21tZW5kZWQgdGhhdCBjbGllbnRzIGZpbGwgQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNl
J3MgZnVuY3Rpb24gcG9pbnRlciBmaWVsZHMKLSAgICAgICAgICAgICAgICAvLyBieSB1c2luZyBh
c3NpZ25tZW50IHN0YXRlbWVudHMsIHJhdGhlciB0aGFuIGRlY2xhcmluZyB0aGVtIGFzIGdsb2Jh
bCBvciBzdGF0aWMgc3RydWN0cy4KLSAgICAgICAgICAgICAgICBDTUJsb2NrQnVmZmVyQ3VzdG9t
QmxvY2tTb3VyY2UgYWxsb2NhdG9yOwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci52ZXJzaW9u
ID0gMDsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IuQWxsb2NhdGVCbG9jayA9IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLkZyZWVCbG9jayA9IEZyZWVTaGFyZWRCdWZmZXI7
Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnJlZkNvbiA9IHNoYXJlZEJ1ZmZlci5nZXQoKTsK
LSAgICAgICAgICAgICAgICBzaGFyZWRCdWZmZXItPnJlZigpOwotICAgICAgICAgICAgICAgIGF1
dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKG51bGxwdHIs
IHN0YXRpY19jYXN0PHZvaWQqPihjb25zdF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRCdWZmZXItPmRh
dGEoKSkpLCBzaGFyZWRCdWZmZXItPnNpemUoKSwgbnVsbHB0ciwgJmFsbG9jYXRvciwgbV9wb3Np
dGlvbldpdGhpblNlZ21lbnQsIGNhblJlYWQsIDAsICZyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAgICAg
ICAgICAgbGFzdFJlYWQgPSBjYW5SZWFkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0
byBibG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZmZXIpOwotICAgICAgICAgICAgYXV0
byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2Uob3V0cHV0QnVm
ZmVyLCByYXdCbG9ja0J1ZmZlciwgMCwgMCwgMCk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IGtD
TUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtOb3RFbm91Z2hNZW1vcnkpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUocmVhZFJl
c3VsdC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICByYXdCbG9ja0J1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICByYXdCbG9ja0J1ZmZlciA9IHNoYXJlZEJ1ZmZlci0+Z2V0Q29udGlndW91c0Rh
dGEobV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIG51bVRvUmVhZCk7CisgICAgICAgICAgICBhdXRv
IGxhc3RSZWFkID0gcmF3QmxvY2tCdWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgIG91dHB1dEJ1
ZmZlci5hcHBlbmQoKnJhd0Jsb2NrQnVmZmVyKTsKICAgICAgICAgICAgIG1fcG9zaXRpb24gKz0g
bGFzdFJlYWQ7CiAgICAgICAgICAgICAqbnVtQWN0dWFsbHlSZWFkICs9IGxhc3RSZWFkOwogICAg
ICAgICAgICAgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQgKz0gbGFzdFJlYWQ7CkBAIC0xMjAxLDE2
ICsxMTcwLDEwIEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0
YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsCiAKICNkZWZpbmUgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSguLi4pIGlmIChwYXJzZXIoKS5sb2dnZXJQdHIoKSkgcGFyc2Vy
KCkubG9nZ2VyUHRyKCktPmVycm9yKGxvZ0NoYW5uZWwoKSwgTG9nZ2VyOjpMb2dTaXRlSWRlbnRp
Zmllcihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIHBhcnNlcigpLmxvZ0lkZW50aWZpZXIoKSks
IF9fVkFfQVJHU19fKQogCi1SZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihzaXpl
X3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdAorUmVmPFNoYXJlZEJ1ZmZlcj4gU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZl
cihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdAogewotICAgIGlmICghb2Zmc2V0
ICYmICFsZW5ndGggJiYgUEFMOjpDTUJsb2NrQnVmZmVySXNSYW5nZUNvbnRpZ3VvdXMobV9jb21w
bGV0ZUJsb2NrQnVmZmVyLmdldCgpLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuIG1fY29tcGxldGVC
bG9ja0J1ZmZlcjsKLSAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0NvbnRpZ3VvdXNCdWZmZXIgPSBu
dWxscHRyOwotICAgIGlmIChQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVDb250aWd1b3VzKG51bGxw
dHIsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgb2Zmc2V0
LCBsZW5ndGgsIDAsICZyYXdDb250aWd1b3VzQnVmZmVyKSAhPSBrQ01CbG9ja0J1ZmZlck5vRXJy
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxUKFdlYkF1ZGlvLCAiZmFpbGVkIHRvIGNyZWF0
ZSBjb250aWd1b3VzIGJsb2NrIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0YocmF3Q29udGlndW91c0J1ZmZlcik7CisgICAgQVNTRVJU
KG1fY29tcGxldGVCbG9ja0J1ZmZlcnMgJiYgbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5zaXplKCkg
Pj0gb2Zmc2V0ICsgbGVuZ3RoKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5n
ZXQoKS0+Z2V0Q29udGlndW91c0RhdGEob2Zmc2V0LCBsZW5ndGgpOwogfQogCiB3ZWJtOjpTdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06
OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWlu
dDY0X3QqIGJ5dGVzUmVtYWluaW5nKQpAQCAtMTIyNCwyMCArMTE4Nyw5IEBAIHdlYm06OlN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6
UmVhZGVyJiByZWFkCiAgICAgaWYgKCFtX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgbV9j
b21wbGV0ZVBhY2tldFNpemUgPSBtZXRhZGF0YS5zaXplOwogCi0gICAgaWYgKCFtX2N1cnJlbnRC
bG9ja0J1ZmZlcikgewotICAgICAgICBBU1NFUlQoIW1fcGFydGlhbEJ5dGVzUmVhZCk7Ci0gICAg
ICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAgICBh
dXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUVtcHR5KGtDRkFsbG9jYXRvckRlZmF1
bHQsIG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5LCAwLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAg
ICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIgfHwgIXJhd0Jsb2NrQnVmZmVyKSB7Ci0g
ICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQ3Jl
YXRlRW1wdHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJuIFNr
aXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVu
dEJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgfQotCiAgICAgd2hp
bGUgKCpieXRlc1JlbWFpbmluZykgewogICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7Ci0gICAg
ICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2Vn
bWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRC
bG9ja0J1ZmZlci5nZXQoKSwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGF1dG8gc3RhdHVzID0gc3Rh
dGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRlciku
UmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlciwgJmJ5dGVzUmVh
ZCk7CiAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CiAgICAgICAgIG1fcGFy
dGlhbEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CiAKQEAgLTEyNDksNjggKzEyMDEsNjAgQEAgd2Vi
bTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0
YSh3ZWJtOjpSZWFkZXImIHJlYWQKICAgICBpZiAobV9wYXJ0aWFsQnl0ZXNSZWFkIDwgKm1fY29t
cGxldGVQYWNrZXRTaXplKQogICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1
czo6a09rUGFydGlhbCk7CiAKLSAgICBpZiAoIW1fY29tcGxldGVCbG9ja0J1ZmZlcikKLSAgICAg
ICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gV1RGTW92ZShtX2N1cnJlbnRCbG9ja0J1ZmZlcik7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5k
QnVmZmVyUmVmZXJlbmNlKG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgbV9jdXJyZW50Qmxv
Y2tCdWZmZXIuZ2V0KCksIDAsIDAsIDApOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAg
ICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVy
UmVmZXJlbmNlIHRvIGNvbXBsZXRlIGJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAg
ICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAg
ICAgfQotICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQorICAg
IG1fY29tcGxldGVCbG9ja0J1ZmZlcnMuYXBwZW5kKG1fY3VycmVudEJsb2NrQnVmZmVyLnRha2Uo
KSk7CiAgICAgbV9wYXJ0aWFsQnl0ZXNSZWFkID0gMDsKIAogICAgIHJldHVybiB3ZWJtOjpTdGF0
dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6
UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCog
Ynl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBs
ZUNvdW50KQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNh
bXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KQog
ewotI2lmIEVOQUJMRShWUDkpCi0gICAgYXV0byBzdGF0dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRl
ciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRf
b2soKSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICBpZiAobV9wYWNrZXRTaXplcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihwcmVzZW50
YXRpb25UaW1lLCBzYW1wbGVDb3VudCwgbWV0YWRhdGEpOwotICAgIHJlc2V0KCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlv
blRpbWUpOwotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVDb3VudCk7Ci0jZW5kaWYKKyAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8gZXJyID0g
UEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fY29t
cGxldGVCbG9ja0J1ZmZlcnMudGFrZSgpLT5jcmVhdGVDTUJsb2NrQnVmZmVyKCkuZ2V0KCksIGZv
cm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFRp
bWluZ3Muc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3MuZGF0YSgpLCBtX3BhY2tldFNpemVzLnNpemUo
KSwgbV9wYWNrZXRTaXplcy5kYXRhKCksICZyYXdTYW1wbGVCdWZmZXIpOworICAgIGlmIChlcnIp
IHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJD
cmVhdGVSZWFkeSBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgcG9zdFBy
b2Nlc3MocmF3U2FtcGxlQnVmZmVyKTsKKworICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJh
Y2tfdWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShhZG9wdENGKHJh
d1NhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIGxhdGVzdEJ5dGVSYW5nZU9mZnNldCk7Cit9CisKK3Zv
aWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVk
KCkKK3sKKyAgICBtX2tleUZyYW1lcy5jbGVhcigpOworICAgIFRyYWNrRGF0YTo6cmVzZXRDb21w
bGV0ZWQoKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0
YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50
IHNhbXBsZUNvdW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3dlYm06
OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZy
YW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRh
dGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25U
aW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxFKFZQOSkKLSAgICB1aW50OF90KiBibG9ja0J1ZmZlckRh
dGEgPSBudWxscHRyOworICAgIGF1dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIsIG1l
dGFkYXRhLCBieXRlc1JlbWFpbmluZyk7CisgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkp
CisgICAgICAgIHJldHVybiBzdGF0dXM7CisKICAgICBjb25zdGV4cHIgc2l6ZV90IG1heEhlYWRl
clNpemUgPSAzMjsgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgVlA5IHVuY29tcHJlc3NlZCBo
ZWFkZXIgaXMgMTQ0IGJpdHMgYW5kIDExIGJ5dGVzIGZvciBWUDguIFJvdW5kIGhpZ2guCiAgICAg
c2l6ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCAqbV9j
b21wbGV0ZVBhY2tldFNpemUpOwotICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3Vv
dXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOwotICAgIGlmICgh
Y29udGlndW91c0J1ZmZlcikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyIGZhaWxlZCB0byBjcmVhdGUgY29u
dGlndW91cyBkYXRhIGJsb2NrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBl
cnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdl
dCgpLCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAg
IGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9j
a0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29t
cGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0LCBzZWdtZW50SGVhZGVy
TGVuZ3RoKTsKKyAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3Vz
QnVmZmVyLT5kYXRhKCk7CiAKICAgICBib29sIGlzS2V5ID0gZmFsc2U7CiAgICAgUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwogICAgIGlmIChjb2Rl
YygpID09IENvZGVjVHlwZTo6VlA5KSB7CiAgICAgICAgIGlmICghbV9oZWFkZXJQYXJzZXIuUGFy
c2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVhZGVyTGVuZ3Ro
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIs
IGJ5dGVzUmVtYWluaW5nKTsKIAogICAgICAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5KCkpIHsK
ICAgICAgICAgICAgIGlzS2V5ID0gdHJ1ZTsKICAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3Jp
cHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIobV9oZWFk
ZXJQYXJzZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwogICAgICAgICAgICAgaWYg
KCFmb3JtYXREZXNjcmlwdGlvbikgewogICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1Jf
SUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlBY
IGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7CiAg
ICAgICAgIH0KQEAgLTEzMjEsNyArMTI2NSw3IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmIHByCiAg
ICAgICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRp
b25Gcm9tVlA4SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwog
ICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewogICAgICAgICAgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2Ny
aXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERl
c2NyaXB0aW9uKSk7CiAgICAgICAgIH0KQEAgLTEzMzYsNDQgKzEyODAsNDQgQEAgdm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKGNv
bnN0IENNVGltZSYgcHIKICAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVzZW50
KCkpCiAgICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICog
cHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUgLyBrX3VzX2luX3NlY29uZHM7CiAKLSAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwotICAgIENNU2FtcGxlVGlt
aW5nSW5mbyB0aW1pbmcgPSB7IFBBTDo6Q01UaW1lTWFrZShkdXJhdGlvbiwgcHJlc2VudGF0aW9u
VGltZS50aW1lc2NhbGUpLCBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lIH07Ci0g
ICAgZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1
bHQsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgdGhpcy0+Zm9ybWF0RGVzY3JpcHRpb24o
KS5nZXQoKSwgc2FtcGxlQ291bnQsIDEsICZ0aW1pbmcsIDEsICYqbV9jb21wbGV0ZVBhY2tldFNp
emUsICZyYXdTYW1wbGVCdWZmZXIpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSBmYWlsZWQgd2l0
aCBlcnJvciIsIGVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7CisgICAgbV9rZXlGcmFtZXMuYXBwZW5k
KGlzS2V5KTsKKyAgICBtX3BhY2tldFNpemVzLmFwcGVuZCgqbV9jb21wbGV0ZVBhY2tldFNpemUp
OworICAgIG1fcGFja2V0VGltaW5ncy5hcHBlbmQoeyBQQUw6OkNNVGltZU1ha2UoZHVyYXRpb24s
IHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0
aW9uVGltZSB9KTsKKyAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ICs9ICptX2NvbXBsZXRl
UGFja2V0U2l6ZTsKKyAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6bnVsbG9wdDsKKwor
ICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKKworICAgIEFTU0VSVCghKmJ5dGVzUmVtYWluaW5n
KTsKKyAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOworICAgIFVOVVNFRF9Q
QVJBTShzYW1wbGVDb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsKKyAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisjZW5kaWYKK30KIAotICAgIGF1dG8g
YXR0YWNobWVudHNBcnJheSA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50
c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7Cit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlZpZGVvVHJhY2tEYXRhOjpwb3N0UHJvY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiByYXdT
YW1wbGVCdWZmZXIpCit7CisgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBs
ZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkocmF3U2FtcGxlQnVmZmVyLCB0cnVlKTsK
ICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7CiAgICAgaWYgKCFhdHRhY2htZW50c0FycmF5
KSB7CiAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlQXR0YWNobWVudHNBcnJheSByZXR1cm5lZCBOVUxMIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoIWlzS2V5KSB7Ci0gICAgICAgIGZvciAoQ0ZJbmRleCBpID0g
MCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0g
Y2hlY2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOworICAgIEFTU0VSVChzaXplX3QoQ0ZBcnJheUdl
dENvdW50KGF0dGFjaG1lbnRzQXJyYXkpKSA9PSBtX2tleUZyYW1lcy5zaXplKCkpOworICAgIGZv
ciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJh
eSk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0
YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7CisgICAgICAgIGlmICghbV9r
ZXlGcmFtZXNbaV0pCiAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50
cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsK
LSAgICAgICAgfQogICAgIH0KLQotICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrLnRyYWNrX3VpZC52
YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShzYW1wbGVCdWZm
ZXIpLCB0cmFja0lELCBtZXRhZGF0YS5wb3NpdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShwcmVzZW50YXRpb25UaW1lKTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwotICAg
IFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkKIH0KIAogdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQo
KQogewogICAgIG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgPSAwOwotICAgIG1fcGFja2V0U2l6
ZXMuY2xlYXIoKTsKLSAgICBtX3BhY2tldFRpbWluZ3MuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRQ
YWNrZXRCeXRlT2Zmc2V0ID0gMDsKICAgICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKCk7CiB9
CiAKQEAgLTEzODMsOCArMTMyNyw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAg
IGF1dG8mIGxhc3RUaW1pbmcgPSBtX3BhY2tldFRpbWluZ3MubGFzdCgpOwogICAgICAgICBpZiAo
UEFMOjpDTVRpbWVDb21wYXJlKFBBTDo6Q01UaW1lQWRkKGxhc3RUaW1pbmcuZHVyYXRpb24sIGxh
c3RUaW1pbmcucHJlc2VudGF0aW9uVGltZVN0YW1wKSwgcHJlc2VudGF0aW9uVGltZSkpIHsKICAg
ICAgICAgICAgIC8vIERpc2NvbnRpbnVpdHkgZW5jb3VudGVyZWQsIGVtaXQgdGhlIHByZXZpb3Vz
bHkgZGVtdXhlZCBzYW1wbGVzLgotICAgICAgICAgICAgY3JlYXRlU2FtcGxlQnVmZmVyKG1ldGFk
YXRhLnBvc2l0aW9uKTsKLSAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAgICAgICBkcmFpblBl
bmRpbmdTYW1wbGVzKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzOTIsMTEgKzEzMzUsNiBA
QCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNv
bnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygp
KQogICAgICAgICByZXR1cm4gc3RhdHVzOwogCi0gICAgLy8gQXR0ZW1wdHMgdG8gbWluaW1pc2Ug
dGhlIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgZHVlIHRvIHJlcGV0aXR2ZSBDTUJsb2Nr
QnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlIGNhbGxzIGluIHJlYWRGcmFtZURhdGEuCi0gICAg
bU51bUZyYW1lc0luQ29tcGxldGVCbG9jaysrOwotICAgIGlmIChtTnVtRnJhbWVzSW5Db21wbGV0
ZUJsb2NrID4gbU1heEJsb2NrQnVmZmVyQ2FwYWNpdHkpCi0gICAgICAgIG1NYXhCbG9ja0J1ZmZl
ckNhcGFjaXR5ID0gbU51bUZyYW1lc0luQ29tcGxldGVCbG9jazsKLQogICAgIGlmIChtX3BhY2tl
dFNpemVzLmlzRW1wdHkoKSkKICAgICAgICAgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lID0gcHJl
c2VudGF0aW9uVGltZTsKIApAQCAtMTQxMiwxNiArMTM1MCw3IEBAIHdlYm06OlN0YXR1cyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJt
OjpSZWFkCiAgICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlv
Rm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkp
OwogICAgICAgICBlbHNlIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6T3B1cykgewogICAgICAg
ICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZm
ZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgKm1fY29tcGxldGVQYWNrZXRTaXplKTsKLSAg
ICAgICAgICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewotICAgICAgICAgICAgICAgIFBBUlNF
Ul9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRh
OiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAg
ICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKGNvbnRpZ3Vv
dXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVy
RGF0YSk7Ci0gICAgICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3
aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBi
eXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCB1aW50OF90
KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCk7CiAgICAgICAgICAg
ICBPcHVzQ29va2llQ29udGVudHMgY29va2llQ29udGVudHM7CiAgICAgICAgICAgICBpZiAoIXBh
cnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgp
LCAqbV9jb21wbGV0ZVBhY2tldFNpemUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMp
KSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVk
IHRvIHBhcnNlIE9wdXMgcHJpdmF0ZSBkYXRhIik7CkBAIC0xNDU2LDE2ICsxMzg1LDcgQEAgd2Vi
bTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1l
RnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgT3B1c0Nvb2tpZUNvbnRlbnRzIGNvb2tpZUNv
bnRlbnRzOwogICAgICAgICBhdXRvJiBwcml2YXRlRGF0YSA9IHRyYWNrKCkuY29kZWNfcHJpdmF0
ZS52YWx1ZSgpOwogICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29t
cGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0LCAqbV9jb21wbGV0ZVBh
Y2tldFNpemUpOwotICAgICAgICBpZiAoIWNvbnRpZ3VvdXNCdWZmZXIpIHsKLSAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOwotICAgICAg
ICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0g
ICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8g
ZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIoY29udGlndW91c0J1ZmZlci5n
ZXQoKSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKLSAg
ICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
LSAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAg
ICAgfQorICAgICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3Vz
QnVmZmVyLT5kYXRhKCk7CiAgICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0
ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwg
YmxvY2tCdWZmZXJEYXRhLCBjb29raWVDb250ZW50cykKICAgICAgICAgICAgIHx8IGNvb2tpZUNv
bnRlbnRzLmZyYW1lc1BlclBhY2tldCAhPSBtX2ZyYW1lc1BlclBhY2tldAogICAgICAgICAgICAg
fHwgY29va2llQ29udGVudHMuZnJhbWVEdXJhdGlvbiAhPSBtX2ZyYW1lRHVyYXRpb24pIHsKQEAg
LTE0ODEsNDAgKzE0MDEsMTggQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKIAogICAgIGF1dG8g
c2FtcGxlRHVyYXRpb24gPSBQQUw6OkNNVGltZUdldFNlY29uZHMoUEFMOjpDTVRpbWVTdWJ0cmFj
dChwcmVzZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSArIFBBTDo6Q01U
aW1lR2V0U2Vjb25kcyhtX3BhY2tldER1cmF0aW9uKSAqIHNhbXBsZUNvdW50OwogCi0gICAgaWYg
KHNhbXBsZUR1cmF0aW9uID49IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uKSB7Ci0gICAgICAgIGNy
ZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3NpdGlvbik7Ci0gICAgICAgIHJlc2V0KCk7Ci0g
ICAgfQorICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlvbikK
KyAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCiAgICAgQVNTRVJUKCEqYnl0ZXNSZW1h
aW5pbmcpOwogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0
ZWQpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpj
cmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5nZU9m
ZnNldCkKLXsKLSAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0g
ICAgYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigp
LmdldCgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRUaW1pbmdzLnNpemUoKSwgbV9w
YWNrZXRUaW1pbmdzLmRhdGEoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0U2l6ZXMu
ZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNF
Ul9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFj
a2V0RGVzY3JpcHRpb25zIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsK
LQotICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFy
c2VyKCkucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIGxh
dGVzdEJ5dGVSYW5nZU9mZnNldCk7Ci19Ci0KIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCkKIHsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90
cmFja3MpIHsKLSAgICAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvKSB7Ci0gICAgICAgICAgICBBdWRpb1Ry
YWNrRGF0YSYgYXVkaW9UcmFjayA9IGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFjay5nZXQo
KSk7Ci0gICAgICAgICAgICBhdWRpb1RyYWNrLmNyZWF0ZVNhbXBsZUJ1ZmZlcigpOwotICAgICAg
ICAgICAgYXVkaW9UcmFjay5yZXNldENvbXBsZXRlZCgpOwotICAgICAgICB9CisgICAgICAgIGlm
ICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRh
OjpUeXBlOjpBdWRpbykKKyAgICAgICAgICAgIHRyYWNrLT5kcmFpblBlbmRpbmdTYW1wbGVzKCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5kZXggZTg3NmFiNDE0
YTRhYmIzM2Q1MThjMzdiNDFmZTVhMTQ3NzZhYjQ5Ni4uOTExYjk1MTQ4ZmMyMzU2YzBiZjhkZTFk
YWM5Y2Q5YTc5YzIzNTVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAorI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgogI2luY2x1ZGUgPENv
cmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgogI2luY2x1ZGUgPENvcmVNZWRpYS9DTVRpbWUuaD4K
QEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHR5cGVkZWYgY29u
c3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25S
ZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUJsb2NrQnVmZmVyICpDTUJsb2NrQnVmZmVyUmVm
OwogCiBuYW1lc3BhY2Ugd2VibSB7CiBjbGFzcyBXZWJtUGFyc2VyOwpAQCAtMTU3LDMwICsxNTcs
NDIgQEAgcHVibGljOgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldENvbXBsZXRlZCgpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IG51bGxwdHI7Cisg
ICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLnJlc2V0KCk7CisgICAgICAgICAgICBt
X3BhY2tldFNpemVzLmNsZWFyKCk7CisgICAgICAgICAgICBtX3BhY2tldFRpbWluZ3MuY2xlYXIo
KTsKKyAgICAgICAgICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgPSAwOwogICAgICAgICB9
CiAgICAgICAgIHZvaWQgcmVzZXQoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXNldENvbXBs
ZXRlZCgpOwogICAgICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7
CiAgICAgICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgPSAwOwotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZm
ZXIucmVzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmFpblBlbmRp
bmdTYW1wbGVzKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQgPSBz
dGQ6Om51bGxvcHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihs
YXRlc3RCeXRlUmFuZ2VPZmZzZXQpOworICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgfQog
CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gY29u
dGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6
ZV90Pik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvY2VzcyhDTVNhbXBsZUJ1ZmZlclJl
ZikgeyB9OworICAgICAgICBSZWY8U2hhcmVkQnVmZmVyPiBjb250aWd1b3VzQ29tcGxldGVCbG9j
a0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKICAgICAgICAgd2Vi
bTo6U3RhdHVzIHJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVN
ZXRhZGF0YSYsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIFJldGFpblB0cjxD
TUJsb2NrQnVmZmVyUmVmPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7CisgICAgICAgIFNoYXJlZEJ1
ZmZlckJ1aWxkZXIgbV9jb21wbGV0ZUJsb2NrQnVmZmVyczsKICAgICAgICAgc3RkOjpvcHRpb25h
bDxzaXplX3Q+IG1fY29tcGxldGVQYWNrZXRTaXplOwotICAgICAgICAvLyBJbml0aWFsIGFsbG9j
YXRpb24gc2l6ZSBvZiBlbXB0eSBDTUJsb2NrQnVmZmVyLgotICAgICAgICBzaXplX3QgbU1heEJs
b2NrQnVmZmVyQ2FwYWNpdHkgeyAwIH07CisgICAgICAgIHNpemVfdCBtX2N1cnJlbnRQYWNrZXRC
eXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX3BhY2tldFNpemVzOwor
ICAgICAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBtX3BhY2tldFRpbWluZ3M7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKICAgICAgICAgd2VibTo6VHJh
Y2tFbnRyeSBtX3RyYWNrOwogICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOwogICAgICAgICBSZXRh
aW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKLSAgICAg
ICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IG1fY3VycmVudEJsb2NrQnVmZmVyOworICAg
ICAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIG1fY3VycmVudEJsb2NrQnVmZmVyOwogICAgICAgICBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBtX3BhcnNlcjsKICAgICAgICAgLy8gU2l6ZSBvZiB0aGUg
Y3VycmVudGx5IGluY29tcGxldGUgcGFyc2VkIHBhY2tldC4KICAgICAgICAgc2l6ZV90IG1fcGFy
dGlhbEJ5dGVzUmVhZCB7IDAgfTsKQEAgLTE5OCwxNCArMjEwLDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgewogICAgICAgICB9CiAKLSAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEo
d2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29u
c3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKLQogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgY3Jl
YXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYsIGludCwgY29uc3Qgd2VibTo6RnJhbWVNZXRh
ZGF0YSYpOwogICAgICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCB7IHJldHVy
biAiVmlkZW9UcmFja0RhdGEiOyB9Ci0KKyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFt
ZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90
KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKKyAgICAgICAgdm9pZCBwb3N0UHJvY2VzcyhD
TVNhbXBsZUJ1ZmZlclJlZikgZmluYWw7CisgICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWQoKSBm
aW5hbDsKICNpZiBFTkFCTEUoVlA5KQogICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJz
ZXIgbV9oZWFkZXJQYXJzZXI7CisgICAgICAgIFZlY3Rvcjxib29sPiBtX2tleUZyYW1lczsKICNl
bmRpZgogICAgIH07CiAKQEAgLTIyMiwyMCArMjM0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgewog
ICAgICAgICB9CiAKKyAgICBwcml2YXRlOgogICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZy
YW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0
X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwogICAgICAgICB2b2lkIHJlc2V0Q29tcGxl
dGVkKCkgZmluYWw7Ci0gICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9u
YWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQgPSBzdGQ6Om51bGxvcHQpOwotCi0gICAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgeyByZXR1
cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQogCiAgICAgICAgIENNVGltZSBtX3NhbXBsZVByZXNlbnRh
dGlvblRpbWU7CiAgICAgICAgIENNVGltZSBtX3BhY2tldER1cmF0aW9uOwotICAgICAgICBzaXpl
X3QgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCB7IDAgfTsKICAgICAgICAgdWludDhfdCBtX2Zy
YW1lc1BlclBhY2tldCB7IDAgfTsKICAgICAgICAgU2Vjb25kcyBtX2ZyYW1lRHVyYXRpb24geyAw
X3MgfTsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gbV9wYWNrZXRTaXplczsKLSAgICAgICAgVmVj
dG9yPENNU2FtcGxlVGltaW5nSW5mbz4gbV9wYWNrZXRUaW1pbmdzOwogICAgICAgICBzaXplX3Qg
bU51bUZyYW1lc0luQ29tcGxldGVCbG9jayB7IDAgfTsKICAgICAgICAgLy8gRklYTUU6IDAuNSAt
IDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBlciBzYW1wbGUgYnVmZmVyLCBidXQg
dXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QKICAgICAgICAgLy8gc2FtcGxlIGJ1
ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1w
bGVCdWZmZXIgdG8gZGVhbCB3aXRoIGBlbmRDdXJzb3JgLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKaW5k
ZXggOTQxMGE3YzQ3OTYzNDcwNGViNTljOTk5NjAzNDg0NGI2OWE4ODc2ZC4uOTU0NGQ5YzI1N2Zl
MGJkNTU4MjgwM2FlMWE4MDg0NTAxNzNjNTBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCkBAIC02
NSw3ICs2NSw3IEBAIHN0cnVjdCBWUDhGcmFtZUhlYWRlciB7CiAgICAgYm9vbCBuZWVkc0NsYW1w
aW5nIHsgZmFsc2UgfTsKIH07CiAKLXN0ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNl
VlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKTsKK3N0
ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWlu
dDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKTsKIFJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoY29uc3Qg
VlA4RnJhbWVIZWFkZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKIAog
Y2xhc3MgV0VCQ09SRV9FWFBPUlQgVlA5VGVzdGluZ092ZXJyaWRlcyB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLm1tCmluZGV4IDVjMGRmYWZkYjJlNjdmMDQ4MDUwNWZlYWM2NmE0ZWQ1NDRhMjllMzMuLmRk
MTc3OWYyNjM4OTI2OTU5NDRmNDIzNzZmY2RhZTViNmQzMGIyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLm1tCkBAIC02MDksNyArNjA5LDcgQEAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25S
ZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb24KICAgICBy
ZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNv
cmQocmVjb3JkLCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdodCgpKTsKIH0KIAotc3RkOjpv
cHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50OF90KiBmcmFt
ZURhdGEsIHNpemVfdCBmcmFtZVNpemUpCitzdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBw
YXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1l
U2l6ZSkKIHsKICAgICAvLyBWUDggZnJhbWUgaGVhZGVycyBhcmUgZGVmaW5lZCBpbiBSRkMgNjM4
NjogPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2Mzg2Pi4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452967</attachid>
            <date>2022-02-23 05:22:23 -0800</date>
            <delta_ts>2022-02-24 05:36:29 -0800</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-237078-20220224002221.patch</filename>
            <type>text/plain</type>
            <size>40988</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y2NjhlNjBmNTFjN2Vl
MmE2MDgxYTIyYzQzOGI3MjYwZDBjODJkOS4uNTIwMjBmNmNmZWEwMjc5NGY0NWY3MDQ1NTUxYTk5
YTA1MmRkZWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIHVzZSBTaGFyZWRCdWZmZXIgaW50ZXJuYWxseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc4CisgICAgICAgIHJkYXI6Ly84
OTM0ODc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSByZWZhY3RvciB0byBhbGxvdyBTb3VyY2VCdWZmZXJQYXJzZXIgdG8gcmV0dXJu
IFNoYXJlZEJ1ZmZlcgorICAgICAgICByYXRoZXIgdGhhbiBDTUJsb2NrQnVmZmVyLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBvYnNlcnZhYmxlIGJlaGF2aW91cnMuCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6
OnJlZW5xdWV1ZU1lZGlhRm9yVGltZSk6IEZseS1ieSBmaXg6IHR5cG8uCisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKTogRmx5LWJ5IGZpeCwg
IGV4aXQgZWFybHkKKyAgICAgICAgaWYgZW5kIHRpbWUgaXMgbG93ZXIgdGhhbiBzdGFydCB0aW1l
IHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGR1cmF0aW9uIGlzCisgICAgICAgIHNtYWxsZXIgdGhh
biBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
VlA4RnJhbWVIZWFkZXIpOiBNYWtlIG1ldGhvZHMgY29uc3QuCisKKzIwMjItMDItMjMgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYWJpbGl0eSB0byBj
b252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc1CisgICAgICAgIHJk
YXI6Ly84OTMzODQ0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpnZXRDb250aWd1b3VzRGF0YSBhbmQK
KyAgICAgICAgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQ01CbG9ja0J1ZmZlciBtZXRo
b2RzLgorCisgICAgICAgIEFQSSB0ZXN0cyBhZGRlZCBmb3IgZ2V0Q29udGlndW91c0RhdGEuCisg
ICAgICAgIGNyZWF0ZUNNQmxvY2tCdWZmZXIgd2lsbCBiZSB1c2VkIGluIGEgZm9sbG93LXVwIHBh
dGNoLgorCisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmdldENvbnRpZ3VvdXNEYXRhIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyZWVTaGFyZWRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
Q01CbG9ja0J1ZmZlciBjb25zdCk6CisKIDIwMjItMDItMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBET00gc3RvcmFnZSBldmVudCBkaXNwYXRj
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZDA5ZjEwNTJh
MGYzMWVlOTcwNjExMDEzYjM5MzVmYjUzMDk1NTA5Ni4uYzkzN2UxZDc0MGEzYjllOTFmZjIwMDQy
MzYzOGQwY2U2MTY5OGMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCkBAIC0xNTIsNiArMTUyLDI0IEBAIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlvbikgY29uc3QKICAgICByZXR1
cm4geyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwgcG9zaXRpb24gLSBlbGVtZW50LT5iZWdp
blBvc2l0aW9uIH07CiB9CiAKK1JlZjxTaGFyZWRCdWZmZXI+IEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI6OmdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCkgY29u
c3QKK3sKKyAgICBpZiAocG9zaXRpb24gPj0gbV9zaXplKQorICAgICAgICByZXR1cm4gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoKTsKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBlbGVt
ZW50ID0gZ2V0U2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBzaXplX3Qgb2Zmc2V0
SW5TZWdtZW50ID0gcG9zaXRpb24gLSBlbGVtZW50LT5iZWdpblBvc2l0aW9uOworICAgIGlmIChl
bGVtZW50LT5zZWdtZW50LT5zaXplKCkgLSBvZmZzZXRJblNlZ21lbnQgPj0gbGVuZ3RoKQorICAg
ICAgICByZXR1cm4gU2hhcmVkQnVmZmVyRGF0YVZpZXcgeyBlbGVtZW50LT5zZWdtZW50LmNvcHlS
ZWYoKSwgb2Zmc2V0SW5TZWdtZW50LCBsZW5ndGggfS5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gY29tYmluZWREYXRhOworICAgIGNvbWJpbmVkRGF0YS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgY29tYmluZWREYXRhLmFwcGVuZChlbGVtZW50
LT5zZWdtZW50LT5kYXRhKCkgKyBvZmZzZXRJblNlZ21lbnQsIGVsZW1lbnQtPnNlZ21lbnQtPnNp
emUoKSAtIG9mZnNldEluU2VnbWVudCk7CisgICAgZm9yICgrK2VsZW1lbnQ7IGNvbWJpbmVkRGF0
YS5zaXplKCkgPCBsZW5ndGggJiYgZWxlbWVudCAhPSBtX3NlZ21lbnRzLmVuZCgpOyBlbGVtZW50
KyspIHsKKyAgICAgICAgYXV0byBjYW5Db3B5ID0gc3RkOjptaW4obGVuZ3RoIC0gY29tYmluZWRE
YXRhLnNpemUoKSwgZWxlbWVudC0+c2VnbWVudC0+c2l6ZSgpKTsKKyAgICAgICAgY29tYmluZWRE
YXRhLmFwcGVuZChlbGVtZW50LT5zZWdtZW50LT5kYXRhKCksIGNhbkNvcHkpOworICAgIH0KKyAg
ICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShjb21iaW5lZERhdGEpKTsKK30K
KwogY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnRWZWN0b3JFbnRyeSog
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3Np
dGlvbikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChwb3NpdGlvbiA8IG1fc2l6ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGNhZWYzZjI2MjAwMzNkZDhj
ZmYxNTYyM2YyM2M2YjZjOWI1MzRiMzcuLjNiZjhhNmQxN2UyMmZhMmU3OTRiZjRmZjY4MTZhNTgy
ZTkwZjk5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC01NCw2
ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9HQnl0ZXMgR0J5dGVzOwogI2lmIFVTRShGT1VOREFU
SU9OKQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7Cit0eXBlZGVmIHN0
cnVjdCBPcGFxdWVDTUJsb2NrQnVmZmVyKiBDTUJsb2NrQnVmZmVyUmVmOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtMTQ5LDYgKzE1MCw3IEBAIHB1YmxpYzoKICNpZiBVU0UoRk9VTkRB
VElPTikKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNEYXRh
QXJyYXkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI+IGNyZWF0ZShOU0RhdGEqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5Q
dHI8Q01CbG9ja0J1ZmZlclJlZj4gY3JlYXRlQ01CbG9ja0J1ZmZlcigpIGNvbnN0OwogI2VuZGlm
CiAjaWYgVVNFKENGKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4gY3JlYXRlKENGRGF0YVJlZik7CkBAIC0xOTQsNiArMTk2LDcgQEAgcHVibGlj
OgogCiAgICAgLy8gYmVnaW4gYW5kIGVuZCB0YWtlIE8oMSkgdGltZSwgdGhpcyB0YWtlcyBPKGxv
ZyhOKSkgdGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCBTaGFyZWRCdWZmZXJEYXRhVmlldyBnZXRT
b21lRGF0YShzaXplX3QgcG9zaXRpb24pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxT
aGFyZWRCdWZmZXI+IGdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxl
bmd0aCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9IZXhTdHJpbmcoKSBj
b25zdDsKIApAQCAtMjQ2LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDb21iaW5lcyBh
bGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhhdCB2ZWN0b3IgYWZ0
ZXIgY2xlYXJpbmcgdGhlIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIuCiAgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPHVpbnQ4X3Q+IHRha2VEYXRhKCk7Ci0gICAgY29uc3QgRGF0YVNlZ21lbnRWZWN0
b3JFbnRyeSogZ2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGl0aW9uKSBjb25zdDsK
KyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBnZXRTZWdtZW50Rm9yUG9zaXRpb24o
c2l6ZV90IHBvc2l0aW9uKSBjb25zdDsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBp
bnRlcm5hbGx5Q29uc2lzdGVudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbQppbmRleCA2NjQyN2RmYmYwNWZkNzI2YWZk
OTlhMzI5YzZhYzExYWM5ZWQ3YTU1Li5lYjM4NWE0ZDUwOWI0ZGMwNDZmYjM2N2NhN2I5YTNiMmNm
Y2JmMDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRC
dWZmZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRC
dWZmZXJDb2NvYS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiV2ViQ29yZUpJVE9wZXJh
dGlvbnMuaCIKICNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlh
U29mdExpbmsuaD4KICNpbXBvcnQgPHN0cmluZy5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQu
aD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgpAQCAtOTksNiArMTAwLDQy
IEBAIHZvaWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKE5TRGF0YSAqZGF0YSkKICAg
ICByZXR1cm4gYXBwZW5kKGJyaWRnZV9jYXN0KGRhdGEpKTsKIH0KIAorc3RhdGljIHZvaWQgRnJl
ZVNoYXJlZEJ1ZmZlcih2b2lkKiByZWZjb24sIHZvaWQqLCBzaXplX3QpCit7CisgICAgYXV0byog
YnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBEYXRhU2VnbWVudCo+KHJlZmNvbik7Cisg
ICAgYnVmZmVyLT5kZXJlZigpOworfQorCitSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gRnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQ01CbG9ja0J1ZmZlcigpIGNvbnN0Cit7CisgICAg
Q01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgYXV0byBlcnIg
PSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVFbXB0eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtX3Nl
Z21lbnRzLnNpemUoKSwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKKyAgICBpZiAoZXJyICE9IGtDTUJs
b2NrQnVmZmVyTm9FcnIgfHwgIXJhd0Jsb2NrQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBhdXRvIGJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7CisKKyAg
ICBmb3IgKGF1dG8mIHNlZ21lbnQgOiAqdGhpcykgeworICAgICAgICAvLyBGcm9tIENNQmxvY2tC
dWZmZXJDdXN0b21CbG9ja1NvdXJjZSBkb2N1bWVudGF0aW9uOgorICAgICAgICAvLyBOb3RlIHRo
YXQgZm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCB0aGlzIHN0cnVjdCBjb250YWlucyBtaXNhbGln
bmVkIGZ1bmN0aW9uIHBvaW50ZXJzLgorICAgICAgICAvLyBUbyBhdm9pZCBsaW5rLXRpbWUgaXNz
dWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGNsaWVudHMgZmlsbCBDTUJsb2NrQnVmZmVyQ3Vz
dG9tQmxvY2tTb3VyY2UncyBmdW5jdGlvbiBwb2ludGVyIGZpZWxkcworICAgICAgICAvLyBieSB1
c2luZyBhc3NpZ25tZW50IHN0YXRlbWVudHMsIHJhdGhlciB0aGFuIGRlY2xhcmluZyB0aGVtIGFz
IGdsb2JhbCBvciBzdGF0aWMgc3RydWN0cy4KKyAgICAgICAgQ01CbG9ja0J1ZmZlckN1c3RvbUJs
b2NrU291cmNlIGFsbG9jYXRvcjsKKyAgICAgICAgYWxsb2NhdG9yLnZlcnNpb24gPSAwOworICAg
ICAgICBhbGxvY2F0b3IuQWxsb2NhdGVCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGFsbG9jYXRv
ci5GcmVlQmxvY2sgPSBGcmVlU2hhcmVkQnVmZmVyOworICAgICAgICBhbGxvY2F0b3IucmVmQ29u
ID0gY29uc3RfY2FzdDxEYXRhU2VnbWVudCo+KHNlZ21lbnQuc2VnbWVudC5wdHIoKSk7CisgICAg
ICAgIHNlZ21lbnQuc2VnbWVudC0+cmVmKCk7CisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3
UGFydGlhbEJ1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZl
ckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhudWxscHRyLCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3Rf
Y2FzdDx1aW50OF90Kj4oc2VnbWVudC5zZWdtZW50LT5kYXRhKCkpKSwgc2VnbWVudC5zZWdtZW50
LT5zaXplKCksIG51bGxwdHIsICZhbGxvY2F0b3IsIDAsIHNlZ21lbnQuc2VnbWVudC0+c2l6ZSgp
LCAwLCAmcmF3UGFydGlhbEJ1ZmZlcik7CisgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZm
ZXJOb0VycikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvIHBhcnRp
YWxCdWZmZXIgPSBhZG9wdENGKHJhd1BhcnRpYWxCdWZmZXIpOworICAgICAgICBpZiAoUEFMOjpD
TUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKHJhd0Jsb2NrQnVmZmVyLCByYXdQYXJ0
aWFsQnVmZmVyLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICByZXR1cm4gYmxvY2tCdWZmZXI7Cit9CisKIFJldGFpblB0cjxOU0RhdGE+IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlTlNEYXRhKCkgY29uc3QKIHsKICAgICByZXR1cm4gYnJpZGdlX2Nhc3QoY3Jl
YXRlQ0ZEYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVh
NDhiMDlkOTQxMWQ0YzliNjY0Li4wZjg2ZjAxNDM0YTBmYTdlZDU1ZWJkZTQ2NGExMmE1YjE1N2U1
NWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgU291cmNlQnVm
ZmVyUHJpdmF0ZTo6cmVlbnF1ZXVlTWVkaWFGb3JUaW1lKFRyYWNrQnVmZmVyJiB0cmFja0J1ZmZl
ciwgY29uc3QKICAgICAgICAgfHwgKGN1cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+Zmlyc3QgLSB0
aW1lKSA+IHRpbWVGdWRnZUZhY3RvcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBTZWFj
aCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxlLgorICAgIC8vIFNlYXJjaCBi
YWNrd2FyZCBmb3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxlLgogICAgIERlY29kZU9yZGVyU2Ft
cGxlTWFwOjpLZXlUeXBlIGRlY29kZUtleShjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29u
ZC0+ZGVjb2RlVGltZSgpLCBjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+cHJlc2Vu
dGF0aW9uVGltZSgpKTsKICAgICBhdXRvIGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciA9IHRyYWNr
QnVmZmVyLnNhbXBsZXMuZGVjb2RlT3JkZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtleShkZWNv
ZGVLZXkpOwogICAgIEFTU0VSVChjdXJyZW50U2FtcGxlRFRTSXRlcmF0b3IgIT0gdHJhY2tCdWZm
ZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmVuZCgpKTsKQEAgLTExNzIsNiArMTE3Miw5IEBAIHZv
aWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+
JiYgb3JpZ2luYWxTYW1wbGUpCiAgICAgICAgICAgICAgICAgTWVkaWFUaW1lIGVyYXNlQmVnaW5U
aW1lID0gdHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcDsKICAgICAgICAg
ICAgICAgICBNZWRpYVRpbWUgZXJhc2VFbmRUaW1lID0gZnJhbWVFbmRUaW1lc3RhbXAgLSBjb250
aWd1b3VzRnJhbWVUb2xlcmFuY2U7CiAKKyAgICAgICAgICAgICAgICBpZiAoZXJhc2VFbmRUaW1l
ID49IGVyYXNlQmVnaW5UaW1lKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRl
cmF0b3JfcmFuZ2UgcmFuZ2U7CiAgICAgICAgICAgICAgICAgaWYgKGhpZ2hlc3RCdWZmZXJlZFRp
bWUgLSB0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wIDwgdHJhY2tCdWZm
ZXIubGFzdEZyYW1lRHVyYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5l
dyBmcmFtZSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXJlZCByYW5nZXMsIHBlcmZvcm0gYSBz
ZXF1ZW50aWFsIHNjYW4gZnJvbSBlbmQgKE8oMSkpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNLmNwcAppbmRleCBhZTE2NDE0ZjIxYzY4NDZjMTg5NzcwOWUxNDI0ZTRhNmE0Yjc2MWEwLi4z
YzIxYzQzMDc2ZGM4ODVmYWU3YzE5YWE1ODBiZDVmOWYzZTBlMWVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJN
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VC
dWZmZXJQYXJzZXJXZWJNLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIk1lZGlhU2Ft
cGxlQVZGT2JqQy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAj
aW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0
ZVdlYk0uaCIKICNpbmNsdWRlICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgpAQCAtMzY1LDIx
ICszNjQsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a1dvdWxk
QmxvY2spOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIEZyZWVTaGFyZWRCdWZmZXIodm9pZCog
cmVmY29uLCB2b2lkKiwgc2l6ZV90KQorICAgIFN0YXR1cyBSZWFkSW50byhzdGQ6OnNpemVfdCBu
dW1Ub1JlYWQsIFNoYXJlZEJ1ZmZlckJ1aWxkZXImIG91dHB1dEJ1ZmZlciwgdWludDY0X3QqIG51
bUFjdHVhbGx5UmVhZCkKICAgICB7Ci0gICAgICAgIGF1dG8qIGJ1ZmZlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8U2hhcmVkQnVmZmVyKj4ocmVmY29uKTsKLSAgICAgICAgYnVmZmVyLT5kZXJlZigpOwot
ICAgIH0KLQotICAgIFN0YXR1cyBSZWFkSW50byhzdGQ6OnNpemVfdCBudW1Ub1JlYWQsIENNQmxv
Y2tCdWZmZXJSZWYgb3V0cHV0QnVmZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG91dHB1dEJ1ZmZlciAmJiBudW1BY3R1YWxseVJlYWQpOworICAg
ICAgICBBU1NFUlQobnVtQWN0dWFsbHlSZWFkKTsKICAgICAgICAgaWYgKCFudW1BY3R1YWxseVJl
YWQpCiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7
CiAKICAgICAgICAgKm51bUFjdHVhbGx5UmVhZCA9IDA7Ci0gICAgICAgIGlmICghb3V0cHV0QnVm
ZmVyKQotICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkp
OwogCiAgICAgICAgIHdoaWxlIChudW1Ub1JlYWQgJiYgbV9jdXJyZW50U2VnbWVudCAhPSBtX2Rh
dGEuZW5kKCkpIHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRTZWdtZW50ID0gKm1fY3VycmVu
dFNlZ21lbnQ7CkBAIC0zODksNDQgKzM4MCwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBzaGFyZWRCdWZmZXIgPSBjdXJyZW50U2VnbWVudC5nZXRTaGFyZWRCdWZmZXIoKTsKLSAgICAg
ICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAg
ICAgICAgdWludDY0X3QgbGFzdFJlYWQgPSAwOworICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gcmF3QmxvY2tCdWZmZXI7CiAgICAgICAgICAgICBpZiAoIXNoYXJlZEJ1ZmZlcikgewog
ICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IGFsbG9jYXRlIG1vcmUgbWVt
b3J5IHRoYW4gbmVlZGVkIGlmIHRoZSByZWFkIGlzIHBhcnRpYWwuCi0gICAgICAgICAgICAgICAg
YXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2soa0NGQWxs
b2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbnVtVG9SZWFkLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBu
dWxscHRyLCAwLCBudW1Ub1JlYWQsIGtDTUJsb2NrQnVmZmVyQXNzdXJlTWVtb3J5Tm93RmxhZywg
JnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVm
ZmVyTm9FcnIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90
RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEg
PSBudWxscHRyOwotICAgICAgICAgICAgICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24g
PSAwOwotICAgICAgICAgICAgICAgIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2lu
dGVyKHJhd0Jsb2NrQnVmZmVyLCAwLCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAo
Y2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NN
QmxvY2tCdWZmZXJOb0VycikKKyAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVy
OworICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLnRyeVJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bnVtVG9SZWFkKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtO
b3RFbm91Z2hNZW1vcnkpOwotICAgICAgICAgICAgICAgIGF1dG8gcmVhZFJlc3VsdCA9IGN1cnJl
bnRTZWdtZW50LnJlYWQobV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIG51bVRvUmVhZCwgYmxvY2tC
dWZmZXJEYXRhKTsKKyAgICAgICAgICAgICAgICBidWZmZXIucmVzaXplKG51bVRvUmVhZCk7Cisg
ICAgICAgICAgICAgICAgYXV0byByZWFkUmVzdWx0ID0gY3VycmVudFNlZ21lbnQucmVhZChtX3Bv
c2l0aW9uV2l0aGluU2VnbWVudCwgbnVtVG9SZWFkLCBidWZmZXIuZGF0YSgpKTsKICAgICAgICAg
ICAgICAgICBpZiAoIXJlYWRSZXN1bHQuaGFzX3ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzZWdtZW50UmVhZEVycm9yVG9XZWJtU3RhdHVzKHJlYWRSZXN1bHQuZXJyb3IoKSk7
Ci0gICAgICAgICAgICAgICAgbGFzdFJlYWQgPSByZWFkUmVzdWx0LnZhbHVlKCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IGNvdWxkIHdlIG9ubHkgY3Jl
YXRlIGEgbmV3IENNQmxvY2tCdWZmZXIgaWYgdGhlIGJhY2tlbmQgbWVtb3J5IGNoYW5nZWQgc2lu
Y2UgdGhlIHByZXZpb3VzIG9uZT8KLSAgICAgICAgICAgICAgICBzaXplX3QgY2FuUmVhZCA9IHN0
ZDo6bWluPHNpemVfdD4obnVtVG9SZWFkLCBzaGFyZWRCdWZmZXItPnNpemUoKSAtIG1fcG9zaXRp
b25XaXRoaW5TZWdtZW50KTsKLSAgICAgICAgICAgICAgICAvLyBGcm9tIENNQmxvY2tCdWZmZXJD
dXN0b21CbG9ja1NvdXJjZSBkb2N1bWVudGF0aW9uOgotICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoaXMgc3RydWN0IGNvbnRhaW5zIG1pc2Fs
aWduZWQgZnVuY3Rpb24gcG9pbnRlcnMuCi0gICAgICAgICAgICAgICAgLy8gVG8gYXZvaWQgbGlu
ay10aW1lIGlzc3VlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBjbGllbnRzIGZpbGwgQ01CbG9j
a0J1ZmZlckN1c3RvbUJsb2NrU291cmNlJ3MgZnVuY3Rpb24gcG9pbnRlciBmaWVsZHMKLSAgICAg
ICAgICAgICAgICAvLyBieSB1c2luZyBhc3NpZ25tZW50IHN0YXRlbWVudHMsIHJhdGhlciB0aGFu
IGRlY2xhcmluZyB0aGVtIGFzIGdsb2JhbCBvciBzdGF0aWMgc3RydWN0cy4KLSAgICAgICAgICAg
ICAgICBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgYWxsb2NhdG9yOwotICAgICAgICAg
ICAgICAgIGFsbG9jYXRvci52ZXJzaW9uID0gMDsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3Iu
QWxsb2NhdGVCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLkZyZWVC
bG9jayA9IEZyZWVTaGFyZWRCdWZmZXI7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnJlZkNv
biA9IHNoYXJlZEJ1ZmZlci5nZXQoKTsKLSAgICAgICAgICAgICAgICBzaGFyZWRCdWZmZXItPnJl
ZigpOwotICAgICAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRl
V2l0aE1lbW9yeUJsb2NrKG51bGxwdHIsIHN0YXRpY19jYXN0PHZvaWQqPihjb25zdF9jYXN0PHVp
bnQ4X3QqPihzaGFyZWRCdWZmZXItPmRhdGEoKSkpLCBzaGFyZWRCdWZmZXItPnNpemUoKSwgbnVs
bHB0ciwgJmFsbG9jYXRvciwgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIGNhblJlYWQsIDAsICZy
YXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZl
ck5vRXJyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVu
b3VnaE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgbGFzdFJlYWQgPSBjYW5SZWFkOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYXV0byBibG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tC
dWZmZXIpOwotICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJBcHBlbmRC
dWZmZXJSZWZlcmVuY2Uob3V0cHV0QnVmZmVyLCByYXdCbG9ja0J1ZmZlciwgMCwgMCwgMCk7Ci0g
ICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOworICAgICAgICAgICAg
ICAgIGJ1ZmZlci5yZXNpemUocmVhZFJlc3VsdC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBy
YXdCbG9ja0J1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByYXdCbG9ja0J1ZmZlciA9IHNoYXJl
ZEJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEobV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIG51bVRv
UmVhZCk7CisgICAgICAgICAgICBhdXRvIGxhc3RSZWFkID0gcmF3QmxvY2tCdWZmZXItPnNpemUo
KTsKKyAgICAgICAgICAgIG91dHB1dEJ1ZmZlci5hcHBlbmQoKnJhd0Jsb2NrQnVmZmVyKTsKICAg
ICAgICAgICAgIG1fcG9zaXRpb24gKz0gbGFzdFJlYWQ7CiAgICAgICAgICAgICAqbnVtQWN0dWFs
bHlSZWFkICs9IGxhc3RSZWFkOwogICAgICAgICAgICAgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQg
Kz0gbGFzdFJlYWQ7CkBAIC0xMjAxLDE2ICsxMTcwLDEwIEBAIHZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNh
bXBsCiAKICNkZWZpbmUgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSguLi4pIGlmIChwYXJz
ZXIoKS5sb2dnZXJQdHIoKSkgcGFyc2VyKCkubG9nZ2VyUHRyKCktPmVycm9yKGxvZ0NoYW5uZWwo
KSwgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIHBh
cnNlcigpLmxvZ0lkZW50aWZpZXIoKSksIF9fVkFfQVJHU19fKQogCi1SZXRhaW5QdHI8Q01CbG9j
a0J1ZmZlclJlZj4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpjb250aWd1b3Vz
Q29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdAor
UmVmPFNoYXJlZEJ1ZmZlcj4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpjb250
aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBj
b25zdAogewotICAgIGlmICghb2Zmc2V0ICYmICFsZW5ndGggJiYgUEFMOjpDTUJsb2NrQnVmZmVy
SXNSYW5nZUNvbnRpZ3VvdXMobV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCAwLCAwKSkKLSAg
ICAgICAgcmV0dXJuIG1fY29tcGxldGVCbG9ja0J1ZmZlcjsKLSAgICBDTUJsb2NrQnVmZmVyUmVm
IHJhd0NvbnRpZ3VvdXNCdWZmZXIgPSBudWxscHRyOwotICAgIGlmIChQQUw6OkNNQmxvY2tCdWZm
ZXJDcmVhdGVDb250aWd1b3VzKG51bGxwdHIsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwg
bnVsbHB0ciwgbnVsbHB0ciwgb2Zmc2V0LCBsZW5ndGgsIDAsICZyYXdDb250aWd1b3VzQnVmZmVy
KSAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxUKFdl
YkF1ZGlvLCAiZmFpbGVkIHRvIGNyZWF0ZSBjb250aWd1b3VzIGJsb2NrIGJ1ZmZlciIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0YocmF3Q29udGln
dW91c0J1ZmZlcik7CisgICAgQVNTRVJUKG1fY29tcGxldGVCbG9ja0J1ZmZlcnMgJiYgbV9jb21w
bGV0ZUJsb2NrQnVmZmVycy5zaXplKCkgPj0gb2Zmc2V0ICsgbGVuZ3RoKTsKKyAgICByZXR1cm4g
bV9jb21wbGV0ZUJsb2NrQnVmZmVycy5nZXQoKS0+Z2V0Q29udGlndW91c0RhdGEob2Zmc2V0LCBs
ZW5ndGgpOwogfQogCiB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tE
YXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpGcmFt
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQpAQCAtMTIyNCwy
MCArMTE4Nyw5IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKCFtX2NvbXBsZXRl
UGFja2V0U2l6ZSkKICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBtZXRhZGF0YS5zaXpl
OwogCi0gICAgaWYgKCFtX2N1cnJlbnRCbG9ja0J1ZmZlcikgewotICAgICAgICBBU1NFUlQoIW1f
cGFydGlhbEJ5dGVzUmVhZCk7Ci0gICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZm
ZXIgPSBudWxscHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0
ZUVtcHR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5LCAwLCAm
cmF3QmxvY2tCdWZmZXIpOwotICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIg
fHwgIXJhd0Jsb2NrQnVmZmVyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIp
OwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAg
ICAgICB9Ci0gICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9ja0J1
ZmZlcik7Ci0gICAgfQotCiAgICAgd2hpbGUgKCpieXRlc1JlbWFpbmluZykgewogICAgICAgICB1
aW50NjRfdCBieXRlc1JlYWQ7Ci0gICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5
dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgJmJ5dGVzUmVhZCk7Cisg
ICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJl
bnRCbG9ja0J1ZmZlciwgJmJ5dGVzUmVhZCk7CiAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBi
eXRlc1JlYWQ7CiAgICAgICAgIG1fcGFydGlhbEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CiAKQEAg
LTEyNDksNjggKzEyMDEsNjAgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWQKICAgICBpZiAobV9w
YXJ0aWFsQnl0ZXNSZWFkIDwgKm1fY29tcGxldGVQYWNrZXRTaXplKQogICAgICAgICByZXR1cm4g
d2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rUGFydGlhbCk7CiAKLSAgICBpZiAoIW1fY29t
cGxldGVCbG9ja0J1ZmZlcikKLSAgICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gV1RGTW92
ZShtX2N1cnJlbnRCbG9ja0J1ZmZlcik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gZXJyID0g
UEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKG1fY29tcGxldGVCbG9ja0J1
ZmZlci5nZXQoKSwgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIDAsIDAsIDApOwotICAgICAg
ICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJD
TUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlIHRvIGNvbXBsZXRlIGJsb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
Tm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgfQotICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZl
ciA9IG51bGxwdHI7Ci0gICAgfQorICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlcnMuYXBwZW5kKG1f
Y3VycmVudEJsb2NrQnVmZmVyLnRha2UoKSk7CiAgICAgbV9wYXJ0aWFsQnl0ZXNSZWFkID0gMDsK
IAogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOwog
fQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRh
dGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJl
c2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPHNpemVfdD4g
bGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KQogewotI2lmIEVOQUJMRShWUDkpCi0gICAgYXV0byBzdGF0
dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsKLSAg
ICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAg
ICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGNy
ZWF0ZVNhbXBsZUJ1ZmZlcihwcmVzZW50YXRpb25UaW1lLCBzYW1wbGVDb3VudCwgbWV0YWRhdGEp
OwotICAgIHJlc2V0KCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOwotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVD
b3VudCk7Ci0jZW5kaWYKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBu
dWxscHRyOworICAgIGF1dG8gZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtD
RkFsbG9jYXRvckRlZmF1bHQsIG1fY29tcGxldGVCbG9ja0J1ZmZlcnMudGFrZSgpLT5jcmVhdGVD
TUJsb2NrQnVmZmVyKCkuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0
U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3Muc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3MuZGF0
YSgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRTaXplcy5kYXRhKCksICZyYXdTYW1w
bGVCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9Q
T1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSBmYWlsZWQgd2l0aCAlZCIsIGVycik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRl
c1JlbWFpbmluZyk7CisgICAgcG9zdFByb2Nlc3MocmF3U2FtcGxlQnVmZmVyKTsKKworICAgIGF1
dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJv
dmlkZU1lZGlhRGF0YShhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIGxhdGVzdEJ5
dGVSYW5nZU9mZnNldCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9U
cmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKCkKK3sKKyAgICBtX2tleUZyYW1lcy5jbGVhcigpOwor
ICAgIFRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQoKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGlt
ZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50LCBjb25zdCB3ZWJtOjpGcmFtZU1l
dGFkYXRhJiBtZXRhZGF0YSkKK3dlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpW
aWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29u
c3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29u
c3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxFKFZQOSkKLSAg
ICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOworICAgIGF1dG8gc3RhdHVzID0g
cmVhZEZyYW1lRGF0YShyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7CisgICAgaWYg
KCFzdGF0dXMuY29tcGxldGVkX29rKCkpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKICAgICBj
b25zdGV4cHIgc2l6ZV90IG1heEhlYWRlclNpemUgPSAzMjsgLy8gVGhlIG1heGltdW0gbGVuZ3Ro
IG9mIGEgVlA5IHVuY29tcHJlc3NlZCBoZWFkZXIgaXMgMTQ0IGJpdHMgYW5kIDExIGJ5dGVzIGZv
ciBWUDguIFJvdW5kIGhpZ2guCiAgICAgc2l6ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6
Om1pbihtYXhIZWFkZXJTaXplLCAqbV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAgIGF1dG8gY29u
dGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAsIHNlZ21lbnRI
ZWFkZXJMZW5ndGgpOwotICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewotICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVm
ZmVyIGZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9p
bnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hhcioq
KSZibG9ja0J1ZmZlckRhdGEpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRo
IGVycm9yIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIGNvbnRpZ3Vv
dXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRC
eXRlT2Zmc2V0LCBzZWdtZW50SGVhZGVyTGVuZ3RoKTsKKyAgICBjb25zdCB1aW50OF90KiBibG9j
a0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCk7CiAKICAgICBib29sIGlzS2V5
ID0gZmFsc2U7CiAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERl
c2NyaXB0aW9uOwogICAgIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6VlA5KSB7CiAgICAgICAg
IGlmICghbV9oZWFkZXJQYXJzZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJE
YXRhLCBzZWdtZW50SGVhZGVyTGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKIAogICAgICAgICBpZiAo
bV9oZWFkZXJQYXJzZXIua2V5KCkpIHsKICAgICAgICAgICAgIGlzS2V5ID0gdHJ1ZTsKICAgICAg
ICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZy
b21WUDlIZWFkZXJQYXJzZXIobV9oZWFkZXJQYXJzZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5j
b2xvdXIpOwogICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewogICAgICAgICAg
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9y
bWF0IGRlc2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3Zl
KGZvcm1hdERlc2NyaXB0aW9uKSk7CiAgICAgICAgIH0KQEAgLTEzMjEsNyArMTI2NSw3IEBAIHZv
aWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1
ZmZlcihjb25zdCBDTVRpbWUmIHByCiAgICAgICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9u
ID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCku
dmlkZW8udmFsdWUoKS5jb2xvdXIpOwogICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlv
bikgewogICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxl
ZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBi
eXRlc1JlbWFpbmluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXRGb3JtYXREZXNj
cmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7CiAgICAgICAgIH0KQEAgLTEzMzYs
NDQgKzEyODAsNDQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0
YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYgcHIKICAgICBpZiAodHJhY2suZGVm
YXVsdF9kdXJhdGlvbi5pc19wcmVzZW50KCkpCiAgICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVm
YXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUgLyBrX3Vz
X2luX3NlY29uZHM7CiAKLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBu
dWxscHRyOwotICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmcgPSB7IFBBTDo6Q01UaW1lTWFr
ZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUpLCBwcmVzZW50YXRpb25UaW1l
LCBwcmVzZW50YXRpb25UaW1lIH07Ci0gICAgZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0
ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwg
dGhpcy0+Zm9ybWF0RGVzY3JpcHRpb24oKS5nZXQoKSwgc2FtcGxlQ291bnQsIDEsICZ0aW1pbmcs
IDEsICYqbV9jb21wbGV0ZVBhY2tldFNpemUsICZyYXdTYW1wbGVCdWZmZXIpOwotICAgIGlmIChl
cnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZm
ZXJDcmVhdGVSZWFkeSBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7
CisgICAgbV9rZXlGcmFtZXMuYXBwZW5kKGlzS2V5KTsKKyAgICBtX3BhY2tldFNpemVzLmFwcGVu
ZCgqbV9jb21wbGV0ZVBhY2tldFNpemUpOworICAgIG1fcGFja2V0VGltaW5ncy5hcHBlbmQoeyBQ
QUw6OkNNVGltZU1ha2UoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJl
c2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSB9KTsKKyAgICBtX2N1cnJlbnRQYWNrZXRC
eXRlT2Zmc2V0ICs9ICptX2NvbXBsZXRlUGFja2V0U2l6ZTsKKyAgICBtX2NvbXBsZXRlUGFja2V0
U2l6ZSA9IHN0ZDo6bnVsbG9wdDsKKworICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKKworICAg
IEFTU0VSVCghKmJ5dGVzUmVtYWluaW5nKTsKKyAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06
OlN0YXR1czo6a09rQ29tcGxldGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByZXNlbnRh
dGlvblRpbWUpOworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVDb3VudCk7CisgICAgVU5VU0VEX1BB
UkFNKG1ldGFkYXRhKTsKKyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7
CisjZW5kaWYKK30KIAotICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9IFBBTDo6Q01TYW1wbGVC
dWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7
Cit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpwb3N0UHJvY2Vz
cyhDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIpCit7CisgICAgYXV0byBhdHRhY2ht
ZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXko
cmF3U2FtcGxlQnVmZmVyLCB0cnVlKTsKICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7CiAg
ICAgaWYgKCFhdHRhY2htZW50c0FycmF5KSB7CiAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZf
UE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheSByZXR1cm5l
ZCBOVUxMIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzS2V5KSB7Ci0g
ICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNo
bWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBDRk11dGFibGVEaWN0
aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25h
cnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOworICAg
IEFTU0VSVChzaXplX3QoQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpKSA9PSBtX2tl
eUZyYW1lcy5zaXplKCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5
R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENG
TXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRh
YmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5
LCBpKSk7CisgICAgICAgIGlmICghbV9rZXlGcmFtZXNbaV0pCiAgICAgICAgICAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05v
dFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsKLSAgICAgICAgfQogICAgIH0KLQotICAgIGF1dG8gdHJh
Y2tJRCA9IHRyYWNrLnRyYWNrX3VpZC52YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRp
YURhdGEoV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBtZXRhZGF0YS5wb3NpdGlvbik7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwcmVzZW50YXRpb25UaW1lKTsKLSAgICBVTlVTRURf
UEFSQU0oc2FtcGxlQ291bnQpOwotICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKFZQOSkKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1Ry
YWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQoKQogewogICAgIG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxv
Y2sgPSAwOwotICAgIG1fcGFja2V0U2l6ZXMuY2xlYXIoKTsKLSAgICBtX3BhY2tldFRpbWluZ3Mu
Y2xlYXIoKTsKLSAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ID0gMDsKICAgICBUcmFja0Rh
dGE6OnJlc2V0Q29tcGxldGVkKCk7CiB9CiAKQEAgLTEzODMsOCArMTMyNyw3IEBAIHdlYm06OlN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1l
RGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgIGF1dG8mIGxhc3RUaW1pbmcgPSBtX3BhY2tldFRpbWlu
Z3MubGFzdCgpOwogICAgICAgICBpZiAoUEFMOjpDTVRpbWVDb21wYXJlKFBBTDo6Q01UaW1lQWRk
KGxhc3RUaW1pbmcuZHVyYXRpb24sIGxhc3RUaW1pbmcucHJlc2VudGF0aW9uVGltZVN0YW1wKSwg
cHJlc2VudGF0aW9uVGltZSkpIHsKICAgICAgICAgICAgIC8vIERpc2NvbnRpbnVpdHkgZW5jb3Vu
dGVyZWQsIGVtaXQgdGhlIHByZXZpb3VzbHkgZGVtdXhlZCBzYW1wbGVzLgotICAgICAgICAgICAg
Y3JlYXRlU2FtcGxlQnVmZmVyKG1ldGFkYXRhLnBvc2l0aW9uKTsKLSAgICAgICAgICAgIHJlc2V0
KCk7CisgICAgICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTEzOTIsMTEgKzEzMzUsNiBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgIGlm
ICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICByZXR1cm4gc3RhdHVzOwogCi0gICAg
Ly8gQXR0ZW1wdHMgdG8gbWluaW1pc2UgdGhlIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGlvbnMg
ZHVlIHRvIHJlcGV0aXR2ZSBDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlIGNhbGxz
IGluIHJlYWRGcmFtZURhdGEuCi0gICAgbU51bUZyYW1lc0luQ29tcGxldGVCbG9jaysrOwotICAg
IGlmIChtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrID4gbU1heEJsb2NrQnVmZmVyQ2FwYWNpdHkp
Ci0gICAgICAgIG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5ID0gbU51bUZyYW1lc0luQ29tcGxldGVC
bG9jazsKLQogICAgIGlmIChtX3BhY2tldFNpemVzLmlzRW1wdHkoKSkKICAgICAgICAgbV9zYW1w
bGVQcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKIApAQCAtMTQxMiwxNiArMTM1
MCw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0
YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgICAgICBmb3JtYXREZXNjcmlw
dGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6
ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkpOwogICAgICAgICBlbHNlIGlmIChjb2RlYygpID09IENv
ZGVjVHlwZTo6T3B1cykgewogICAgICAgICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29u
dGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgKm1f
Y29tcGxldGVQYWNrZXRTaXplKTsKLSAgICAgICAgICAgIGlmICghY29udGlndW91c0J1ZmZlcikg
ewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJh
Y2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0
YSBibG9jayIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVt
YWluaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVy
RGF0YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZl
ckdldERhdGFQb2ludGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxw
dHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgICAgICBpZiAoZXJyKSB7Ci0g
ICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZl
ckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVm
ZmVyLT5kYXRhKCk7CiAgICAgICAgICAgICBPcHVzQ29va2llQ29udGVudHMgY29va2llQ29udGVu
dHM7CiAgICAgICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNp
emUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21wbGV0ZVBhY2tldFNpemUsIGJsb2NrQnVm
ZmVyRGF0YSwgY29va2llQ29udGVudHMpKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIHBhcnNlIE9wdXMgcHJpdmF0ZSBkYXRhIik7CkBA
IC0xNDU2LDE2ICsxMzg1LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgT3B1
c0Nvb2tpZUNvbnRlbnRzIGNvb2tpZUNvbnRlbnRzOwogICAgICAgICBhdXRvJiBwcml2YXRlRGF0
YSA9IHRyYWNrKCkuY29kZWNfcHJpdmF0ZS52YWx1ZSgpOwogICAgICAgICBhdXRvIGNvbnRpZ3Vv
dXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRC
eXRlT2Zmc2V0LCAqbV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAgICAgICBpZiAoIWNvbnRpZ3Vv
dXNCdWZmZXIpIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1
ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3Vv
dXMgZGF0YSBibG9jayIpOwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNS
ZW1haW5pbmcpOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9
IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBv
aW50ZXIoY29udGlndW91c0J1ZmZlci5nZXQoKSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgKGNoYXIq
KikmYmxvY2tCdWZmZXJEYXRhKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUEFS
U0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZh
aWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIs
IGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgfQorICAgICAgICBjb25zdCB1aW50OF90KiBibG9j
a0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCk7CiAgICAgICAgIGlmICghcGFy
c2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCks
ICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxvY2tCdWZmZXJEYXRhLCBjb29raWVDb250ZW50cykK
ICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZyYW1lc1BlclBhY2tldCAhPSBtX2ZyYW1l
c1BlclBhY2tldAogICAgICAgICAgICAgfHwgY29va2llQ29udGVudHMuZnJhbWVEdXJhdGlvbiAh
PSBtX2ZyYW1lRHVyYXRpb24pIHsKQEAgLTE0ODEsNDAgKzE0MDEsMTggQEAgd2VibTo6U3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRh
KHdlYm06OlJlYWQKIAogICAgIGF1dG8gc2FtcGxlRHVyYXRpb24gPSBQQUw6OkNNVGltZUdldFNl
Y29uZHMoUEFMOjpDTVRpbWVTdWJ0cmFjdChwcmVzZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNl
bnRhdGlvblRpbWUpKSArIFBBTDo6Q01UaW1lR2V0U2Vjb25kcyhtX3BhY2tldER1cmF0aW9uKSAq
IHNhbXBsZUNvdW50OwogCi0gICAgaWYgKHNhbXBsZUR1cmF0aW9uID49IG1fbWluaW11bVNhbXBs
ZUR1cmF0aW9uKSB7Ci0gICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3NpdGlv
bik7Ci0gICAgICAgIHJlc2V0KCk7Ci0gICAgfQorICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBt
X21pbmltdW1TYW1wbGVEdXJhdGlvbikKKyAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwog
CiAgICAgQVNTRVJUKCEqYnl0ZXNSZW1haW5pbmcpOwogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMo
d2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxz
aXplX3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCkKLXsKLSAgICBpZiAobV9wYWNrZXRTaXplcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1Nh
bXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVy
Q3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdl
dCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9w
YWNrZXRUaW1pbmdzLnNpemUoKSwgbV9wYWNrZXRUaW1pbmdzLmRhdGEoKSwgbV9wYWNrZXRTaXpl
cy5zaXplKCksIG1fcGFja2V0U2l6ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKTsKLSAgICBp
ZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9T
YW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0RGVzY3JpcHRpb25zIGZhaWxlZCB3aXRoICVkIiwg
ZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFk
b3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKLQotICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJh
Y2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKHNh
bXBsZUJ1ZmZlciksIHRyYWNrSUQsIGxhdGVzdEJ5dGVSYW5nZU9mZnNldCk7Ci19Ci0KIHZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCkKIHsKICAg
ICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAgaWYgKHRyYWNrLT50cmFj
a1R5cGUoKSA9PSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlv
KSB7Ci0gICAgICAgICAgICBBdWRpb1RyYWNrRGF0YSYgYXVkaW9UcmFjayA9IGRvd25jYXN0PEF1
ZGlvVHJhY2tEYXRhPih0cmFjay5nZXQoKSk7Ci0gICAgICAgICAgICBhdWRpb1RyYWNrLmNyZWF0
ZVNhbXBsZUJ1ZmZlcigpOwotICAgICAgICAgICAgYXVkaW9UcmFjay5yZXNldENvbXBsZXRlZCgp
OwotICAgICAgICB9CisgICAgICAgIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpBdWRpbykKKyAgICAgICAgICAgIHRyYWNr
LT5kcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNLmgKaW5kZXggZTg3NmFiNDE0YTRhYmIzM2Q1MThjMzdiNDFmZTVhMTQ3NzZhYjQ5Ni4u
OTExYjk1MTQ4ZmMyMzU2YzBiZjhkZTFkYWM5Y2Q5YTc5YzIzNTVhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKIAorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZl
clBhcnNlci5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgogI2luY2x1
ZGUgPENvcmVNZWRpYS9DTVRpbWUuaD4KQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRp
b24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUJsb2Nr
QnVmZmVyICpDTUJsb2NrQnVmZmVyUmVmOwogCiBuYW1lc3BhY2Ugd2VibSB7CiBjbGFzcyBXZWJt
UGFyc2VyOwpAQCAtMTU3LDMwICsxNTcsNDIgQEAgcHVibGljOgogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCByZXNldENvbXBsZXRlZCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fY29tcGxldGVC
bG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJz
LnJlc2V0KCk7CisgICAgICAgICAgICBtX3BhY2tldFNpemVzLmNsZWFyKCk7CisgICAgICAgICAg
ICBtX3BhY2tldFRpbWluZ3MuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBhY2tldEJ5
dGVPZmZzZXQgPSAwOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgcmVzZXQoKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXNldENvbXBsZXRlZCgpOwogICAgICAgICAgICAgbV9jb21wbGV0ZVBh
Y2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CiAgICAgICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQg
PSAwOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIucmVzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZpcnR1YWwgdm9pZCBkcmFpblBlbmRpbmdTYW1wbGVzKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBs
YXRlc3RCeXRlUmFuZ2VPZmZzZXQgPSBzdGQ6Om51bGxvcHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOworICAgICAgICAg
ICAgcmVzZXQoKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBSZXRhaW5Q
dHI8Q01CbG9ja0J1ZmZlclJlZj4gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90
IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7CisgICAgICAgIHZvaWQgY3JlYXRlU2FtcGxl
QnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6ZV90Pik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0
UHJvY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZikgeyB9OworICAgICAgICBSZWY8U2hhcmVkQnVmZmVy
PiBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVu
Z3RoKSBjb25zdDsKICAgICAgICAgd2VibTo6U3RhdHVzIHJlYWRGcmFtZURhdGEod2VibTo6UmVh
ZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmlu
Zyk7Ci0gICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBtX2NvbXBsZXRlQmxvY2tC
dWZmZXI7CisgICAgICAgIFNoYXJlZEJ1ZmZlckJ1aWxkZXIgbV9jb21wbGV0ZUJsb2NrQnVmZmVy
czsKICAgICAgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IG1fY29tcGxldGVQYWNrZXRTaXplOwot
ICAgICAgICAvLyBJbml0aWFsIGFsbG9jYXRpb24gc2l6ZSBvZiBlbXB0eSBDTUJsb2NrQnVmZmVy
LgotICAgICAgICBzaXplX3QgbU1heEJsb2NrQnVmZmVyQ2FwYWNpdHkgeyAwIH07CisgICAgICAg
IHNpemVfdCBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBWZWN0b3I8
c2l6ZV90PiBtX3BhY2tldFNpemVzOworICAgICAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZv
PiBtX3BhY2tldFRpbWluZ3M7CiAKICAgICBwcml2YXRlOgogICAgICAgICBDb2RlY1R5cGUgbV9j
b2RlYzsKICAgICAgICAgd2VibTo6VHJhY2tFbnRyeSBtX3RyYWNrOwogICAgICAgICBUeXBlIG1f
dHJhY2tUeXBlOwogICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9m
b3JtYXREZXNjcmlwdGlvbjsKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IG1f
Y3VycmVudEJsb2NrQnVmZmVyOworICAgICAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIG1fY3VycmVu
dEJsb2NrQnVmZmVyOwogICAgICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBtX3BhcnNlcjsK
ICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgY3VycmVudGx5IGluY29tcGxldGUgcGFyc2VkIHBhY2tl
dC4KICAgICAgICAgc2l6ZV90IG1fcGFydGlhbEJ5dGVzUmVhZCB7IDAgfTsKQEAgLTE5OCwxNCAr
MjEwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgd2VibTo6
U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVN
ZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKLQogICAgIHBy
aXZhdGU6Ci0gICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYsIGlu
dCwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYpOwogICAgICAgICBjb25zdCBjaGFyKiBsb2dD
bGFzc05hbWUoKSBjb25zdCB7IHJldHVybiAiVmlkZW9UcmFja0RhdGEiOyB9Ci0KKyAgICAgICAg
d2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6
RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKKyAg
ICAgICAgdm9pZCBwb3N0UHJvY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZikgZmluYWw7CisgICAgICAg
IHZvaWQgcmVzZXRDb21wbGV0ZWQoKSBmaW5hbDsKICNpZiBFTkFCTEUoVlA5KQogICAgICAgICB2
cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIgbV9oZWFkZXJQYXJzZXI7CisgICAgICAgIFZlY3Rv
cjxib29sPiBtX2tleUZyYW1lczsKICNlbmRpZgogICAgIH07CiAKQEAgLTIyMiwyMCArMjM0LDE1
IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICBwcml2YXRlOgogICAgICAg
ICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJt
OjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwog
ICAgICAgICB2b2lkIHJlc2V0Q29tcGxldGVkKCkgZmluYWw7Ci0gICAgICAgIHZvaWQgY3JlYXRl
U2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQg
PSBzdGQ6Om51bGxvcHQpOwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgY2hhciogbG9n
Q2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQogCiAgICAgICAg
IENNVGltZSBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWU7CiAgICAgICAgIENNVGltZSBtX3BhY2tl
dER1cmF0aW9uOwotICAgICAgICBzaXplX3QgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCB7IDAg
fTsKICAgICAgICAgdWludDhfdCBtX2ZyYW1lc1BlclBhY2tldCB7IDAgfTsKICAgICAgICAgU2Vj
b25kcyBtX2ZyYW1lRHVyYXRpb24geyAwX3MgfTsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gbV9w
YWNrZXRTaXplczsKLSAgICAgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gbV9wYWNrZXRU
aW1pbmdzOwogICAgICAgICBzaXplX3QgbU51bUZyYW1lc0luQ29tcGxldGVCbG9jayB7IDAgfTsK
ICAgICAgICAgLy8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9u
IHBlciBzYW1wbGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmly
c3QKICAgICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IE1lZGlh
U2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIgdG8gZGVhbCB3aXRoIGBlbmRDdXJzb3Jg
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggOTQxMGE3YzQ3OTYzNDcwNGViNTljOTk5NjAzNDg0
NGI2OWE4ODc2ZC4uOTU0NGQ5YzI1N2ZlMGJkNTU4MjgwM2FlMWE4MDg0NTAxNzNjNTBiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0
aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9W
UDlVdGlsaXRpZXNDb2NvYS5oCkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBWUDhGcmFtZUhlYWRl
ciB7CiAgICAgYm9vbCBuZWVkc0NsYW1waW5nIHsgZmFsc2UgfTsKIH07CiAKLXN0ZDo6b3B0aW9u
YWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJhbWVEYXRh
LCBzaXplX3QgZnJhbWVTaXplKTsKK3N0ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNl
VlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXpl
KTsKIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImLCBjb25zdCB3ZWJtOjpFbGVt
ZW50PHdlYm06OkNvbG91cj4mKTsKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgVlA5VGVzdGluZ092
ZXJyaWRlcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCmluZGV4IDVjMGRmYWZkYjJlNjdmMDQ4MDUw
NWZlYWM2NmE0ZWQ1NDRhMjllMzMuLmRkMTc3OWYyNjM4OTI2OTU5NDRmNDIzNzZmY2RhZTViNmQz
MGIyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1ZQOVV0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCkBAIC02MDksNyArNjA5LDcgQEAgUmV0YWlu
UHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OUhlYWRlclBhcnNlcihjb24KICAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9t
VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBwYXJzZXIud2lkdGgoKSwgcGFyc2Vy
LmhlaWdodCgpKTsKIH0KIAotc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhG
cmFtZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpCitzdGQ6Om9w
dGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3Qq
IGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKIHsKICAgICAvLyBWUDggZnJhbWUgaGVhZGVy
cyBhcmUgZGVmaW5lZCBpbiBSRkMgNjM4NjogPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9y
ZmM2Mzg2Pi4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IGYyNjQwMmUwODhjZWZkZmFlMThiZjdiNThlZGNhOTViMTRiYmQ5NDYuLjdhM2RlZTg3
ZGYxZmJiMjFkZDM3MWU3OGI3ZjhhNDc0NzRjOGNlNDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMi0yMyAg
SmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhYmlsaXR5
IHRvIGNvbnZlcnQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciB0byBDTUJsb2NrQnVmZmVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwNzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVF9GKToKKwogMjAyMi0wMi0xOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNv
bT4KIAogICAgICAgICBTZXQgY3VzdG9tIGdlbmVyYWwgc3RvcmFnZSBkaXJlY3RvcnkgZm9yIGN1
c3RvbSBXZWJzaXRlRGF0YVN0b3JlIGluIFRlc3RDb250cm9sbGVyCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IDMxNTVjMDlm
MjQ3M2ViZWE2OTAwYjM5YzBkOWJlY2FhY2FhNWEwMTUuLmIwMTEyOGIyNmIxY2MwYTIwNWM2NTQx
YTQ4NTZiN2YwMmY0OGJjNzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0yMzksNiArMjM5LDQxIEBAIFRFU1RfRihGcmFn
bWVudGVkU2hhcmVkQnVmZmVyVGVzdCwgZ2V0U29tZURhdGEpCiAgICAgY2hlY2tCdWZmZXIobC5k
YXRhKCksIGwuc2l6ZSgpLCAibCIpOwogfQogCitURVNUX0YoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZl
clRlc3QsIGdldENvbnRpZ3VvdXNEYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBzMSA9IHsg
J2EnLCAnYicsICdjJywgJ2QnIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHMyID0geyAnZScsICdm
JywgJ2cnLCAnaCcgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gczMgPSB7ICdpJywgJ2onLCAnaycs
ICdsJyB9OworCisgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIu
YXBwZW5kKFdURk1vdmUoczEpKTsKKyAgICBidWlsZGVyLmFwcGVuZChXVEZNb3ZlKHMyKSk7Cisg
ICAgYnVpbGRlci5hcHBlbmQoV1RGTW92ZShzMykpOworICAgIGF1dG8gYnVmZmVyID0gYnVpbGRl
ci50YWtlKCk7CisKKyAgICBhdXRvIGFiY2QgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDAs
IDQpOworICAgIGF1dG8gYmNkZWZnaGkgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDEsIDgp
OworICAgIGF1dG8gZ2ggPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDYsIDIpOworICAgIGF1
dG8gZ2hpaiA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoNiwgNCk7CisgICAgYXV0byBoID0g
YnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSg3LCAxKTsKKyAgICBhdXRvIGlqayA9IGJ1ZmZlci0+
Z2V0Q29udGlndW91c0RhdGEoOCwgMyk7CisgICAgYXV0byBrbCA9IGJ1ZmZlci0+Z2V0Q29udGln
dW91c0RhdGEoMTAsIDIpOworICAgIGF1dG8gbCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEo
MTEsIDEpOworICAgIGNoZWNrQnVmZmVyKGFiY2QtPmRhdGEoKSwgYWJjZC0+c2l6ZSgpLCAiYWJj
ZCIpOworICAgIGNoZWNrQnVmZmVyKGJjZGVmZ2hpLT5kYXRhKCksIGJjZGVmZ2hpLT5zaXplKCks
ICJiY2RlZmdoaSIpOworICAgIGNoZWNrQnVmZmVyKGdoLT5kYXRhKCksIGdoLT5zaXplKCksICJn
aCIpOworICAgIGNoZWNrQnVmZmVyKGdoaWotPmRhdGEoKSwgZ2hpai0+c2l6ZSgpLCAiZ2hpaiIp
OworICAgIGNoZWNrQnVmZmVyKGgtPmRhdGEoKSwgaC0+c2l6ZSgpLCAiaCIpOworICAgIGNoZWNr
QnVmZmVyKGlqay0+ZGF0YSgpLCBpamstPnNpemUoKSwgImlqayIpOworICAgIGNoZWNrQnVmZmVy
KGtsLT5kYXRhKCksIGtsLT5zaXplKCksICJrbCIpOworICAgIGNoZWNrQnVmZmVyKGwtPmRhdGEo
KSwgbC0+c2l6ZSgpLCAibCIpOworICAgIGF1dG8gZmdoaWprbCA9IGJ1ZmZlci0+Z2V0Q29udGln
dW91c0RhdGEoNSwgMjApOworICAgIEVYUEVDVF9FUShmZ2hpamtsLT5zaXplKCksIGJ1ZmZlci0+
c2l6ZSgpIC0gNSk7CisgICAgY2hlY2tCdWZmZXIoZmdoaWprbC0+ZGF0YSgpLCBmZ2hpamtsLT5z
aXplKCksICJmZ2hpamtsIik7CisgICAgYXV0byBvdXRCb3VuZCA9IGJ1ZmZlci0+Z2V0Q29udGln
dW91c0RhdGEoMzAsIDIwKTsKKyAgICBFWFBFQ1RfRVEob3V0Qm91bmQtPnNpemUoKSwgMHUpOwor
fQorCiBURVNUX0YoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlclRlc3QsIGlzRXF1YWxUbykKIHsKICAg
ICBhdXRvIG1ha2VCdWZmZXIgPSBbXSAoVmVjdG9yPFZlY3Rvcjx1aW50OF90Pj4mJiBjb250ZW50
cykgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453094</attachid>
            <date>2022-02-24 05:36:33 -0800</date>
            <delta_ts>2022-02-24 05:37:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237078-20220225003631.patch</filename>
            <type>text/plain</type>
            <size>31965</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDQzN2JhN2JmYTA1NDNk
ZWJjZWMxMTk0NzdlYjk2Zjg4ZGNlNDAxMy4uNTIwMjBmNmNmZWEwMjc5NGY0NWY3MDQ1NTUxYTk5
YTA1MmRkZWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIHVzZSBTaGFyZWRCdWZmZXIgaW50ZXJuYWxseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc4CisgICAgICAgIHJkYXI6Ly84
OTM0ODc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSByZWZhY3RvciB0byBhbGxvdyBTb3VyY2VCdWZmZXJQYXJzZXIgdG8gcmV0dXJu
IFNoYXJlZEJ1ZmZlcgorICAgICAgICByYXRoZXIgdGhhbiBDTUJsb2NrQnVmZmVyLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBvYnNlcnZhYmxlIGJlaGF2aW91cnMuCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6
OnJlZW5xdWV1ZU1lZGlhRm9yVGltZSk6IEZseS1ieSBmaXg6IHR5cG8uCisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKTogRmx5LWJ5IGZpeCwg
IGV4aXQgZWFybHkKKyAgICAgICAgaWYgZW5kIHRpbWUgaXMgbG93ZXIgdGhhbiBzdGFydCB0aW1l
IHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGR1cmF0aW9uIGlzCisgICAgICAgIHNtYWxsZXIgdGhh
biBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
VlA4RnJhbWVIZWFkZXIpOiBNYWtlIG1ldGhvZHMgY29uc3QuCisKIDIwMjItMDItMjMgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYWJpbGl0eSB0byBj
b252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRl
LmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0YzliNjY0Li5hYTBj
MjAzYjgyNWRhN2Y4NTYxYzc0OGZiMjk4NzE5ZmRmMzExNmM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApA
QCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6cmVlbnF1ZXVlTWVk
aWFGb3JUaW1lKFRyYWNrQnVmZmVyJiB0cmFja0J1ZmZlciwgY29uc3QKICAgICAgICAgfHwgKGN1
cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+Zmlyc3QgLSB0aW1lKSA+IHRpbWVGdWRnZUZhY3Rvcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBTZWFjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZp
b3VzIHN5bmMgc2FtcGxlLgorICAgIC8vIFNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3Vz
IHN5bmMgc2FtcGxlLgogICAgIERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlIGRlY29kZUtl
eShjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+ZGVjb2RlVGltZSgpLCBjdXJyZW50
U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKICAgICBhdXRv
IGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZGVjb2RlT3Jk
ZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtleShkZWNvZGVLZXkpOwogICAgIEFTU0VSVChjdXJy
ZW50U2FtcGxlRFRTSXRlcmF0b3IgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigp
LmVuZCgpKTsKQEAgLTExNzIsNiArMTE3Miw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6
ZGlkUmVjZWl2ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgb3JpZ2luYWxTYW1wbGUpCiAgICAg
ICAgICAgICAgICAgTWVkaWFUaW1lIGVyYXNlQmVnaW5UaW1lID0gdHJhY2tCdWZmZXIuaGlnaGVz
dFByZXNlbnRhdGlvblRpbWVzdGFtcDsKICAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VF
bmRUaW1lID0gZnJhbWVFbmRUaW1lc3RhbXAgLSBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2U7CiAK
KyAgICAgICAgICAgICAgICBpZiAoZXJhc2VFbmRUaW1lIDw9IGVyYXNlQmVnaW5UaW1lKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIFByZXNlbnRhdGlvbk9y
ZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5nZSByYW5nZTsKICAgICAgICAgICAgICAgICBpZiAo
aGlnaGVzdEJ1ZmZlcmVkVGltZSAtIHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1l
c3RhbXAgPCB0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgbmV3IGZyYW1lIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcmVkIHJh
bmdlcywgcGVyZm9ybSBhIHNlcXVlbnRpYWwgc2NhbiBmcm9tIGVuZCAoTygxKSkuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Nv
dXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmluZGV4IGFlMTY0MTRmMjFjNjg0NmMxODk3NzA5ZTE0
MjRlNGE2YTRiNzYxYTAuLjBiNTQ5ZjcxNDMzNGM0MTlhMTMwOWZkZTQxNDQ4ZjhjNWExNGQ5MzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCkBAIC0zNiw3ICszNiw2IEBACiAj
aW5jbHVkZSAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJWUDlVdGlsaXRpZXNDb2NvYS5oIgogI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlV2ViTS5oIgogI2luY2x1ZGUgIldlYk1BdWRpb1V0aWxpdGllc0Nv
Y29hLmgiCkBAIC0zNjUsMjEgKzM2NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprV291bGRCbG9jayk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgRnJlZVNo
YXJlZEJ1ZmZlcih2b2lkKiByZWZjb24sIHZvaWQqLCBzaXplX3QpCisgICAgU3RhdHVzIFJlYWRJ
bnRvKHN0ZDo6c2l6ZV90IG51bVRvUmVhZCwgU2hhcmVkQnVmZmVyQnVpbGRlciYgb3V0cHV0QnVm
ZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQogICAgIHsKLSAgICAgICAgYXV0byogYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxTaGFyZWRCdWZmZXIqPihyZWZjb24pOwotICAgICAgICBi
dWZmZXItPmRlcmVmKCk7Ci0gICAgfQotCi0gICAgU3RhdHVzIFJlYWRJbnRvKHN0ZDo6c2l6ZV90
IG51bVRvUmVhZCwgQ01CbG9ja0J1ZmZlclJlZiBvdXRwdXRCdWZmZXIsIHVpbnQ2NF90KiBudW1B
Y3R1YWxseVJlYWQpCi0gICAgewotICAgICAgICBBU1NFUlQob3V0cHV0QnVmZmVyICYmIG51bUFj
dHVhbGx5UmVhZCk7CisgICAgICAgIEFTU0VSVChudW1BY3R1YWxseVJlYWQpOwogICAgICAgICBp
ZiAoIW51bUFjdHVhbGx5UmVhZCkKICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
Tm90RW5vdWdoTWVtb3J5KTsKIAogICAgICAgICAqbnVtQWN0dWFsbHlSZWFkID0gMDsKLSAgICAg
ICAgaWYgKCFvdXRwdXRCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a05vdEVub3VnaE1lbW9yeSk7CiAKICAgICAgICAgd2hpbGUgKG51bVRvUmVhZCAmJiBtX2N1cnJl
bnRTZWdtZW50ICE9IG1fZGF0YS5lbmQoKSkgewogICAgICAgICAgICAgYXV0byYgY3VycmVudFNl
Z21lbnQgPSAqbV9jdXJyZW50U2VnbWVudDsKQEAgLTM4OSw0NCArMzgwLDIyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlciA9IGN1cnJlbnRTZWdtZW50LmdldFNoYXJl
ZEJ1ZmZlcigpOwotICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9
IG51bGxwdHI7Ci0gICAgICAgICAgICB1aW50NjRfdCBsYXN0UmVhZCA9IDA7CisgICAgICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByYXdCbG9ja0J1ZmZlcjsKICAgICAgICAgICAgIGlmICgh
c2hhcmVkQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgcG90ZW50aWFsbHkg
YWxsb2NhdGUgbW9yZSBtZW1vcnkgdGhhbiBuZWVkZWQgaWYgdGhlIHJlYWQgaXMgcGFydGlhbC4K
LSAgICAgICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhN
ZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBudW1Ub1JlYWQsIGtDRkFs
bG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIDAsIG51bVRvUmVhZCwga0NNQmxvY2tCdWZmZXJBc3N1
cmVNZW1vcnlOb3dGbGFnLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChl
cnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwotICAgICAgICAgICAgICAgIHVpbnQ4X3Qq
IGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNlZ21l
bnRTaXplQXRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgZXJyID0gUEFMOjpDTUJsb2Nr
QnVmZmVyR2V0RGF0YVBvaW50ZXIocmF3QmxvY2tCdWZmZXIsIDAsICZzZWdtZW50U2l6ZUF0UG9z
aXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7CisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXIudHJ5UmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShudW1Ub1JlYWQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgYXV0byBy
ZWFkUmVzdWx0ID0gY3VycmVudFNlZ21lbnQucmVhZChtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwg
bnVtVG9SZWFkLCBibG9ja0J1ZmZlckRhdGEpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZXNp
emUobnVtVG9SZWFkKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQgPSBjdXJyZW50
U2VnbWVudC5yZWFkKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQsIGJ1ZmZlci5k
YXRhKCkpOwogICAgICAgICAgICAgICAgIGlmICghcmVhZFJlc3VsdC5oYXNfdmFsdWUoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRSZWFkRXJyb3JUb1dlYm1TdGF0dXMocmVh
ZFJlc3VsdC5lcnJvcigpKTsKLSAgICAgICAgICAgICAgICBsYXN0UmVhZCA9IHJlYWRSZXN1bHQu
dmFsdWUoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzog
Y291bGQgd2Ugb25seSBjcmVhdGUgYSBuZXcgQ01CbG9ja0J1ZmZlciBpZiB0aGUgYmFja2VuZCBt
ZW1vcnkgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgb25lPwotICAgICAgICAgICAgICAgIHNp
emVfdCBjYW5SZWFkID0gc3RkOjptaW48c2l6ZV90PihudW1Ub1JlYWQsIHNoYXJlZEJ1ZmZlci0+
c2l6ZSgpIC0gbV9wb3NpdGlvbldpdGhpblNlZ21lbnQpOwotICAgICAgICAgICAgICAgIC8vIEZy
b20gQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246Ci0gICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgdGhpcyBzdHJ1
Y3QgY29udGFpbnMgbWlzYWxpZ25lZCBmdW5jdGlvbiBwb2ludGVycy4KLSAgICAgICAgICAgICAg
ICAvLyBUbyBhdm9pZCBsaW5rLXRpbWUgaXNzdWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGNs
aWVudHMgZmlsbCBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UncyBmdW5jdGlvbiBwb2lu
dGVyIGZpZWxkcwotICAgICAgICAgICAgICAgIC8vIGJ5IHVzaW5nIGFzc2lnbm1lbnQgc3RhdGVt
ZW50cywgcmF0aGVyIHRoYW4gZGVjbGFyaW5nIHRoZW0gYXMgZ2xvYmFsIG9yIHN0YXRpYyBzdHJ1
Y3RzLgotICAgICAgICAgICAgICAgIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSBhbGxv
Y2F0b3I7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnZlcnNpb24gPSAwOwotICAgICAgICAg
ICAgICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0b3IuRnJlZUJsb2NrID0gRnJlZVNoYXJlZEJ1ZmZlcjsKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0b3IucmVmQ29uID0gc2hhcmVkQnVmZmVyLmdldCgpOwotICAgICAgICAgICAgICAg
IHNoYXJlZEJ1ZmZlci0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNN
QmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sobnVsbHB0ciwgc3RhdGljX2Nhc3Q8dm9p
ZCo+KGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZEJ1ZmZlci0+ZGF0YSgpKSksIHNoYXJlZEJ1
ZmZlci0+c2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9yLCBtX3Bvc2l0aW9uV2l0aGluU2VnbWVu
dCwgY2FuUmVhZCwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJy
ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgICAgICAgICBsYXN0UmVhZCA9
IGNhblJlYWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIGJsb2NrQnVmZmVyID0g
YWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01C
bG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShvdXRwdXRCdWZmZXIsIHJhd0Jsb2NrQnVm
ZmVyLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0Vy
cikKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9y
eSk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShyZWFkUmVzdWx0LnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIHJhd0Jsb2NrQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShidWZmZXIpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJhd0Js
b2NrQnVmZmVyID0gc2hhcmVkQnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YShtX3Bvc2l0aW9uV2l0
aGluU2VnbWVudCwgbnVtVG9SZWFkKTsKKyAgICAgICAgICAgIGF1dG8gbGFzdFJlYWQgPSByYXdC
bG9ja0J1ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgb3V0cHV0QnVmZmVyLmFwcGVuZCgqcmF3
QmxvY2tCdWZmZXIpOwogICAgICAgICAgICAgbV9wb3NpdGlvbiArPSBsYXN0UmVhZDsKICAgICAg
ICAgICAgICpudW1BY3R1YWxseVJlYWQgKz0gbGFzdFJlYWQ7CiAgICAgICAgICAgICBtX3Bvc2l0
aW9uV2l0aGluU2VnbWVudCArPSBsYXN0UmVhZDsKQEAgLTEyMDEsMTYgKzExNzAsMTEgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gc2FtcGwKIAogI2RlZmluZSBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKC4uLikgaWYgKHBhcnNlcigpLmxvZ2dlclB0cigpKSBwYXJzZXIoKS5sb2dnZXJQdHIoKS0+
ZXJyb3IobG9nQ2hhbm5lbCgpLCBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKGxvZ0NsYXNzTmFt
ZSgpLCBfX2Z1bmNfXywgcGFyc2VyKCkubG9nSWRlbnRpZmllcigpKSwgX19WQV9BUkdTX18pCiAK
LVJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFj
a0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVf
dCBsZW5ndGgpIGNvbnN0CitSZWZQdHI8U2hhcmVkQnVmZmVyPiBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgaWYgKCFvZmZzZXQgJiYgIWxlbmd0aCAm
JiBQQUw6OkNNQmxvY2tCdWZmZXJJc1JhbmdlQ29udGlndW91cyhtX2NvbXBsZXRlQmxvY2tCdWZm
ZXIuZ2V0KCksIDAsIDApKQotICAgICAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOwot
ICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3Q29udGlndW91c0J1ZmZlciA9IG51bGxwdHI7Ci0gICAg
aWYgKFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUNvbnRpZ3VvdXMobnVsbHB0ciwgbV9jb21wbGV0
ZUJsb2NrQnVmZmVyLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBvZmZzZXQsIGxlbmd0aCwgMCwg
JnJhd0NvbnRpZ3VvdXNCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRkFVTFQoV2ViQXVkaW8sICJmYWlsZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMg
YmxvY2sgYnVmZmVyIik7CisgICAgaWYgKG9mZnNldCArIGxlbmd0aCA+IG1fY29tcGxldGVCbG9j
a0J1ZmZlcnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0
dXJuIGFkb3B0Q0YocmF3Q29udGlndW91c0J1ZmZlcik7CisgICAgcmV0dXJuIG1fY29tcGxldGVC
bG9ja0J1ZmZlcnMuZ2V0KCktPmdldENvbnRpZ3VvdXNEYXRhKG9mZnNldCwgbGVuZ3RoKTsKIH0K
IAogd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZy
YW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYg
bWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKQEAgLTEyMjQsMjAgKzExODgsOSBA
QCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJh
bWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZAogICAgIGlmICghbV9jb21wbGV0ZVBhY2tldFNpemUp
CiAgICAgICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gbWV0YWRhdGEuc2l6ZTsKIAotICAgIGlm
ICghbV9jdXJyZW50QmxvY2tCdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BhcnRpYWxCeXRl
c1JlYWQpOwotICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0
cjsKLSAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVFbXB0eShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSwgMCwgJnJhd0Jsb2NrQnVm
ZmVyKTsKLSAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyIHx8ICFyYXdCbG9j
a0J1ZmZlcikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01C
bG9ja0J1ZmZlckNyZWF0ZUVtcHR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAg
ICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgfQotICAg
ICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZmZXIpOwotICAg
IH0KLQogICAgIHdoaWxlICgqYnl0ZXNSZW1haW5pbmcpIHsKICAgICAgICAgdWludDY0X3QgYnl0
ZXNSZWFkOwotICAgICAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlNlZ21lbnRSZWFkZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmlu
ZywgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksICZieXRlc1JlYWQpOworICAgICAgICBhdXRv
IHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFk
ZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywgbV9jdXJyZW50QmxvY2tCdWZm
ZXIsICZieXRlc1JlYWQpOwogICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOwog
ICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgKz0gYnl0ZXNSZWFkOwogCkBAIC0xMjQ5LDY4ICsx
MjAyLDY4IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKG1fcGFydGlhbEJ5dGVz
UmVhZCA8ICptX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1
cyh3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwpOwogCi0gICAgaWYgKCFtX2NvbXBsZXRlQmxvY2tC
dWZmZXIpCi0gICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IFdURk1vdmUobV9jdXJyZW50
QmxvY2tCdWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9j
a0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCks
IG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAwLCAwLCAwKTsKLSAgICAgICAgaWYgKGVycikg
ewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZl
ckFwcGVuZEJ1ZmZlclJlZmVyZW5jZSB0byBjb21wbGV0ZSBibG9jayBmYWlsZWQgd2l0aCBlcnJv
ciIsIGVycik7Ci0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1l
bW9yeSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRy
OwotICAgIH0KKyAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLmFwcGVuZChtX2N1cnJlbnRCbG9j
a0J1ZmZlci50YWtlKCkpOwogICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7CiAKICAgICByZXR1
cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6
U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0
YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRp
bWUsIGludCBzYW1wbGVDb3VudCkKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tE
YXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVS
YW5nZU9mZnNldCkKIHsKLSNpZiBFTkFCTEUoVlA5KQotICAgIGF1dG8gc3RhdHVzID0gcmVhZEZy
YW1lRGF0YShyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgaWYgKCFzdGF0
dXMuY29tcGxldGVkX29rKCkpCi0gICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgaWYgKG1fcGFj
a2V0U2l6ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBjcmVhdGVTYW1wbGVC
dWZmZXIocHJlc2VudGF0aW9uVGltZSwgc2FtcGxlQ291bnQsIG1ldGFkYXRhKTsKLSAgICByZXNl
dCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotICAgIFVOVVNFRF9QQVJB
TShwcmVzZW50YXRpb25UaW1lKTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwotI2Vu
ZGlmCisgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IGNvbXBsZXRlQ01CbG9ja0J1ZmZl
cnM7IC8vID0gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy50YWtlKCktPmNyZWF0ZUNNQmxvY2tCdWZm
ZXIoKTsKKyAgICBpZiAoIWNvbXBsZXRlQ01CbG9ja0J1ZmZlcnMpCisgICAgICAgIHJldHVybjsK
IAotICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICBDTVNhbXBs
ZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8gZXJyID0gUEFM
OjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbXBsZXRl
Q01CbG9ja0J1ZmZlcnMuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0
U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3Muc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3MuZGF0
YSgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRTaXplcy5kYXRhKCksICZyYXdTYW1w
bGVCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9Q
T1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSBmYWlsZWQgd2l0aCAlZCIsIGVycik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0UHJvY2VzcyhyYXdTYW1wbGVCdWZm
ZXIpOworCisgICAgYXV0byB0cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAg
ICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKSwgdHJh
Y2tJRCwgbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYg
cHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFk
YXRhJiBtZXRhZGF0YSkKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0Rh
dGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQoreworICAgIG1fa2V5RnJhbWVzLmNsZWFy
KCk7CisgICAgVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7Cit9CisKK3dl
Ym06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3Vt
ZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0
YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRp
b25UaW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxFKFZQOSkKLSAgICB1aW50OF90KiBibG9ja0J1ZmZl
ckRhdGEgPSBudWxscHRyOworICAgIGF1dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIs
IG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7CisgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29r
KCkpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKICAgICBjb25zdGV4cHIgc2l6ZV90IG1heEhl
YWRlclNpemUgPSAzMjsgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgVlA5IHVuY29tcHJlc3Nl
ZCBoZWFkZXIgaXMgMTQ0IGJpdHMgYW5kIDExIGJ5dGVzIGZvciBWUDguIFJvdW5kIGhpZ2guCiAg
ICAgc2l6ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCAq
bV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRp
Z3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOworICAgIGF1
dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKG1fY3Vy
cmVudFBhY2tldEJ5dGVPZmZzZXQsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOwogICAgIGlmICghY29u
dGlndW91c0J1ZmZlcikgewogICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJW
aWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyIGZhaWxlZCB0byBjcmVhdGUgY29udGln
dW91cyBkYXRhIGJsb2NrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYXV0byBlcnIg
PSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgp
LCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgIGlm
IChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1
ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1
b3VzQnVmZmVyLT5kYXRhKCk7CiAKICAgICBib29sIGlzS2V5ID0gZmFsc2U7CiAgICAgUmV0YWlu
UHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwogICAgIGlmIChj
b2RlYygpID09IENvZGVjVHlwZTo6VlA5KSB7CiAgICAgICAgIGlmICghbV9oZWFkZXJQYXJzZXIu
UGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVhZGVyTGVu
Z3RoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFk
ZXIsIGJ5dGVzUmVtYWluaW5nKTsKIAogICAgICAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5KCkp
IHsKICAgICAgICAgICAgIGlzS2V5ID0gdHJ1ZTsKICAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVz
Y3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIobV9o
ZWFkZXJQYXJzZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwogICAgICAgICAgICAg
aWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewogICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJS
T1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20g
VlBYIGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7
CiAgICAgICAgIH0KQEAgLTEzMjEsNyArMTI3NCw3IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmIHBy
CiAgICAgICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3Jp
cHRpb25Gcm9tVlA4SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIp
OwogICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewogICAgICAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRl
c2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1h
dERlc2NyaXB0aW9uKSk7CiAgICAgICAgIH0KQEAgLTEzMzYsNDUgKzEyODksNDUgQEAgdm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVy
KGNvbnN0IENNVGltZSYgcHIKICAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVz
ZW50KCkpCiAgICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgp
ICogcHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUgLyBrX3VzX2luX3NlY29uZHM7CiAKLSAgICBD
TVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwotICAgIENNU2FtcGxl
VGltaW5nSW5mbyB0aW1pbmcgPSB7IFBBTDo6Q01UaW1lTWFrZShkdXJhdGlvbiwgcHJlc2VudGF0
aW9uVGltZS50aW1lc2NhbGUpLCBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lIH07
Ci0gICAgZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRl
ZmF1bHQsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgdGhpcy0+Zm9ybWF0RGVzY3JpcHRp
b24oKS5nZXQoKSwgc2FtcGxlQ291bnQsIDEsICZ0aW1pbmcsIDEsICYqbV9jb21wbGV0ZVBhY2tl
dFNpemUsICZyYXdTYW1wbGVCdWZmZXIpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VS
X0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSBmYWlsZWQg
d2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBzYW1w
bGVCdWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7CisgICAgbV9rZXlGcmFtZXMuYXBw
ZW5kKGlzS2V5KTsKKyAgICBtX3BhY2tldFNpemVzLmFwcGVuZCgqbV9jb21wbGV0ZVBhY2tldFNp
emUpOworICAgIG1fcGFja2V0VGltaW5ncy5hcHBlbmQoeyBQQUw6OkNNVGltZU1ha2UoZHVyYXRp
b24sIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJlc2VudGF0aW9uVGltZSwgcHJlc2Vu
dGF0aW9uVGltZSB9KTsKKyAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ICs9ICptX2NvbXBs
ZXRlUGFja2V0U2l6ZTsKKyAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6bnVsbG9wdDsK
KworICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKKworICAgIEFTU0VSVCghKmJ5dGVzUmVtYWlu
aW5nKTsKKyAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVk
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOworICAgIFVOVVNF
RF9QQVJBTShzYW1wbGVDb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsKKyAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisjZW5kaWYKK30KIAotICAgIGF1
dG8gYXR0YWNobWVudHNBcnJheSA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2ht
ZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7Cit2b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpwb3N0UHJvY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiBy
YXdTYW1wbGVCdWZmZXIpCit7CisgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpDTVNh
bXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkocmF3U2FtcGxlQnVmZmVyLCB0cnVl
KTsKICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7CiAgICAgaWYgKCFhdHRhY2htZW50c0Fy
cmF5KSB7CiAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheSByZXR1cm5lZCBOVUxMIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzS2V5KSB7Ci0gICAgICAgIGZvciAoQ0ZJbmRleCBp
ID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRz
ID0gY2hlY2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOworICAgIEFTU0VSVChzaXplX3QoQ0ZBcnJh
eUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpKSA9PSBtX2tleUZyYW1lcy5zaXplKCkpOworICAg
IGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNB
cnJheSk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
YXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7CisgICAgICAgIGlmICgh
bV9rZXlGcmFtZXNbaV0pCiAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2ht
ZW50cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVl
KTsKLSAgICAgICAgfQogICAgIH0KLQotICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrLnRyYWNrX3Vp
ZC52YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShzYW1wbGVC
dWZmZXIpLCB0cmFja0lELCBtZXRhZGF0YS5wb3NpdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShwcmVzZW50YXRpb25UaW1lKTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwot
ICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkKIH0KIAot
dm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQoKQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRD
b21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiB7CiAgICAgbU51bUZyYW1lc0luQ29tcGxldGVCbG9jayA9
IDA7Ci0gICAgbV9wYWNrZXRTaXplcy5jbGVhcigpOwotICAgIG1fcGFja2V0VGltaW5ncy5jbGVh
cigpOwotICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgPSAwOwotICAgIFRyYWNrRGF0YTo6
cmVzZXRDb21wbGV0ZWQoKTsKKyAgICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3Rh
dGUoKTsKIH0KIAogd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJh
Y2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFt
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRp
bWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKQEAgLTEzODMsOCArMTMzNiw3
IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6
Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgIGF1dG8mIGxhc3RUaW1pbmcgPSBt
X3BhY2tldFRpbWluZ3MubGFzdCgpOwogICAgICAgICBpZiAoUEFMOjpDTVRpbWVDb21wYXJlKFBB
TDo6Q01UaW1lQWRkKGxhc3RUaW1pbmcuZHVyYXRpb24sIGxhc3RUaW1pbmcucHJlc2VudGF0aW9u
VGltZVN0YW1wKSwgcHJlc2VudGF0aW9uVGltZSkpIHsKICAgICAgICAgICAgIC8vIERpc2NvbnRp
bnVpdHkgZW5jb3VudGVyZWQsIGVtaXQgdGhlIHByZXZpb3VzbHkgZGVtdXhlZCBzYW1wbGVzLgot
ICAgICAgICAgICAgY3JlYXRlU2FtcGxlQnVmZmVyKG1ldGFkYXRhLnBvc2l0aW9uKTsKLSAgICAg
ICAgICAgIHJlc2V0KCk7CisgICAgICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTEzOTIsMTEgKzEzNDQsNiBAQCB3ZWJtOjpTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6
UmVhZAogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICByZXR1cm4gc3Rh
dHVzOwogCi0gICAgLy8gQXR0ZW1wdHMgdG8gbWluaW1pc2UgdGhlIGFtb3VudCBvZiBtZW1vcnkg
YWxsb2NhdGlvbnMgZHVlIHRvIHJlcGV0aXR2ZSBDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVm
ZXJlbmNlIGNhbGxzIGluIHJlYWRGcmFtZURhdGEuCi0gICAgbU51bUZyYW1lc0luQ29tcGxldGVC
bG9jaysrOwotICAgIGlmIChtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrID4gbU1heEJsb2NrQnVm
ZmVyQ2FwYWNpdHkpCi0gICAgICAgIG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5ID0gbU51bUZyYW1l
c0luQ29tcGxldGVCbG9jazsKLQogICAgIGlmIChtX3BhY2tldFNpemVzLmlzRW1wdHkoKSkKICAg
ICAgICAgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKIApAQCAt
MTQxNiwxMiArMTM2Myw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpB
dWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgICAgICAg
ICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQXVkaW9UcmFja0RhdGE6OmNvbnN1bWVG
cmFtZURhdGE6IHVuYWJsZSB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsK
LSAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIo
Y29udGlndW91c0J1ZmZlci5nZXQoKSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgKGNoYXIqKikmYmxv
Y2tCdWZmZXJEYXRhKTsKLSAgICAgICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIg
ZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZy
ZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKTsKICAg
ICAgICAgICAgIE9wdXNDb29raWVDb250ZW50cyBjb29raWVDb250ZW50czsKICAgICAgICAgICAg
IGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0
YS5kYXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxvY2tCdWZmZXJEYXRhLCBjb29raWVD
b250ZW50cykpIHsKICAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJGYWlsZWQgdG8gcGFyc2UgT3B1cyBwcml2YXRlIGRhdGEiKTsKQEAgLTE0NjAsMTIgKzE0MDIs
NyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJP
Ul9JRl9QT1NTSUJMRSgiQXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGE6IHVuYWJsZSB0
byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CiAgICAgICAgICAgICByZXR1cm4gU2tp
cCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgIH0KLSAgICAgICAgdWludDhfdCog
YmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxv
Y2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxscHRy
LCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgICAgICBpZiAoZXJyKSB7
Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVy
R2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0
dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9CisgICAgICAgIGNv
bnN0IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKTsK
ICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCksIHBy
aXZhdGVEYXRhLmRhdGEoKSwgKm1fY29tcGxldGVQYWNrZXRTaXplLCBibG9ja0J1ZmZlckRhdGEs
IGNvb2tpZUNvbnRlbnRzKQogICAgICAgICAgICAgfHwgY29va2llQ29udGVudHMuZnJhbWVzUGVy
UGFja2V0ICE9IG1fZnJhbWVzUGVyUGFja2V0CiAgICAgICAgICAgICB8fCBjb29raWVDb250ZW50
cy5mcmFtZUR1cmF0aW9uICE9IG1fZnJhbWVEdXJhdGlvbikgewpAQCAtMTQ4MSw0MCArMTQxOCwx
OCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogCiAgICAgYXV0byBzYW1wbGVEdXJhdGlvbiA9
IFBBTDo6Q01UaW1lR2V0U2Vjb25kcyhQQUw6OkNNVGltZVN1YnRyYWN0KHByZXNlbnRhdGlvblRp
bWUsIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSkpICsgUEFMOjpDTVRpbWVHZXRTZWNvbmRzKG1f
cGFja2V0RHVyYXRpb24pICogc2FtcGxlQ291bnQ7CiAKLSAgICBpZiAoc2FtcGxlRHVyYXRpb24g
Pj0gbV9taW5pbXVtU2FtcGxlRHVyYXRpb24pIHsKLSAgICAgICAgY3JlYXRlU2FtcGxlQnVmZmVy
KG1ldGFkYXRhLnBvc2l0aW9uKTsKLSAgICAgICAgcmVzZXQoKTsKLSAgICB9CisgICAgaWYgKHNh
bXBsZUR1cmF0aW9uID49IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uKQorICAgICAgICBkcmFpblBl
bmRpbmdTYW1wbGVzKCk7CiAKICAgICBBU1NFUlQoISpieXRlc1JlbWFpbmluZyk7CiAgICAgcmV0
dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZl
cihzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KQotewotICAgIGlm
IChtX3BhY2tldFNpemVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ01TYW1w
bGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBhdXRvIGVyciA9IFBB
TDo6Q01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtX2NvbXBs
ZXRlQmxvY2tCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0
U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3Muc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3MuZGF0
YSgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRTaXplcy5kYXRhKCksICZyYXdTYW1w
bGVCdWZmZXIpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9Q
T1NTSUJMRSgiQ01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0ZVdpdGhQYWNrZXREZXNjcmlwdGlvbnMg
ZmFpbGVkIHdpdGggJWQiLCBlcnIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGF1dG8g
c2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwotCi0gICAgYXV0byB0cmFj
a0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKLSAgICBwYXJzZXIoKS5wcm92aWRlTWVk
aWFEYXRhKFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRCwgbGF0ZXN0Qnl0ZVJhbmdlT2Zm
c2V0KTsKLX0KLQogdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRp
b0J1ZmZlcnMoKQogewogICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykgewotICAgICAg
ICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNr
RGF0YTo6VHlwZTo6QXVkaW8pIHsKLSAgICAgICAgICAgIEF1ZGlvVHJhY2tEYXRhJiBhdWRpb1Ry
YWNrID0gZG93bmNhc3Q8QXVkaW9UcmFja0RhdGE+KHRyYWNrLmdldCgpKTsKLSAgICAgICAgICAg
IGF1ZGlvVHJhY2suY3JlYXRlU2FtcGxlQnVmZmVyKCk7Ci0gICAgICAgICAgICBhdWRpb1RyYWNr
LnJlc2V0Q29tcGxldGVkKCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHRyYWNrLT50cmFja1R5
cGUoKSA9PSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvKQor
ICAgICAgICAgICAgdHJhY2stPmRyYWluUGVuZGluZ1NhbXBsZXMoKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAppbmRleCBlODc2YWI0MTRhNGFiYjMzZDUxOGMzN2I0
MWZlNWExNDc3NmFiNDk2Li5hZmRiZjQ5YjJmNDY5MjE2ZTFiOWRmN2VkMTgyMWIzYWEyMjc3Zjlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
ZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU291cmNlQnVmZmVyUGFyc2VyLmgiCiAjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRp
b1R5cGVzLmg+CiAjaW5jbHVkZSA8Q29yZU1lZGlhL0NNVGltZS5oPgpAQCAtMzksNyArNDAsNiBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVl
Q01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKLXR5cGVkZWYgc3Ry
dWN0IE9wYXF1ZUNNQmxvY2tCdWZmZXIgKkNNQmxvY2tCdWZmZXJSZWY7CiAKIG5hbWVzcGFjZSB3
ZWJtIHsKIGNsYXNzIFdlYm1QYXJzZXI7CkBAIC0xNTUsMzIgKzE1NSw0NCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a0ludmFsaWRFbGVt
ZW50SWQpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0Q29tcGxldGVk
KCkKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIgPSBudWxscHRyOworICAg
ICAgICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5yZXNldCgpOworICAgICAgICAgICAgbV9w
YWNrZXRTaXplcy5jbGVhcigpOworICAgICAgICAgICAgbV9wYWNrZXRUaW1pbmdzLmNsZWFyKCk7
CisgICAgICAgICAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ID0gMDsKICAgICAgICAgfQog
ICAgICAgICB2b2lkIHJlc2V0KCkKICAgICAgICAgewotICAgICAgICAgICAgcmVzZXRDb21wbGV0
ZWQoKTsKKyAgICAgICAgICAgIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKICAgICAgICAg
ICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0OwogICAgICAgICAgICAgbV9w
YXJ0aWFsQnl0ZXNSZWFkID0gMDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyLnJlc2V0KCk7CisgICAg
ICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhaW5QZW5kaW5nU2FtcGxlcyhzdGQ6Om9w
dGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0ID0gc3RkOjpudWxsb3B0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIobGF0ZXN0Qnl0ZVJhbmdlT2Zm
c2V0KTsKKyAgICAgICAgICAgIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKICAgICAgICAg
fQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4g
Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0
aCkgY29uc3Q7CisgICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8
c2l6ZV90Pik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvY2VzcyhDTVNhbXBsZUJ1ZmZl
clJlZikgeyB9OworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb250aWd1b3VzQ29tcGxl
dGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKICAgICAg
ICAgd2VibTo6U3RhdHVzIHJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6
RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIFJldGFp
blB0cjxDTUJsb2NrQnVmZmVyUmVmPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7CisgICAgICAgIFNo
YXJlZEJ1ZmZlckJ1aWxkZXIgbV9jb21wbGV0ZUJsb2NrQnVmZmVyczsKICAgICAgICAgc3RkOjpv
cHRpb25hbDxzaXplX3Q+IG1fY29tcGxldGVQYWNrZXRTaXplOwotICAgICAgICAvLyBJbml0aWFs
IGFsbG9jYXRpb24gc2l6ZSBvZiBlbXB0eSBDTUJsb2NrQnVmZmVyLgotICAgICAgICBzaXplX3Qg
bU1heEJsb2NrQnVmZmVyQ2FwYWNpdHkgeyAwIH07CisgICAgICAgIHNpemVfdCBtX2N1cnJlbnRQ
YWNrZXRCeXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX3BhY2tldFNp
emVzOworICAgICAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBtX3BhY2tldFRpbWluZ3M7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKICAgICAgICAgd2Vi
bTo6VHJhY2tFbnRyeSBtX3RyYWNrOwogICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOwogICAgICAg
ICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsK
LSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IG1fY3VycmVudEJsb2NrQnVmZmVy
OworICAgICAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIG1fY3VycmVudEJsb2NrQnVmZmVyOwogICAg
ICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBtX3BhcnNlcjsKICAgICAgICAgLy8gU2l6ZSBv
ZiB0aGUgY3VycmVudGx5IGluY29tcGxldGUgcGFyc2VkIHBhY2tldC4KICAgICAgICAgc2l6ZV90
IG1fcGFydGlhbEJ5dGVzUmVhZCB7IDAgfTsKQEAgLTE5OCwxNCArMjEwLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFt
ZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90
KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKLQogICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgY3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYsIGludCwgY29uc3Qgd2VibTo6RnJh
bWVNZXRhZGF0YSYpOwogICAgICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCB7
IHJldHVybiAiVmlkZW9UcmFja0RhdGEiOyB9Ci0KKyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1
bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVp
bnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKKyAgICAgICAgdm9pZCBwb3N0UHJv
Y2VzcyhDTVNhbXBsZUJ1ZmZlclJlZikgZmluYWw7CisgICAgICAgIHZvaWQgcmVzZXRDb21wbGV0
ZWRGcmFtZXNTdGF0ZSgpIGZpbmFsOwogI2lmIEVOQUJMRShWUDkpCiAgICAgICAgIHZwOV9wYXJz
ZXI6OlZwOUhlYWRlclBhcnNlciBtX2hlYWRlclBhcnNlcjsKKyAgICAgICAgVmVjdG9yPGJvb2w+
IG1fa2V5RnJhbWVzOwogI2VuZGlmCiAgICAgfTsKIApAQCAtMjIyLDIwICsyMzQsMTUgQEAgcHVi
bGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3Vt
ZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWlu
dDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwotICAgICAgICB2b2lkIHJlc2V0Q29t
cGxldGVkKCkgZmluYWw7Ci0gICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0
aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQgPSBzdGQ6Om51bGxvcHQpOwotCiAg
ICAgcHJpdmF0ZToKKyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6
UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01U
aW1lJiwgaW50KSBmaW5hbDsKKyAgICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRl
KCkgZmluYWw7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJBdWRpb1RyYWNrRGF0YSI7IH0KIAogICAgICAgICBDTVRpbWUgbV9zYW1wbGVQcmVzZW50
YXRpb25UaW1lOwogICAgICAgICBDTVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKLSAgICAgICAgc2l6
ZV90IG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgeyAwIH07CiAgICAgICAgIHVpbnQ4X3QgbV9m
cmFtZXNQZXJQYWNrZXQgeyAwIH07CiAgICAgICAgIFNlY29uZHMgbV9mcmFtZUR1cmF0aW9uIHsg
MF9zIH07Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fcGFja2V0U2l6ZXM7Ci0gICAgICAgIFZl
Y3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+IG1fcGFja2V0VGltaW5nczsKICAgICAgICAgc2l6ZV90
IG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgeyAwIH07CiAgICAgICAgIC8vIEZJWE1FOiAwLjUg
LSAxLjAgc2Vjb25kcyBpcyBhIGJldHRlciBkdXJhdGlvbiBwZXIgc2FtcGxlIGJ1ZmZlciwgYnV0
IHVzZSAyIHNlY29uZHMgc28gYXQgbGVhc3QgdGhlIGZpcnN0CiAgICAgICAgIC8vIHNhbXBsZSBi
dWZmZXIgd2lsbCBwbGF5IHVudGlsIHdlIGZpeCBNZWRpYVNhbXBsZUN1cnNvcjo6Y3JlYXRlU2Ft
cGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCmlu
ZGV4IDk0MTBhN2M0Nzk2MzQ3MDRlYjU5Yzk5OTYwMzQ4NDRiNjlhODg3NmQuLjk1NDRkOWMyNTdm
ZTBiZDU1ODI4MDNhZTFhODA4NDUwMTczYzUwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaApAQCAt
NjUsNyArNjUsNyBAQCBzdHJ1Y3QgVlA4RnJhbWVIZWFkZXIgewogICAgIGJvb2wgbmVlZHNDbGFt
cGluZyB7IGZhbHNlIH07CiB9OwogCi1zdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJz
ZVZQOEZyYW1lSGVhZGVyKHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSk7Citz
dGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVp
bnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSk7CiBSZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVyKGNvbnN0
IFZQOEZyYW1lSGVhZGVyJiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CiAK
IGNsYXNzIFdFQkNPUkVfRVhQT1JUIFZQOVRlc3RpbmdPdmVycmlkZXMgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXND
b2NvYS5tbQppbmRleCA1YzBkZmFmZGIyZTY3ZjA0ODA1MDVmZWFjNjZhNGVkNTQ0YTI5ZTMzLi5k
ZDE3NzlmMjYzODkyNjk1OTQ0ZjQyMzc2ZmNkYWU1YjZkMzBiMjZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXND
b2NvYS5tbQpAQCAtNjA5LDcgKzYwOSw3IEBAIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIoY29uCiAgICAg
cmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7CiB9CiAKLXN0ZDo6
b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJh
bWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKQorc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4g
cGFyc2VWUDhGcmFtZUhlYWRlcihjb25zdCB1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFt
ZVNpemUpCiB7CiAgICAgLy8gVlA4IGZyYW1lIGhlYWRlcnMgYXJlIGRlZmluZWQgaW4gUkZDIDYz
ODY6IDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM4Nj4uCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453095</attachid>
            <date>2022-02-24 05:37:09 -0800</date>
            <delta_ts>2022-02-24 14:27:29 -0800</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-237078-20220225003707.patch</filename>
            <type>text/plain</type>
            <size>41678</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y2NjhlNjBmNTFjN2Vl
MmE2MDgxYTIyYzQzOGI3MjYwZDBjODJkOS4uNTIwMjBmNmNmZWEwMjc5NGY0NWY3MDQ1NTUxYTk5
YTA1MmRkZWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIHVzZSBTaGFyZWRCdWZmZXIgaW50ZXJuYWxseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc4CisgICAgICAgIHJkYXI6Ly84
OTM0ODc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSByZWZhY3RvciB0byBhbGxvdyBTb3VyY2VCdWZmZXJQYXJzZXIgdG8gcmV0dXJu
IFNoYXJlZEJ1ZmZlcgorICAgICAgICByYXRoZXIgdGhhbiBDTUJsb2NrQnVmZmVyLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBvYnNlcnZhYmxlIGJlaGF2aW91cnMuCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6
OnJlZW5xdWV1ZU1lZGlhRm9yVGltZSk6IEZseS1ieSBmaXg6IHR5cG8uCisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKTogRmx5LWJ5IGZpeCwg
IGV4aXQgZWFybHkKKyAgICAgICAgaWYgZW5kIHRpbWUgaXMgbG93ZXIgdGhhbiBzdGFydCB0aW1l
IHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGR1cmF0aW9uIGlzCisgICAgICAgIHNtYWxsZXIgdGhh
biBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
VlA4RnJhbWVIZWFkZXIpOiBNYWtlIG1ldGhvZHMgY29uc3QuCisKKzIwMjItMDItMjMgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYWJpbGl0eSB0byBj
b252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc1CisgICAgICAgIHJk
YXI6Ly84OTMzODQ0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpnZXRDb250aWd1b3VzRGF0YSBhbmQK
KyAgICAgICAgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQ01CbG9ja0J1ZmZlciBtZXRo
b2RzLgorCisgICAgICAgIEFQSSB0ZXN0cyBhZGRlZCBmb3IgZ2V0Q29udGlndW91c0RhdGEuCisg
ICAgICAgIGNyZWF0ZUNNQmxvY2tCdWZmZXIgd2lsbCBiZSB1c2VkIGluIGEgZm9sbG93LXVwIHBh
dGNoLgorCisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmdldENvbnRpZ3VvdXNEYXRhIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyZWVTaGFyZWRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
Q01CbG9ja0J1ZmZlciBjb25zdCk6CisKIDIwMjItMDItMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBET00gc3RvcmFnZSBldmVudCBkaXNwYXRj
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZDA5ZjEwNTJh
MGYzMWVlOTcwNjExMDEzYjM5MzVmYjUzMDk1NTA5Ni4uNjMzNjQzYTUyZTgyNmYxNjQ3ZTVhZmZj
ZTA5NjVmNDNkMzQwMGU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCkBAIC0xNTIsNiArMTUyLDI1IEBAIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlvbikgY29uc3QKICAgICByZXR1
cm4geyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwgcG9zaXRpb24gLSBlbGVtZW50LT5iZWdp
blBvc2l0aW9uIH07CiB9CiAKK1JlZjxTaGFyZWRCdWZmZXI+IEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI6OmdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCkgY29u
c3QKK3sKKyAgICBpZiAocG9zaXRpb24gPj0gbV9zaXplKQorICAgICAgICByZXR1cm4gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoKTsKKyAgICBsZW5ndGggPSBzdGQ6Om1pbihtX3NpemUgLSBwb3NpdGlv
biwgbGVuZ3RoKTsKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBlbGVtZW50ID0g
Z2V0U2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBzaXplX3Qgb2Zmc2V0SW5TZWdt
ZW50ID0gcG9zaXRpb24gLSBlbGVtZW50LT5iZWdpblBvc2l0aW9uOworICAgIGlmIChlbGVtZW50
LT5zZWdtZW50LT5zaXplKCkgLSBvZmZzZXRJblNlZ21lbnQgPj0gbGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyRGF0YVZpZXcgeyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwg
b2Zmc2V0SW5TZWdtZW50LCBsZW5ndGggfS5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKKyAgICBWZWN0
b3I8dWludDhfdD4gY29tYmluZWREYXRhOworICAgIGNvbWJpbmVkRGF0YS5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCk7CisgICAgY29tYmluZWREYXRhLmFwcGVuZChlbGVtZW50LT5zZWdt
ZW50LT5kYXRhKCkgKyBvZmZzZXRJblNlZ21lbnQsIGVsZW1lbnQtPnNlZ21lbnQtPnNpemUoKSAt
IG9mZnNldEluU2VnbWVudCk7CisgICAgZm9yICgrK2VsZW1lbnQ7IGNvbWJpbmVkRGF0YS5zaXpl
KCkgPCBsZW5ndGggJiYgZWxlbWVudCAhPSBtX3NlZ21lbnRzLmVuZCgpOyBlbGVtZW50KyspIHsK
KyAgICAgICAgYXV0byBjYW5Db3B5ID0gc3RkOjptaW4obGVuZ3RoIC0gY29tYmluZWREYXRhLnNp
emUoKSwgZWxlbWVudC0+c2VnbWVudC0+c2l6ZSgpKTsKKyAgICAgICAgY29tYmluZWREYXRhLmFw
cGVuZChlbGVtZW50LT5zZWdtZW50LT5kYXRhKCksIGNhbkNvcHkpOworICAgIH0KKyAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShjb21iaW5lZERhdGEpKTsKK30KKwogY29u
c3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnRWZWN0b3JFbnRyeSogRnJhZ21l
bnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGlvbikg
Y29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChwb3NpdGlvbiA8IG1fc2l6ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGNhZWYzZjI2MjAwMzNkZDhjZmYxNTYy
M2YyM2M2YjZjOWI1MzRiMzcuLjNiZjhhNmQxN2UyMmZhMmU3OTRiZjRmZjY4MTZhNTgyZTkwZjk5
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC01NCw2ICs1NCw3
IEBAIHR5cGVkZWYgc3RydWN0IF9HQnl0ZXMgR0J5dGVzOwogI2lmIFVTRShGT1VOREFUSU9OKQog
T0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7Cit0eXBlZGVmIHN0cnVjdCBP
cGFxdWVDTUJsb2NrQnVmZmVyKiBDTUJsb2NrQnVmZmVyUmVmOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXVEYgewpAQCAtMTQ5LDYgKzE1MCw3IEBAIHB1YmxpYzoKICNpZiBVU0UoRk9VTkRBVElPTikK
ICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNEYXRhQXJyYXko
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXI+IGNyZWF0ZShOU0RhdGEqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q01C
bG9ja0J1ZmZlclJlZj4gY3JlYXRlQ01CbG9ja0J1ZmZlcigpIGNvbnN0OwogI2VuZGlmCiAjaWYg
VVNFKENGKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlcj4gY3JlYXRlKENGRGF0YVJlZik7CkBAIC0xOTQsNiArMTk2LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gYmVnaW4gYW5kIGVuZCB0YWtlIE8oMSkgdGltZSwgdGhpcyB0YWtlcyBPKGxvZyhOKSkg
dGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCBTaGFyZWRCdWZmZXJEYXRhVmlldyBnZXRTb21lRGF0
YShzaXplX3QgcG9zaXRpb24pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxTaGFyZWRC
dWZmZXI+IGdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCkg
Y29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9IZXhTdHJpbmcoKSBjb25zdDsK
IApAQCAtMjQ2LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDb21iaW5lcyBhbGwgdGhl
IHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhhdCB2ZWN0b3IgYWZ0ZXIgY2xl
YXJpbmcgdGhlIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIuCiAgICAgV0VCQ09SRV9FWFBPUlQgVmVj
dG9yPHVpbnQ4X3Q+IHRha2VEYXRhKCk7Ci0gICAgY29uc3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRy
eSogZ2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGl0aW9uKSBjb25zdDsKKyAgICBj
b25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBnZXRTZWdtZW50Rm9yUG9zaXRpb24oc2l6ZV90
IHBvc2l0aW9uKSBjb25zdDsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBpbnRlcm5h
bGx5Q29uc2lzdGVudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbQppbmRleCA2NjQyN2RmYmYwNWZkNzI2YWZkOTlhMzI5
YzZhYzExYWM5ZWQ3YTU1Li4xOTA4YjQ2YWZiNWQ2MTA0MTJmYWVjZGMxMjQyMTY0ZWZhNjE5NDJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJD
b2NvYS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiV2ViQ29yZUpJVE9wZXJhdGlvbnMu
aCIKICNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExp
bmsuaD4KICNpbXBvcnQgPHN0cmluZy5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KICNp
bXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgpAQCAtOTksNiArMTAwLDU1IEBAIHZv
aWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKE5TRGF0YSAqZGF0YSkKICAgICByZXR1
cm4gYXBwZW5kKGJyaWRnZV9jYXN0KGRhdGEpKTsKIH0KIAorc3RhdGljIHZvaWQgRnJlZURhdGFT
ZWdtZW50KHZvaWQqIHJlZmNvbiwgdm9pZCosIHNpemVfdCkKK3sKKyAgICBhdXRvKiBidWZmZXIg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IERhdGFTZWdtZW50Kj4ocmVmY29uKTsKKyAgICBidWZm
ZXItPmRlcmVmKCk7Cit9CisKK1JldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBGcmFnbWVudGVk
U2hhcmVkQnVmZmVyOjpjcmVhdGVDTUJsb2NrQnVmZmVyKCkgY29uc3QKK3sKKyAgICBhdXRvIHNl
Z21lbnRUb0NNQmxvY2tCdWZmZXIgPSBbXSAoY29uc3QgRGF0YVNlZ21lbnQmIHNlZ21lbnQpIC0+
IFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiB7CisgICAgICAgIC8vIEZyb20gQ01CbG9ja0J1
ZmZlckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246CisgICAgICAgIC8vIE5vdGUgdGhh
dCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoaXMgc3RydWN0IGNvbnRhaW5zIG1pc2FsaWdu
ZWQgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgICAgIC8vIFRvIGF2b2lkIGxpbmstdGltZSBpc3N1
ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxsIENNQmxvY2tCdWZmZXJDdXN0
b21CbG9ja1NvdXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRzCisgICAgICAgIC8vIGJ5IHVz
aW5nIGFzc2lnbm1lbnQgc3RhdGVtZW50cywgcmF0aGVyIHRoYW4gZGVjbGFyaW5nIHRoZW0gYXMg
Z2xvYmFsIG9yIHN0YXRpYyBzdHJ1Y3RzLgorICAgICAgICBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxv
Y2tTb3VyY2UgYWxsb2NhdG9yOworICAgICAgICBhbGxvY2F0b3IudmVyc2lvbiA9IDA7CisgICAg
ICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgYWxsb2NhdG9y
LkZyZWVCbG9jayA9IEZyZWVEYXRhU2VnbWVudDsKKyAgICAgICAgYWxsb2NhdG9yLnJlZkNvbiA9
IGNvbnN0X2Nhc3Q8RGF0YVNlZ21lbnQqPigmc2VnbWVudCk7CisgICAgICAgIHNlZ21lbnQucmVm
KCk7CisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcGFydGlhbEJ1ZmZlciA9IG51bGxwdHI7Cisg
ICAgICAgIGlmIChQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sobnVsbHB0
ciwgc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNlZ21lbnQuZGF0YSgp
KSksIHNlZ21lbnQuc2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9yLCAwLCBzZWdtZW50LnNpemUo
KSwgMCwgJnBhcnRpYWxCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YocGFydGlhbEJ1ZmZlcik7
CisgICAgfTsKKworICAgIGlmIChoYXNPbmVTZWdtZW50KCkgJiYgIWlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIobV9zZWdtZW50c1swXS5zZWdtZW50KTsK
KworICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgIGF1
dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgaXNFbXB0eSgpID8gMCA6IG1fc2VnbWVudHMuc2l6ZSgpLCAwLCAmcmF3QmxvY2tCdWZmZXIp
OworICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VyciB8fCAhcmF3QmxvY2tCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gYmxvY2tCdWZmZXIgPSBhZG9wdENG
KHJhd0Jsb2NrQnVmZmVyKTsKKworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBi
bG9ja0J1ZmZlcjsKKworICAgIGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKKyAg
ICAgICAgaWYgKCFzZWdtZW50LnNlZ21lbnQtPnNpemUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBhdXRvIHBhcnRpYWxCdWZmZXIgPSBzZWdtZW50VG9DTUJsb2NrQnVmZmVyKHNl
Z21lbnQuc2VnbWVudCk7CisgICAgICAgIGlmICghcGFydGlhbEJ1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVm
ZmVyUmVmZXJlbmNlKHJhd0Jsb2NrQnVmZmVyLCBwYXJ0aWFsQnVmZmVyLmdldCgpLCAwLCAwLCAw
KSAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIHJldHVybiBibG9ja0J1ZmZlcjsKK30KKwogUmV0YWluUHRyPE5TRGF0YT4gU2hh
cmVkQnVmZmVyOjpjcmVhdGVOU0RhdGEoKSBjb25zdAogewogICAgIHJldHVybiBicmlkZ2VfY2Fz
dChjcmVhdGVDRkRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDU0OTlmMzdhN2YzNjQ2YmQ1
ZjM5NWE0OGIwOWQ5NDExZDRjOWI2NjQuLmFhMGMyMDNiODI1ZGE3Zjg1NjFjNzQ4ZmIyOTg3MTlm
ZGYzMTE2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJ1ZmZlclByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBTb3Vy
Y2VCdWZmZXJQcml2YXRlOjpyZWVucXVldWVNZWRpYUZvclRpbWUoVHJhY2tCdWZmZXImIHRyYWNr
QnVmZmVyLCBjb25zdAogICAgICAgICB8fCAoY3VycmVudFNhbXBsZVBUU0l0ZXJhdG9yLT5maXJz
dCAtIHRpbWUpID4gdGltZUZ1ZGdlRmFjdG9yKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8v
IFNlYWNoIGJhY2t3YXJkIGZvciB0aGUgcHJldmlvdXMgc3luYyBzYW1wbGUuCisgICAgLy8gU2Vh
cmNoIGJhY2t3YXJkIGZvciB0aGUgcHJldmlvdXMgc3luYyBzYW1wbGUuCiAgICAgRGVjb2RlT3Jk
ZXJTYW1wbGVNYXA6OktleVR5cGUgZGVjb2RlS2V5KGN1cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+
c2Vjb25kLT5kZWNvZGVUaW1lKCksIGN1cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+c2Vjb25kLT5w
cmVzZW50YXRpb25UaW1lKCkpOwogICAgIGF1dG8gY3VycmVudFNhbXBsZURUU0l0ZXJhdG9yID0g
dHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5
KGRlY29kZUtleSk7CiAgICAgQVNTRVJUKGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciAhPSB0cmFj
a0J1ZmZlci5zYW1wbGVzLmRlY29kZU9yZGVyKCkuZW5kKCkpOwpAQCAtMTE3Miw2ICsxMTcyLDkg
QEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKFJlZjxNZWRpYVNh
bXBsZT4mJiBvcmlnaW5hbFNhbXBsZSkKICAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VC
ZWdpblRpbWUgPSB0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wOwogICAg
ICAgICAgICAgICAgIE1lZGlhVGltZSBlcmFzZUVuZFRpbWUgPSBmcmFtZUVuZFRpbWVzdGFtcCAt
IGNvbnRpZ3VvdXNGcmFtZVRvbGVyYW5jZTsKIAorICAgICAgICAgICAgICAgIGlmIChlcmFzZUVu
ZFRpbWUgPD0gZXJhc2VCZWdpblRpbWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAg
ICAgICAgICAgICAgICAgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yX3Jhbmdl
IHJhbmdlOwogICAgICAgICAgICAgICAgIGlmIChoaWdoZXN0QnVmZmVyZWRUaW1lIC0gdHJhY2tC
dWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCA8IHRyYWNrQnVmZmVyLmxhc3RGcmFt
ZUR1cmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgZnJhbWUgaXMg
YXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyZWQgcmFuZ2VzLCBwZXJmb3JtIGEgc2VxdWVudGlhbCBz
Y2FuIGZyb20gZW5kIChPKDEpKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5k
ZXggYWUxNjQxNGYyMWM2ODQ2YzE4OTc3MDllMTQyNGU0YTZhNGI3NjFhMC4uMGI1NDlmNzE0MzM0
YzQxOWExMzA5ZmRlNDE0NDhmOGM1YTE0ZDkzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFT
ZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlZQ
OVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVXZWJNLmgiCiAj
aW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKQEAgLTM2NSwyMSArMzY0LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtXb3VsZEJsb2NrKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBGcmVlU2hhcmVkQnVmZmVyKHZvaWQqIHJlZmNvbiwgdm9p
ZCosIHNpemVfdCkKKyAgICBTdGF0dXMgUmVhZEludG8oc3RkOjpzaXplX3QgbnVtVG9SZWFkLCBT
aGFyZWRCdWZmZXJCdWlsZGVyJiBvdXRwdXRCdWZmZXIsIHVpbnQ2NF90KiBudW1BY3R1YWxseVJl
YWQpCiAgICAgewotICAgICAgICBhdXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PFNoYXJl
ZEJ1ZmZlcio+KHJlZmNvbik7Ci0gICAgICAgIGJ1ZmZlci0+ZGVyZWYoKTsKLSAgICB9Ci0KLSAg
ICBTdGF0dXMgUmVhZEludG8oc3RkOjpzaXplX3QgbnVtVG9SZWFkLCBDTUJsb2NrQnVmZmVyUmVm
IG91dHB1dEJ1ZmZlciwgdWludDY0X3QqIG51bUFjdHVhbGx5UmVhZCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChvdXRwdXRCdWZmZXIgJiYgbnVtQWN0dWFsbHlSZWFkKTsKKyAgICAgICAgQVNTRVJU
KG51bUFjdHVhbGx5UmVhZCk7CiAgICAgICAgIGlmICghbnVtQWN0dWFsbHlSZWFkKQogICAgICAg
ICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwogCiAgICAgICAg
ICpudW1BY3R1YWxseVJlYWQgPSAwOwotICAgICAgICBpZiAoIW91dHB1dEJ1ZmZlcikKLSAgICAg
ICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKIAogICAgICAg
ICB3aGlsZSAobnVtVG9SZWFkICYmIG1fY3VycmVudFNlZ21lbnQgIT0gbV9kYXRhLmVuZCgpKSB7
CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50U2VnbWVudCA9ICptX2N1cnJlbnRTZWdtZW50OwpA
QCAtMzg5LDQ0ICszODAsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVm
ZmVyID0gY3VycmVudFNlZ21lbnQuZ2V0U2hhcmVkQnVmZmVyKCk7Ci0gICAgICAgICAgICBDTUJs
b2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHVpbnQ2
NF90IGxhc3RSZWFkID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJhd0Js
b2NrQnVmZmVyOwogICAgICAgICAgICAgaWYgKCFzaGFyZWRCdWZmZXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIG5l
ZWRlZCBpZiB0aGUgcmVhZCBpcyBwYXJ0aWFsLgotICAgICAgICAgICAgICAgIGF1dG8gZXJyID0g
UEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1
bHQsIG51bGxwdHIsIG51bVRvUmVhZCwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwg
bnVtVG9SZWFkLCBrQ01CbG9ja0J1ZmZlckFzc3VyZU1lbW9yeU5vd0ZsYWcsICZyYXdCbG9ja0J1
ZmZlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9y
eSk7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBvc2l0aW9uID0gMDsKLSAgICAg
ICAgICAgICAgICBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihyYXdCbG9j
a0J1ZmZlciwgMCwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxv
Y2tCdWZmZXJEYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVy
Tm9FcnIpCisgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAgICAg
ICAgICAgICBpZiAoIWJ1ZmZlci50cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bVRvUmVhZCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVt
b3J5KTsKLSAgICAgICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQgPSBjdXJyZW50U2VnbWVudC5y
ZWFkKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQsIGJsb2NrQnVmZmVyRGF0YSk7
CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShudW1Ub1JlYWQpOworICAgICAgICAgICAg
ICAgIGF1dG8gcmVhZFJlc3VsdCA9IGN1cnJlbnRTZWdtZW50LnJlYWQobV9wb3NpdGlvbldpdGhp
blNlZ21lbnQsIG51bVRvUmVhZCwgYnVmZmVyLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KCFyZWFkUmVzdWx0Lmhhc192YWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vn
bWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyhyZWFkUmVzdWx0LmVycm9yKCkpOwotICAgICAgICAg
ICAgICAgIGxhc3RSZWFkID0gcmVhZFJlc3VsdC52YWx1ZSgpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBjb3VsZCB3ZSBvbmx5IGNyZWF0ZSBhIG5ldyBD
TUJsb2NrQnVmZmVyIGlmIHRoZSBiYWNrZW5kIG1lbW9yeSBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2
aW91cyBvbmU/Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGNhblJlYWQgPSBzdGQ6Om1pbjxzaXpl
X3Q+KG51bVRvUmVhZCwgc2hhcmVkQnVmZmVyLT5zaXplKCkgLSBtX3Bvc2l0aW9uV2l0aGluU2Vn
bWVudCk7Ci0gICAgICAgICAgICAgICAgLy8gRnJvbSBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tT
b3VyY2UgZG9jdW1lbnRhdGlvbjoKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIDY0
LWJpdCBhcmNoaXRlY3R1cmVzLCB0aGlzIHN0cnVjdCBjb250YWlucyBtaXNhbGlnbmVkIGZ1bmN0
aW9uIHBvaW50ZXJzLgotICAgICAgICAgICAgICAgIC8vIFRvIGF2b2lkIGxpbmstdGltZSBpc3N1
ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxsIENNQmxvY2tCdWZmZXJDdXN0
b21CbG9ja1NvdXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRzCi0gICAgICAgICAgICAgICAg
Ly8gYnkgdXNpbmcgYXNzaWdubWVudCBzdGF0ZW1lbnRzLCByYXRoZXIgdGhhbiBkZWNsYXJpbmcg
dGhlbSBhcyBnbG9iYWwgb3Igc3RhdGljIHN0cnVjdHMuCi0gICAgICAgICAgICAgICAgQ01CbG9j
a0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGFsbG9jYXRvcjsKLSAgICAgICAgICAgICAgICBhbGxv
Y2F0b3IudmVyc2lvbiA9IDA7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLkFsbG9jYXRlQmxv
Y2sgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5GcmVlQmxvY2sgPSBGcmVl
U2hhcmVkQnVmZmVyOwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5yZWZDb24gPSBzaGFyZWRC
dWZmZXIuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgc2hhcmVkQnVmZmVyLT5yZWYoKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlC
bG9jayhudWxscHRyLCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDx1aW50OF90Kj4oc2hh
cmVkQnVmZmVyLT5kYXRhKCkpKSwgc2hhcmVkQnVmZmVyLT5zaXplKCksIG51bGxwdHIsICZhbGxv
Y2F0b3IsIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBjYW5SZWFkLCAwLCAmcmF3QmxvY2tCdWZm
ZXIpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkp
OwotICAgICAgICAgICAgICAgIGxhc3RSZWFkID0gY2FuUmVhZDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGF1dG8gYmxvY2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKLSAg
ICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJl
bmNlKG91dHB1dEJ1ZmZlciwgcmF3QmxvY2tCdWZmZXIsIDAsIDAsIDApOwotICAgICAgICAgICAg
aWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAgICAgICAgIHJldHVybiBT
dGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKKyAgICAgICAgICAgICAgICBidWZmZXIu
cmVzaXplKHJlYWRSZXN1bHQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmF3QmxvY2tCdWZm
ZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgcmF3QmxvY2tCdWZmZXIgPSBzaGFyZWRCdWZmZXItPmdl
dENvbnRpZ3VvdXNEYXRhKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQpOworICAg
ICAgICAgICAgYXV0byBsYXN0UmVhZCA9IHJhd0Jsb2NrQnVmZmVyLT5zaXplKCk7CisgICAgICAg
ICAgICBvdXRwdXRCdWZmZXIuYXBwZW5kKCpyYXdCbG9ja0J1ZmZlcik7CiAgICAgICAgICAgICBt
X3Bvc2l0aW9uICs9IGxhc3RSZWFkOwogICAgICAgICAgICAgKm51bUFjdHVhbGx5UmVhZCArPSBs
YXN0UmVhZDsKICAgICAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50ICs9IGxhc3RSZWFk
OwpAQCAtMTIwMSwxNiArMTE3MCwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBy
b3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbAogCiAjZGVm
aW5lIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoLi4uKSBpZiAocGFyc2VyKCkubG9nZ2Vy
UHRyKCkpIHBhcnNlcigpLmxvZ2dlclB0cigpLT5lcnJvcihsb2dDaGFubmVsKCksIExvZ2dlcjo6
TG9nU2l0ZUlkZW50aWZpZXIobG9nQ2xhc3NOYW1lKCksIF9fZnVuY19fLCBwYXJzZXIoKS5sb2dJ
ZGVudGlmaWVyKCkpLCBfX1ZBX0FSR1NfXykKIAotUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxv
Y2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKK1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29udGlndW91c0Nv
bXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsK
LSAgICBpZiAoIW9mZnNldCAmJiAhbGVuZ3RoICYmIFBBTDo6Q01CbG9ja0J1ZmZlcklzUmFuZ2VD
b250aWd1b3VzKG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgMCwgMCkpCi0gICAgICAgIHJl
dHVybiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7Ci0gICAgQ01CbG9ja0J1ZmZlclJlZiByYXdDb250
aWd1b3VzQnVmZmVyID0gbnVsbHB0cjsKLSAgICBpZiAoUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRl
Q29udGlndW91cyhudWxscHRyLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIG51bGxwdHIs
IG51bGxwdHIsIG9mZnNldCwgbGVuZ3RoLCAwLCAmcmF3Q29udGlndW91c0J1ZmZlcikgIT0ga0NN
QmxvY2tCdWZmZXJOb0VycikgewotICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChXZWJBdWRpbywg
ImZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBibG9jayBidWZmZXIiKTsKKyAgICBpZiAob2Zm
c2V0ICsgbGVuZ3RoID4gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5zaXplKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihyYXdDb250aWd1b3VzQnVm
ZmVyKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5nZXQoKS0+Z2V0Q29udGln
dW91c0RhdGEob2Zmc2V0LCBsZW5ndGgpOwogfQogCiB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVy
LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVt
YWluaW5nKQpAQCAtMTIyNCwyMCArMTE4OCw5IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAg
ICAgaWYgKCFtX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNp
emUgPSBtZXRhZGF0YS5zaXplOwogCi0gICAgaWYgKCFtX2N1cnJlbnRCbG9ja0J1ZmZlcikgewot
ICAgICAgICBBU1NFUlQoIW1fcGFydGlhbEJ5dGVzUmVhZCk7Ci0gICAgICAgIENNQmxvY2tCdWZm
ZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6
Q01CbG9ja0J1ZmZlckNyZWF0ZUVtcHR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1NYXhCbG9ja0J1
ZmZlckNhcGFjaXR5LCAwLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICBpZiAoZXJyICE9IGtD
TUJsb2NrQnVmZmVyTm9FcnIgfHwgIXJhd0Jsb2NrQnVmZmVyKSB7Ci0gICAgICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVk
IHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0
ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0g
YWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgfQotCiAgICAgd2hpbGUgKCpieXRlc1JlbWFp
bmluZykgewogICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7Ci0gICAgICAgIGF1dG8gc3RhdHVz
ID0gc3RhdGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJl
YWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQo
KSwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVz
UmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlciwgJmJ5dGVzUmVhZCk7CiAgICAgICAgICpi
eXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CiAgICAgICAgIG1fcGFydGlhbEJ5dGVzUmVhZCAr
PSBieXRlc1JlYWQ7CiAKQEAgLTEyNDksNjggKzEyMDIsNjggQEAgd2VibTo6U3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXIm
IHJlYWQKICAgICBpZiAobV9wYXJ0aWFsQnl0ZXNSZWFkIDwgKm1fY29tcGxldGVQYWNrZXRTaXpl
KQogICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rUGFydGlhbCk7
CiAKLSAgICBpZiAoIW1fY29tcGxldGVCbG9ja0J1ZmZlcikKLSAgICAgICAgbV9jb21wbGV0ZUJs
b2NrQnVmZmVyID0gV1RGTW92ZShtX2N1cnJlbnRCbG9ja0J1ZmZlcik7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNl
KG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCks
IDAsIDAsIDApOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlIHRvIGNv
bXBsZXRlIGJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgfQotICAgICAgICBt
X2N1cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQorICAgIG1fY29tcGxldGVCbG9j
a0J1ZmZlcnMuYXBwZW5kKG1fY3VycmVudEJsb2NrQnVmZmVyLnRha2UoKSk7CiAgICAgbV9wYXJ0
aWFsQnl0ZXNSZWFkID0gMDsKIAogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVz
OjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIs
IGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcs
IGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQordm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6
Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KQogewotI2lmIEVOQUJMRShW
UDkpCi0gICAgYXV0byBzdGF0dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5
dGVzUmVtYWluaW5nKTsKLSAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKLSAgICAgICAg
cmV0dXJuIHN0YXR1czsKKyAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKIAotICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihwcmVzZW50YXRpb25UaW1lLCBzYW1w
bGVDb3VudCwgbWV0YWRhdGEpOwotICAgIHJlc2V0KCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShtZXRhZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOwotICAgIFVO
VVNFRF9QQVJBTShzYW1wbGVDb3VudCk7Ci0jZW5kaWYKKyAgICBSZXRhaW5QdHI8Q01CbG9ja0J1
ZmZlclJlZj4gY29tcGxldGVDTUJsb2NrQnVmZmVyczsgLy8gPSBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXJzLnRha2UoKS0+Y3JlYXRlQ01CbG9ja0J1ZmZlcigpOworICAgIGlmICghY29tcGxldGVDTUJs
b2NrQnVmZmVycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIFNraXAoJnJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOworICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9
IG51bGxwdHI7CisgICAgYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgY29tcGxldGVDTUJsb2NrQnVmZmVycy5nZXQoKSwgZm9ybWF0
RGVzY3JpcHRpb24oKS5nZXQoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0VGltaW5n
cy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5kYXRhKCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBt
X3BhY2tldFNpemVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcik7CisgICAgaWYgKGVycikgewor
ICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0
ZVJlYWR5IGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHBvc3RQcm9jZXNzKHJhd1NhbXBsZUJ1ZmZlcik7CisKKyAgICBhdXRvIHRyYWNrSUQgPSB0
cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpOworICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEo
YWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpLCB0cmFja0lELCBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQp
OwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVh
dGVTYW1wbGVCdWZmZXIoY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxl
Q291bnQsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhKQordm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0
ZSgpCit7CisgICAgbV9rZXlGcmFtZXMuY2xlYXIoKTsKKyAgICBUcmFja0RhdGE6OnJlc2V0Q29t
cGxldGVkRnJhbWVzU3RhdGUoKTsKK30KKword2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVh
ZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCkKIHsKICNpZiBFTkFCTEUo
VlA5KQotICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CisgICAgYXV0byBz
dGF0dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsK
KyAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKKyAgICAgICAgcmV0dXJuIHN0YXR1czsK
KwogICAgIGNvbnN0ZXhwciBzaXplX3QgbWF4SGVhZGVyU2l6ZSA9IDMyOyAvLyBUaGUgbWF4aW11
bSBsZW5ndGggb2YgYSBWUDkgdW5jb21wcmVzc2VkIGhlYWRlciBpcyAxNDQgYml0cyBhbmQgMTEg
Ynl0ZXMgZm9yIFZQOC4gUm91bmQgaGlnaC4KICAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0
aCA9IHN0ZDo6bWluKG1heEhlYWRlclNpemUsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7Ci0gICAg
YXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwg
c2VnbWVudEhlYWRlckxlbmd0aCk7CisgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGln
dW91c0NvbXBsZXRlQmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgc2VnbWVu
dEhlYWRlckxlbmd0aCk7CiAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVC
dWZmZXIgZmFpbGVkIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQ
b2ludGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFy
KiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9H
X0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdp
dGggZXJyb3IiLCBlcnIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGNvbnN0IHVpbnQ4
X3QqIGJsb2NrQnVmZmVyRGF0YSA9IGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKTsKIAogICAgIGJv
b2wgaXNLZXkgPSBmYWxzZTsKICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Zm9ybWF0RGVzY3JpcHRpb247CiAgICAgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWUDkpIHsK
ICAgICAgICAgaWYgKCFtX2hlYWRlclBhcnNlci5QYXJzZVVuY29tcHJlc3NlZEhlYWRlcihibG9j
a0J1ZmZlckRhdGEsIHNlZ21lbnRIZWFkZXJMZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogCiAgICAg
ICAgIGlmIChtX2hlYWRlclBhcnNlci5rZXkoKSkgewogICAgICAgICAgICAgaXNLZXkgPSB0cnVl
OwogICAgICAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2Ny
aXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2soKS52aWRlby52
YWx1ZSgpLmNvbG91cik7CiAgICAgICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiZmFpbGVkIHRvIGNy
ZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBWUFggaGVhZGVyIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVt
YWluaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9u
KFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKICAgICAgICAgfQpAQCAtMTMyMSw3ICsxMjc0
LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRl
U2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYgcHIKICAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVz
Y3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoKmhlYWRlciwg
dHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cik7CiAgICAgICAgICAgICBpZiAoIWZvcm1hdERl
c2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiZmFpbGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBWUFggaGVhZGVyIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZy
ZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldEZv
cm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKICAgICAgICAgfQpA
QCAtMTMzNiw0NSArMTI4OSw0NSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVv
VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3QgQ01UaW1lJiBwcgogICAgIGlmICh0
cmFjay5kZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKICAgICAgICAgZHVyYXRpb24gPSB0
cmFjay5kZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2Fs
ZSAvIGtfdXNfaW5fc2Vjb25kczsKIAotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1
ZmZlciA9IG51bGxwdHI7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZyA9IHsgUEFMOjpD
TVRpbWVNYWtlKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRh
dGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUgfTsKLSAgICBlcnIgPSBQQUw6OkNNU2FtcGxlQnVm
ZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9jb21wbGV0ZUJsb2NrQnVmZmVy
LmdldCgpLCB0aGlzLT5mb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBzYW1wbGVDb3VudCwgMSwg
JnRpbWluZywgMSwgJiptX2NvbXBsZXRlUGFja2V0U2l6ZSwgJnJhd1NhbXBsZUJ1ZmZlcik7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNh
bXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxl
QnVmZmVyKTsKKyAgICBtX2tleUZyYW1lcy5hcHBlbmQoaXNLZXkpOworICAgIG1fcGFja2V0U2l6
ZXMuYXBwZW5kKCptX2NvbXBsZXRlUGFja2V0U2l6ZSk7CisgICAgbV9wYWNrZXRUaW1pbmdzLmFw
cGVuZCh7IFBBTDo6Q01UaW1lTWFrZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lc2Nh
bGUpLCBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lIH0pOworICAgIG1fY3VycmVu
dFBhY2tldEJ5dGVPZmZzZXQgKz0gKm1fY29tcGxldGVQYWNrZXRTaXplOworICAgIG1fY29tcGxl
dGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0OworCisgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygp
OworCisgICAgQVNTRVJUKCEqYnl0ZXNSZW1haW5pbmcpOworICAgIHJldHVybiB3ZWJtOjpTdGF0
dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
cHJlc2VudGF0aW9uVGltZSk7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZUNvdW50KTsKKyAgICBV
TlVTRURfUEFSQU0obWV0YWRhdGEpOworICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVt
YWluaW5nKTsKKyNlbmRpZgorfQogCi0gICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpD
TVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLmdldCgp
LCB0cnVlKTsKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBv
c3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlcikKK3sKKyAgICBhdXRv
IGF0dGFjaG1lbnRzQXJyYXkgPSBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVu
dHNBcnJheShyYXdTYW1wbGVCdWZmZXIsIHRydWUpOwogICAgIEFTU0VSVChhdHRhY2htZW50c0Fy
cmF5KTsKICAgICBpZiAoIWF0dGFjaG1lbnRzQXJyYXkpIHsKICAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5
IHJldHVybmVkIE5VTEwiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXNL
ZXkpIHsKLSAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENGTXV0
YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxl
RGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBp
KSk7CisgICAgQVNTRVJUKHNpemVfdChDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSkp
ID09IG1fa2V5RnJhbWVzLnNpemUoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9
IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IGNoZWNrZWRfY2ZfY2Fz
dDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1l
bnRzQXJyYXksIGkpKTsKKyAgICAgICAgaWYgKCFtX2tleUZyYW1lc1tpXSkKICAgICAgICAgICAg
IENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBQQUw6OmtDTVNhbXBsZUF0dGFjaG1l
bnRLZXlfTm90U3luYywga0NGQm9vbGVhblRydWUpOwotICAgICAgICB9CiAgICAgfQotCi0gICAg
YXV0byB0cmFja0lEID0gdHJhY2sudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2VyKCkucHJv
dmlkZU1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIG1ldGFkYXRhLnBv
c2l0aW9uKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOwotICAg
IFVOVVNFRF9QQVJBTShzYW1wbGVDb3VudCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsK
LSNlbmRpZiAvLyBFTkFCTEUoVlA5KQogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZCgpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKIHsKICAg
ICBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrID0gMDsKLSAgICBtX3BhY2tldFNpemVzLmNsZWFy
KCk7Ci0gICAgbV9wYWNrZXRUaW1pbmdzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50UGFja2V0Qnl0
ZU9mZnNldCA9IDA7Ci0gICAgVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZCgpOworICAgIFRyYWNr
RGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogfQogCiB3ZWJtOjpTdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRf
dCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNh
bXBsZUNvdW50KQpAQCAtMTM4Myw4ICsxMzM2LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQK
ICAgICAgICAgYXV0byYgbGFzdFRpbWluZyA9IG1fcGFja2V0VGltaW5ncy5sYXN0KCk7CiAgICAg
ICAgIGlmIChQQUw6OkNNVGltZUNvbXBhcmUoUEFMOjpDTVRpbWVBZGQobGFzdFRpbWluZy5kdXJh
dGlvbiwgbGFzdFRpbWluZy5wcmVzZW50YXRpb25UaW1lU3RhbXApLCBwcmVzZW50YXRpb25UaW1l
KSkgewogICAgICAgICAgICAgLy8gRGlzY29udGludWl0eSBlbmNvdW50ZXJlZCwgZW1pdCB0aGUg
cHJldmlvdXNseSBkZW11eGVkIHNhbXBsZXMuCi0gICAgICAgICAgICBjcmVhdGVTYW1wbGVCdWZm
ZXIobWV0YWRhdGEucG9zaXRpb24pOwotICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgICAg
IGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM5MiwxMSAr
MTM0NCw2IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgaWYgKCFzdGF0dXMuY29tcGxl
dGVkX29rKCkpCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKLSAgICAvLyBBdHRlbXB0cyB0byBt
aW5pbWlzZSB0aGUgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0aW9ucyBkdWUgdG8gcmVwZXRpdHZl
IENNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgY2FsbHMgaW4gcmVhZEZyYW1lRGF0
YS4KLSAgICBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrKys7Ci0gICAgaWYgKG1OdW1GcmFtZXNJ
bkNvbXBsZXRlQmxvY2sgPiBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSkKLSAgICAgICAgbU1heEJs
b2NrQnVmZmVyQ2FwYWNpdHkgPSBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrOwotCiAgICAgaWYg
KG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgpKQogICAgICAgICBtX3NhbXBsZVByZXNlbnRhdGlvblRp
bWUgPSBwcmVzZW50YXRpb25UaW1lOwogCkBAIC0xNDE2LDEyICsxMzYzLDcgQEAgd2VibTo6U3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVE
YXRhKHdlYm06OlJlYWQKICAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBj
b250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVh
ZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB1aW50OF90
KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6
OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBu
dWxscHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgICAgICAgICAg
aWYgKGVycikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0g
Y29udGlndW91c0J1ZmZlci0+ZGF0YSgpOwogICAgICAgICAgICAgT3B1c0Nvb2tpZUNvbnRlbnRz
IGNvb2tpZUNvbnRlbnRzOwogICAgICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShw
cml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgKm1fY29tcGxldGVQYWNrZXRT
aXplLCBibG9ja0J1ZmZlckRhdGEsIGNvb2tpZUNvbnRlbnRzKSkgewogICAgICAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBwYXJzZSBPcHVzIHByaXZh
dGUgZGF0YSIpOwpAQCAtMTQ2MCwxMiArMTQwMiw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFk
CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpb1RyYWNrRGF0
YTo6Y29uc3VtZUZyYW1lRGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxv
Y2siKTsKICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsK
ICAgICAgICAgfQotICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwot
ICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKGNvbnRp
Z3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVm
ZmVyRGF0YSk7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJS
T1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBl
cnJvciIsIGVycik7Ci0gICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFp
bmluZyk7Ci0gICAgICAgIH0KKyAgICAgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJEYXRh
ID0gY29udGlndW91c0J1ZmZlci0+ZGF0YSgpOwogICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZh
dGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21wbGV0
ZVBhY2tldFNpemUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpCiAgICAgICAgICAg
ICB8fCBjb29raWVDb250ZW50cy5mcmFtZXNQZXJQYWNrZXQgIT0gbV9mcmFtZXNQZXJQYWNrZXQK
ICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZyYW1lRHVyYXRpb24gIT0gbV9mcmFtZUR1
cmF0aW9uKSB7CkBAIC0xNDgxLDQwICsxNDE4LDE4IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFk
CiAKICAgICBhdXRvIHNhbXBsZUR1cmF0aW9uID0gUEFMOjpDTVRpbWVHZXRTZWNvbmRzKFBBTDo6
Q01UaW1lU3VidHJhY3QocHJlc2VudGF0aW9uVGltZSwgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1l
KSkgKyBQQUw6OkNNVGltZUdldFNlY29uZHMobV9wYWNrZXREdXJhdGlvbikgKiBzYW1wbGVDb3Vu
dDsKIAotICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlvbikg
ewotICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIobWV0YWRhdGEucG9zaXRpb24pOwotICAgICAg
ICByZXNldCgpOwotICAgIH0KKyAgICBpZiAoc2FtcGxlRHVyYXRpb24gPj0gbV9taW5pbXVtU2Ft
cGxlRHVyYXRpb24pCisgICAgICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKIAogICAgIEFTU0VS
VCghKmJ5dGVzUmVtYWluaW5nKTsKICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1
czo6a09rQ29tcGxldGVkKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRp
b1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRl
c3RCeXRlUmFuZ2VPZmZzZXQpCi17Ci0gICAgaWYgKG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIg
PSBudWxscHRyOwotICAgIGF1dG8gZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5
KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgZm9ybWF0
RGVzY3JpcHRpb24oKS5nZXQoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0VGltaW5n
cy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5kYXRhKCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBt
X3BhY2tldFNpemVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKGVycikgewot
ICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvU2FtcGxlQnVmZmVy
Q3JlYXRlV2l0aFBhY2tldERlc2NyaXB0aW9ucyBmYWlsZWQgd2l0aCAlZCIsIGVycik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHJhd1Nh
bXBsZUJ1ZmZlcik7Ci0KLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFjaygpLnRyYWNrX3VpZC52YWx1
ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShzYW1wbGVCdWZmZXIp
LCB0cmFja0lELCBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOwotfQotCiB2b2lkIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpCiB7CiAgICAgZm9yIChhdXRv
JiB0cmFjayA6IG1fdHJhY2tzKSB7Ci0gICAgICAgIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0g
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpBdWRpbykgewotICAgICAg
ICAgICAgQXVkaW9UcmFja0RhdGEmIGF1ZGlvVHJhY2sgPSBkb3duY2FzdDxBdWRpb1RyYWNrRGF0
YT4odHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgYXVkaW9UcmFjay5jcmVhdGVTYW1wbGVCdWZm
ZXIoKTsKLSAgICAgICAgICAgIGF1ZGlvVHJhY2sucmVzZXRDb21wbGV0ZWQoKTsKLSAgICAgICAg
fQorICAgICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW8pCisgICAgICAgICAgICB0cmFjay0+ZHJhaW5QZW5k
aW5nU2FtcGxlcygpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmlu
ZGV4IGU4NzZhYjQxNGE0YWJiMzNkNTE4YzM3YjQxZmU1YTE0Nzc2YWI0OTYuLmFmZGJmNDliMmY0
NjkyMTZlMWI5ZGY3ZWQxODIxYjNhYTIyNzdmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIK
ICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KICNpbmNsdWRlIDxDb3JlTWVk
aWEvQ01UaW1lLmg+CkBAIC0zOSw3ICs0MCw2IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1h
dERlc2NyaXB0aW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01CbG9ja0J1ZmZlciAqQ01C
bG9ja0J1ZmZlclJlZjsKIAogbmFtZXNwYWNlIHdlYm0gewogY2xhc3MgV2VibVBhcnNlcjsKQEAg
LTE1NSwzMiArMTU1LDQ0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB3ZWJtOjpTdGF0
dXMod2VibTo6U3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRDb21wbGV0ZWQoKQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fY29tcGxl
dGVCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXJzLnJlc2V0KCk7CisgICAgICAgICAgICBtX3BhY2tldFNpemVzLmNsZWFyKCk7CisgICAgICAg
ICAgICBtX3BhY2tldFRpbWluZ3MuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBhY2tl
dEJ5dGVPZmZzZXQgPSAwOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgcmVzZXQoKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXNldENvbXBsZXRlZCgpOworICAgICAgICAgICAgcmVzZXRDb21w
bGV0ZWRGcmFtZXNTdGF0ZSgpOwogICAgICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBz
dGQ6Om51bGxvcHQ7CiAgICAgICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgPSAwOwotICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2tCdWZmZXIucmVzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkcmFpblBlbmRpbmdTYW1wbGVzKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFu
Z2VPZmZzZXQgPSBzdGQ6Om51bGxvcHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNyZWF0ZVNh
bXBsZUJ1ZmZlcihsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOworICAgICAgICAgICAgcmVzZXRDb21w
bGV0ZWRGcmFtZXNTdGF0ZSgpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZl
cihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKKyAgICAgICAgdm9pZCBjcmVh
dGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+KTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBvc3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmKSB7IH07CisgICAgICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQs
IHNpemVfdCBsZW5ndGgpIGNvbnN0OwogICAgICAgICB3ZWJtOjpTdGF0dXMgcmVhZEZyYW1lRGF0
YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqIGJ5
dGVzUmVtYWluaW5nKTsKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IG1fY29t
cGxldGVCbG9ja0J1ZmZlcjsKKyAgICAgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBtX2NvbXBsZXRl
QmxvY2tCdWZmZXJzOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbV9jb21wbGV0ZVBh
Y2tldFNpemU7Ci0gICAgICAgIC8vIEluaXRpYWwgYWxsb2NhdGlvbiBzaXplIG9mIGVtcHR5IENN
QmxvY2tCdWZmZXIuCi0gICAgICAgIHNpemVfdCBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSB7IDAg
fTsKKyAgICAgICAgc2l6ZV90IG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgeyAwIH07CisgICAg
ICAgIFZlY3RvcjxzaXplX3Q+IG1fcGFja2V0U2l6ZXM7CisgICAgICAgIFZlY3RvcjxDTVNhbXBs
ZVRpbWluZ0luZm8+IG1fcGFja2V0VGltaW5nczsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIENv
ZGVjVHlwZSBtX2NvZGVjOwogICAgICAgICB3ZWJtOjpUcmFja0VudHJ5IG1fdHJhY2s7CiAgICAg
ICAgIFR5cGUgbV90cmFja1R5cGU7CiAgICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOwotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1
ZmZlclJlZj4gbV9jdXJyZW50QmxvY2tCdWZmZXI7CisgICAgICAgIFNoYXJlZEJ1ZmZlckJ1aWxk
ZXIgbV9jdXJyZW50QmxvY2tCdWZmZXI7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0m
IG1fcGFyc2VyOwogICAgICAgICAvLyBTaXplIG9mIHRoZSBjdXJyZW50bHkgaW5jb21wbGV0ZSBw
YXJzZWQgcGFja2V0LgogICAgICAgICBzaXplX3QgbV9wYXJ0aWFsQnl0ZXNSZWFkIHsgMCB9OwpA
QCAtMTk4LDE0ICsyMTAsMTQgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3
ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFs
OwotCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3Qg
Q01UaW1lJiwgaW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJik7CiAgICAgICAgIGNvbnN0
IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0K
LQorICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBj
b25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQp
IGZpbmFsOworICAgICAgICB2b2lkIHBvc3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmKSBmaW5h
bDsKKyAgICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7CiAjaWYg
RU5BQkxFKFZQOSkKICAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyIG1faGVhZGVy
UGFyc2VyOworICAgICAgICBWZWN0b3I8Ym9vbD4gbV9rZXlGcmFtZXM7CiAjZW5kaWYKICAgICB9
OwogCkBAIC0yMjIsMjAgKzIzNCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQog
Ci0gICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNv
bnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkg
ZmluYWw7Ci0gICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWQoKSBmaW5hbDsKLSAgICAgICAgdm9p
ZCBjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5n
ZU9mZnNldCA9IHN0ZDo6bnVsbG9wdCk7Ci0KICAgICBwcml2YXRlOgorICAgICAgICB3ZWJtOjpT
dGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1l
dGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB2
b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICAgICAgICAgY29uc3QgY2hh
ciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQogCiAg
ICAgICAgIENNVGltZSBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWU7CiAgICAgICAgIENNVGltZSBt
X3BhY2tldER1cmF0aW9uOwotICAgICAgICBzaXplX3QgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNl
dCB7IDAgfTsKICAgICAgICAgdWludDhfdCBtX2ZyYW1lc1BlclBhY2tldCB7IDAgfTsKICAgICAg
ICAgU2Vjb25kcyBtX2ZyYW1lRHVyYXRpb24geyAwX3MgfTsKLSAgICAgICAgVmVjdG9yPHNpemVf
dD4gbV9wYWNrZXRTaXplczsKLSAgICAgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gbV9w
YWNrZXRUaW1pbmdzOwogICAgICAgICBzaXplX3QgbU51bUZyYW1lc0luQ29tcGxldGVCbG9jayB7
IDAgfTsKICAgICAgICAgLy8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1
cmF0aW9uIHBlciBzYW1wbGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0
aGUgZmlyc3QKICAgICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4
IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIgdG8gZGVhbCB3aXRoIGBlbmRD
dXJzb3JgLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvVlA5VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggOTQxMGE3YzQ3OTYzNDcwNGViNTljOTk5
NjAzNDg0NGI2OWE4ODc2ZC4uOTU0NGQ5YzI1N2ZlMGJkNTU4MjgwM2FlMWE4MDg0NTAxNzNjNTBi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBWUDhGcmFt
ZUhlYWRlciB7CiAgICAgYm9vbCBuZWVkc0NsYW1waW5nIHsgZmFsc2UgfTsKIH07CiAKLXN0ZDo6
b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJh
bWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKTsKK3N0ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+
IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJh
bWVTaXplKTsKIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXRE
ZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImLCBjb25zdCB3ZWJt
OjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgVlA5VGVz
dGluZ092ZXJyaWRlcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCmluZGV4IDVjMGRmYWZkYjJlNjdm
MDQ4MDUwNWZlYWM2NmE0ZWQ1NDRhMjllMzMuLmRkMTc3OWYyNjM4OTI2OTU5NDRmNDIzNzZmY2Rh
ZTViNmQzMGIyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCkBAIC02MDksNyArNjA5LDcgQEAg
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9u
RnJvbVZQOUhlYWRlclBhcnNlcihjb24KICAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRp
b25Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBwYXJzZXIud2lkdGgoKSwg
cGFyc2VyLmhlaWdodCgpKTsKIH0KIAotc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFy
c2VWUDhGcmFtZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpCitz
dGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVp
bnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKIHsKICAgICAvLyBWUDggZnJhbWUg
aGVhZGVycyBhcmUgZGVmaW5lZCBpbiBSRkMgNjM4NjogPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcv
aHRtbC9yZmM2Mzg2Pi4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGYyNjQwMmUwODhjZWZkZmFlMThiZjdiNThlZGNhOTViMTRiYmQ5NDYuLjdh
M2RlZTg3ZGYxZmJiMjFkZDM3MWU3OGI3ZjhhNDc0NzRjOGNlNDkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0w
Mi0yMyAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBh
YmlsaXR5IHRvIGNvbnZlcnQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciB0byBDTUJsb2NrQnVmZmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwNzUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVF9GKToKKwogMjAyMi0wMi0xOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFw
cGxlLmNvbT4KIAogICAgICAgICBTZXQgY3VzdG9tIGdlbmVyYWwgc3RvcmFnZSBkaXJlY3Rvcnkg
Zm9yIGN1c3RvbSBXZWJzaXRlRGF0YVN0b3JlIGluIFRlc3RDb250cm9sbGVyCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IDMx
NTVjMDlmMjQ3M2ViZWE2OTAwYjM5YzBkOWJlY2FhY2FhNWEwMTUuLmIwMTEyOGIyNmIxY2MwYTIw
NWM2NTQxYTQ4NTZiN2YwMmY0OGJjNzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0yMzksNiArMjM5LDQxIEBAIFRFU1Rf
RihGcmFnbWVudGVkU2hhcmVkQnVmZmVyVGVzdCwgZ2V0U29tZURhdGEpCiAgICAgY2hlY2tCdWZm
ZXIobC5kYXRhKCksIGwuc2l6ZSgpLCAibCIpOwogfQogCitURVNUX0YoRnJhZ21lbnRlZFNoYXJl
ZEJ1ZmZlclRlc3QsIGdldENvbnRpZ3VvdXNEYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBz
MSA9IHsgJ2EnLCAnYicsICdjJywgJ2QnIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHMyID0geyAn
ZScsICdmJywgJ2cnLCAnaCcgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gczMgPSB7ICdpJywgJ2on
LCAnaycsICdsJyB9OworCisgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBidWlsZGVyOworICAgIGJ1
aWxkZXIuYXBwZW5kKFdURk1vdmUoczEpKTsKKyAgICBidWlsZGVyLmFwcGVuZChXVEZNb3ZlKHMy
KSk7CisgICAgYnVpbGRlci5hcHBlbmQoV1RGTW92ZShzMykpOworICAgIGF1dG8gYnVmZmVyID0g
YnVpbGRlci50YWtlKCk7CisKKyAgICBhdXRvIGFiY2QgPSBidWZmZXItPmdldENvbnRpZ3VvdXNE
YXRhKDAsIDQpOworICAgIGF1dG8gYmNkZWZnaGkgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRh
KDEsIDgpOworICAgIGF1dG8gZ2ggPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDYsIDIpOwor
ICAgIGF1dG8gZ2hpaiA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoNiwgNCk7CisgICAgYXV0
byBoID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSg3LCAxKTsKKyAgICBhdXRvIGlqayA9IGJ1
ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoOCwgMyk7CisgICAgYXV0byBrbCA9IGJ1ZmZlci0+Z2V0
Q29udGlndW91c0RhdGEoMTAsIDIpOworICAgIGF1dG8gbCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91
c0RhdGEoMTEsIDEpOworICAgIGNoZWNrQnVmZmVyKGFiY2QtPmRhdGEoKSwgYWJjZC0+c2l6ZSgp
LCAiYWJjZCIpOworICAgIGNoZWNrQnVmZmVyKGJjZGVmZ2hpLT5kYXRhKCksIGJjZGVmZ2hpLT5z
aXplKCksICJiY2RlZmdoaSIpOworICAgIGNoZWNrQnVmZmVyKGdoLT5kYXRhKCksIGdoLT5zaXpl
KCksICJnaCIpOworICAgIGNoZWNrQnVmZmVyKGdoaWotPmRhdGEoKSwgZ2hpai0+c2l6ZSgpLCAi
Z2hpaiIpOworICAgIGNoZWNrQnVmZmVyKGgtPmRhdGEoKSwgaC0+c2l6ZSgpLCAiaCIpOworICAg
IGNoZWNrQnVmZmVyKGlqay0+ZGF0YSgpLCBpamstPnNpemUoKSwgImlqayIpOworICAgIGNoZWNr
QnVmZmVyKGtsLT5kYXRhKCksIGtsLT5zaXplKCksICJrbCIpOworICAgIGNoZWNrQnVmZmVyKGwt
PmRhdGEoKSwgbC0+c2l6ZSgpLCAibCIpOworICAgIGF1dG8gZmdoaWprbCA9IGJ1ZmZlci0+Z2V0
Q29udGlndW91c0RhdGEoNSwgMjApOworICAgIEVYUEVDVF9FUShmZ2hpamtsLT5zaXplKCksIGJ1
ZmZlci0+c2l6ZSgpIC0gNSk7CisgICAgY2hlY2tCdWZmZXIoZmdoaWprbC0+ZGF0YSgpLCBmZ2hp
amtsLT5zaXplKCksICJmZ2hpamtsIik7CisgICAgYXV0byBvdXRCb3VuZCA9IGJ1ZmZlci0+Z2V0
Q29udGlndW91c0RhdGEoMzAsIDIwKTsKKyAgICBFWFBFQ1RfRVEob3V0Qm91bmQtPnNpemUoKSwg
MHUpOworfQorCiBURVNUX0YoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlclRlc3QsIGlzRXF1YWxUbykK
IHsKICAgICBhdXRvIG1ha2VCdWZmZXIgPSBbXSAoVmVjdG9yPFZlY3Rvcjx1aW50OF90Pj4mJiBj
b250ZW50cykgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453138</attachid>
            <date>2022-02-24 14:27:33 -0800</date>
            <delta_ts>2022-02-24 19:56:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237078-20220225092731.patch</filename>
            <type>text/plain</type>
            <size>32012</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDQzN2JhN2JmYTA1NDNk
ZWJjZWMxMTk0NzdlYjk2Zjg4ZGNlNDAxMy4uNTIwMjBmNmNmZWEwMjc5NGY0NWY3MDQ1NTUxYTk5
YTA1MmRkZWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIHVzZSBTaGFyZWRCdWZmZXIgaW50ZXJuYWxseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc4CisgICAgICAgIHJkYXI6Ly84
OTM0ODc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSByZWZhY3RvciB0byBhbGxvdyBTb3VyY2VCdWZmZXJQYXJzZXIgdG8gcmV0dXJu
IFNoYXJlZEJ1ZmZlcgorICAgICAgICByYXRoZXIgdGhhbiBDTUJsb2NrQnVmZmVyLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBvYnNlcnZhYmxlIGJlaGF2aW91cnMuCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6
OnJlZW5xdWV1ZU1lZGlhRm9yVGltZSk6IEZseS1ieSBmaXg6IHR5cG8uCisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKTogRmx5LWJ5IGZpeCwg
IGV4aXQgZWFybHkKKyAgICAgICAgaWYgZW5kIHRpbWUgaXMgbG93ZXIgdGhhbiBzdGFydCB0aW1l
IHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGR1cmF0aW9uIGlzCisgICAgICAgIHNtYWxsZXIgdGhh
biBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
VlA4RnJhbWVIZWFkZXIpOiBNYWtlIG1ldGhvZHMgY29uc3QuCisKIDIwMjItMDItMjMgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYWJpbGl0eSB0byBj
b252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRl
LmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0YzliNjY0Li5hYTBj
MjAzYjgyNWRhN2Y4NTYxYzc0OGZiMjk4NzE5ZmRmMzExNmM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApA
QCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6cmVlbnF1ZXVlTWVk
aWFGb3JUaW1lKFRyYWNrQnVmZmVyJiB0cmFja0J1ZmZlciwgY29uc3QKICAgICAgICAgfHwgKGN1
cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+Zmlyc3QgLSB0aW1lKSA+IHRpbWVGdWRnZUZhY3Rvcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBTZWFjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZp
b3VzIHN5bmMgc2FtcGxlLgorICAgIC8vIFNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3Vz
IHN5bmMgc2FtcGxlLgogICAgIERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlIGRlY29kZUtl
eShjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+ZGVjb2RlVGltZSgpLCBjdXJyZW50
U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKICAgICBhdXRv
IGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZGVjb2RlT3Jk
ZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtleShkZWNvZGVLZXkpOwogICAgIEFTU0VSVChjdXJy
ZW50U2FtcGxlRFRTSXRlcmF0b3IgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigp
LmVuZCgpKTsKQEAgLTExNzIsNiArMTE3Miw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6
ZGlkUmVjZWl2ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgb3JpZ2luYWxTYW1wbGUpCiAgICAg
ICAgICAgICAgICAgTWVkaWFUaW1lIGVyYXNlQmVnaW5UaW1lID0gdHJhY2tCdWZmZXIuaGlnaGVz
dFByZXNlbnRhdGlvblRpbWVzdGFtcDsKICAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VF
bmRUaW1lID0gZnJhbWVFbmRUaW1lc3RhbXAgLSBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2U7CiAK
KyAgICAgICAgICAgICAgICBpZiAoZXJhc2VFbmRUaW1lIDw9IGVyYXNlQmVnaW5UaW1lKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIFByZXNlbnRhdGlvbk9y
ZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5nZSByYW5nZTsKICAgICAgICAgICAgICAgICBpZiAo
aGlnaGVzdEJ1ZmZlcmVkVGltZSAtIHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1l
c3RhbXAgPCB0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgbmV3IGZyYW1lIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcmVkIHJh
bmdlcywgcGVyZm9ybSBhIHNlcXVlbnRpYWwgc2NhbiBmcm9tIGVuZCAoTygxKSkuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Nv
dXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmluZGV4IGFlMTY0MTRmMjFjNjg0NmMxODk3NzA5ZTE0
MjRlNGE2YTRiNzYxYTAuLjdmZWNhMmJhOTVkYTM1NmZiOGJhNDE4MWEyZDJlOGUxNzRhN2Q1YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCkBAIC0zNiw3ICszNiw2IEBACiAj
aW5jbHVkZSAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJWUDlVdGlsaXRpZXNDb2NvYS5oIgogI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlV2ViTS5oIgogI2luY2x1ZGUgIldlYk1BdWRpb1V0aWxpdGllc0Nv
Y29hLmgiCkBAIC0zNjUsMjEgKzM2NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprV291bGRCbG9jayk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgRnJlZVNo
YXJlZEJ1ZmZlcih2b2lkKiByZWZjb24sIHZvaWQqLCBzaXplX3QpCisgICAgU3RhdHVzIFJlYWRJ
bnRvKHN0ZDo6c2l6ZV90IG51bVRvUmVhZCwgU2hhcmVkQnVmZmVyQnVpbGRlciYgb3V0cHV0QnVm
ZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQogICAgIHsKLSAgICAgICAgYXV0byogYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxTaGFyZWRCdWZmZXIqPihyZWZjb24pOwotICAgICAgICBi
dWZmZXItPmRlcmVmKCk7Ci0gICAgfQotCi0gICAgU3RhdHVzIFJlYWRJbnRvKHN0ZDo6c2l6ZV90
IG51bVRvUmVhZCwgQ01CbG9ja0J1ZmZlclJlZiBvdXRwdXRCdWZmZXIsIHVpbnQ2NF90KiBudW1B
Y3R1YWxseVJlYWQpCi0gICAgewotICAgICAgICBBU1NFUlQob3V0cHV0QnVmZmVyICYmIG51bUFj
dHVhbGx5UmVhZCk7CisgICAgICAgIEFTU0VSVChudW1BY3R1YWxseVJlYWQpOwogICAgICAgICBp
ZiAoIW51bUFjdHVhbGx5UmVhZCkKICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
Tm90RW5vdWdoTWVtb3J5KTsKIAogICAgICAgICAqbnVtQWN0dWFsbHlSZWFkID0gMDsKLSAgICAg
ICAgaWYgKCFvdXRwdXRCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a05vdEVub3VnaE1lbW9yeSk7CiAKICAgICAgICAgd2hpbGUgKG51bVRvUmVhZCAmJiBtX2N1cnJl
bnRTZWdtZW50ICE9IG1fZGF0YS5lbmQoKSkgewogICAgICAgICAgICAgYXV0byYgY3VycmVudFNl
Z21lbnQgPSAqbV9jdXJyZW50U2VnbWVudDsKQEAgLTM4OSw0NCArMzgwLDIyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlciA9IGN1cnJlbnRTZWdtZW50LmdldFNoYXJl
ZEJ1ZmZlcigpOwotICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9
IG51bGxwdHI7Ci0gICAgICAgICAgICB1aW50NjRfdCBsYXN0UmVhZCA9IDA7CisgICAgICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByYXdCbG9ja0J1ZmZlcjsKICAgICAgICAgICAgIGlmICgh
c2hhcmVkQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgcG90ZW50aWFsbHkg
YWxsb2NhdGUgbW9yZSBtZW1vcnkgdGhhbiBuZWVkZWQgaWYgdGhlIHJlYWQgaXMgcGFydGlhbC4K
LSAgICAgICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhN
ZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBudW1Ub1JlYWQsIGtDRkFs
bG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIDAsIG51bVRvUmVhZCwga0NNQmxvY2tCdWZmZXJBc3N1
cmVNZW1vcnlOb3dGbGFnLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChl
cnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwotICAgICAgICAgICAgICAgIHVpbnQ4X3Qq
IGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNlZ21l
bnRTaXplQXRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgZXJyID0gUEFMOjpDTUJsb2Nr
QnVmZmVyR2V0RGF0YVBvaW50ZXIocmF3QmxvY2tCdWZmZXIsIDAsICZzZWdtZW50U2l6ZUF0UG9z
aXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7CisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXIudHJ5UmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShudW1Ub1JlYWQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgYXV0byBy
ZWFkUmVzdWx0ID0gY3VycmVudFNlZ21lbnQucmVhZChtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwg
bnVtVG9SZWFkLCBibG9ja0J1ZmZlckRhdGEpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZXNp
emUobnVtVG9SZWFkKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQgPSBjdXJyZW50
U2VnbWVudC5yZWFkKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQsIGJ1ZmZlci5k
YXRhKCkpOwogICAgICAgICAgICAgICAgIGlmICghcmVhZFJlc3VsdC5oYXNfdmFsdWUoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRSZWFkRXJyb3JUb1dlYm1TdGF0dXMocmVh
ZFJlc3VsdC5lcnJvcigpKTsKLSAgICAgICAgICAgICAgICBsYXN0UmVhZCA9IHJlYWRSZXN1bHQu
dmFsdWUoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzog
Y291bGQgd2Ugb25seSBjcmVhdGUgYSBuZXcgQ01CbG9ja0J1ZmZlciBpZiB0aGUgYmFja2VuZCBt
ZW1vcnkgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgb25lPwotICAgICAgICAgICAgICAgIHNp
emVfdCBjYW5SZWFkID0gc3RkOjptaW48c2l6ZV90PihudW1Ub1JlYWQsIHNoYXJlZEJ1ZmZlci0+
c2l6ZSgpIC0gbV9wb3NpdGlvbldpdGhpblNlZ21lbnQpOwotICAgICAgICAgICAgICAgIC8vIEZy
b20gQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246Ci0gICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgdGhpcyBzdHJ1
Y3QgY29udGFpbnMgbWlzYWxpZ25lZCBmdW5jdGlvbiBwb2ludGVycy4KLSAgICAgICAgICAgICAg
ICAvLyBUbyBhdm9pZCBsaW5rLXRpbWUgaXNzdWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGNs
aWVudHMgZmlsbCBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UncyBmdW5jdGlvbiBwb2lu
dGVyIGZpZWxkcwotICAgICAgICAgICAgICAgIC8vIGJ5IHVzaW5nIGFzc2lnbm1lbnQgc3RhdGVt
ZW50cywgcmF0aGVyIHRoYW4gZGVjbGFyaW5nIHRoZW0gYXMgZ2xvYmFsIG9yIHN0YXRpYyBzdHJ1
Y3RzLgotICAgICAgICAgICAgICAgIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSBhbGxv
Y2F0b3I7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnZlcnNpb24gPSAwOwotICAgICAgICAg
ICAgICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0b3IuRnJlZUJsb2NrID0gRnJlZVNoYXJlZEJ1ZmZlcjsKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0b3IucmVmQ29uID0gc2hhcmVkQnVmZmVyLmdldCgpOwotICAgICAgICAgICAgICAg
IHNoYXJlZEJ1ZmZlci0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNN
QmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sobnVsbHB0ciwgc3RhdGljX2Nhc3Q8dm9p
ZCo+KGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZEJ1ZmZlci0+ZGF0YSgpKSksIHNoYXJlZEJ1
ZmZlci0+c2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9yLCBtX3Bvc2l0aW9uV2l0aGluU2VnbWVu
dCwgY2FuUmVhZCwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJy
ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgICAgICAgICBsYXN0UmVhZCA9
IGNhblJlYWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIGJsb2NrQnVmZmVyID0g
YWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01C
bG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShvdXRwdXRCdWZmZXIsIHJhd0Jsb2NrQnVm
ZmVyLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0Vy
cikKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9y
eSk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShyZWFkUmVzdWx0LnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIHJhd0Jsb2NrQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShidWZmZXIpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJhd0Js
b2NrQnVmZmVyID0gc2hhcmVkQnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YShtX3Bvc2l0aW9uV2l0
aGluU2VnbWVudCwgbnVtVG9SZWFkKTsKKyAgICAgICAgICAgIGF1dG8gbGFzdFJlYWQgPSByYXdC
bG9ja0J1ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgb3V0cHV0QnVmZmVyLmFwcGVuZCgqcmF3
QmxvY2tCdWZmZXIpOwogICAgICAgICAgICAgbV9wb3NpdGlvbiArPSBsYXN0UmVhZDsKICAgICAg
ICAgICAgICpudW1BY3R1YWxseVJlYWQgKz0gbGFzdFJlYWQ7CiAgICAgICAgICAgICBtX3Bvc2l0
aW9uV2l0aGluU2VnbWVudCArPSBsYXN0UmVhZDsKQEAgLTEyMDEsMTYgKzExNzAsMTEgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gc2FtcGwKIAogI2RlZmluZSBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKC4uLikgaWYgKHBhcnNlcigpLmxvZ2dlclB0cigpKSBwYXJzZXIoKS5sb2dnZXJQdHIoKS0+
ZXJyb3IobG9nQ2hhbm5lbCgpLCBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKGxvZ0NsYXNzTmFt
ZSgpLCBfX2Z1bmNfXywgcGFyc2VyKCkubG9nSWRlbnRpZmllcigpKSwgX19WQV9BUkdTX18pCiAK
LVJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFj
a0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVf
dCBsZW5ndGgpIGNvbnN0CitSZWZQdHI8U2hhcmVkQnVmZmVyPiBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgaWYgKCFvZmZzZXQgJiYgIWxlbmd0aCAm
JiBQQUw6OkNNQmxvY2tCdWZmZXJJc1JhbmdlQ29udGlndW91cyhtX2NvbXBsZXRlQmxvY2tCdWZm
ZXIuZ2V0KCksIDAsIDApKQotICAgICAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOwot
ICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3Q29udGlndW91c0J1ZmZlciA9IG51bGxwdHI7Ci0gICAg
aWYgKFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUNvbnRpZ3VvdXMobnVsbHB0ciwgbV9jb21wbGV0
ZUJsb2NrQnVmZmVyLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBvZmZzZXQsIGxlbmd0aCwgMCwg
JnJhd0NvbnRpZ3VvdXNCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRkFVTFQoV2ViQXVkaW8sICJmYWlsZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMg
YmxvY2sgYnVmZmVyIik7CisgICAgaWYgKG9mZnNldCArIGxlbmd0aCA+IG1fY29tcGxldGVCbG9j
a0J1ZmZlcnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0
dXJuIGFkb3B0Q0YocmF3Q29udGlndW91c0J1ZmZlcik7CisgICAgcmV0dXJuIG1fY29tcGxldGVC
bG9ja0J1ZmZlcnMuZ2V0KCktPmdldENvbnRpZ3VvdXNEYXRhKG9mZnNldCwgbGVuZ3RoKTsKIH0K
IAogd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZy
YW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYg
bWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKQEAgLTEyMjQsMjAgKzExODgsOSBA
QCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJh
bWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZAogICAgIGlmICghbV9jb21wbGV0ZVBhY2tldFNpemUp
CiAgICAgICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gbWV0YWRhdGEuc2l6ZTsKIAotICAgIGlm
ICghbV9jdXJyZW50QmxvY2tCdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BhcnRpYWxCeXRl
c1JlYWQpOwotICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0
cjsKLSAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVFbXB0eShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSwgMCwgJnJhd0Jsb2NrQnVm
ZmVyKTsKLSAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyIHx8ICFyYXdCbG9j
a0J1ZmZlcikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01C
bG9ja0J1ZmZlckNyZWF0ZUVtcHR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAg
ICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgfQotICAg
ICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZmZXIpOwotICAg
IH0KLQogICAgIHdoaWxlICgqYnl0ZXNSZW1haW5pbmcpIHsKICAgICAgICAgdWludDY0X3QgYnl0
ZXNSZWFkOwotICAgICAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlNlZ21lbnRSZWFkZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmlu
ZywgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksICZieXRlc1JlYWQpOworICAgICAgICBhdXRv
IHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFk
ZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywgbV9jdXJyZW50QmxvY2tCdWZm
ZXIsICZieXRlc1JlYWQpOwogICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOwog
ICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgKz0gYnl0ZXNSZWFkOwogCkBAIC0xMjQ5LDY4ICsx
MjAyLDY4IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKG1fcGFydGlhbEJ5dGVz
UmVhZCA8ICptX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1
cyh3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwpOwogCi0gICAgaWYgKCFtX2NvbXBsZXRlQmxvY2tC
dWZmZXIpCi0gICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IFdURk1vdmUobV9jdXJyZW50
QmxvY2tCdWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9j
a0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCks
IG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAwLCAwLCAwKTsKLSAgICAgICAgaWYgKGVycikg
ewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZl
ckFwcGVuZEJ1ZmZlclJlZmVyZW5jZSB0byBjb21wbGV0ZSBibG9jayBmYWlsZWQgd2l0aCBlcnJv
ciIsIGVycik7Ci0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1l
bW9yeSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRy
OwotICAgIH0KKyAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLmFwcGVuZChtX2N1cnJlbnRCbG9j
a0J1ZmZlci50YWtlKCkpOwogICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7CiAKICAgICByZXR1
cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6
U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0
YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRp
bWUsIGludCBzYW1wbGVDb3VudCkKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tE
YXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVS
YW5nZU9mZnNldCkKIHsKLSNpZiBFTkFCTEUoVlA5KQotICAgIGF1dG8gc3RhdHVzID0gcmVhZEZy
YW1lRGF0YShyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgaWYgKCFzdGF0
dXMuY29tcGxldGVkX29rKCkpCi0gICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgaWYgKG1fcGFj
a2V0U2l6ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBjcmVhdGVTYW1wbGVC
dWZmZXIocHJlc2VudGF0aW9uVGltZSwgc2FtcGxlQ291bnQsIG1ldGFkYXRhKTsKLSAgICByZXNl
dCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotICAgIFVOVVNFRF9QQVJB
TShwcmVzZW50YXRpb25UaW1lKTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwotI2Vu
ZGlmCisgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IGNvbXBsZXRlQ01CbG9ja0J1ZmZl
cnM7IC8vID0gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy50YWtlKCktPmNyZWF0ZUNNQmxvY2tCdWZm
ZXIoKTsKKyAgICBpZiAoIWNvbXBsZXRlQ01CbG9ja0J1ZmZlcnMpCisgICAgICAgIHJldHVybjsK
IAotICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICBDTVNhbXBs
ZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8gZXJyID0gUEFM
OjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbXBsZXRl
Q01CbG9ja0J1ZmZlcnMuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0
U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3Muc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3MuZGF0
YSgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRTaXplcy5kYXRhKCksICZyYXdTYW1w
bGVCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9Q
T1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSBmYWlsZWQgd2l0aCAlZCIsIGVycik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0UHJvY2VzcyhyYXdTYW1wbGVCdWZm
ZXIpOworCisgICAgYXV0byB0cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAg
ICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKSwgdHJh
Y2tJRCwgbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYg
cHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFk
YXRhJiBtZXRhZGF0YSkKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0Rh
dGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQoreworICAgIG1fa2V5RnJhbWVzLmNsZWFy
KCk7CisgICAgVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7Cit9CisKK3dl
Ym06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3Vt
ZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0
YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRp
b25UaW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxFKFZQOSkKLSAgICB1aW50OF90KiBibG9ja0J1ZmZl
ckRhdGEgPSBudWxscHRyOworICAgIGF1dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIs
IG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7CisgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29r
KCkpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKICAgICBjb25zdGV4cHIgc2l6ZV90IG1heEhl
YWRlclNpemUgPSAzMjsgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgVlA5IHVuY29tcHJlc3Nl
ZCBoZWFkZXIgaXMgMTQ0IGJpdHMgYW5kIDExIGJ5dGVzIGZvciBWUDguIFJvdW5kIGhpZ2guCiAg
ICAgc2l6ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCAq
bV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRp
Z3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOworICAgIGF1
dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKG1fY3Vy
cmVudFBhY2tldEJ5dGVPZmZzZXQsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOwogICAgIGlmICghY29u
dGlndW91c0J1ZmZlcikgewogICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJW
aWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyIGZhaWxlZCB0byBjcmVhdGUgY29udGln
dW91cyBkYXRhIGJsb2NrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBlcnIg
PSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgp
LCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgIGlm
IChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1
ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAg
fQorICAgIGNvbnN0IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IGNvbnRpZ3VvdXNCdWZmZXIt
PmRhdGEoKTsKIAogICAgIGJvb2wgaXNLZXkgPSBmYWxzZTsKICAgICBSZXRhaW5QdHI8Q01Gb3Jt
YXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247CiAgICAgaWYgKGNvZGVjKCkgPT0g
Q29kZWNUeXBlOjpWUDkpIHsKICAgICAgICAgaWYgKCFtX2hlYWRlclBhcnNlci5QYXJzZVVuY29t
cHJlc3NlZEhlYWRlcihibG9ja0J1ZmZlckRhdGEsIHNlZ21lbnRIZWFkZXJMZW5ndGgpKQotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNS
ZW1haW5pbmcpOwogCiAgICAgICAgIGlmIChtX2hlYWRlclBhcnNlci5rZXkoKSkgewogICAgICAg
ICAgICAgaXNLZXkgPSB0cnVlOwogICAgICAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9
IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNl
ciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cik7CiAgICAgICAgICAgICBpZiAoIWZvcm1h
dERlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NT
SUJMRSgiZmFpbGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBWUFggaGVhZGVy
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBTa2lw
KCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNl
dEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKICAgICAgICAg
fQpAQCAtMTMyMSw3ICsxMjc0LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRl
b1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYgcHIKICAgICAgICAg
ICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21W
UDhIZWFkZXIoKmhlYWRlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cik7CiAgICAgICAg
ICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiZmFpbGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24g
ZnJvbSBWUFggaGVhZGVyIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRp
b24pKTsKICAgICAgICAgfQpAQCAtMTMzNiw0NSArMTI4OSw0NSBAQCB2b2lkIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3QgQ01U
aW1lJiBwcgogICAgIGlmICh0cmFjay5kZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKICAg
ICAgICAgZHVyYXRpb24gPSB0cmFjay5kZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVzZW50
YXRpb25UaW1lLnRpbWVzY2FsZSAvIGtfdXNfaW5fc2Vjb25kczsKIAotICAgIENNU2FtcGxlQnVm
ZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZv
IHRpbWluZyA9IHsgUEFMOjpDTVRpbWVNYWtlKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRp
bWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUgfTsKLSAgICBlcnIg
PSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9j
b21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCB0aGlzLT5mb3JtYXREZXNjcmlwdGlvbigpLmdldCgp
LCBzYW1wbGVDb3VudCwgMSwgJnRpbWluZywgMSwgJiptX2NvbXBsZXRlUGFja2V0U2l6ZSwgJnJh
d1NhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9S
X0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9y
IiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9
IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKKyAgICBtX2tleUZyYW1lcy5hcHBlbmQoaXNLZXkp
OworICAgIG1fcGFja2V0U2l6ZXMuYXBwZW5kKCptX2NvbXBsZXRlUGFja2V0U2l6ZSk7CisgICAg
bV9wYWNrZXRUaW1pbmdzLmFwcGVuZCh7IFBBTDo6Q01UaW1lTWFrZShkdXJhdGlvbiwgcHJlc2Vu
dGF0aW9uVGltZS50aW1lc2NhbGUpLCBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1l
IH0pOworICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgKz0gKm1fY29tcGxldGVQYWNrZXRT
aXplOworICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0OwogCi0gICAgYXV0
byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1l
bnRzQXJyYXkoc2FtcGxlQnVmZmVyLmdldCgpLCB0cnVlKTsKKyAgICBkcmFpblBlbmRpbmdTYW1w
bGVzKCk7CisKKyAgICBBU1NFUlQoISpieXRlc1JlbWFpbmluZyk7CisgICAgcmV0dXJuIHdlYm06
OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShwcmVzZW50YXRpb25UaW1lKTsKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwor
ICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7CisgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0
ZXNSZW1haW5pbmcpOworI2VuZGlmCit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1
ZmZlcikKK3sKKyAgICBhdXRvIGF0dGFjaG1lbnRzQXJyYXkgPSBQQUw6OkNNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShyYXdTYW1wbGVCdWZmZXIsIHRydWUpOwogICAgIEFT
U0VSVChhdHRhY2htZW50c0FycmF5KTsKICAgICBpZiAoIWF0dGFjaG1lbnRzQXJyYXkpIHsKICAg
ICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJHZXRTYW1w
bGVBdHRhY2htZW50c0FycmF5IHJldHVybmVkIE5VTEwiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICghaXNLZXkpIHsKLSAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2Vk
X2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChh
dHRhY2htZW50c0FycmF5LCBpKSk7CisgICAgQVNTRVJUKHNpemVfdChDRkFycmF5R2V0Q291bnQo
YXR0YWNobWVudHNBcnJheSkpID09IG1fa2V5RnJhbWVzLnNpemUoKSk7CisgICAgZm9yIChDRklu
ZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50
cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFs
dWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpKTsKKyAgICAgICAgaWYgKCFtX2tleUZyYW1l
c1tpXSkKICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBQQUw6
OmtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVhblRydWUpOwotICAgICAg
ICB9CiAgICAgfQotCi0gICAgYXV0byB0cmFja0lEID0gdHJhY2sudHJhY2tfdWlkLnZhbHVlKCk7
Ci0gICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRy
YWNrSUQsIG1ldGFkYXRhLnBvc2l0aW9uKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHByZXNl
bnRhdGlvblRpbWUpOwotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVDb3VudCk7Ci0gICAgVU5VU0VE
X1BBUkFNKG1ldGFkYXRhKTsKLSNlbmRpZiAvLyBFTkFCTEUoVlA5KQogfQogCi12b2lkIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZCgpCit2b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKCkKIHsKICAgICBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrID0gMDsKLSAgICBt
X3BhY2tldFNpemVzLmNsZWFyKCk7Ci0gICAgbV9wYWNrZXRUaW1pbmdzLmNsZWFyKCk7Ci0gICAg
bV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCA9IDA7Ci0gICAgVHJhY2tEYXRhOjpyZXNldENvbXBs
ZXRlZCgpOworICAgIFRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogfQog
CiB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNv
bnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEm
IG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2Vu
dGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQpAQCAtMTM4Myw4ICsxMzM2LDcgQEAgd2VibTo6
U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgYXV0byYgbGFzdFRpbWluZyA9IG1fcGFja2V0VGlt
aW5ncy5sYXN0KCk7CiAgICAgICAgIGlmIChQQUw6OkNNVGltZUNvbXBhcmUoUEFMOjpDTVRpbWVB
ZGQobGFzdFRpbWluZy5kdXJhdGlvbiwgbGFzdFRpbWluZy5wcmVzZW50YXRpb25UaW1lU3RhbXAp
LCBwcmVzZW50YXRpb25UaW1lKSkgewogICAgICAgICAgICAgLy8gRGlzY29udGludWl0eSBlbmNv
dW50ZXJlZCwgZW1pdCB0aGUgcHJldmlvdXNseSBkZW11eGVkIHNhbXBsZXMuCi0gICAgICAgICAg
ICBjcmVhdGVTYW1wbGVCdWZmZXIobWV0YWRhdGEucG9zaXRpb24pOwotICAgICAgICAgICAgcmVz
ZXQoKTsKKyAgICAgICAgICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTM5MiwxMSArMTM0NCw2IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAg
aWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkpCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKLSAg
ICAvLyBBdHRlbXB0cyB0byBtaW5pbWlzZSB0aGUgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0aW9u
cyBkdWUgdG8gcmVwZXRpdHZlIENNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgY2Fs
bHMgaW4gcmVhZEZyYW1lRGF0YS4KLSAgICBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrKys7Ci0g
ICAgaWYgKG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgPiBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0
eSkKLSAgICAgICAgbU1heEJsb2NrQnVmZmVyQ2FwYWNpdHkgPSBtTnVtRnJhbWVzSW5Db21wbGV0
ZUJsb2NrOwotCiAgICAgaWYgKG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgpKQogICAgICAgICBtX3Nh
bXBsZVByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOwogCkBAIC0xNDE2LDEyICsx
MzYzLDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tE
YXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgICAgICAgICBQQVJTRVJf
TE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YTog
dW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwotICAgICAgICAg
ICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3Vz
QnVmZmVyLmdldCgpLCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRh
dGEpOwotICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0df
RVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0
aCBlcnJvciIsIGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0
ZXNSZW1haW5pbmcpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgdWludDhfdCog
YmxvY2tCdWZmZXJEYXRhID0gY29udGlndW91c0J1ZmZlci0+ZGF0YSgpOwogICAgICAgICAgICAg
T3B1c0Nvb2tpZUNvbnRlbnRzIGNvb2tpZUNvbnRlbnRzOwogICAgICAgICAgICAgaWYgKCFwYXJz
ZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwg
Km1fY29tcGxldGVQYWNrZXRTaXplLCBibG9ja0J1ZmZlckRhdGEsIGNvb2tpZUNvbnRlbnRzKSkg
ewogICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0
byBwYXJzZSBPcHVzIHByaXZhdGUgZGF0YSIpOwpAQCAtMTQ2MCwxMiArMTQwMiw3IEBAIHdlYm06
OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZy
YW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBj
b250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIs
IGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgfQotICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZl
ckRhdGEgPSBudWxscHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdl
dERhdGFQb2ludGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIs
IChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAg
ICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJHZXREYXRhUG9p
bnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgICAgICByZXR1cm4gU2tpcCgm
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIH0KKyAgICAgICAgY29uc3QgdWludDhf
dCogYmxvY2tCdWZmZXJEYXRhID0gY29udGlndW91c0J1ZmZlci0+ZGF0YSgpOwogICAgICAgICBp
ZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEu
ZGF0YSgpLCAqbV9jb21wbGV0ZVBhY2tldFNpemUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29u
dGVudHMpCiAgICAgICAgICAgICB8fCBjb29raWVDb250ZW50cy5mcmFtZXNQZXJQYWNrZXQgIT0g
bV9mcmFtZXNQZXJQYWNrZXQKICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZyYW1lRHVy
YXRpb24gIT0gbV9mcmFtZUR1cmF0aW9uKSB7CkBAIC0xNDgxLDQwICsxNDE4LDE4IEBAIHdlYm06
OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZy
YW1lRGF0YSh3ZWJtOjpSZWFkCiAKICAgICBhdXRvIHNhbXBsZUR1cmF0aW9uID0gUEFMOjpDTVRp
bWVHZXRTZWNvbmRzKFBBTDo6Q01UaW1lU3VidHJhY3QocHJlc2VudGF0aW9uVGltZSwgbV9zYW1w
bGVQcmVzZW50YXRpb25UaW1lKSkgKyBQQUw6OkNNVGltZUdldFNlY29uZHMobV9wYWNrZXREdXJh
dGlvbikgKiBzYW1wbGVDb3VudDsKIAotICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmlt
dW1TYW1wbGVEdXJhdGlvbikgewotICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIobWV0YWRhdGEu
cG9zaXRpb24pOwotICAgICAgICByZXNldCgpOwotICAgIH0KKyAgICBpZiAoc2FtcGxlRHVyYXRp
b24gPj0gbV9taW5pbXVtU2FtcGxlRHVyYXRpb24pCisgICAgICAgIGRyYWluUGVuZGluZ1NhbXBs
ZXMoKTsKIAogICAgIEFTU0VSVCghKmJ5dGVzUmVtYWluaW5nKTsKICAgICByZXR1cm4gd2VibTo6
U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0
aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpCi17Ci0gICAgaWYgKG1fcGFja2V0
U2l6ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJl
ZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwotICAgIGF1dG8gZXJyID0gUEFMOjpDTVNhbXBs
ZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fY29tcGxldGVCbG9ja0J1
ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24oKS5nZXQoKSwgbV9wYWNrZXRTaXplcy5zaXpl
KCksIG1fcGFja2V0VGltaW5ncy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5kYXRhKCksIG1fcGFj
a2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFNpemVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcik7
Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJD
TUF1ZGlvU2FtcGxlQnVmZmVyQ3JlYXRlV2l0aFBhY2tldERlc2NyaXB0aW9ucyBmYWlsZWQgd2l0
aCAlZCIsIGVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBzYW1wbGVCdWZm
ZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7Ci0KLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFj
aygpLnRyYWNrX3VpZC52YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEoV1RG
TW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOwotfQot
CiB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygp
CiB7CiAgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7Ci0gICAgICAgIGlmICh0cmFj
ay0+dHJhY2tUeXBlKCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBl
OjpBdWRpbykgewotICAgICAgICAgICAgQXVkaW9UcmFja0RhdGEmIGF1ZGlvVHJhY2sgPSBkb3du
Y2FzdDxBdWRpb1RyYWNrRGF0YT4odHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgYXVkaW9UcmFj
ay5jcmVhdGVTYW1wbGVCdWZmZXIoKTsKLSAgICAgICAgICAgIGF1ZGlvVHJhY2sucmVzZXRDb21w
bGV0ZWQoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW8pCisgICAgICAgICAg
ICB0cmFjay0+ZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVm
ZmVyUGFyc2VyV2ViTS5oCmluZGV4IGU4NzZhYjQxNGE0YWJiMzNkNTE4YzM3YjQxZmU1YTE0Nzc2
YWI0OTYuLmFmZGJmNDliMmY0NjkyMTZlMWI5ZGY3ZWQxODIxYjNhYTIyNzdmOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBh
cnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9T
b3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCiAKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTb3Vy
Y2VCdWZmZXJQYXJzZXIuaCIKICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4K
ICNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1lLmg+CkBAIC0zOSw3ICs0MCw2IEBACiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERl
c2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVl
Q01CbG9ja0J1ZmZlciAqQ01CbG9ja0J1ZmZlclJlZjsKIAogbmFtZXNwYWNlIHdlYm0gewogY2xh
c3MgV2VibVBhcnNlcjsKQEAgLTE1NSwzMiArMTU1LDQ0IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRDb21wbGV0ZWQoKQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBt
X2NvbXBsZXRlQmxvY2tCdWZmZXJzLnJlc2V0KCk7CisgICAgICAgICAgICBtX3BhY2tldFNpemVz
LmNsZWFyKCk7CisgICAgICAgICAgICBtX3BhY2tldFRpbWluZ3MuY2xlYXIoKTsKKyAgICAgICAg
ICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgPSAwOwogICAgICAgICB9CiAgICAgICAgIHZv
aWQgcmVzZXQoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXNldENvbXBsZXRlZCgpOworICAg
ICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogICAgICAgICAgICAgbV9jb21w
bGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CiAgICAgICAgICAgICBtX3BhcnRpYWxCeXRl
c1JlYWQgPSAwOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOwor
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIucmVzZXQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkcmFpblBlbmRpbmdTYW1wbGVzKHN0ZDo6b3B0aW9uYWw8c2l6
ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQgPSBzdGQ6Om51bGxvcHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOworICAg
ICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogICAgICAgICB9CiAKICAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBjb250aWd1b3Vz
Q29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsK
KyAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmKSB7IH07
CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0OwogICAgICAgICB3ZWJtOjpT
dGF0dXMgcmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFk
YXRhJiwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgUmV0YWluUHRyPENNQmxv
Y2tCdWZmZXJSZWY+IG1fY29tcGxldGVCbG9ja0J1ZmZlcjsKKyAgICAgICAgU2hhcmVkQnVmZmVy
QnVpbGRlciBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPHNp
emVfdD4gbV9jb21wbGV0ZVBhY2tldFNpemU7Ci0gICAgICAgIC8vIEluaXRpYWwgYWxsb2NhdGlv
biBzaXplIG9mIGVtcHR5IENNQmxvY2tCdWZmZXIuCi0gICAgICAgIHNpemVfdCBtTWF4QmxvY2tC
dWZmZXJDYXBhY2l0eSB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fY3VycmVudFBhY2tldEJ5dGVP
ZmZzZXQgeyAwIH07CisgICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fcGFja2V0U2l6ZXM7CisgICAg
ICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+IG1fcGFja2V0VGltaW5nczsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIENvZGVjVHlwZSBtX2NvZGVjOwogICAgICAgICB3ZWJtOjpUcmFja0Vu
dHJ5IG1fdHJhY2s7CiAgICAgICAgIFR5cGUgbV90cmFja1R5cGU7CiAgICAgICAgIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOwotICAgICAgICBS
ZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gbV9jdXJyZW50QmxvY2tCdWZmZXI7CisgICAgICAg
IFNoYXJlZEJ1ZmZlckJ1aWxkZXIgbV9jdXJyZW50QmxvY2tCdWZmZXI7CiAgICAgICAgIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0mIG1fcGFyc2VyOwogICAgICAgICAvLyBTaXplIG9mIHRoZSBjdXJy
ZW50bHkgaW5jb21wbGV0ZSBwYXJzZWQgcGFja2V0LgogICAgICAgICBzaXplX3QgbV9wYXJ0aWFs
Qnl0ZXNSZWFkIHsgMCB9OwpAQCAtMTk4LDE0ICsyMTAsMTQgQEAgcHVibGljOgogICAgICAgICB7
CiAgICAgICAgIH0KIAotICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJt
OjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBD
TVRpbWUmLCBpbnQpIGZpbmFsOwotCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBjcmVhdGVT
YW1wbGVCdWZmZXIoY29uc3QgQ01UaW1lJiwgaW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRh
Jik7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJW
aWRlb1RyYWNrRGF0YSI7IH0KLQorICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0
YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBj
b25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB2b2lkIHBvc3RQcm9jZXNzKENNU2Ft
cGxlQnVmZmVyUmVmKSBmaW5hbDsKKyAgICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0
YXRlKCkgZmluYWw7CiAjaWYgRU5BQkxFKFZQOSkKICAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVh
ZGVyUGFyc2VyIG1faGVhZGVyUGFyc2VyOworICAgICAgICBWZWN0b3I8Ym9vbD4gbV9rZXlGcmFt
ZXM7CiAjZW5kaWYKICAgICB9OwogCkBAIC0yMjIsMjAgKzIzNCwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRh
KHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNv
bnN0IENNVGltZSYsIGludCkgZmluYWw7Ci0gICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWQoKSBm
aW5hbDsKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXpl
X3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCA9IHN0ZDo6bnVsbG9wdCk7Ci0KICAgICBwcml2YXRl
OgorICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBj
b25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQp
IGZpbmFsOworICAgICAgICB2b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsK
ICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIkF1ZGlv
VHJhY2tEYXRhIjsgfQogCiAgICAgICAgIENNVGltZSBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWU7
CiAgICAgICAgIENNVGltZSBtX3BhY2tldER1cmF0aW9uOwotICAgICAgICBzaXplX3QgbV9jdXJy
ZW50UGFja2V0Qnl0ZU9mZnNldCB7IDAgfTsKICAgICAgICAgdWludDhfdCBtX2ZyYW1lc1BlclBh
Y2tldCB7IDAgfTsKICAgICAgICAgU2Vjb25kcyBtX2ZyYW1lRHVyYXRpb24geyAwX3MgfTsKLSAg
ICAgICAgVmVjdG9yPHNpemVfdD4gbV9wYWNrZXRTaXplczsKLSAgICAgICAgVmVjdG9yPENNU2Ft
cGxlVGltaW5nSW5mbz4gbV9wYWNrZXRUaW1pbmdzOwogICAgICAgICBzaXplX3QgbU51bUZyYW1l
c0luQ29tcGxldGVCbG9jayB7IDAgfTsKICAgICAgICAgLy8gRklYTUU6IDAuNSAtIDEuMCBzZWNv
bmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBlciBzYW1wbGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vj
b25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QKICAgICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxs
IHBsYXkgdW50aWwgd2UgZml4IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIg
dG8gZGVhbCB3aXRoIGBlbmRDdXJzb3JgLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggOTQxMGE3
YzQ3OTYzNDcwNGViNTljOTk5NjAzNDg0NGI2OWE4ODc2ZC4uOTU0NGQ5YzI1N2ZlMGJkNTU4Mjgw
M2FlMWE4MDg0NTAxNzNjNTBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCkBAIC02NSw3ICs2NSw3
IEBAIHN0cnVjdCBWUDhGcmFtZUhlYWRlciB7CiAgICAgYm9vbCBuZWVkc0NsYW1waW5nIHsgZmFs
c2UgfTsKIH07CiAKLXN0ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVI
ZWFkZXIodWludDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKTsKK3N0ZDo6b3B0aW9u
YWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJh
bWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKTsKIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVI
ZWFkZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKIAogY2xhc3MgV0VC
Q09SRV9FWFBPUlQgVlA5VGVzdGluZ092ZXJyaWRlcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCmlu
ZGV4IDVjMGRmYWZkYjJlNjdmMDQ4MDUwNWZlYWM2NmE0ZWQ1NDRhMjllMzMuLmRkMTc3OWYyNjM4
OTI2OTU5NDRmNDIzNzZmY2RhZTViNmQzMGIyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCkBA
IC02MDksNyArNjA5LDcgQEAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0
ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb24KICAgICByZXR1cm4gY3Jl
YXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3Jk
LCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdodCgpKTsKIH0KIAotc3RkOjpvcHRpb25hbDxW
UDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNp
emVfdCBmcmFtZVNpemUpCitzdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZy
YW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKIHsK
ICAgICAvLyBWUDggZnJhbWUgaGVhZGVycyBhcmUgZGVmaW5lZCBpbiBSRkMgNjM4NjogPGh0dHBz
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2Mzg2Pi4KIAo=
</data>
<flag name="commit-queue"
          id="480448"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453139</attachid>
            <date>2022-02-24 14:29:31 -0800</date>
            <delta_ts>2022-02-24 18:53:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237078-20220225092930.patch</filename>
            <type>text/plain</type>
            <size>41725</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y2NjhlNjBmNTFjN2Vl
MmE2MDgxYTIyYzQzOGI3MjYwZDBjODJkOS4uNTIwMjBmNmNmZWEwMjc5NGY0NWY3MDQ1NTUxYTk5
YTA1MmRkZWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIHVzZSBTaGFyZWRCdWZmZXIgaW50ZXJuYWxseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc4CisgICAgICAgIHJkYXI6Ly84
OTM0ODc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSByZWZhY3RvciB0byBhbGxvdyBTb3VyY2VCdWZmZXJQYXJzZXIgdG8gcmV0dXJu
IFNoYXJlZEJ1ZmZlcgorICAgICAgICByYXRoZXIgdGhhbiBDTUJsb2NrQnVmZmVyLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBvYnNlcnZhYmxlIGJlaGF2aW91cnMuCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6
OnJlZW5xdWV1ZU1lZGlhRm9yVGltZSk6IEZseS1ieSBmaXg6IHR5cG8uCisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKTogRmx5LWJ5IGZpeCwg
IGV4aXQgZWFybHkKKyAgICAgICAgaWYgZW5kIHRpbWUgaXMgbG93ZXIgdGhhbiBzdGFydCB0aW1l
IHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGR1cmF0aW9uIGlzCisgICAgICAgIHNtYWxsZXIgdGhh
biBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
VlA4RnJhbWVIZWFkZXIpOiBNYWtlIG1ldGhvZHMgY29uc3QuCisKKzIwMjItMDItMjMgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYWJpbGl0eSB0byBj
b252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc1CisgICAgICAgIHJk
YXI6Ly84OTMzODQ0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpnZXRDb250aWd1b3VzRGF0YSBhbmQK
KyAgICAgICAgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQ01CbG9ja0J1ZmZlciBtZXRo
b2RzLgorCisgICAgICAgIEFQSSB0ZXN0cyBhZGRlZCBmb3IgZ2V0Q29udGlndW91c0RhdGEuCisg
ICAgICAgIGNyZWF0ZUNNQmxvY2tCdWZmZXIgd2lsbCBiZSB1c2VkIGluIGEgZm9sbG93LXVwIHBh
dGNoLgorCisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmdldENvbnRpZ3VvdXNEYXRhIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyZWVTaGFyZWRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
Q01CbG9ja0J1ZmZlciBjb25zdCk6CisKIDIwMjItMDItMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBET00gc3RvcmFnZSBldmVudCBkaXNwYXRj
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZDA5ZjEwNTJh
MGYzMWVlOTcwNjExMDEzYjM5MzVmYjUzMDk1NTA5Ni4uNjMzNjQzYTUyZTgyNmYxNjQ3ZTVhZmZj
ZTA5NjVmNDNkMzQwMGU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCkBAIC0xNTIsNiArMTUyLDI1IEBAIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlvbikgY29uc3QKICAgICByZXR1
cm4geyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwgcG9zaXRpb24gLSBlbGVtZW50LT5iZWdp
blBvc2l0aW9uIH07CiB9CiAKK1JlZjxTaGFyZWRCdWZmZXI+IEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI6OmdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCkgY29u
c3QKK3sKKyAgICBpZiAocG9zaXRpb24gPj0gbV9zaXplKQorICAgICAgICByZXR1cm4gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoKTsKKyAgICBsZW5ndGggPSBzdGQ6Om1pbihtX3NpemUgLSBwb3NpdGlv
biwgbGVuZ3RoKTsKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBlbGVtZW50ID0g
Z2V0U2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBzaXplX3Qgb2Zmc2V0SW5TZWdt
ZW50ID0gcG9zaXRpb24gLSBlbGVtZW50LT5iZWdpblBvc2l0aW9uOworICAgIGlmIChlbGVtZW50
LT5zZWdtZW50LT5zaXplKCkgLSBvZmZzZXRJblNlZ21lbnQgPj0gbGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyRGF0YVZpZXcgeyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwg
b2Zmc2V0SW5TZWdtZW50LCBsZW5ndGggfS5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKKyAgICBWZWN0
b3I8dWludDhfdD4gY29tYmluZWREYXRhOworICAgIGNvbWJpbmVkRGF0YS5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCk7CisgICAgY29tYmluZWREYXRhLmFwcGVuZChlbGVtZW50LT5zZWdt
ZW50LT5kYXRhKCkgKyBvZmZzZXRJblNlZ21lbnQsIGVsZW1lbnQtPnNlZ21lbnQtPnNpemUoKSAt
IG9mZnNldEluU2VnbWVudCk7CisgICAgZm9yICgrK2VsZW1lbnQ7IGNvbWJpbmVkRGF0YS5zaXpl
KCkgPCBsZW5ndGggJiYgZWxlbWVudCAhPSBtX3NlZ21lbnRzLmVuZCgpOyBlbGVtZW50KyspIHsK
KyAgICAgICAgYXV0byBjYW5Db3B5ID0gc3RkOjptaW4obGVuZ3RoIC0gY29tYmluZWREYXRhLnNp
emUoKSwgZWxlbWVudC0+c2VnbWVudC0+c2l6ZSgpKTsKKyAgICAgICAgY29tYmluZWREYXRhLmFw
cGVuZChlbGVtZW50LT5zZWdtZW50LT5kYXRhKCksIGNhbkNvcHkpOworICAgIH0KKyAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShjb21iaW5lZERhdGEpKTsKK30KKwogY29u
c3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnRWZWN0b3JFbnRyeSogRnJhZ21l
bnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGlvbikg
Y29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChwb3NpdGlvbiA8IG1fc2l6ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGNhZWYzZjI2MjAwMzNkZDhjZmYxNTYy
M2YyM2M2YjZjOWI1MzRiMzcuLjNiZjhhNmQxN2UyMmZhMmU3OTRiZjRmZjY4MTZhNTgyZTkwZjk5
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC01NCw2ICs1NCw3
IEBAIHR5cGVkZWYgc3RydWN0IF9HQnl0ZXMgR0J5dGVzOwogI2lmIFVTRShGT1VOREFUSU9OKQog
T0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7Cit0eXBlZGVmIHN0cnVjdCBP
cGFxdWVDTUJsb2NrQnVmZmVyKiBDTUJsb2NrQnVmZmVyUmVmOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXVEYgewpAQCAtMTQ5LDYgKzE1MCw3IEBAIHB1YmxpYzoKICNpZiBVU0UoRk9VTkRBVElPTikK
ICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNEYXRhQXJyYXko
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXI+IGNyZWF0ZShOU0RhdGEqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q01C
bG9ja0J1ZmZlclJlZj4gY3JlYXRlQ01CbG9ja0J1ZmZlcigpIGNvbnN0OwogI2VuZGlmCiAjaWYg
VVNFKENGKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlcj4gY3JlYXRlKENGRGF0YVJlZik7CkBAIC0xOTQsNiArMTk2LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gYmVnaW4gYW5kIGVuZCB0YWtlIE8oMSkgdGltZSwgdGhpcyB0YWtlcyBPKGxvZyhOKSkg
dGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCBTaGFyZWRCdWZmZXJEYXRhVmlldyBnZXRTb21lRGF0
YShzaXplX3QgcG9zaXRpb24pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxTaGFyZWRC
dWZmZXI+IGdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCkg
Y29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9IZXhTdHJpbmcoKSBjb25zdDsK
IApAQCAtMjQ2LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDb21iaW5lcyBhbGwgdGhl
IHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhhdCB2ZWN0b3IgYWZ0ZXIgY2xl
YXJpbmcgdGhlIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIuCiAgICAgV0VCQ09SRV9FWFBPUlQgVmVj
dG9yPHVpbnQ4X3Q+IHRha2VEYXRhKCk7Ci0gICAgY29uc3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRy
eSogZ2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGl0aW9uKSBjb25zdDsKKyAgICBj
b25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBnZXRTZWdtZW50Rm9yUG9zaXRpb24oc2l6ZV90
IHBvc2l0aW9uKSBjb25zdDsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBpbnRlcm5h
bGx5Q29uc2lzdGVudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbQppbmRleCA2NjQyN2RmYmYwNWZkNzI2YWZkOTlhMzI5
YzZhYzExYWM5ZWQ3YTU1Li4xOTA4YjQ2YWZiNWQ2MTA0MTJmYWVjZGMxMjQyMTY0ZWZhNjE5NDJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJD
b2NvYS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiV2ViQ29yZUpJVE9wZXJhdGlvbnMu
aCIKICNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExp
bmsuaD4KICNpbXBvcnQgPHN0cmluZy5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KICNp
bXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgpAQCAtOTksNiArMTAwLDU1IEBAIHZv
aWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKE5TRGF0YSAqZGF0YSkKICAgICByZXR1
cm4gYXBwZW5kKGJyaWRnZV9jYXN0KGRhdGEpKTsKIH0KIAorc3RhdGljIHZvaWQgRnJlZURhdGFT
ZWdtZW50KHZvaWQqIHJlZmNvbiwgdm9pZCosIHNpemVfdCkKK3sKKyAgICBhdXRvKiBidWZmZXIg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IERhdGFTZWdtZW50Kj4ocmVmY29uKTsKKyAgICBidWZm
ZXItPmRlcmVmKCk7Cit9CisKK1JldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBGcmFnbWVudGVk
U2hhcmVkQnVmZmVyOjpjcmVhdGVDTUJsb2NrQnVmZmVyKCkgY29uc3QKK3sKKyAgICBhdXRvIHNl
Z21lbnRUb0NNQmxvY2tCdWZmZXIgPSBbXSAoY29uc3QgRGF0YVNlZ21lbnQmIHNlZ21lbnQpIC0+
IFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiB7CisgICAgICAgIC8vIEZyb20gQ01CbG9ja0J1
ZmZlckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246CisgICAgICAgIC8vIE5vdGUgdGhh
dCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoaXMgc3RydWN0IGNvbnRhaW5zIG1pc2FsaWdu
ZWQgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgICAgIC8vIFRvIGF2b2lkIGxpbmstdGltZSBpc3N1
ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxsIENNQmxvY2tCdWZmZXJDdXN0
b21CbG9ja1NvdXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRzCisgICAgICAgIC8vIGJ5IHVz
aW5nIGFzc2lnbm1lbnQgc3RhdGVtZW50cywgcmF0aGVyIHRoYW4gZGVjbGFyaW5nIHRoZW0gYXMg
Z2xvYmFsIG9yIHN0YXRpYyBzdHJ1Y3RzLgorICAgICAgICBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxv
Y2tTb3VyY2UgYWxsb2NhdG9yOworICAgICAgICBhbGxvY2F0b3IudmVyc2lvbiA9IDA7CisgICAg
ICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgYWxsb2NhdG9y
LkZyZWVCbG9jayA9IEZyZWVEYXRhU2VnbWVudDsKKyAgICAgICAgYWxsb2NhdG9yLnJlZkNvbiA9
IGNvbnN0X2Nhc3Q8RGF0YVNlZ21lbnQqPigmc2VnbWVudCk7CisgICAgICAgIHNlZ21lbnQucmVm
KCk7CisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcGFydGlhbEJ1ZmZlciA9IG51bGxwdHI7Cisg
ICAgICAgIGlmIChQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sobnVsbHB0
ciwgc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNlZ21lbnQuZGF0YSgp
KSksIHNlZ21lbnQuc2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9yLCAwLCBzZWdtZW50LnNpemUo
KSwgMCwgJnBhcnRpYWxCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YocGFydGlhbEJ1ZmZlcik7
CisgICAgfTsKKworICAgIGlmIChoYXNPbmVTZWdtZW50KCkgJiYgIWlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIobV9zZWdtZW50c1swXS5zZWdtZW50KTsK
KworICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgIGF1
dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgaXNFbXB0eSgpID8gMCA6IG1fc2VnbWVudHMuc2l6ZSgpLCAwLCAmcmF3QmxvY2tCdWZmZXIp
OworICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VyciB8fCAhcmF3QmxvY2tCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gYmxvY2tCdWZmZXIgPSBhZG9wdENG
KHJhd0Jsb2NrQnVmZmVyKTsKKworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBi
bG9ja0J1ZmZlcjsKKworICAgIGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKKyAg
ICAgICAgaWYgKCFzZWdtZW50LnNlZ21lbnQtPnNpemUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBhdXRvIHBhcnRpYWxCdWZmZXIgPSBzZWdtZW50VG9DTUJsb2NrQnVmZmVyKHNl
Z21lbnQuc2VnbWVudCk7CisgICAgICAgIGlmICghcGFydGlhbEJ1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVm
ZmVyUmVmZXJlbmNlKHJhd0Jsb2NrQnVmZmVyLCBwYXJ0aWFsQnVmZmVyLmdldCgpLCAwLCAwLCAw
KSAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIHJldHVybiBibG9ja0J1ZmZlcjsKK30KKwogUmV0YWluUHRyPE5TRGF0YT4gU2hh
cmVkQnVmZmVyOjpjcmVhdGVOU0RhdGEoKSBjb25zdAogewogICAgIHJldHVybiBicmlkZ2VfY2Fz
dChjcmVhdGVDRkRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDU0OTlmMzdhN2YzNjQ2YmQ1
ZjM5NWE0OGIwOWQ5NDExZDRjOWI2NjQuLmFhMGMyMDNiODI1ZGE3Zjg1NjFjNzQ4ZmIyOTg3MTlm
ZGYzMTE2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJ1ZmZlclByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBTb3Vy
Y2VCdWZmZXJQcml2YXRlOjpyZWVucXVldWVNZWRpYUZvclRpbWUoVHJhY2tCdWZmZXImIHRyYWNr
QnVmZmVyLCBjb25zdAogICAgICAgICB8fCAoY3VycmVudFNhbXBsZVBUU0l0ZXJhdG9yLT5maXJz
dCAtIHRpbWUpID4gdGltZUZ1ZGdlRmFjdG9yKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8v
IFNlYWNoIGJhY2t3YXJkIGZvciB0aGUgcHJldmlvdXMgc3luYyBzYW1wbGUuCisgICAgLy8gU2Vh
cmNoIGJhY2t3YXJkIGZvciB0aGUgcHJldmlvdXMgc3luYyBzYW1wbGUuCiAgICAgRGVjb2RlT3Jk
ZXJTYW1wbGVNYXA6OktleVR5cGUgZGVjb2RlS2V5KGN1cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+
c2Vjb25kLT5kZWNvZGVUaW1lKCksIGN1cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+c2Vjb25kLT5w
cmVzZW50YXRpb25UaW1lKCkpOwogICAgIGF1dG8gY3VycmVudFNhbXBsZURUU0l0ZXJhdG9yID0g
dHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5
KGRlY29kZUtleSk7CiAgICAgQVNTRVJUKGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciAhPSB0cmFj
a0J1ZmZlci5zYW1wbGVzLmRlY29kZU9yZGVyKCkuZW5kKCkpOwpAQCAtMTE3Miw2ICsxMTcyLDkg
QEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKFJlZjxNZWRpYVNh
bXBsZT4mJiBvcmlnaW5hbFNhbXBsZSkKICAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VC
ZWdpblRpbWUgPSB0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wOwogICAg
ICAgICAgICAgICAgIE1lZGlhVGltZSBlcmFzZUVuZFRpbWUgPSBmcmFtZUVuZFRpbWVzdGFtcCAt
IGNvbnRpZ3VvdXNGcmFtZVRvbGVyYW5jZTsKIAorICAgICAgICAgICAgICAgIGlmIChlcmFzZUVu
ZFRpbWUgPD0gZXJhc2VCZWdpblRpbWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAg
ICAgICAgICAgICAgICAgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yX3Jhbmdl
IHJhbmdlOwogICAgICAgICAgICAgICAgIGlmIChoaWdoZXN0QnVmZmVyZWRUaW1lIC0gdHJhY2tC
dWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCA8IHRyYWNrQnVmZmVyLmxhc3RGcmFt
ZUR1cmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgZnJhbWUgaXMg
YXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyZWQgcmFuZ2VzLCBwZXJmb3JtIGEgc2VxdWVudGlhbCBz
Y2FuIGZyb20gZW5kIChPKDEpKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5k
ZXggYWUxNjQxNGYyMWM2ODQ2YzE4OTc3MDllMTQyNGU0YTZhNGI3NjFhMC4uN2ZlY2EyYmE5NWRh
MzU2ZmI4YmE0MTgxYTJkMmU4ZTE3NGE3ZDVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFT
ZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlZQ
OVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVXZWJNLmgiCiAj
aW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKQEAgLTM2NSwyMSArMzY0LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtXb3VsZEJsb2NrKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBGcmVlU2hhcmVkQnVmZmVyKHZvaWQqIHJlZmNvbiwgdm9p
ZCosIHNpemVfdCkKKyAgICBTdGF0dXMgUmVhZEludG8oc3RkOjpzaXplX3QgbnVtVG9SZWFkLCBT
aGFyZWRCdWZmZXJCdWlsZGVyJiBvdXRwdXRCdWZmZXIsIHVpbnQ2NF90KiBudW1BY3R1YWxseVJl
YWQpCiAgICAgewotICAgICAgICBhdXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PFNoYXJl
ZEJ1ZmZlcio+KHJlZmNvbik7Ci0gICAgICAgIGJ1ZmZlci0+ZGVyZWYoKTsKLSAgICB9Ci0KLSAg
ICBTdGF0dXMgUmVhZEludG8oc3RkOjpzaXplX3QgbnVtVG9SZWFkLCBDTUJsb2NrQnVmZmVyUmVm
IG91dHB1dEJ1ZmZlciwgdWludDY0X3QqIG51bUFjdHVhbGx5UmVhZCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChvdXRwdXRCdWZmZXIgJiYgbnVtQWN0dWFsbHlSZWFkKTsKKyAgICAgICAgQVNTRVJU
KG51bUFjdHVhbGx5UmVhZCk7CiAgICAgICAgIGlmICghbnVtQWN0dWFsbHlSZWFkKQogICAgICAg
ICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwogCiAgICAgICAg
ICpudW1BY3R1YWxseVJlYWQgPSAwOwotICAgICAgICBpZiAoIW91dHB1dEJ1ZmZlcikKLSAgICAg
ICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKIAogICAgICAg
ICB3aGlsZSAobnVtVG9SZWFkICYmIG1fY3VycmVudFNlZ21lbnQgIT0gbV9kYXRhLmVuZCgpKSB7
CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50U2VnbWVudCA9ICptX2N1cnJlbnRTZWdtZW50OwpA
QCAtMzg5LDQ0ICszODAsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVm
ZmVyID0gY3VycmVudFNlZ21lbnQuZ2V0U2hhcmVkQnVmZmVyKCk7Ci0gICAgICAgICAgICBDTUJs
b2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHVpbnQ2
NF90IGxhc3RSZWFkID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJhd0Js
b2NrQnVmZmVyOwogICAgICAgICAgICAgaWYgKCFzaGFyZWRCdWZmZXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIG5l
ZWRlZCBpZiB0aGUgcmVhZCBpcyBwYXJ0aWFsLgotICAgICAgICAgICAgICAgIGF1dG8gZXJyID0g
UEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1
bHQsIG51bGxwdHIsIG51bVRvUmVhZCwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwg
bnVtVG9SZWFkLCBrQ01CbG9ja0J1ZmZlckFzc3VyZU1lbW9yeU5vd0ZsYWcsICZyYXdCbG9ja0J1
ZmZlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9y
eSk7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBvc2l0aW9uID0gMDsKLSAgICAg
ICAgICAgICAgICBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihyYXdCbG9j
a0J1ZmZlciwgMCwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxv
Y2tCdWZmZXJEYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVy
Tm9FcnIpCisgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAgICAg
ICAgICAgICBpZiAoIWJ1ZmZlci50cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bVRvUmVhZCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVt
b3J5KTsKLSAgICAgICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQgPSBjdXJyZW50U2VnbWVudC5y
ZWFkKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQsIGJsb2NrQnVmZmVyRGF0YSk7
CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShudW1Ub1JlYWQpOworICAgICAgICAgICAg
ICAgIGF1dG8gcmVhZFJlc3VsdCA9IGN1cnJlbnRTZWdtZW50LnJlYWQobV9wb3NpdGlvbldpdGhp
blNlZ21lbnQsIG51bVRvUmVhZCwgYnVmZmVyLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KCFyZWFkUmVzdWx0Lmhhc192YWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vn
bWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyhyZWFkUmVzdWx0LmVycm9yKCkpOwotICAgICAgICAg
ICAgICAgIGxhc3RSZWFkID0gcmVhZFJlc3VsdC52YWx1ZSgpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBjb3VsZCB3ZSBvbmx5IGNyZWF0ZSBhIG5ldyBD
TUJsb2NrQnVmZmVyIGlmIHRoZSBiYWNrZW5kIG1lbW9yeSBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2
aW91cyBvbmU/Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGNhblJlYWQgPSBzdGQ6Om1pbjxzaXpl
X3Q+KG51bVRvUmVhZCwgc2hhcmVkQnVmZmVyLT5zaXplKCkgLSBtX3Bvc2l0aW9uV2l0aGluU2Vn
bWVudCk7Ci0gICAgICAgICAgICAgICAgLy8gRnJvbSBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tT
b3VyY2UgZG9jdW1lbnRhdGlvbjoKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIDY0
LWJpdCBhcmNoaXRlY3R1cmVzLCB0aGlzIHN0cnVjdCBjb250YWlucyBtaXNhbGlnbmVkIGZ1bmN0
aW9uIHBvaW50ZXJzLgotICAgICAgICAgICAgICAgIC8vIFRvIGF2b2lkIGxpbmstdGltZSBpc3N1
ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxsIENNQmxvY2tCdWZmZXJDdXN0
b21CbG9ja1NvdXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRzCi0gICAgICAgICAgICAgICAg
Ly8gYnkgdXNpbmcgYXNzaWdubWVudCBzdGF0ZW1lbnRzLCByYXRoZXIgdGhhbiBkZWNsYXJpbmcg
dGhlbSBhcyBnbG9iYWwgb3Igc3RhdGljIHN0cnVjdHMuCi0gICAgICAgICAgICAgICAgQ01CbG9j
a0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGFsbG9jYXRvcjsKLSAgICAgICAgICAgICAgICBhbGxv
Y2F0b3IudmVyc2lvbiA9IDA7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLkFsbG9jYXRlQmxv
Y2sgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5GcmVlQmxvY2sgPSBGcmVl
U2hhcmVkQnVmZmVyOwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5yZWZDb24gPSBzaGFyZWRC
dWZmZXIuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgc2hhcmVkQnVmZmVyLT5yZWYoKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlC
bG9jayhudWxscHRyLCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDx1aW50OF90Kj4oc2hh
cmVkQnVmZmVyLT5kYXRhKCkpKSwgc2hhcmVkQnVmZmVyLT5zaXplKCksIG51bGxwdHIsICZhbGxv
Y2F0b3IsIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBjYW5SZWFkLCAwLCAmcmF3QmxvY2tCdWZm
ZXIpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkp
OwotICAgICAgICAgICAgICAgIGxhc3RSZWFkID0gY2FuUmVhZDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGF1dG8gYmxvY2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKLSAg
ICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJl
bmNlKG91dHB1dEJ1ZmZlciwgcmF3QmxvY2tCdWZmZXIsIDAsIDAsIDApOwotICAgICAgICAgICAg
aWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAgICAgICAgIHJldHVybiBT
dGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKKyAgICAgICAgICAgICAgICBidWZmZXIu
cmVzaXplKHJlYWRSZXN1bHQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmF3QmxvY2tCdWZm
ZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgcmF3QmxvY2tCdWZmZXIgPSBzaGFyZWRCdWZmZXItPmdl
dENvbnRpZ3VvdXNEYXRhKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQpOworICAg
ICAgICAgICAgYXV0byBsYXN0UmVhZCA9IHJhd0Jsb2NrQnVmZmVyLT5zaXplKCk7CisgICAgICAg
ICAgICBvdXRwdXRCdWZmZXIuYXBwZW5kKCpyYXdCbG9ja0J1ZmZlcik7CiAgICAgICAgICAgICBt
X3Bvc2l0aW9uICs9IGxhc3RSZWFkOwogICAgICAgICAgICAgKm51bUFjdHVhbGx5UmVhZCArPSBs
YXN0UmVhZDsKICAgICAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50ICs9IGxhc3RSZWFk
OwpAQCAtMTIwMSwxNiArMTE3MCwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBy
b3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbAogCiAjZGVm
aW5lIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoLi4uKSBpZiAocGFyc2VyKCkubG9nZ2Vy
UHRyKCkpIHBhcnNlcigpLmxvZ2dlclB0cigpLT5lcnJvcihsb2dDaGFubmVsKCksIExvZ2dlcjo6
TG9nU2l0ZUlkZW50aWZpZXIobG9nQ2xhc3NOYW1lKCksIF9fZnVuY19fLCBwYXJzZXIoKS5sb2dJ
ZGVudGlmaWVyKCkpLCBfX1ZBX0FSR1NfXykKIAotUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxv
Y2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKK1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29udGlndW91c0Nv
bXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsK
LSAgICBpZiAoIW9mZnNldCAmJiAhbGVuZ3RoICYmIFBBTDo6Q01CbG9ja0J1ZmZlcklzUmFuZ2VD
b250aWd1b3VzKG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgMCwgMCkpCi0gICAgICAgIHJl
dHVybiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7Ci0gICAgQ01CbG9ja0J1ZmZlclJlZiByYXdDb250
aWd1b3VzQnVmZmVyID0gbnVsbHB0cjsKLSAgICBpZiAoUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRl
Q29udGlndW91cyhudWxscHRyLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIG51bGxwdHIs
IG51bGxwdHIsIG9mZnNldCwgbGVuZ3RoLCAwLCAmcmF3Q29udGlndW91c0J1ZmZlcikgIT0ga0NN
QmxvY2tCdWZmZXJOb0VycikgewotICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChXZWJBdWRpbywg
ImZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBibG9jayBidWZmZXIiKTsKKyAgICBpZiAob2Zm
c2V0ICsgbGVuZ3RoID4gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5zaXplKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihyYXdDb250aWd1b3VzQnVm
ZmVyKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5nZXQoKS0+Z2V0Q29udGln
dW91c0RhdGEob2Zmc2V0LCBsZW5ndGgpOwogfQogCiB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVy
LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVt
YWluaW5nKQpAQCAtMTIyNCwyMCArMTE4OCw5IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAg
ICAgaWYgKCFtX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNp
emUgPSBtZXRhZGF0YS5zaXplOwogCi0gICAgaWYgKCFtX2N1cnJlbnRCbG9ja0J1ZmZlcikgewot
ICAgICAgICBBU1NFUlQoIW1fcGFydGlhbEJ5dGVzUmVhZCk7Ci0gICAgICAgIENNQmxvY2tCdWZm
ZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6
Q01CbG9ja0J1ZmZlckNyZWF0ZUVtcHR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1NYXhCbG9ja0J1
ZmZlckNhcGFjaXR5LCAwLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICBpZiAoZXJyICE9IGtD
TUJsb2NrQnVmZmVyTm9FcnIgfHwgIXJhd0Jsb2NrQnVmZmVyKSB7Ci0gICAgICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVk
IHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0
ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0g
YWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgfQotCiAgICAgd2hpbGUgKCpieXRlc1JlbWFp
bmluZykgewogICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7Ci0gICAgICAgIGF1dG8gc3RhdHVz
ID0gc3RhdGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJl
YWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQo
KSwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVz
UmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlciwgJmJ5dGVzUmVhZCk7CiAgICAgICAgICpi
eXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CiAgICAgICAgIG1fcGFydGlhbEJ5dGVzUmVhZCAr
PSBieXRlc1JlYWQ7CiAKQEAgLTEyNDksNjggKzEyMDIsNjggQEAgd2VibTo6U3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXIm
IHJlYWQKICAgICBpZiAobV9wYXJ0aWFsQnl0ZXNSZWFkIDwgKm1fY29tcGxldGVQYWNrZXRTaXpl
KQogICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rUGFydGlhbCk7
CiAKLSAgICBpZiAoIW1fY29tcGxldGVCbG9ja0J1ZmZlcikKLSAgICAgICAgbV9jb21wbGV0ZUJs
b2NrQnVmZmVyID0gV1RGTW92ZShtX2N1cnJlbnRCbG9ja0J1ZmZlcik7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNl
KG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCks
IDAsIDAsIDApOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlIHRvIGNv
bXBsZXRlIGJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgfQotICAgICAgICBt
X2N1cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQorICAgIG1fY29tcGxldGVCbG9j
a0J1ZmZlcnMuYXBwZW5kKG1fY3VycmVudEJsb2NrQnVmZmVyLnRha2UoKSk7CiAgICAgbV9wYXJ0
aWFsQnl0ZXNSZWFkID0gMDsKIAogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVz
OjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIs
IGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcs
IGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQordm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6
Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KQogewotI2lmIEVOQUJMRShW
UDkpCi0gICAgYXV0byBzdGF0dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5
dGVzUmVtYWluaW5nKTsKLSAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKLSAgICAgICAg
cmV0dXJuIHN0YXR1czsKKyAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKIAotICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihwcmVzZW50YXRpb25UaW1lLCBzYW1w
bGVDb3VudCwgbWV0YWRhdGEpOwotICAgIHJlc2V0KCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShtZXRhZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOwotICAgIFVO
VVNFRF9QQVJBTShzYW1wbGVDb3VudCk7Ci0jZW5kaWYKKyAgICBSZXRhaW5QdHI8Q01CbG9ja0J1
ZmZlclJlZj4gY29tcGxldGVDTUJsb2NrQnVmZmVyczsgLy8gPSBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXJzLnRha2UoKS0+Y3JlYXRlQ01CbG9ja0J1ZmZlcigpOworICAgIGlmICghY29tcGxldGVDTUJs
b2NrQnVmZmVycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIFNraXAoJnJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOworICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9
IG51bGxwdHI7CisgICAgYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgY29tcGxldGVDTUJsb2NrQnVmZmVycy5nZXQoKSwgZm9ybWF0
RGVzY3JpcHRpb24oKS5nZXQoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0VGltaW5n
cy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5kYXRhKCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBt
X3BhY2tldFNpemVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcik7CisgICAgaWYgKGVycikgewor
ICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0
ZVJlYWR5IGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHBvc3RQcm9jZXNzKHJhd1NhbXBsZUJ1ZmZlcik7CisKKyAgICBhdXRvIHRyYWNrSUQgPSB0
cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpOworICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEo
YWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpLCB0cmFja0lELCBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQp
OwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVh
dGVTYW1wbGVCdWZmZXIoY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxl
Q291bnQsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhKQordm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0
ZSgpCit7CisgICAgbV9rZXlGcmFtZXMuY2xlYXIoKTsKKyAgICBUcmFja0RhdGE6OnJlc2V0Q29t
cGxldGVkRnJhbWVzU3RhdGUoKTsKK30KKword2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVh
ZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCkKIHsKICNpZiBFTkFCTEUo
VlA5KQotICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CisgICAgYXV0byBz
dGF0dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsK
KyAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKKyAgICAgICAgcmV0dXJuIHN0YXR1czsK
KwogICAgIGNvbnN0ZXhwciBzaXplX3QgbWF4SGVhZGVyU2l6ZSA9IDMyOyAvLyBUaGUgbWF4aW11
bSBsZW5ndGggb2YgYSBWUDkgdW5jb21wcmVzc2VkIGhlYWRlciBpcyAxNDQgYml0cyBhbmQgMTEg
Ynl0ZXMgZm9yIFZQOC4gUm91bmQgaGlnaC4KICAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0
aCA9IHN0ZDo6bWluKG1heEhlYWRlclNpemUsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7Ci0gICAg
YXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwg
c2VnbWVudEhlYWRlckxlbmd0aCk7CisgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGln
dW91c0NvbXBsZXRlQmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgc2VnbWVu
dEhlYWRlckxlbmd0aCk7CiAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVC
dWZmZXIgZmFpbGVkIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQ
b2ludGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFy
KiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9H
X0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdp
dGggZXJyb3IiLCBlcnIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBTa2lwKCZy
ZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICB9CisgICAgY29uc3QgdWludDhfdCogYmxvY2tC
dWZmZXJEYXRhID0gY29udGlndW91c0J1ZmZlci0+ZGF0YSgpOwogCiAgICAgYm9vbCBpc0tleSA9
IGZhbHNlOwogICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNj
cmlwdGlvbjsKICAgICBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6OlZQOSkgewogICAgICAgICBp
ZiAoIW1faGVhZGVyUGFyc2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVmZmVyRGF0
YSwgc2VnbWVudEhlYWRlckxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAKICAgICAgICAgaWYgKG1f
aGVhZGVyUGFyc2VyLmtleSgpKSB7CiAgICAgICAgICAgICBpc0tleSA9IHRydWU7CiAgICAgICAg
ICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9t
VlA5SGVhZGVyUGFyc2VyKG1faGVhZGVyUGFyc2VyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29s
b3VyKTsKICAgICAgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKICAgICAgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1h
dCBkZXNjcmlwdGlvbiBmcm9tIFZQWCBoZWFkZXIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RGTW92ZShm
b3JtYXREZXNjcmlwdGlvbikpOwogICAgICAgICB9CkBAIC0xMzIxLDcgKzEyNzQsNyBAQCB2b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZm
ZXIoY29uc3QgQ01UaW1lJiBwcgogICAgICAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9
IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhlYWRlcigqaGVhZGVyLCB0cmFjaygpLnZp
ZGVvLnZhbHVlKCkuY29sb3VyKTsKICAgICAgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24p
IHsKICAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQg
dG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIFZQWCBoZWFkZXIiKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0
ZXNSZW1haW5pbmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3Jp
cHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlvbikpOwogICAgICAgICB9CkBAIC0xMzM2LDQ1
ICsxMjg5LDQ1IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6
OmNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmIHByCiAgICAgaWYgKHRyYWNrLmRlZmF1
bHRfZHVyYXRpb24uaXNfcHJlc2VudCgpKQogICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1
bHRfZHVyYXRpb24udmFsdWUoKSAqIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlIC8ga191c19p
bl9zZWNvbmRzOwogCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVs
bHB0cjsKLSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0geyBQQUw6OkNNVGltZU1ha2Uo
ZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJlc2VudGF0aW9uVGltZSwg
cHJlc2VudGF0aW9uVGltZSB9OwotICAgIGVyciA9IFBBTDo6Q01TYW1wbGVCdWZmZXJDcmVhdGVS
ZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIHRo
aXMtPmZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIHNhbXBsZUNvdW50LCAxLCAmdGltaW5nLCAx
LCAmKm1fY29tcGxldGVQYWNrZXRTaXplLCAmcmF3U2FtcGxlQnVmZmVyKTsKLSAgICBpZiAoZXJy
KSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVy
Q3JlYXRlUmVhZHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwor
ICAgIG1fa2V5RnJhbWVzLmFwcGVuZChpc0tleSk7CisgICAgbV9wYWNrZXRTaXplcy5hcHBlbmQo
Km1fY29tcGxldGVQYWNrZXRTaXplKTsKKyAgICBtX3BhY2tldFRpbWluZ3MuYXBwZW5kKHsgUEFM
OjpDTVRpbWVNYWtlKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNl
bnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUgfSk7CisgICAgbV9jdXJyZW50UGFja2V0Qnl0
ZU9mZnNldCArPSAqbV9jb21wbGV0ZVBhY2tldFNpemU7CisgICAgbV9jb21wbGV0ZVBhY2tldFNp
emUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBhdXRvIGF0dGFjaG1lbnRzQXJyYXkgPSBQQUw6OkNN
U2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIuZ2V0KCks
IHRydWUpOworICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKKworICAgIEFTU0VSVCghKmJ5dGVz
UmVtYWluaW5nKTsKKyAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29t
cGxldGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOworICAg
IFVOVVNFRF9QQVJBTShzYW1wbGVDb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsK
KyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisjZW5kaWYKK30KKwor
dm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cG9zdFByb2Nlc3Mo
Q01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyKQoreworICAgIGF1dG8gYXR0YWNobWVu
dHNBcnJheSA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHJh
d1NhbXBsZUJ1ZmZlciwgdHJ1ZSk7CiAgICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJyYXkpOwogICAg
IGlmICghYXR0YWNobWVudHNBcnJheSkgewogICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkgcmV0dXJuZWQg
TlVMTCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpc0tleSkgewotICAg
ICAgICBmb3IgKENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0dGFjaG1l
bnRzQXJyYXkpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgQ0ZNdXRhYmxlRGljdGlv
bmFyeVJlZiBhdHRhY2htZW50cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5
UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpKTsKKyAgICBB
U1NFUlQoc2l6ZV90KENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KSkgPT0gbV9rZXlG
cmFtZXMuc2l6ZSgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdl
dENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0PENGTXV0YWJs
ZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwg
aSkpOworICAgICAgICBpZiAoIW1fa2V5RnJhbWVzW2ldKQogICAgICAgICAgICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIFBBTDo6a0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RT
eW5jLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgICAgIH0KICAgICB9Ci0KLSAgICBhdXRvIHRyYWNr
SUQgPSB0cmFjay50cmFja191aWQudmFsdWUoKTsKLSAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFE
YXRhKFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRCwgbWV0YWRhdGEucG9zaXRpb24pOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9uVGltZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHNhbXBsZUNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotI2VuZGlmIC8v
IEVOQUJMRShWUDkpCiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFj
a0RhdGE6OnJlc2V0Q29tcGxldGVkKCkKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVk
aW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQogewogICAgIG1OdW1GcmFt
ZXNJbkNvbXBsZXRlQmxvY2sgPSAwOwotICAgIG1fcGFja2V0U2l6ZXMuY2xlYXIoKTsKLSAgICBt
X3BhY2tldFRpbWluZ3MuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ID0g
MDsKLSAgICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKCk7CisgICAgVHJhY2tEYXRhOjpyZXNl
dENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiB9CiAKIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXIm
IHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1Jl
bWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQp
CkBAIC0xMzgzLDggKzEzMzYsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgICAgICBh
dXRvJiBsYXN0VGltaW5nID0gbV9wYWNrZXRUaW1pbmdzLmxhc3QoKTsKICAgICAgICAgaWYgKFBB
TDo6Q01UaW1lQ29tcGFyZShQQUw6OkNNVGltZUFkZChsYXN0VGltaW5nLmR1cmF0aW9uLCBsYXN0
VGltaW5nLnByZXNlbnRhdGlvblRpbWVTdGFtcCksIHByZXNlbnRhdGlvblRpbWUpKSB7CiAgICAg
ICAgICAgICAvLyBEaXNjb250aW51aXR5IGVuY291bnRlcmVkLCBlbWl0IHRoZSBwcmV2aW91c2x5
IGRlbXV4ZWQgc2FtcGxlcy4KLSAgICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0
YS5wb3NpdGlvbik7Ci0gICAgICAgICAgICByZXNldCgpOworICAgICAgICAgICAgZHJhaW5QZW5k
aW5nU2FtcGxlcygpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzkyLDExICsxMzQ0LDYgQEAg
d2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25z
dW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkK
ICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAotICAgIC8vIEF0dGVtcHRzIHRvIG1pbmltaXNlIHRo
ZSBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRpb25zIGR1ZSB0byByZXBldGl0dmUgQ01CbG9ja0J1
ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZSBjYWxscyBpbiByZWFkRnJhbWVEYXRhLgotICAgIG1O
dW1GcmFtZXNJbkNvbXBsZXRlQmxvY2srKzsKLSAgICBpZiAobU51bUZyYW1lc0luQ29tcGxldGVC
bG9jayA+IG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5KQotICAgICAgICBtTWF4QmxvY2tCdWZmZXJD
YXBhY2l0eSA9IG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2s7Ci0KICAgICBpZiAobV9wYWNrZXRT
aXplcy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSA9IHByZXNl
bnRhdGlvblRpbWU7CiAKQEAgLTE0MTYsMTIgKzEzNjMsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6
UmVhZAogICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlv
VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMg
ZGF0YSBibG9jayIpOwogICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVm
ZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1
ZmZlckdldERhdGFQb2ludGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51
bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgICAgICBpZiAoZXJyKSB7
Ci0gICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1
ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3Vz
QnVmZmVyLT5kYXRhKCk7CiAgICAgICAgICAgICBPcHVzQ29va2llQ29udGVudHMgY29va2llQ29u
dGVudHM7CiAgICAgICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRh
LnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21wbGV0ZVBhY2tldFNpemUsIGJsb2Nr
QnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIHBhcnNlIE9wdXMgcHJpdmF0ZSBkYXRhIik7
CkBAIC0xNDYwLDEyICsxNDAyLDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAg
ICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1l
RnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOwogICAg
ICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICB9
Ci0gICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgIGF1
dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIoY29udGlndW91c0J1ZmZl
ci5nZXQoKSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsK
LSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NT
SUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJy
KTsKLSAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAg
ICAgICAgfQorICAgICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1
b3VzQnVmZmVyLT5kYXRhKCk7CiAgICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJp
dmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6
ZSwgYmxvY2tCdWZmZXJEYXRhLCBjb29raWVDb250ZW50cykKICAgICAgICAgICAgIHx8IGNvb2tp
ZUNvbnRlbnRzLmZyYW1lc1BlclBhY2tldCAhPSBtX2ZyYW1lc1BlclBhY2tldAogICAgICAgICAg
ICAgfHwgY29va2llQ29udGVudHMuZnJhbWVEdXJhdGlvbiAhPSBtX2ZyYW1lRHVyYXRpb24pIHsK
QEAgLTE0ODEsNDAgKzE0MTgsMTggQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKIAogICAgIGF1
dG8gc2FtcGxlRHVyYXRpb24gPSBQQUw6OkNNVGltZUdldFNlY29uZHMoUEFMOjpDTVRpbWVTdWJ0
cmFjdChwcmVzZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSArIFBBTDo6
Q01UaW1lR2V0U2Vjb25kcyhtX3BhY2tldER1cmF0aW9uKSAqIHNhbXBsZUNvdW50OwogCi0gICAg
aWYgKHNhbXBsZUR1cmF0aW9uID49IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uKSB7Ci0gICAgICAg
IGNyZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3NpdGlvbik7Ci0gICAgICAgIHJlc2V0KCk7
Ci0gICAgfQorICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlv
bikKKyAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCiAgICAgQVNTRVJUKCEqYnl0ZXNS
ZW1haW5pbmcpOwogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjprT2tDb21w
bGV0ZWQpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRh
OjpjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5n
ZU9mZnNldCkKLXsKLSAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7
Ci0gICAgYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlv
bigpLmdldCgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRUaW1pbmdzLnNpemUoKSwg
bV9wYWNrZXRUaW1pbmdzLmRhdGEoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0U2l6
ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRo
UGFja2V0RGVzY3JpcHRpb25zIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVy
KTsKLQotICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAg
cGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSUQs
IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCk7Ci19Ci0KIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCkKIHsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bV90cmFja3MpIHsKLSAgICAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvKSB7Ci0gICAgICAgICAgICBBdWRp
b1RyYWNrRGF0YSYgYXVkaW9UcmFjayA9IGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFjay5n
ZXQoKSk7Ci0gICAgICAgICAgICBhdWRpb1RyYWNrLmNyZWF0ZVNhbXBsZUJ1ZmZlcigpOwotICAg
ICAgICAgICAgYXVkaW9UcmFjay5yZXNldENvbXBsZXRlZCgpOwotICAgICAgICB9CisgICAgICAg
IGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tE
YXRhOjpUeXBlOjpBdWRpbykKKyAgICAgICAgICAgIHRyYWNrLT5kcmFpblBlbmRpbmdTYW1wbGVz
KCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5kZXggZTg3NmFi
NDE0YTRhYmIzM2Q1MThjMzdiNDFmZTVhMTQ3NzZhYjQ5Ni4uYWZkYmY0OWIyZjQ2OTIxNmUxYjlk
ZjdlZDE4MjFiM2FhMjI3N2Y5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAt
MjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgogI2luY2x1ZGUg
PENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgogI2luY2x1ZGUgPENvcmVNZWRpYS9DTVRpbWUu
aD4KQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHR5cGVkZWYg
Y29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRp
b25SZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUJsb2NrQnVmZmVyICpDTUJsb2NrQnVmZmVy
UmVmOwogCiBuYW1lc3BhY2Ugd2VibSB7CiBjbGFzcyBXZWJtUGFyc2VyOwpAQCAtMTU1LDMyICsx
NTUsNDQgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpT
dGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCByZXNldENvbXBsZXRlZCgpCisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldENvbXBsZXRl
ZEZyYW1lc1N0YXRlKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9jb21wbGV0ZUJsb2NrQnVm
ZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlcnMucmVzZXQo
KTsKKyAgICAgICAgICAgIG1fcGFja2V0U2l6ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGFj
a2V0VGltaW5ncy5jbGVhcigpOworICAgICAgICAgICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNl
dCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCByZXNldCgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJlc2V0Q29tcGxldGVkKCk7CisgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1l
c1N0YXRlKCk7CiAgICAgICAgICAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6bnVsbG9w
dDsKICAgICAgICAgICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9ja0J1
ZmZlci5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYWluUGVu
ZGluZ1NhbXBsZXMoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCA9
IHN0ZDo6bnVsbG9wdCkKKyAgICAgICAgeworICAgICAgICAgICAgY3JlYXRlU2FtcGxlQnVmZmVy
KGxhdGVzdEJ5dGVSYW5nZU9mZnNldCk7CisgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1l
c1N0YXRlKCk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgUmV0YWluUHRy
PENNQmxvY2tCdWZmZXJSZWY+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0OworICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1
ZmZlcihzdGQ6Om9wdGlvbmFsPHNpemVfdD4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFBy
b2Nlc3MoQ01TYW1wbGVCdWZmZXJSZWYpIHsgfTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxl
bmd0aCkgY29uc3Q7CiAgICAgICAgIHdlYm06OlN0YXR1cyByZWFkRnJhbWVEYXRhKHdlYm06OlJl
YWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCogYnl0ZXNSZW1haW5p
bmcpOwotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gbV9jb21wbGV0ZUJsb2Nr
QnVmZmVyOworICAgICAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIG1fY29tcGxldGVCbG9ja0J1ZmZl
cnM7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsK
LSAgICAgICAgLy8gSW5pdGlhbCBhbGxvY2F0aW9uIHNpemUgb2YgZW1wdHkgQ01CbG9ja0J1ZmZl
ci4KLSAgICAgICAgc2l6ZV90IG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5IHsgMCB9OworICAgICAg
ICBzaXplX3QgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCB7IDAgfTsKKyAgICAgICAgVmVjdG9y
PHNpemVfdD4gbV9wYWNrZXRTaXplczsKKyAgICAgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5m
bz4gbV9wYWNrZXRUaW1pbmdzOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29kZWNUeXBlIG1f
Y29kZWM7CiAgICAgICAgIHdlYm06OlRyYWNrRW50cnkgbV90cmFjazsKICAgICAgICAgVHlwZSBt
X3RyYWNrVHlwZTsKICAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1f
Zm9ybWF0RGVzY3JpcHRpb247Ci0gICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBt
X2N1cnJlbnRCbG9ja0J1ZmZlcjsKKyAgICAgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBtX2N1cnJl
bnRCbG9ja0J1ZmZlcjsKICAgICAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgbV9wYXJzZXI7
CiAgICAgICAgIC8vIFNpemUgb2YgdGhlIGN1cnJlbnRseSBpbmNvbXBsZXRlIHBhcnNlZCBwYWNr
ZXQuCiAgICAgICAgIHNpemVfdCBtX3BhcnRpYWxCeXRlc1JlYWQgeyAwIH07CkBAIC0xOTgsMTQg
KzIxMCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHdlYm06
OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1l
TWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7Ci0KICAgICBw
cml2YXRlOgotICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmLCBp
bnQsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmKTsKICAgICAgICAgY29uc3QgY2hhciogbG9n
Q2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvVHJhY2tEYXRhIjsgfQotCisgICAgICAg
IHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06
OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7Cisg
ICAgICAgIHZvaWQgcG9zdFByb2Nlc3MoQ01TYW1wbGVCdWZmZXJSZWYpIGZpbmFsOworICAgICAg
ICB2b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICNpZiBFTkFCTEUoVlA5
KQogICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIgbV9oZWFkZXJQYXJzZXI7Cisg
ICAgICAgIFZlY3Rvcjxib29sPiBtX2tleUZyYW1lczsKICNlbmRpZgogICAgIH07CiAKQEAgLTIy
MiwyMCArMjM0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
d2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6
RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKLSAg
ICAgICAgdm9pZCByZXNldENvbXBsZXRlZCgpIGZpbmFsOwotICAgICAgICB2b2lkIGNyZWF0ZVNh
bXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0ID0g
c3RkOjpudWxsb3B0KTsKLQogICAgIHByaXZhdGU6CisgICAgICAgIHdlYm06OlN0YXR1cyBjb25z
dW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1
aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7CisgICAgICAgIHZvaWQgcmVzZXRD
b21wbGV0ZWRGcmFtZXNTdGF0ZSgpIGZpbmFsOwogICAgICAgICBjb25zdCBjaGFyKiBsb2dDbGFz
c05hbWUoKSBjb25zdCB7IHJldHVybiAiQXVkaW9UcmFja0RhdGEiOyB9CiAKICAgICAgICAgQ01U
aW1lIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZTsKICAgICAgICAgQ01UaW1lIG1fcGFja2V0RHVy
YXRpb247Ci0gICAgICAgIHNpemVfdCBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0IHsgMCB9Owog
ICAgICAgICB1aW50OF90IG1fZnJhbWVzUGVyUGFja2V0IHsgMCB9OwogICAgICAgICBTZWNvbmRz
IG1fZnJhbWVEdXJhdGlvbiB7IDBfcyB9OwotICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX3BhY2tl
dFNpemVzOwotICAgICAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBtX3BhY2tldFRpbWlu
Z3M7CiAgICAgICAgIHNpemVfdCBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrIHsgMCB9OwogICAg
ICAgICAvLyBGSVhNRTogMC41IC0gMS4wIHNlY29uZHMgaXMgYSBiZXR0ZXIgZHVyYXRpb24gcGVy
IHNhbXBsZSBidWZmZXIsIGJ1dCB1c2UgMiBzZWNvbmRzIHNvIGF0IGxlYXN0IHRoZSBmaXJzdAog
ICAgICAgICAvLyBzYW1wbGUgYnVmZmVyIHdpbGwgcGxheSB1bnRpbCB3ZSBmaXggTWVkaWFTYW1w
bGVDdXJzb3I6OmNyZWF0ZVNhbXBsZUJ1ZmZlciB0byBkZWFsIHdpdGggYGVuZEN1cnNvcmAuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGls
aXRpZXNDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EuaAppbmRleCA5NDEwYTdjNDc5NjM0NzA0ZWI1OWM5OTk2MDM0ODQ0YjY5
YTg4NzZkLi45NTQ0ZDljMjU3ZmUwYmQ1NTgyODAzYWUxYTgwODQ1MDE3M2M1MGI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXND
b2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0
aWxpdGllc0NvY29hLmgKQEAgLTY1LDcgKzY1LDcgQEAgc3RydWN0IFZQOEZyYW1lSGVhZGVyIHsK
ICAgICBib29sIG5lZWRzQ2xhbXBpbmcgeyBmYWxzZSB9OwogfTsKIAotc3RkOjpvcHRpb25hbDxW
UDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNp
emVfdCBmcmFtZVNpemUpOworc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhG
cmFtZUhlYWRlcihjb25zdCB1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpOwog
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9u
RnJvbVZQOEhlYWRlcihjb25zdCBWUDhGcmFtZUhlYWRlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8
d2VibTo6Q29sb3VyPiYpOwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBWUDlUZXN0aW5nT3ZlcnJp
ZGVzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1ZQOVV0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KaW5kZXggNWMwZGZhZmRiMmU2N2YwNDgwNTA1ZmVh
YzY2YTRlZDU0NGEyOWUzMy4uZGQxNzc5ZjI2Mzg5MjY5NTk0NGY0MjM3NmZjZGFlNWI2ZDMwYjI2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KQEAgLTYwOSw3ICs2MDksNyBAQCBSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVh
ZGVyUGFyc2VyKGNvbgogICAgIHJldHVybiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZChyZWNvcmQsIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVp
Z2h0KCkpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1l
SGVhZGVyKHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKK3N0ZDo6b3B0aW9u
YWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJh
bWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKQogewogICAgIC8vIFZQOCBmcmFtZSBoZWFkZXJzIGFy
ZSBkZWZpbmVkIGluIFJGQyA2Mzg2OiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYz
ODY+LgogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggZjI2NDAyZTA4OGNlZmRmYWUxOGJmN2I1OGVkY2E5NWIxNGJiZDk0Ni4uN2EzZGVlODdkZjFm
YmIyMWRkMzcxZTc4YjdmOGE0NzQ3NGM4Y2U0OSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8g
Y29udmVydCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyIHRvIENNQmxvY2tCdWZmZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUX0YpOgorCiAyMDIyLTAyLTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgog
CiAgICAgICAgIFNldCBjdXN0b20gZ2VuZXJhbCBzdG9yYWdlIGRpcmVjdG9yeSBmb3IgY3VzdG9t
IFdlYnNpdGVEYXRhU3RvcmUgaW4gVGVzdENvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMzE1NWMwOWYyNDcz
ZWJlYTY5MDBiMzljMGQ5YmVjYWFjYWE1YTAxNS4uYjAxMTI4YjI2YjFjYzBhMjA1YzY1NDFhNDg1
NmI3ZjAyZjQ4YmM3NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTIzOSw2ICsyMzksNDEgQEAgVEVTVF9GKEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXJUZXN0LCBnZXRTb21lRGF0YSkKICAgICBjaGVja0J1ZmZlcihsLmRhdGEo
KSwgbC5zaXplKCksICJsIik7CiB9CiAKK1RFU1RfRihGcmFnbWVudGVkU2hhcmVkQnVmZmVyVGVz
dCwgZ2V0Q29udGlndW91c0RhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHMxID0geyAnYScs
ICdiJywgJ2MnLCAnZCcgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gczIgPSB7ICdlJywgJ2YnLCAn
ZycsICdoJyB9OworICAgIFZlY3Rvcjx1aW50OF90PiBzMyA9IHsgJ2knLCAnaicsICdrJywgJ2wn
IH07CisKKyAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBl
bmQoV1RGTW92ZShzMSkpOworICAgIGJ1aWxkZXIuYXBwZW5kKFdURk1vdmUoczIpKTsKKyAgICBi
dWlsZGVyLmFwcGVuZChXVEZNb3ZlKHMzKSk7CisgICAgYXV0byBidWZmZXIgPSBidWlsZGVyLnRh
a2UoKTsKKworICAgIGF1dG8gYWJjZCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoMCwgNCk7
CisgICAgYXV0byBiY2RlZmdoaSA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoMSwgOCk7Cisg
ICAgYXV0byBnaCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoNiwgMik7CisgICAgYXV0byBn
aGlqID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSg2LCA0KTsKKyAgICBhdXRvIGggPSBidWZm
ZXItPmdldENvbnRpZ3VvdXNEYXRhKDcsIDEpOworICAgIGF1dG8gaWprID0gYnVmZmVyLT5nZXRD
b250aWd1b3VzRGF0YSg4LCAzKTsKKyAgICBhdXRvIGtsID0gYnVmZmVyLT5nZXRDb250aWd1b3Vz
RGF0YSgxMCwgMik7CisgICAgYXV0byBsID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSgxMSwg
MSk7CisgICAgY2hlY2tCdWZmZXIoYWJjZC0+ZGF0YSgpLCBhYmNkLT5zaXplKCksICJhYmNkIik7
CisgICAgY2hlY2tCdWZmZXIoYmNkZWZnaGktPmRhdGEoKSwgYmNkZWZnaGktPnNpemUoKSwgImJj
ZGVmZ2hpIik7CisgICAgY2hlY2tCdWZmZXIoZ2gtPmRhdGEoKSwgZ2gtPnNpemUoKSwgImdoIik7
CisgICAgY2hlY2tCdWZmZXIoZ2hpai0+ZGF0YSgpLCBnaGlqLT5zaXplKCksICJnaGlqIik7Cisg
ICAgY2hlY2tCdWZmZXIoaC0+ZGF0YSgpLCBoLT5zaXplKCksICJoIik7CisgICAgY2hlY2tCdWZm
ZXIoaWprLT5kYXRhKCksIGlqay0+c2l6ZSgpLCAiaWprIik7CisgICAgY2hlY2tCdWZmZXIoa2wt
PmRhdGEoKSwga2wtPnNpemUoKSwgImtsIik7CisgICAgY2hlY2tCdWZmZXIobC0+ZGF0YSgpLCBs
LT5zaXplKCksICJsIik7CisgICAgYXV0byBmZ2hpamtsID0gYnVmZmVyLT5nZXRDb250aWd1b3Vz
RGF0YSg1LCAyMCk7CisgICAgRVhQRUNUX0VRKGZnaGlqa2wtPnNpemUoKSwgYnVmZmVyLT5zaXpl
KCkgLSA1KTsKKyAgICBjaGVja0J1ZmZlcihmZ2hpamtsLT5kYXRhKCksIGZnaGlqa2wtPnNpemUo
KSwgImZnaGlqa2wiKTsKKyAgICBhdXRvIG91dEJvdW5kID0gYnVmZmVyLT5nZXRDb250aWd1b3Vz
RGF0YSgzMCwgMjApOworICAgIEVYUEVDVF9FUShvdXRCb3VuZC0+c2l6ZSgpLCAwdSk7Cit9CisK
IFRFU1RfRihGcmFnbWVudGVkU2hhcmVkQnVmZmVyVGVzdCwgaXNFcXVhbFRvKQogewogICAgIGF1
dG8gbWFrZUJ1ZmZlciA9IFtdIChWZWN0b3I8VmVjdG9yPHVpbnQ4X3Q+PiYmIGNvbnRlbnRzKSB7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453163</attachid>
            <date>2022-02-24 18:53:49 -0800</date>
            <delta_ts>2022-03-08 16:16:41 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-237078-20220225135347.patch</filename>
            <type>text/plain</type>
            <size>31985</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDAwN2VjYzIwYTY3ODZk
NWYxYWM1NWExODljODc4MzAxNGQyNTE5ZC4uZDc3ZGI0NmY4NmMzMWVhY2VjZTU1ZjRlNmQ4NGJl
MjU1NTlhMzAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIHVzZSBTaGFyZWRCdWZmZXIgaW50ZXJuYWxseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc4CisgICAgICAgIHJkYXI6Ly84
OTM0ODc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSByZWZhY3RvciB0byBhbGxvdyBTb3VyY2VCdWZmZXJQYXJzZXIgdG8gcmV0dXJu
IFNoYXJlZEJ1ZmZlcgorICAgICAgICByYXRoZXIgdGhhbiBDTUJsb2NrQnVmZmVyLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBvYnNlcnZhYmxlIGJlaGF2aW91cnMuCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6
OnJlZW5xdWV1ZU1lZGlhRm9yVGltZSk6IEZseS1ieSBmaXg6IHR5cG8uCisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKTogRmx5LWJ5IGZpeCwg
IGV4aXQgZWFybHkKKyAgICAgICAgaWYgZW5kIHRpbWUgaXMgbG93ZXIgdGhhbiBzdGFydCB0aW1l
IHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGR1cmF0aW9uIGlzCisgICAgICAgIHNtYWxsZXIgdGhh
biBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
VlA4RnJhbWVIZWFkZXIpOiBNYWtlIG1ldGhvZHMgY29uc3QuCisKIDIwMjItMDItMjMgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYWJpbGl0eSB0byBj
b252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRl
LmNwcAppbmRleCAwNGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliLi5iZjQ3
ZmNlYmI1NmUyZjlkZTU0YTQyMGRlMmQyMTZhNDdlY2EyZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApA
QCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6cmVlbnF1ZXVlTWVk
aWFGb3JUaW1lKFRyYWNrQnVmZmVyJiB0cmFja0J1ZmZlciwgY29uc3QKICAgICAgICAgfHwgKGN1
cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+Zmlyc3QgLSB0aW1lKSA+IHRpbWVGdWRnZUZhY3Rvcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBTZWFjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZp
b3VzIHN5bmMgc2FtcGxlLgorICAgIC8vIFNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3Vz
IHN5bmMgc2FtcGxlLgogICAgIERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlIGRlY29kZUtl
eShjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+ZGVjb2RlVGltZSgpLCBjdXJyZW50
U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKICAgICBhdXRv
IGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZGVjb2RlT3Jk
ZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtleShkZWNvZGVLZXkpOwogICAgIEFTU0VSVChjdXJy
ZW50U2FtcGxlRFRTSXRlcmF0b3IgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigp
LmVuZCgpKTsKQEAgLTExNzEsNiArMTE3MSw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6
ZGlkUmVjZWl2ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgb3JpZ2luYWxTYW1wbGUpCiAgICAg
ICAgICAgICAgICAgTWVkaWFUaW1lIGVyYXNlQmVnaW5UaW1lID0gdHJhY2tCdWZmZXIuaGlnaGVz
dFByZXNlbnRhdGlvblRpbWVzdGFtcDsKICAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VF
bmRUaW1lID0gZnJhbWVFbmRUaW1lc3RhbXAgLSBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2U7CiAK
KyAgICAgICAgICAgICAgICBpZiAoZXJhc2VFbmRUaW1lIDw9IGVyYXNlQmVnaW5UaW1lKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIFByZXNlbnRhdGlvbk9y
ZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5nZSByYW5nZTsKICAgICAgICAgICAgICAgICBpZiAo
aGlnaGVzdEJ1ZmZlcmVkVGltZSAtIHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1l
c3RhbXAgPCB0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgbmV3IGZyYW1lIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcmVkIHJh
bmdlcywgcGVyZm9ybSBhIHNlcXVlbnRpYWwgc2NhbiBmcm9tIGVuZCAoTygxKSkuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Nv
dXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmluZGV4IGFlMTY0MTRmMjFjNjg0NmMxODk3NzA5ZTE0
MjRlNGE2YTRiNzYxYTAuLmExNWY3MWE0Yzg2ZGRiZWYyNzI3MjcwNzM5ZmU2MmVkNDk5MjdjMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCkBAIC0zNiw3ICszNiw2IEBACiAj
aW5jbHVkZSAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJWUDlVdGlsaXRpZXNDb2NvYS5oIgogI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlV2ViTS5oIgogI2luY2x1ZGUgIldlYk1BdWRpb1V0aWxpdGllc0Nv
Y29hLmgiCkBAIC0zNjUsMjEgKzM2NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprV291bGRCbG9jayk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgRnJlZVNo
YXJlZEJ1ZmZlcih2b2lkKiByZWZjb24sIHZvaWQqLCBzaXplX3QpCisgICAgU3RhdHVzIFJlYWRJ
bnRvKHN0ZDo6c2l6ZV90IG51bVRvUmVhZCwgU2hhcmVkQnVmZmVyQnVpbGRlciYgb3V0cHV0QnVm
ZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQogICAgIHsKLSAgICAgICAgYXV0byogYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxTaGFyZWRCdWZmZXIqPihyZWZjb24pOwotICAgICAgICBi
dWZmZXItPmRlcmVmKCk7Ci0gICAgfQotCi0gICAgU3RhdHVzIFJlYWRJbnRvKHN0ZDo6c2l6ZV90
IG51bVRvUmVhZCwgQ01CbG9ja0J1ZmZlclJlZiBvdXRwdXRCdWZmZXIsIHVpbnQ2NF90KiBudW1B
Y3R1YWxseVJlYWQpCi0gICAgewotICAgICAgICBBU1NFUlQob3V0cHV0QnVmZmVyICYmIG51bUFj
dHVhbGx5UmVhZCk7CisgICAgICAgIEFTU0VSVChudW1BY3R1YWxseVJlYWQpOwogICAgICAgICBp
ZiAoIW51bUFjdHVhbGx5UmVhZCkKICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
Tm90RW5vdWdoTWVtb3J5KTsKIAogICAgICAgICAqbnVtQWN0dWFsbHlSZWFkID0gMDsKLSAgICAg
ICAgaWYgKCFvdXRwdXRCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a05vdEVub3VnaE1lbW9yeSk7CiAKICAgICAgICAgd2hpbGUgKG51bVRvUmVhZCAmJiBtX2N1cnJl
bnRTZWdtZW50ICE9IG1fZGF0YS5lbmQoKSkgewogICAgICAgICAgICAgYXV0byYgY3VycmVudFNl
Z21lbnQgPSAqbV9jdXJyZW50U2VnbWVudDsKQEAgLTM4OSw0NCArMzgwLDIyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlciA9IGN1cnJlbnRTZWdtZW50LmdldFNoYXJl
ZEJ1ZmZlcigpOwotICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9
IG51bGxwdHI7Ci0gICAgICAgICAgICB1aW50NjRfdCBsYXN0UmVhZCA9IDA7CisgICAgICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByYXdCbG9ja0J1ZmZlcjsKICAgICAgICAgICAgIGlmICgh
c2hhcmVkQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgcG90ZW50aWFsbHkg
YWxsb2NhdGUgbW9yZSBtZW1vcnkgdGhhbiBuZWVkZWQgaWYgdGhlIHJlYWQgaXMgcGFydGlhbC4K
LSAgICAgICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhN
ZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBudW1Ub1JlYWQsIGtDRkFs
bG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIDAsIG51bVRvUmVhZCwga0NNQmxvY2tCdWZmZXJBc3N1
cmVNZW1vcnlOb3dGbGFnLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChl
cnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwotICAgICAgICAgICAgICAgIHVpbnQ4X3Qq
IGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNlZ21l
bnRTaXplQXRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgZXJyID0gUEFMOjpDTUJsb2Nr
QnVmZmVyR2V0RGF0YVBvaW50ZXIocmF3QmxvY2tCdWZmZXIsIDAsICZzZWdtZW50U2l6ZUF0UG9z
aXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7CisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXIudHJ5UmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShudW1Ub1JlYWQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgYXV0byBy
ZWFkUmVzdWx0ID0gY3VycmVudFNlZ21lbnQucmVhZChtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwg
bnVtVG9SZWFkLCBibG9ja0J1ZmZlckRhdGEpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZXNp
emUobnVtVG9SZWFkKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQgPSBjdXJyZW50
U2VnbWVudC5yZWFkKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQsIGJ1ZmZlci5k
YXRhKCkpOwogICAgICAgICAgICAgICAgIGlmICghcmVhZFJlc3VsdC5oYXNfdmFsdWUoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRSZWFkRXJyb3JUb1dlYm1TdGF0dXMocmVh
ZFJlc3VsdC5lcnJvcigpKTsKLSAgICAgICAgICAgICAgICBsYXN0UmVhZCA9IHJlYWRSZXN1bHQu
dmFsdWUoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzog
Y291bGQgd2Ugb25seSBjcmVhdGUgYSBuZXcgQ01CbG9ja0J1ZmZlciBpZiB0aGUgYmFja2VuZCBt
ZW1vcnkgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgb25lPwotICAgICAgICAgICAgICAgIHNp
emVfdCBjYW5SZWFkID0gc3RkOjptaW48c2l6ZV90PihudW1Ub1JlYWQsIHNoYXJlZEJ1ZmZlci0+
c2l6ZSgpIC0gbV9wb3NpdGlvbldpdGhpblNlZ21lbnQpOwotICAgICAgICAgICAgICAgIC8vIEZy
b20gQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246Ci0gICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgdGhpcyBzdHJ1
Y3QgY29udGFpbnMgbWlzYWxpZ25lZCBmdW5jdGlvbiBwb2ludGVycy4KLSAgICAgICAgICAgICAg
ICAvLyBUbyBhdm9pZCBsaW5rLXRpbWUgaXNzdWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGNs
aWVudHMgZmlsbCBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UncyBmdW5jdGlvbiBwb2lu
dGVyIGZpZWxkcwotICAgICAgICAgICAgICAgIC8vIGJ5IHVzaW5nIGFzc2lnbm1lbnQgc3RhdGVt
ZW50cywgcmF0aGVyIHRoYW4gZGVjbGFyaW5nIHRoZW0gYXMgZ2xvYmFsIG9yIHN0YXRpYyBzdHJ1
Y3RzLgotICAgICAgICAgICAgICAgIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSBhbGxv
Y2F0b3I7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnZlcnNpb24gPSAwOwotICAgICAgICAg
ICAgICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0b3IuRnJlZUJsb2NrID0gRnJlZVNoYXJlZEJ1ZmZlcjsKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0b3IucmVmQ29uID0gc2hhcmVkQnVmZmVyLmdldCgpOwotICAgICAgICAgICAgICAg
IHNoYXJlZEJ1ZmZlci0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNN
QmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sobnVsbHB0ciwgc3RhdGljX2Nhc3Q8dm9p
ZCo+KGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZEJ1ZmZlci0+ZGF0YSgpKSksIHNoYXJlZEJ1
ZmZlci0+c2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9yLCBtX3Bvc2l0aW9uV2l0aGluU2VnbWVu
dCwgY2FuUmVhZCwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJy
ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgICAgICAgICBsYXN0UmVhZCA9
IGNhblJlYWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIGJsb2NrQnVmZmVyID0g
YWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01C
bG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShvdXRwdXRCdWZmZXIsIHJhd0Jsb2NrQnVm
ZmVyLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0Vy
cikKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9y
eSk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShyZWFkUmVzdWx0LnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIHJhd0Jsb2NrQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShidWZmZXIpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJhd0Js
b2NrQnVmZmVyID0gc2hhcmVkQnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YShtX3Bvc2l0aW9uV2l0
aGluU2VnbWVudCwgbnVtVG9SZWFkKTsKKyAgICAgICAgICAgIGF1dG8gbGFzdFJlYWQgPSByYXdC
bG9ja0J1ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgb3V0cHV0QnVmZmVyLmFwcGVuZCgqcmF3
QmxvY2tCdWZmZXIpOwogICAgICAgICAgICAgbV9wb3NpdGlvbiArPSBsYXN0UmVhZDsKICAgICAg
ICAgICAgICpudW1BY3R1YWxseVJlYWQgKz0gbGFzdFJlYWQ7CiAgICAgICAgICAgICBtX3Bvc2l0
aW9uV2l0aGluU2VnbWVudCArPSBsYXN0UmVhZDsKQEAgLTEyMDEsMTYgKzExNzAsMTEgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gc2FtcGwKIAogI2RlZmluZSBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKC4uLikgaWYgKHBhcnNlcigpLmxvZ2dlclB0cigpKSBwYXJzZXIoKS5sb2dnZXJQdHIoKS0+
ZXJyb3IobG9nQ2hhbm5lbCgpLCBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKGxvZ0NsYXNzTmFt
ZSgpLCBfX2Z1bmNfXywgcGFyc2VyKCkubG9nSWRlbnRpZmllcigpKSwgX19WQV9BUkdTX18pCiAK
LVJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFj
a0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVf
dCBsZW5ndGgpIGNvbnN0CitSZWZQdHI8U2hhcmVkQnVmZmVyPiBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgaWYgKCFvZmZzZXQgJiYgIWxlbmd0aCAm
JiBQQUw6OkNNQmxvY2tCdWZmZXJJc1JhbmdlQ29udGlndW91cyhtX2NvbXBsZXRlQmxvY2tCdWZm
ZXIuZ2V0KCksIDAsIDApKQotICAgICAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOwot
ICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3Q29udGlndW91c0J1ZmZlciA9IG51bGxwdHI7Ci0gICAg
aWYgKFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUNvbnRpZ3VvdXMobnVsbHB0ciwgbV9jb21wbGV0
ZUJsb2NrQnVmZmVyLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBvZmZzZXQsIGxlbmd0aCwgMCwg
JnJhd0NvbnRpZ3VvdXNCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRkFVTFQoV2ViQXVkaW8sICJmYWlsZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMg
YmxvY2sgYnVmZmVyIik7CisgICAgaWYgKG9mZnNldCArIGxlbmd0aCA+IG1fY29tcGxldGVCbG9j
a0J1ZmZlcnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0
dXJuIGFkb3B0Q0YocmF3Q29udGlndW91c0J1ZmZlcik7CisgICAgcmV0dXJuIG1fY29tcGxldGVC
bG9ja0J1ZmZlcnMuZ2V0KCktPmdldENvbnRpZ3VvdXNEYXRhKG9mZnNldCwgbGVuZ3RoKTsKIH0K
IAogd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZy
YW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYg
bWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKQEAgLTEyMjQsMjAgKzExODgsOSBA
QCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJh
bWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZAogICAgIGlmICghbV9jb21wbGV0ZVBhY2tldFNpemUp
CiAgICAgICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gbWV0YWRhdGEuc2l6ZTsKIAotICAgIGlm
ICghbV9jdXJyZW50QmxvY2tCdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BhcnRpYWxCeXRl
c1JlYWQpOwotICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0
cjsKLSAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVFbXB0eShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSwgMCwgJnJhd0Jsb2NrQnVm
ZmVyKTsKLSAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyIHx8ICFyYXdCbG9j
a0J1ZmZlcikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01C
bG9ja0J1ZmZlckNyZWF0ZUVtcHR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAg
ICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgfQotICAg
ICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZmZXIpOwotICAg
IH0KLQogICAgIHdoaWxlICgqYnl0ZXNSZW1haW5pbmcpIHsKICAgICAgICAgdWludDY0X3QgYnl0
ZXNSZWFkOwotICAgICAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlNlZ21lbnRSZWFkZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmlu
ZywgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksICZieXRlc1JlYWQpOworICAgICAgICBhdXRv
IHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFk
ZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywgbV9jdXJyZW50QmxvY2tCdWZm
ZXIsICZieXRlc1JlYWQpOwogICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOwog
ICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgKz0gYnl0ZXNSZWFkOwogCkBAIC0xMjQ5LDY4ICsx
MjAyLDY4IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKG1fcGFydGlhbEJ5dGVz
UmVhZCA8ICptX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1
cyh3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwpOwogCi0gICAgaWYgKCFtX2NvbXBsZXRlQmxvY2tC
dWZmZXIpCi0gICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IFdURk1vdmUobV9jdXJyZW50
QmxvY2tCdWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9j
a0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCks
IG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAwLCAwLCAwKTsKLSAgICAgICAgaWYgKGVycikg
ewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZl
ckFwcGVuZEJ1ZmZlclJlZmVyZW5jZSB0byBjb21wbGV0ZSBibG9jayBmYWlsZWQgd2l0aCBlcnJv
ciIsIGVycik7Ci0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1l
bW9yeSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRy
OwotICAgIH0KKyAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLmFwcGVuZChtX2N1cnJlbnRCbG9j
a0J1ZmZlci50YWtlKCkpOwogICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7CiAKICAgICByZXR1
cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6
U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0
YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRp
bWUsIGludCBzYW1wbGVDb3VudCkKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tE
YXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVS
YW5nZU9mZnNldCkKIHsKLSNpZiBFTkFCTEUoVlA5KQotICAgIGF1dG8gc3RhdHVzID0gcmVhZEZy
YW1lRGF0YShyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgaWYgKCFzdGF0
dXMuY29tcGxldGVkX29rKCkpCi0gICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgaWYgKG1fcGFj
a2V0U2l6ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBjcmVhdGVTYW1wbGVC
dWZmZXIocHJlc2VudGF0aW9uVGltZSwgc2FtcGxlQ291bnQsIG1ldGFkYXRhKTsKLSAgICByZXNl
dCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotICAgIFVOVVNFRF9QQVJB
TShwcmVzZW50YXRpb25UaW1lKTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwotI2Vu
ZGlmCisgICAgYXV0byBjb21wbGV0ZUNNQmxvY2tCdWZmZXJzID0gbV9jb21wbGV0ZUJsb2NrQnVm
ZmVycy50YWtlKCktPmNyZWF0ZUNNQmxvY2tCdWZmZXIoKTsKKyAgICBpZiAoIWNvbXBsZXRlQ01C
bG9ja0J1ZmZlcnMpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBTa2lwKCZyZWFkZXIs
IGJ5dGVzUmVtYWluaW5nKTsKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIg
PSBudWxscHRyOworICAgIGF1dG8gZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbXBsZXRlQ01CbG9ja0J1ZmZlcnMuZ2V0KCksIGZvcm1h
dERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFRpbWlu
Z3Muc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3MuZGF0YSgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwg
bV9wYWNrZXRTaXplcy5kYXRhKCksICZyYXdTYW1wbGVCdWZmZXIpOworICAgIGlmIChlcnIpIHsK
KyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJDcmVh
dGVSZWFkeSBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBwb3N0UHJvY2VzcyhyYXdTYW1wbGVCdWZmZXIpOworCisgICAgYXV0byB0cmFja0lEID0g
dHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRh
KGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKSwgdHJhY2tJRCwgbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0
KTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3Jl
YXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBs
ZUNvdW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3ZvaWQgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3Rh
dGUoKQoreworICAgIG1fa2V5RnJhbWVzLmNsZWFyKCk7CisgICAgVHJhY2tEYXRhOjpyZXNldENv
bXBsZXRlZEZyYW1lc1N0YXRlKCk7Cit9CisKK3dlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJl
YWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFp
bmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxF
KFZQOSkKLSAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOworICAgIGF1dG8g
c3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7
CisgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkpCisgICAgICAgIHJldHVybiBzdGF0dXM7
CisKICAgICBjb25zdGV4cHIgc2l6ZV90IG1heEhlYWRlclNpemUgPSAzMjsgLy8gVGhlIG1heGlt
dW0gbGVuZ3RoIG9mIGEgVlA5IHVuY29tcHJlc3NlZCBoZWFkZXIgaXMgMTQ0IGJpdHMgYW5kIDEx
IGJ5dGVzIGZvciBWUDguIFJvdW5kIGhpZ2guCiAgICAgc2l6ZV90IHNlZ21lbnRIZWFkZXJMZW5n
dGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCAqbV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAg
IGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAs
IHNlZ21lbnRIZWFkZXJMZW5ndGgpOworICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRp
Z3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQsIHNlZ21l
bnRIZWFkZXJMZW5ndGgpOwogICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewogICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxl
QnVmZmVyIGZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRh
UG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hh
cioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3
aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gU2tpcCgm
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgfQorICAgIGNvbnN0IHVpbnQ4X3QqIGJsb2Nr
QnVmZmVyRGF0YSA9IGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKTsKIAogICAgIGJvb2wgaXNLZXkg
PSBmYWxzZTsKICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVz
Y3JpcHRpb247CiAgICAgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWUDkpIHsKICAgICAgICAg
aWYgKCFtX2hlYWRlclBhcnNlci5QYXJzZVVuY29tcHJlc3NlZEhlYWRlcihibG9ja0J1ZmZlckRh
dGEsIHNlZ21lbnRIZWFkZXJMZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogCiAgICAgICAgIGlmICht
X2hlYWRlclBhcnNlci5rZXkoKSkgewogICAgICAgICAgICAgaXNLZXkgPSB0cnVlOwogICAgICAg
ICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJv
bVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNv
bG91cik7CiAgICAgICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiZmFpbGVkIHRvIGNyZWF0ZSBmb3Jt
YXQgZGVzY3JpcHRpb24gZnJvbSBWUFggaGVhZGVyIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9ybWF0RGVzY3JpcHRpb24pKTsKICAgICAgICAgfQpAQCAtMTMyMSw3ICsxMjc0LDcgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVm
ZmVyKGNvbnN0IENNVGltZSYgcHIKICAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24g
PSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoKmhlYWRlciwgdHJhY2soKS52
aWRlby52YWx1ZSgpLmNvbG91cik7CiAgICAgICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9u
KSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiZmFpbGVk
IHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBWUFggaGVhZGVyIik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5
dGVzUmVtYWluaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldEZvcm1hdERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKICAgICAgICAgfQpAQCAtMTMzNiw0
NSArMTI4OSw0NSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRh
OjpjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3QgQ01UaW1lJiBwcgogICAgIGlmICh0cmFjay5kZWZh
dWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKICAgICAgICAgZHVyYXRpb24gPSB0cmFjay5kZWZh
dWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSAvIGtfdXNf
aW5fc2Vjb25kczsKIAotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51
bGxwdHI7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZyA9IHsgUEFMOjpDTVRpbWVNYWtl
KGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUs
IHByZXNlbnRhdGlvblRpbWUgfTsKLSAgICBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRl
UmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCB0
aGlzLT5mb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBzYW1wbGVDb3VudCwgMSwgJnRpbWluZywg
MSwgJiptX2NvbXBsZXRlUGFja2V0U2l6ZSwgJnJhd1NhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKGVy
cikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZl
ckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsK
KyAgICBtX2tleUZyYW1lcy5hcHBlbmQoaXNLZXkpOworICAgIG1fcGFja2V0U2l6ZXMuYXBwZW5k
KCptX2NvbXBsZXRlUGFja2V0U2l6ZSk7CisgICAgbV9wYWNrZXRUaW1pbmdzLmFwcGVuZCh7IFBB
TDo6Q01UaW1lTWFrZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUpLCBwcmVz
ZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lIH0pOworICAgIG1fY3VycmVudFBhY2tldEJ5
dGVPZmZzZXQgKz0gKm1fY29tcGxldGVQYWNrZXRTaXplOworICAgIG1fY29tcGxldGVQYWNrZXRT
aXplID0gc3RkOjpudWxsb3B0OwogCi0gICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpD
TVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLmdldCgp
LCB0cnVlKTsKKyAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CisKKyAgICBBU1NFUlQoISpieXRl
c1JlbWFpbmluZyk7CisgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwcmVzZW50YXRpb25UaW1lKTsKKyAg
ICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOworICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7
CisgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworI2VuZGlmCit9CisK
K3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNz
KENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlcikKK3sKKyAgICBhdXRvIGF0dGFjaG1l
bnRzQXJyYXkgPSBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShy
YXdTYW1wbGVCdWZmZXIsIHRydWUpOwogICAgIEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKICAg
ICBpZiAoIWF0dGFjaG1lbnRzQXJyYXkpIHsKICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9Q
T1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5IHJldHVybmVk
IE5VTEwiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXNLZXkpIHsKLSAg
ICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2ht
ZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENGTXV0YWJsZURpY3Rp
b25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFy
eVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7CisgICAg
QVNTRVJUKHNpemVfdChDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSkpID09IG1fa2V5
RnJhbWVzLnNpemUoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlH
ZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZN
dXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFi
bGVEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXks
IGkpKTsKKyAgICAgICAgaWYgKCFtX2tleUZyYW1lc1tpXSkKICAgICAgICAgICAgIENGRGljdGlv
bmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBQQUw6OmtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90
U3luYywga0NGQm9vbGVhblRydWUpOwotICAgICAgICB9CiAgICAgfQotCi0gICAgYXV0byB0cmFj
a0lEID0gdHJhY2sudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2VyKCkucHJvdmlkZU1lZGlh
RGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIG1ldGFkYXRhLnBvc2l0aW9uKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOwotICAgIFVOVVNFRF9Q
QVJBTShzYW1wbGVDb3VudCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsKLSNlbmRpZiAv
LyBFTkFCTEUoVlA5KQogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJh
Y2tEYXRhOjpyZXNldENvbXBsZXRlZCgpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1
ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKIHsKICAgICBtTnVtRnJh
bWVzSW5Db21wbGV0ZUJsb2NrID0gMDsKLSAgICBtX3BhY2tldFNpemVzLmNsZWFyKCk7Ci0gICAg
bV9wYWNrZXRUaW1pbmdzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCA9
IDA7Ci0gICAgVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZCgpOworICAgIFRyYWNrRGF0YTo6cmVz
ZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogfQogCiB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVy
JiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNS
ZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50
KQpAQCAtMTM4Myw4ICsxMzM2LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAg
YXV0byYgbGFzdFRpbWluZyA9IG1fcGFja2V0VGltaW5ncy5sYXN0KCk7CiAgICAgICAgIGlmIChQ
QUw6OkNNVGltZUNvbXBhcmUoUEFMOjpDTVRpbWVBZGQobGFzdFRpbWluZy5kdXJhdGlvbiwgbGFz
dFRpbWluZy5wcmVzZW50YXRpb25UaW1lU3RhbXApLCBwcmVzZW50YXRpb25UaW1lKSkgewogICAg
ICAgICAgICAgLy8gRGlzY29udGludWl0eSBlbmNvdW50ZXJlZCwgZW1pdCB0aGUgcHJldmlvdXNs
eSBkZW11eGVkIHNhbXBsZXMuCi0gICAgICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIobWV0YWRh
dGEucG9zaXRpb24pOwotICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgICAgIGRyYWluUGVu
ZGluZ1NhbXBsZXMoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM5MiwxMSArMTM0NCw2IEBA
IHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29u
c3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkp
CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKLSAgICAvLyBBdHRlbXB0cyB0byBtaW5pbWlzZSB0
aGUgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0aW9ucyBkdWUgdG8gcmVwZXRpdHZlIENNQmxvY2tC
dWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgY2FsbHMgaW4gcmVhZEZyYW1lRGF0YS4KLSAgICBt
TnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrKys7Ci0gICAgaWYgKG1OdW1GcmFtZXNJbkNvbXBsZXRl
QmxvY2sgPiBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSkKLSAgICAgICAgbU1heEJsb2NrQnVmZmVy
Q2FwYWNpdHkgPSBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrOwotCiAgICAgaWYgKG1fcGFja2V0
U2l6ZXMuaXNFbXB0eSgpKQogICAgICAgICBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUgPSBwcmVz
ZW50YXRpb25UaW1lOwogCkBAIC0xNDE2LDEyICsxMzYzLDcgQEAgd2VibTo6U3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06
OlJlYWQKICAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRp
b1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3Vz
IGRhdGEgYmxvY2siKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRl
c1JlbWFpbmluZyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB1aW50OF90KiBibG9ja0J1
ZmZlckRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tC
dWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxscHRyLCBu
dWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgICAgICAgICAgaWYgKGVycikg
ewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tC
dWZmZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gY29udGlndW91
c0J1ZmZlci0+ZGF0YSgpOwogICAgICAgICAgICAgT3B1c0Nvb2tpZUNvbnRlbnRzIGNvb2tpZUNv
bnRlbnRzOwogICAgICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0
YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgKm1fY29tcGxldGVQYWNrZXRTaXplLCBibG9j
a0J1ZmZlckRhdGEsIGNvb2tpZUNvbnRlbnRzKSkgewogICAgICAgICAgICAgICAgIFBBUlNFUl9M
T0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBwYXJzZSBPcHVzIHByaXZhdGUgZGF0YSIp
OwpAQCAtMTQ2MCwxMiArMTQwMiw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3Vt
ZUZyYW1lRGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAg
ICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAg
fQotICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwotICAgICAgICBh
dXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKGNvbnRpZ3VvdXNCdWZm
ZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7
Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9T
U0lCTEUoIkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVy
cik7Ci0gICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0g
ICAgICAgIH0KKyAgICAgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gY29udGln
dW91c0J1ZmZlci0+ZGF0YSgpOwogICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHBy
aXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21wbGV0ZVBhY2tldFNp
emUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpCiAgICAgICAgICAgICB8fCBjb29r
aWVDb250ZW50cy5mcmFtZXNQZXJQYWNrZXQgIT0gbV9mcmFtZXNQZXJQYWNrZXQKICAgICAgICAg
ICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZyYW1lRHVyYXRpb24gIT0gbV9mcmFtZUR1cmF0aW9uKSB7
CkBAIC0xNDgxLDQwICsxNDE4LDE4IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAKICAgICBh
dXRvIHNhbXBsZUR1cmF0aW9uID0gUEFMOjpDTVRpbWVHZXRTZWNvbmRzKFBBTDo6Q01UaW1lU3Vi
dHJhY3QocHJlc2VudGF0aW9uVGltZSwgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lKSkgKyBQQUw6
OkNNVGltZUdldFNlY29uZHMobV9wYWNrZXREdXJhdGlvbikgKiBzYW1wbGVDb3VudDsKIAotICAg
IGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlvbikgewotICAgICAg
ICBjcmVhdGVTYW1wbGVCdWZmZXIobWV0YWRhdGEucG9zaXRpb24pOwotICAgICAgICByZXNldCgp
OwotICAgIH0KKyAgICBpZiAoc2FtcGxlRHVyYXRpb24gPj0gbV9taW5pbXVtU2FtcGxlRHVyYXRp
b24pCisgICAgICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKIAogICAgIEFTU0VSVCghKmJ5dGVz
UmVtYWluaW5nKTsKICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29t
cGxldGVkKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0
YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFu
Z2VPZmZzZXQpCi17Ci0gICAgaWYgKG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRy
OwotICAgIGF1dG8gZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9j
YXRvckRlZmF1bHQsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRp
b24oKS5nZXQoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5zaXplKCks
IG1fcGFja2V0VGltaW5ncy5kYXRhKCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFNp
emVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvU2FtcGxlQnVmZmVyQ3JlYXRlV2l0
aFBhY2tldERlc2NyaXB0aW9ucyBmYWlsZWQgd2l0aCAlZCIsIGVycik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZl
cik7Ci0KLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpOwotICAg
IHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lE
LCBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOwotfQotCiB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpCiB7CiAgICAgZm9yIChhdXRvJiB0cmFjayA6
IG1fdHJhY2tzKSB7Ci0gICAgICAgIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpBdWRpbykgewotICAgICAgICAgICAgQXVk
aW9UcmFja0RhdGEmIGF1ZGlvVHJhY2sgPSBkb3duY2FzdDxBdWRpb1RyYWNrRGF0YT4odHJhY2su
Z2V0KCkpOwotICAgICAgICAgICAgYXVkaW9UcmFjay5jcmVhdGVTYW1wbGVCdWZmZXIoKTsKLSAg
ICAgICAgICAgIGF1ZGlvVHJhY2sucmVzZXRDb21wbGV0ZWQoKTsKLSAgICAgICAgfQorICAgICAg
ICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNr
RGF0YTo6VHlwZTo6QXVkaW8pCisgICAgICAgICAgICB0cmFjay0+ZHJhaW5QZW5kaW5nU2FtcGxl
cygpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGU4NzZh
YjQxNGE0YWJiMzNkNTE4YzM3YjQxZmU1YTE0Nzc2YWI0OTYuLmFmZGJmNDliMmY0NjkyMTZlMWI5
ZGY3ZWQxODIxYjNhYTIyNzdmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIKICNpbmNsdWRl
IDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KICNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1l
Lmg+CkBAIC0zOSw3ICs0MCw2IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0
aW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01CbG9ja0J1ZmZlciAqQ01CbG9ja0J1ZmZl
clJlZjsKIAogbmFtZXNwYWNlIHdlYm0gewogY2xhc3MgV2VibVBhcnNlcjsKQEAgLTE1NSwzMiAr
MTU1LDQ0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6
U3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVzZXRDb21wbGV0ZWQoKQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRDb21wbGV0
ZWRGcmFtZXNTdGF0ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fY29tcGxldGVCbG9ja0J1
ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLnJlc2V0
KCk7CisgICAgICAgICAgICBtX3BhY2tldFNpemVzLmNsZWFyKCk7CisgICAgICAgICAgICBtX3Bh
Y2tldFRpbWluZ3MuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZz
ZXQgPSAwOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgcmVzZXQoKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXNldENvbXBsZXRlZCgpOworICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFt
ZXNTdGF0ZSgpOwogICAgICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxv
cHQ7CiAgICAgICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgPSAwOwotICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tC
dWZmZXIucmVzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmFpblBl
bmRpbmdTYW1wbGVzKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQg
PSBzdGQ6Om51bGxvcHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZl
cihsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOworICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFt
ZXNTdGF0ZSgpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFJldGFpblB0
cjxDTUJsb2NrQnVmZmVyUmVmPiBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qg
b2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKKyAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVC
dWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQ
cm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmKSB7IH07CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBs
ZW5ndGgpIGNvbnN0OwogICAgICAgICB3ZWJtOjpTdGF0dXMgcmVhZEZyYW1lRGF0YSh3ZWJtOjpS
ZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nKTsKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IG1fY29tcGxldGVCbG9j
a0J1ZmZlcjsKKyAgICAgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXJzOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbV9jb21wbGV0ZVBhY2tldFNpemU7
Ci0gICAgICAgIC8vIEluaXRpYWwgYWxsb2NhdGlvbiBzaXplIG9mIGVtcHR5IENNQmxvY2tCdWZm
ZXIuCi0gICAgICAgIHNpemVfdCBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSB7IDAgfTsKKyAgICAg
ICAgc2l6ZV90IG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgeyAwIH07CisgICAgICAgIFZlY3Rv
cjxzaXplX3Q+IG1fcGFja2V0U2l6ZXM7CisgICAgICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0lu
Zm8+IG1fcGFja2V0VGltaW5nczsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIENvZGVjVHlwZSBt
X2NvZGVjOwogICAgICAgICB3ZWJtOjpUcmFja0VudHJ5IG1fdHJhY2s7CiAgICAgICAgIFR5cGUg
bV90cmFja1R5cGU7CiAgICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBt
X2Zvcm1hdERlc2NyaXB0aW9uOwotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4g
bV9jdXJyZW50QmxvY2tCdWZmZXI7CisgICAgICAgIFNoYXJlZEJ1ZmZlckJ1aWxkZXIgbV9jdXJy
ZW50QmxvY2tCdWZmZXI7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIG1fcGFyc2Vy
OwogICAgICAgICAvLyBTaXplIG9mIHRoZSBjdXJyZW50bHkgaW5jb21wbGV0ZSBwYXJzZWQgcGFj
a2V0LgogICAgICAgICBzaXplX3QgbV9wYXJ0aWFsQnl0ZXNSZWFkIHsgMCB9OwpAQCAtMTk4LDE0
ICsyMTAsMTQgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB3ZWJt
OjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFt
ZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwotCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3QgQ01UaW1lJiwg
aW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJik7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxv
Z0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0KLQorICAgICAg
ICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJt
OjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwor
ICAgICAgICB2b2lkIHBvc3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmKSBmaW5hbDsKKyAgICAg
ICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7CiAjaWYgRU5BQkxFKFZQ
OSkKICAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyIG1faGVhZGVyUGFyc2VyOwor
ICAgICAgICBWZWN0b3I8Ym9vbD4gbV9rZXlGcmFtZXM7CiAjZW5kaWYKICAgICB9OwogCkBAIC0y
MjIsMjAgKzIzNCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06
OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7Ci0g
ICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWQoKSBmaW5hbDsKLSAgICAgICAgdm9pZCBjcmVhdGVT
YW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCA9
IHN0ZDo6bnVsbG9wdCk7Ci0KICAgICBwcml2YXRlOgorICAgICAgICB3ZWJtOjpTdGF0dXMgY29u
c3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwg
dWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB2b2lkIHJlc2V0
Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xh
c3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQogCiAgICAgICAgIENN
VGltZSBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWU7CiAgICAgICAgIENNVGltZSBtX3BhY2tldER1
cmF0aW9uOwotICAgICAgICBzaXplX3QgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCB7IDAgfTsK
ICAgICAgICAgdWludDhfdCBtX2ZyYW1lc1BlclBhY2tldCB7IDAgfTsKICAgICAgICAgU2Vjb25k
cyBtX2ZyYW1lRHVyYXRpb24geyAwX3MgfTsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gbV9wYWNr
ZXRTaXplczsKLSAgICAgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gbV9wYWNrZXRUaW1p
bmdzOwogICAgICAgICBzaXplX3QgbU51bUZyYW1lc0luQ29tcGxldGVCbG9jayB7IDAgfTsKICAg
ICAgICAgLy8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBl
ciBzYW1wbGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QK
ICAgICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IE1lZGlhU2Ft
cGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIgdG8gZGVhbCB3aXRoIGBlbmRDdXJzb3JgLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRp
bGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQ
OVV0aWxpdGllc0NvY29hLmgKaW5kZXggOTQxMGE3YzQ3OTYzNDcwNGViNTljOTk5NjAzNDg0NGI2
OWE4ODc2ZC4uOTU0NGQ5YzI1N2ZlMGJkNTU4MjgwM2FlMWE4MDg0NTAxNzNjNTBiNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVz
Q29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlV
dGlsaXRpZXNDb2NvYS5oCkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBWUDhGcmFtZUhlYWRlciB7
CiAgICAgYm9vbCBuZWVkc0NsYW1waW5nIHsgZmFsc2UgfTsKIH07CiAKLXN0ZDo6b3B0aW9uYWw8
VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJhbWVEYXRhLCBz
aXplX3QgZnJhbWVTaXplKTsKK3N0ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4
RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKTsK
IFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlv
bkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50
PHdlYm06OkNvbG91cj4mKTsKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgVlA5VGVzdGluZ092ZXJy
aWRlcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCmluZGV4IDVjMGRmYWZkYjJlNjdmMDQ4MDUwNWZl
YWM2NmE0ZWQ1NDRhMjllMzMuLmRkMTc3OWYyNjM4OTI2OTU5NDRmNDIzNzZmY2RhZTViNmQzMGIy
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQ
OVV0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCkBAIC02MDksNyArNjA5LDcgQEAgUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhl
YWRlclBhcnNlcihjb24KICAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhl
aWdodCgpKTsKIH0KIAotc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFt
ZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpCitzdGQ6Om9wdGlv
bmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGZy
YW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKIHsKICAgICAvLyBWUDggZnJhbWUgaGVhZGVycyBh
cmUgZGVmaW5lZCBpbiBSRkMgNjM4NjogPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2
Mzg2Pi4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453164</attachid>
            <date>2022-02-24 18:54:43 -0800</date>
            <delta_ts>2022-02-24 18:54:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237078-20220225135441.patch</filename>
            <type>text/plain</type>
            <size>41682</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZmNWEyYjFhNDAzNjU5
ODJiYjVjYmE5ODQ2MzI5ZDIxYWM2ODhlMi4uZDc3ZGI0NmY4NmMzMWVhY2VjZTU1ZjRlNmQ4NGJl
MjU1NTlhMzAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIyLTAyLTIzICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIHVzZSBTaGFyZWRCdWZmZXIgaW50ZXJuYWxseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc4CisgICAgICAgIHJkYXI6Ly84
OTM0ODc1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMgYSByZWZhY3RvciB0byBhbGxvdyBTb3VyY2VCdWZmZXJQYXJzZXIgdG8gcmV0dXJu
IFNoYXJlZEJ1ZmZlcgorICAgICAgICByYXRoZXIgdGhhbiBDTUJsb2NrQnVmZmVyLgorCisgICAg
ICAgIE5vIGNoYW5nZSBpbiBvYnNlcnZhYmxlIGJlaGF2aW91cnMuCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6
OnJlZW5xdWV1ZU1lZGlhRm9yVGltZSk6IEZseS1ieSBmaXg6IHR5cG8uCisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZlU2FtcGxlKTogRmx5LWJ5IGZpeCwg
IGV4aXQgZWFybHkKKyAgICAgICAgaWYgZW5kIHRpbWUgaXMgbG93ZXIgdGhhbiBzdGFydCB0aW1l
IHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGR1cmF0aW9uIGlzCisgICAgICAgIHNtYWxsZXIgdGhh
biBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
VlA4RnJhbWVIZWFkZXIpOiBNYWtlIG1ldGhvZHMgY29uc3QuCisKKzIwMjItMDItMjMgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYWJpbGl0eSB0byBj
b252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc1CisgICAgICAgIHJk
YXI6Ly84OTMzODQ0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpnZXRDb250aWd1b3VzRGF0YSBhbmQK
KyAgICAgICAgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQ01CbG9ja0J1ZmZlciBtZXRo
b2RzLgorCisgICAgICAgIEFQSSB0ZXN0cyBhZGRlZCBmb3IgZ2V0Q29udGlndW91c0RhdGEuCisg
ICAgICAgIGNyZWF0ZUNNQmxvY2tCdWZmZXIgd2lsbCBiZSB1c2VkIGluIGEgZm9sbG93LXVwIHBh
dGNoLgorCisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmdldENvbnRpZ3VvdXNEYXRhIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyZWVTaGFyZWRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
Q01CbG9ja0J1ZmZlciBjb25zdCk6CisKIDIwMjItMDItMjQgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgW1JlZmFjdG9yXSBBZG9wdCBMb2dnZXJIZWxwZXIgaW4g
TG9nZ2luZyBFTUUgY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHAKaW5kZXggZjg3YjZhNGY2M2IyNmEyMTg4MjA2ZTkzOGFhNTg1Nzk3YWIzOTVlNC4uMWU2MWQw
YjZmYWI3NTEwNGI3ZmEwMDJhOGJkMDQ1NmNiNDZmOGU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0xNTIsNiArMTUyLDI1IEBAIFNoYXJlZEJ1ZmZlckRh
dGFWaWV3IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlv
bikgY29uc3QKICAgICByZXR1cm4geyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwgcG9zaXRp
b24gLSBlbGVtZW50LT5iZWdpblBvc2l0aW9uIH07CiB9CiAKK1JlZjxTaGFyZWRCdWZmZXI+IEZy
YWdtZW50ZWRTaGFyZWRCdWZmZXI6OmdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwg
c2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBpZiAocG9zaXRpb24gPj0gbV9zaXplKQorICAg
ICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICBsZW5ndGggPSBzdGQ6Om1p
bihtX3NpemUgLSBwb3NpdGlvbiwgbGVuZ3RoKTsKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3Rv
ckVudHJ5KiBlbGVtZW50ID0gZ2V0U2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBz
aXplX3Qgb2Zmc2V0SW5TZWdtZW50ID0gcG9zaXRpb24gLSBlbGVtZW50LT5iZWdpblBvc2l0aW9u
OworICAgIGlmIChlbGVtZW50LT5zZWdtZW50LT5zaXplKCkgLSBvZmZzZXRJblNlZ21lbnQgPj0g
bGVuZ3RoKQorICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyRGF0YVZpZXcgeyBlbGVtZW50LT5z
ZWdtZW50LmNvcHlSZWYoKSwgb2Zmc2V0SW5TZWdtZW50LCBsZW5ndGggfS5jcmVhdGVTaGFyZWRC
dWZmZXIoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gY29tYmluZWREYXRhOworICAgIGNvbWJpbmVk
RGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgY29tYmluZWREYXRhLmFw
cGVuZChlbGVtZW50LT5zZWdtZW50LT5kYXRhKCkgKyBvZmZzZXRJblNlZ21lbnQsIGVsZW1lbnQt
PnNlZ21lbnQtPnNpemUoKSAtIG9mZnNldEluU2VnbWVudCk7CisgICAgZm9yICgrK2VsZW1lbnQ7
IGNvbWJpbmVkRGF0YS5zaXplKCkgPCBsZW5ndGggJiYgZWxlbWVudCAhPSBtX3NlZ21lbnRzLmVu
ZCgpOyBlbGVtZW50KyspIHsKKyAgICAgICAgYXV0byBjYW5Db3B5ID0gc3RkOjptaW4obGVuZ3Ro
IC0gY29tYmluZWREYXRhLnNpemUoKSwgZWxlbWVudC0+c2VnbWVudC0+c2l6ZSgpKTsKKyAgICAg
ICAgY29tYmluZWREYXRhLmFwcGVuZChlbGVtZW50LT5zZWdtZW50LT5kYXRhKCksIGNhbkNvcHkp
OworICAgIH0KKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShjb21iaW5l
ZERhdGEpKTsKK30KKwogY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnRW
ZWN0b3JFbnRyeSogRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZvclBvc2l0aW9u
KHNpemVfdCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChwb3NpdGlvbiA8
IG1fc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGNhZWYz
ZjI2MjAwMzNkZDhjZmYxNTYyM2YyM2M2YjZjOWI1MzRiMzcuLjNiZjhhNmQxN2UyMmZhMmU3OTRi
ZjRmZjY4MTZhNTgyZTkwZjk5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCkBAIC01NCw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9HQnl0ZXMgR0J5dGVzOwogI2lm
IFVTRShGT1VOREFUSU9OKQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7
Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUJsb2NrQnVmZmVyKiBDTUJsb2NrQnVmZmVyUmVmOwog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTQ5LDYgKzE1MCw3IEBAIHB1YmxpYzoKICNp
ZiBVU0UoRk9VTkRBVElPTikKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBcnJheT4g
Y3JlYXRlTlNEYXRhQXJyYXkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+IGNyZWF0ZShOU0RhdGEqKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gY3JlYXRlQ01CbG9ja0J1ZmZlcigpIGNv
bnN0OwogI2VuZGlmCiAjaWYgVVNFKENGKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKENGRGF0YVJlZik7CkBAIC0xOTQsNiArMTk2
LDcgQEAgcHVibGljOgogCiAgICAgLy8gYmVnaW4gYW5kIGVuZCB0YWtlIE8oMSkgdGltZSwgdGhp
cyB0YWtlcyBPKGxvZyhOKSkgdGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCBTaGFyZWRCdWZmZXJE
YXRhVmlldyBnZXRTb21lRGF0YShzaXplX3QgcG9zaXRpb24pIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZjxTaGFyZWRCdWZmZXI+IGdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlv
biwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9I
ZXhTdHJpbmcoKSBjb25zdDsKIApAQCAtMjQ2LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAKICAgICAv
LyBDb21iaW5lcyBhbGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhh
dCB2ZWN0b3IgYWZ0ZXIgY2xlYXJpbmcgdGhlIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIuCiAgICAg
V0VCQ09SRV9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IHRha2VEYXRhKCk7Ci0gICAgY29uc3QgRGF0
YVNlZ21lbnRWZWN0b3JFbnRyeSogZ2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGl0
aW9uKSBjb25zdDsKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBnZXRTZWdtZW50
Rm9yUG9zaXRpb24oc2l6ZV90IHBvc2l0aW9uKSBjb25zdDsKIAogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgYm9vbCBpbnRlcm5hbGx5Q29uc2lzdGVudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbQppbmRleCA2NjQyN2Rm
YmYwNWZkNzI2YWZkOTlhMzI5YzZhYzExYWM5ZWQ3YTU1Li4xOTA4YjQ2YWZiNWQ2MTA0MTJmYWVj
ZGMxMjQyMTY0ZWZhNjE5NDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiV2Vi
Q29yZUpJVE9wZXJhdGlvbnMuaCIKICNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW1wb3J0IDxwYWwv
Y2YvQ29yZU1lZGlhU29mdExpbmsuaD4KICNpbXBvcnQgPHN0cmluZy5oPgogI2ltcG9ydCA8d3Rm
L01haW5UaHJlYWQuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgpAQCAt
OTksNiArMTAwLDU1IEBAIHZvaWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKE5TRGF0
YSAqZGF0YSkKICAgICByZXR1cm4gYXBwZW5kKGJyaWRnZV9jYXN0KGRhdGEpKTsKIH0KIAorc3Rh
dGljIHZvaWQgRnJlZURhdGFTZWdtZW50KHZvaWQqIHJlZmNvbiwgdm9pZCosIHNpemVfdCkKK3sK
KyAgICBhdXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IERhdGFTZWdtZW50Kj4o
cmVmY29uKTsKKyAgICBidWZmZXItPmRlcmVmKCk7Cit9CisKK1JldGFpblB0cjxDTUJsb2NrQnVm
ZmVyUmVmPiBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpjcmVhdGVDTUJsb2NrQnVmZmVyKCkgY29u
c3QKK3sKKyAgICBhdXRvIHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIgPSBbXSAoY29uc3QgRGF0YVNl
Z21lbnQmIHNlZ21lbnQpIC0+IFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiB7CisgICAgICAg
IC8vIEZyb20gQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246Cisg
ICAgICAgIC8vIE5vdGUgdGhhdCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoaXMgc3RydWN0
IGNvbnRhaW5zIG1pc2FsaWduZWQgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgICAgIC8vIFRvIGF2
b2lkIGxpbmstdGltZSBpc3N1ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxs
IENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRz
CisgICAgICAgIC8vIGJ5IHVzaW5nIGFzc2lnbm1lbnQgc3RhdGVtZW50cywgcmF0aGVyIHRoYW4g
ZGVjbGFyaW5nIHRoZW0gYXMgZ2xvYmFsIG9yIHN0YXRpYyBzdHJ1Y3RzLgorICAgICAgICBDTUJs
b2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgYWxsb2NhdG9yOworICAgICAgICBhbGxvY2F0b3Iu
dmVyc2lvbiA9IDA7CisgICAgICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsK
KyAgICAgICAgYWxsb2NhdG9yLkZyZWVCbG9jayA9IEZyZWVEYXRhU2VnbWVudDsKKyAgICAgICAg
YWxsb2NhdG9yLnJlZkNvbiA9IGNvbnN0X2Nhc3Q8RGF0YVNlZ21lbnQqPigmc2VnbWVudCk7Cisg
ICAgICAgIHNlZ21lbnQucmVmKCk7CisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcGFydGlhbEJ1
ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGlmIChQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRo
TWVtb3J5QmxvY2sobnVsbHB0ciwgc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8dWludDhf
dCo+KHNlZ21lbnQuZGF0YSgpKSksIHNlZ21lbnQuc2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9y
LCAwLCBzZWdtZW50LnNpemUoKSwgMCwgJnBhcnRpYWxCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVy
Tm9FcnIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGFkb3B0
Q0YocGFydGlhbEJ1ZmZlcik7CisgICAgfTsKKworICAgIGlmIChoYXNPbmVTZWdtZW50KCkgJiYg
IWlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIobV9zZWdt
ZW50c1swXS5zZWdtZW50KTsKKworICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIg
PSBudWxscHRyOworICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgaXNFbXB0eSgpID8gMCA6IG1fc2VnbWVudHMuc2l6ZSgpLCAw
LCAmcmF3QmxvY2tCdWZmZXIpOworICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VyciB8
fCAhcmF3QmxvY2tCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gYmxv
Y2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKKworICAgIGlmIChpc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBibG9ja0J1ZmZlcjsKKworICAgIGZvciAoYXV0byYgc2VnbWVudCA6
IG1fc2VnbWVudHMpIHsKKyAgICAgICAgaWYgKCFzZWdtZW50LnNlZ21lbnQtPnNpemUoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIHBhcnRpYWxCdWZmZXIgPSBzZWdtZW50
VG9DTUJsb2NrQnVmZmVyKHNlZ21lbnQuc2VnbWVudCk7CisgICAgICAgIGlmICghcGFydGlhbEJ1
ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoUEFMOjpDTUJs
b2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKHJhd0Jsb2NrQnVmZmVyLCBwYXJ0aWFsQnVm
ZmVyLmdldCgpLCAwLCAwLCAwKSAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBibG9ja0J1ZmZlcjsKK30KKwogUmV0
YWluUHRyPE5TRGF0YT4gU2hhcmVkQnVmZmVyOjpjcmVhdGVOU0RhdGEoKSBjb25zdAogewogICAg
IHJldHVybiBicmlkZ2VfY2FzdChjcmVhdGVDRkRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4
IDA0Y2JlNGQyN2YxOTBiN2IyN2I5Y2E3ZTk4YTljNDcxNzNkMmY4OWIuLmJmNDdmY2ViYjU2ZTJm
OWRlNTRhNDIwZGUyZDIxNmE0N2VjYTJmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCkBAIC0zOTgsNyAr
Mzk4LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlOjpyZWVucXVldWVNZWRpYUZvclRpbWUo
VHJhY2tCdWZmZXImIHRyYWNrQnVmZmVyLCBjb25zdAogICAgICAgICB8fCAoY3VycmVudFNhbXBs
ZVBUU0l0ZXJhdG9yLT5maXJzdCAtIHRpbWUpID4gdGltZUZ1ZGdlRmFjdG9yKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIC8vIFNlYWNoIGJhY2t3YXJkIGZvciB0aGUgcHJldmlvdXMgc3luYyBz
YW1wbGUuCisgICAgLy8gU2VhcmNoIGJhY2t3YXJkIGZvciB0aGUgcHJldmlvdXMgc3luYyBzYW1w
bGUuCiAgICAgRGVjb2RlT3JkZXJTYW1wbGVNYXA6OktleVR5cGUgZGVjb2RlS2V5KGN1cnJlbnRT
YW1wbGVQVFNJdGVyYXRvci0+c2Vjb25kLT5kZWNvZGVUaW1lKCksIGN1cnJlbnRTYW1wbGVQVFNJ
dGVyYXRvci0+c2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCkpOwogICAgIGF1dG8gY3VycmVudFNh
bXBsZURUU0l0ZXJhdG9yID0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmZpbmRT
YW1wbGVXaXRoRGVjb2RlS2V5KGRlY29kZUtleSk7CiAgICAgQVNTRVJUKGN1cnJlbnRTYW1wbGVE
VFNJdGVyYXRvciAhPSB0cmFja0J1ZmZlci5zYW1wbGVzLmRlY29kZU9yZGVyKCkuZW5kKCkpOwpA
QCAtMTE3MSw2ICsxMTcxLDkgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlOjpkaWRSZWNlaXZl
U2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4mJiBvcmlnaW5hbFNhbXBsZSkKICAgICAgICAgICAgICAg
ICBNZWRpYVRpbWUgZXJhc2VCZWdpblRpbWUgPSB0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0
aW9uVGltZXN0YW1wOwogICAgICAgICAgICAgICAgIE1lZGlhVGltZSBlcmFzZUVuZFRpbWUgPSBm
cmFtZUVuZFRpbWVzdGFtcCAtIGNvbnRpZ3VvdXNGcmFtZVRvbGVyYW5jZTsKIAorICAgICAgICAg
ICAgICAgIGlmIChlcmFzZUVuZFRpbWUgPD0gZXJhc2VCZWdpblRpbWUpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgICAgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVN
YXA6Oml0ZXJhdG9yX3JhbmdlIHJhbmdlOwogICAgICAgICAgICAgICAgIGlmIChoaWdoZXN0QnVm
ZmVyZWRUaW1lIC0gdHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCA8IHRy
YWNrQnVmZmVyLmxhc3RGcmFtZUR1cmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBuZXcgZnJhbWUgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyZWQgcmFuZ2VzLCBwZXJm
b3JtIGEgc2VxdWVudGlhbCBzY2FuIGZyb20gZW5kIChPKDEpKS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5jcHAKaW5kZXggYWUxNjQxNGYyMWM2ODQ2YzE4OTc3MDllMTQyNGU0YTZhNGI3
NjFhMC4uYTE1ZjcxYTRjODZkZGJlZjI3MjcyNzA3MzlmZTYyZWQ0OTkyN2MzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJN
ZWRpYVNhbXBsZUFWRk9iakMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlZQOVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFj
a1ByaXZhdGVXZWJNLmgiCiAjaW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKQEAg
LTM2NSwyMSArMzY0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtXb3VsZEJsb2NrKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBGcmVlU2hhcmVkQnVmZmVy
KHZvaWQqIHJlZmNvbiwgdm9pZCosIHNpemVfdCkKKyAgICBTdGF0dXMgUmVhZEludG8oc3RkOjpz
aXplX3QgbnVtVG9SZWFkLCBTaGFyZWRCdWZmZXJCdWlsZGVyJiBvdXRwdXRCdWZmZXIsIHVpbnQ2
NF90KiBudW1BY3R1YWxseVJlYWQpCiAgICAgewotICAgICAgICBhdXRvKiBidWZmZXIgPSByZWlu
dGVycHJldF9jYXN0PFNoYXJlZEJ1ZmZlcio+KHJlZmNvbik7Ci0gICAgICAgIGJ1ZmZlci0+ZGVy
ZWYoKTsKLSAgICB9Ci0KLSAgICBTdGF0dXMgUmVhZEludG8oc3RkOjpzaXplX3QgbnVtVG9SZWFk
LCBDTUJsb2NrQnVmZmVyUmVmIG91dHB1dEJ1ZmZlciwgdWludDY0X3QqIG51bUFjdHVhbGx5UmVh
ZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChvdXRwdXRCdWZmZXIgJiYgbnVtQWN0dWFsbHlSZWFk
KTsKKyAgICAgICAgQVNTRVJUKG51bUFjdHVhbGx5UmVhZCk7CiAgICAgICAgIGlmICghbnVtQWN0
dWFsbHlSZWFkKQogICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hN
ZW1vcnkpOwogCiAgICAgICAgICpudW1BY3R1YWxseVJlYWQgPSAwOwotICAgICAgICBpZiAoIW91
dHB1dEJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdo
TWVtb3J5KTsKIAogICAgICAgICB3aGlsZSAobnVtVG9SZWFkICYmIG1fY3VycmVudFNlZ21lbnQg
IT0gbV9kYXRhLmVuZCgpKSB7CiAgICAgICAgICAgICBhdXRvJiBjdXJyZW50U2VnbWVudCA9ICpt
X2N1cnJlbnRTZWdtZW50OwpAQCAtMzg5LDQ0ICszODAsMjIgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyID0gY3VycmVudFNlZ21lbnQuZ2V0U2hhcmVkQnVmZmVyKCk7
Ci0gICAgICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsK
LSAgICAgICAgICAgIHVpbnQ2NF90IGxhc3RSZWFkID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IHJhd0Jsb2NrQnVmZmVyOwogICAgICAgICAgICAgaWYgKCFzaGFyZWRCdWZm
ZXIpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBhbGxvY2F0ZSBt
b3JlIG1lbW9yeSB0aGFuIG5lZWRlZCBpZiB0aGUgcmVhZCBpcyBwYXJ0aWFsLgotICAgICAgICAg
ICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2Nr
KGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG51bVRvUmVhZCwga0NGQWxsb2NhdG9yRGVm
YXVsdCwgbnVsbHB0ciwgMCwgbnVtVG9SZWFkLCBrQ01CbG9ja0J1ZmZlckFzc3VyZU1lbW9yeU5v
d0ZsYWcsICZyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01C
bG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1
czo6a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogYmxvY2tCdWZm
ZXJEYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBv
c2l0aW9uID0gMDsKLSAgICAgICAgICAgICAgICBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXRE
YXRhUG9pbnRlcihyYXdCbG9ja0J1ZmZlciwgMCwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVs
bHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJy
ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCisgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci50cnlSZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG51bVRvUmVhZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQg
PSBjdXJyZW50U2VnbWVudC5yZWFkKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQs
IGJsb2NrQnVmZmVyRGF0YSk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShudW1Ub1Jl
YWQpOworICAgICAgICAgICAgICAgIGF1dG8gcmVhZFJlc3VsdCA9IGN1cnJlbnRTZWdtZW50LnJl
YWQobV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIG51bVRvUmVhZCwgYnVmZmVyLmRhdGEoKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFyZWFkUmVzdWx0Lmhhc192YWx1ZSgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyhyZWFkUmVzdWx0LmVy
cm9yKCkpOwotICAgICAgICAgICAgICAgIGxhc3RSZWFkID0gcmVhZFJlc3VsdC52YWx1ZSgpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBjb3VsZCB3ZSBv
bmx5IGNyZWF0ZSBhIG5ldyBDTUJsb2NrQnVmZmVyIGlmIHRoZSBiYWNrZW5kIG1lbW9yeSBjaGFu
Z2VkIHNpbmNlIHRoZSBwcmV2aW91cyBvbmU/Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGNhblJl
YWQgPSBzdGQ6Om1pbjxzaXplX3Q+KG51bVRvUmVhZCwgc2hhcmVkQnVmZmVyLT5zaXplKCkgLSBt
X3Bvc2l0aW9uV2l0aGluU2VnbWVudCk7Ci0gICAgICAgICAgICAgICAgLy8gRnJvbSBDTUJsb2Nr
QnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgZG9jdW1lbnRhdGlvbjoKLSAgICAgICAgICAgICAgICAv
LyBOb3RlIHRoYXQgZm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCB0aGlzIHN0cnVjdCBjb250YWlu
cyBtaXNhbGlnbmVkIGZ1bmN0aW9uIHBvaW50ZXJzLgotICAgICAgICAgICAgICAgIC8vIFRvIGF2
b2lkIGxpbmstdGltZSBpc3N1ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxs
IENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRz
Ci0gICAgICAgICAgICAgICAgLy8gYnkgdXNpbmcgYXNzaWdubWVudCBzdGF0ZW1lbnRzLCByYXRo
ZXIgdGhhbiBkZWNsYXJpbmcgdGhlbSBhcyBnbG9iYWwgb3Igc3RhdGljIHN0cnVjdHMuCi0gICAg
ICAgICAgICAgICAgQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGFsbG9jYXRvcjsKLSAg
ICAgICAgICAgICAgICBhbGxvY2F0b3IudmVyc2lvbiA9IDA7Ci0gICAgICAgICAgICAgICAgYWxs
b2NhdG9yLkFsbG9jYXRlQmxvY2sgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGFsbG9jYXRv
ci5GcmVlQmxvY2sgPSBGcmVlU2hhcmVkQnVmZmVyOwotICAgICAgICAgICAgICAgIGFsbG9jYXRv
ci5yZWZDb24gPSBzaGFyZWRCdWZmZXIuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgc2hhcmVkQnVm
ZmVyLT5yZWYoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZl
ckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhudWxscHRyLCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3Rf
Y2FzdDx1aW50OF90Kj4oc2hhcmVkQnVmZmVyLT5kYXRhKCkpKSwgc2hhcmVkQnVmZmVyLT5zaXpl
KCksIG51bGxwdHIsICZhbGxvY2F0b3IsIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBjYW5SZWFk
LCAwLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxv
Y2tCdWZmZXJOb0VycikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtOb3RFbm91Z2hNZW1vcnkpOwotICAgICAgICAgICAgICAgIGxhc3RSZWFkID0gY2FuUmVhZDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gYmxvY2tCdWZmZXIgPSBhZG9wdENGKHJh
d0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVy
QXBwZW5kQnVmZmVyUmVmZXJlbmNlKG91dHB1dEJ1ZmZlciwgcmF3QmxvY2tCdWZmZXIsIDAsIDAs
IDApOwotICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQotICAgICAg
ICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKKyAgICAg
ICAgICAgICAgICBidWZmZXIucmVzaXplKHJlYWRSZXN1bHQudmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgcmF3QmxvY2tCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZl
cikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmF3QmxvY2tCdWZmZXIg
PSBzaGFyZWRCdWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50
LCBudW1Ub1JlYWQpOworICAgICAgICAgICAgYXV0byBsYXN0UmVhZCA9IHJhd0Jsb2NrQnVmZmVy
LT5zaXplKCk7CisgICAgICAgICAgICBvdXRwdXRCdWZmZXIuYXBwZW5kKCpyYXdCbG9ja0J1ZmZl
cik7CiAgICAgICAgICAgICBtX3Bvc2l0aW9uICs9IGxhc3RSZWFkOwogICAgICAgICAgICAgKm51
bUFjdHVhbGx5UmVhZCArPSBsYXN0UmVhZDsKICAgICAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5T
ZWdtZW50ICs9IGxhc3RSZWFkOwpAQCAtMTIwMSwxNiArMTE3MCwxMSBAQCB2b2lkIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVy
UmVmPiBzYW1wbAogCiAjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoLi4uKSBp
ZiAocGFyc2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dlclB0cigpLT5lcnJvcihsb2dD
aGFubmVsKCksIExvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIobG9nQ2xhc3NOYW1lKCksIF9fZnVu
Y19fLCBwYXJzZXIoKS5sb2dJZGVudGlmaWVyKCkpLCBfX1ZBX0FSR1NfXykKIAotUmV0YWluUHRy
PENNQmxvY2tCdWZmZXJSZWY+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29u
dGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkg
Y29uc3QKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNr
RGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90
IGxlbmd0aCkgY29uc3QKIHsKLSAgICBpZiAoIW9mZnNldCAmJiAhbGVuZ3RoICYmIFBBTDo6Q01C
bG9ja0J1ZmZlcklzUmFuZ2VDb250aWd1b3VzKG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwg
MCwgMCkpCi0gICAgICAgIHJldHVybiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7Ci0gICAgQ01CbG9j
a0J1ZmZlclJlZiByYXdDb250aWd1b3VzQnVmZmVyID0gbnVsbHB0cjsKLSAgICBpZiAoUEFMOjpD
TUJsb2NrQnVmZmVyQ3JlYXRlQ29udGlndW91cyhudWxscHRyLCBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXIuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG9mZnNldCwgbGVuZ3RoLCAwLCAmcmF3Q29udGln
dW91c0J1ZmZlcikgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikgewotICAgICAgICBSRUxFQVNFX0xP
R19GQVVMVChXZWJBdWRpbywgImZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBibG9jayBidWZm
ZXIiKTsKKyAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5z
aXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRD
RihyYXdDb250aWd1b3VzQnVmZmVyKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVy
cy5nZXQoKS0+Z2V0Q29udGlndW91c0RhdGEob2Zmc2V0LCBsZW5ndGgpOwogfQogCiB3ZWJtOjpT
dGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdl
Ym06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwg
dWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQpAQCAtMTIyNCwyMCArMTE4OCw5IEBAIHdlYm06OlN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKCFtX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAg
bV9jb21wbGV0ZVBhY2tldFNpemUgPSBtZXRhZGF0YS5zaXplOwogCi0gICAgaWYgKCFtX2N1cnJl
bnRCbG9ja0J1ZmZlcikgewotICAgICAgICBBU1NFUlQoIW1fcGFydGlhbEJ5dGVzUmVhZCk7Ci0g
ICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAg
ICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUVtcHR5KGtDRkFsbG9jYXRvckRl
ZmF1bHQsIG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5LCAwLCAmcmF3QmxvY2tCdWZmZXIpOwotICAg
ICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIgfHwgIXJhd0Jsb2NrQnVmZmVyKSB7
Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVy
Q3JlYXRlRW1wdHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJu
IFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0gICAgICAgIG1fY3Vy
cmVudEJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgfQotCiAgICAg
d2hpbGUgKCpieXRlc1JlbWFpbmluZykgewogICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7Ci0g
ICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJl
bnRCbG9ja0J1ZmZlci5nZXQoKSwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGF1dG8gc3RhdHVzID0g
c3RhdGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRl
cikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlciwgJmJ5dGVz
UmVhZCk7CiAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CiAgICAgICAgIG1f
cGFydGlhbEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CiAKQEAgLTEyNDksNjggKzEyMDIsNjggQEAg
d2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZyYW1l
RGF0YSh3ZWJtOjpSZWFkZXImIHJlYWQKICAgICBpZiAobV9wYXJ0aWFsQnl0ZXNSZWFkIDwgKm1f
Y29tcGxldGVQYWNrZXRTaXplKQogICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0
YXR1czo6a09rUGFydGlhbCk7CiAKLSAgICBpZiAoIW1fY29tcGxldGVCbG9ja0J1ZmZlcikKLSAg
ICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gV1RGTW92ZShtX2N1cnJlbnRCbG9ja0J1ZmZl
cik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBw
ZW5kQnVmZmVyUmVmZXJlbmNlKG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgbV9jdXJyZW50
QmxvY2tCdWZmZXIuZ2V0KCksIDAsIDAsIDApOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQXBwZW5kQnVm
ZmVyUmVmZXJlbmNlIHRvIGNvbXBsZXRlIGJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
LSAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAg
ICAgICAgfQotICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQor
ICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlcnMuYXBwZW5kKG1fY3VycmVudEJsb2NrQnVmZmVyLnRh
a2UoKSk7CiAgICAgbV9wYXJ0aWFsQnl0ZXNSZWFkID0gMDsKIAogICAgIHJldHVybiB3ZWJtOjpT
dGF0dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRf
dCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNh
bXBsZUNvdW50KQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0
ZVNhbXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0
KQogewotI2lmIEVOQUJMRShWUDkpCi0gICAgYXV0byBzdGF0dXMgPSByZWFkRnJhbWVEYXRhKHJl
YWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICBpZiAoIXN0YXR1cy5jb21wbGV0
ZWRfb2soKSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICBpZiAobV9wYWNrZXRTaXplcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihwcmVz
ZW50YXRpb25UaW1lLCBzYW1wbGVDb3VudCwgbWV0YWRhdGEpOwotICAgIHJlc2V0KCk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZXNlbnRh
dGlvblRpbWUpOwotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVDb3VudCk7Ci0jZW5kaWYKKyAgICBh
dXRvIGNvbXBsZXRlQ01CbG9ja0J1ZmZlcnMgPSBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLnRha2Uo
KS0+Y3JlYXRlQ01CbG9ja0J1ZmZlcigpOworICAgIGlmICghY29tcGxldGVDTUJsb2NrQnVmZmVy
cykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1h
aW5pbmcpOworICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7
CisgICAgYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgY29tcGxldGVDTUJsb2NrQnVmZmVycy5nZXQoKSwgZm9ybWF0RGVzY3JpcHRp
b24oKS5nZXQoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5zaXplKCks
IG1fcGFja2V0VGltaW5ncy5kYXRhKCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFNp
emVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZh
aWxlZCB3aXRoICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBvc3RQ
cm9jZXNzKHJhd1NhbXBsZUJ1ZmZlcik7CisKKyAgICBhdXRvIHRyYWNrSUQgPSB0cmFjaygpLnRy
YWNrX3VpZC52YWx1ZSgpOworICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEoYWRvcHRDRihy
YXdTYW1wbGVCdWZmZXIpLCB0cmFja0lELCBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOwogfQogCi12
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVC
dWZmZXIoY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQsIGNv
bnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhKQordm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCit7Cisg
ICAgbV9rZXlGcmFtZXMuY2xlYXIoKTsKKyAgICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJh
bWVzU3RhdGUoKTsKK30KKword2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZp
ZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25z
dCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25z
dCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCkKIHsKICNpZiBFTkFCTEUoVlA5KQotICAg
IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CisgICAgYXV0byBzdGF0dXMgPSBy
ZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICBpZiAo
IXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKwogICAgIGNv
bnN0ZXhwciBzaXplX3QgbWF4SGVhZGVyU2l6ZSA9IDMyOyAvLyBUaGUgbWF4aW11bSBsZW5ndGgg
b2YgYSBWUDkgdW5jb21wcmVzc2VkIGhlYWRlciBpcyAxNDQgYml0cyBhbmQgMTEgYnl0ZXMgZm9y
IFZQOC4gUm91bmQgaGlnaC4KICAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0aCA9IHN0ZDo6
bWluKG1heEhlYWRlclNpemUsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7Ci0gICAgYXV0byBjb250
aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwgc2VnbWVudEhl
YWRlckxlbmd0aCk7CisgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBs
ZXRlQmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgc2VnbWVudEhlYWRlckxl
bmd0aCk7CiAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgIFBBUlNFUl9MT0df
RVJST1JfSUZfUE9TU0lCTEUoIlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIgZmFp
bGVkIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKGNv
bnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFyKiopJmJsb2Nr
QnVmZmVyRGF0YSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lG
X1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3Ii
LCBlcnIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5
dGVzUmVtYWluaW5nKTsKICAgICB9CisgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJEYXRh
ID0gY29udGlndW91c0J1ZmZlci0+ZGF0YSgpOwogCiAgICAgYm9vbCBpc0tleSA9IGZhbHNlOwog
ICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsK
ICAgICBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6OlZQOSkgewogICAgICAgICBpZiAoIW1faGVh
ZGVyUGFyc2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVmZmVyRGF0YSwgc2VnbWVu
dEhlYWRlckxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
U2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAKICAgICAgICAgaWYgKG1faGVhZGVyUGFy
c2VyLmtleSgpKSB7CiAgICAgICAgICAgICBpc0tleSA9IHRydWU7CiAgICAgICAgICAgICBhdXRv
IGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVy
UGFyc2VyKG1faGVhZGVyUGFyc2VyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3VyKTsKICAg
ICAgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlw
dGlvbiBmcm9tIFZQWCBoZWFkZXIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXREZXNj
cmlwdGlvbikpOwogICAgICAgICB9CkBAIC0xMzIxLDcgKzEyNzQsNyBAQCB2b2lkIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3Qg
Q01UaW1lJiBwcgogICAgICAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZv
cm1hdERlc2NyaXB0aW9uRnJvbVZQOEhlYWRlcigqaGVhZGVyLCB0cmFjaygpLnZpZGVvLnZhbHVl
KCkuY29sb3VyKTsKICAgICAgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKICAgICAg
ICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRl
IGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIFZQWCBoZWFkZXIiKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5p
bmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RG
TW92ZShmb3JtYXREZXNjcmlwdGlvbikpOwogICAgICAgICB9CkBAIC0xMzM2LDQ1ICsxMjg5LDQ1
IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNh
bXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmIHByCiAgICAgaWYgKHRyYWNrLmRlZmF1bHRfZHVyYXRp
b24uaXNfcHJlc2VudCgpKQogICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRp
b24udmFsdWUoKSAqIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlIC8ga191c19pbl9zZWNvbmRz
OwogCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAg
ICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0geyBQQUw6OkNNVGltZU1ha2UoZHVyYXRpb24s
IHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0
aW9uVGltZSB9OwotICAgIGVyciA9IFBBTDo6Q01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIHRoaXMtPmZvcm1h
dERlc2NyaXB0aW9uKCkuZ2V0KCksIHNhbXBsZUNvdW50LCAxLCAmdGltaW5nLCAxLCAmKm1fY29t
cGxldGVQYWNrZXRTaXplLCAmcmF3U2FtcGxlQnVmZmVyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAg
ICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVh
ZHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOworICAgIG1fa2V5
RnJhbWVzLmFwcGVuZChpc0tleSk7CisgICAgbV9wYWNrZXRTaXplcy5hcHBlbmQoKm1fY29tcGxl
dGVQYWNrZXRTaXplKTsKKyAgICBtX3BhY2tldFRpbWluZ3MuYXBwZW5kKHsgUEFMOjpDTVRpbWVN
YWtlKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRp
bWUsIHByZXNlbnRhdGlvblRpbWUgfSk7CisgICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCAr
PSAqbV9jb21wbGV0ZVBhY2tldFNpemU7CisgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6
Om51bGxvcHQ7CiAKLSAgICBhdXRvIGF0dGFjaG1lbnRzQXJyYXkgPSBQQUw6OkNNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIuZ2V0KCksIHRydWUpOwor
ICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKKworICAgIEFTU0VSVCghKmJ5dGVzUmVtYWluaW5n
KTsKKyAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOworICAgIFVOVVNFRF9Q
QVJBTShzYW1wbGVDb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsKKyAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisjZW5kaWYKK30KKwordm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cG9zdFByb2Nlc3MoQ01TYW1wbGVC
dWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyKQoreworICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9
IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHJhd1NhbXBsZUJ1
ZmZlciwgdHJ1ZSk7CiAgICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJyYXkpOwogICAgIGlmICghYXR0
YWNobWVudHNBcnJheSkgewogICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJD
TVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkgcmV0dXJuZWQgTlVMTCIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpc0tleSkgewotICAgICAgICBmb3Ig
KENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkp
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBh
dHRhY2htZW50cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpKTsKKyAgICBBU1NFUlQoc2l6
ZV90KENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KSkgPT0gbV9rZXlGcmFtZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0
dGFjaG1lbnRzQXJyYXkpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBDRk11dGFibGVEaWN0
aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25h
cnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOworICAg
ICAgICBpZiAoIW1fa2V5RnJhbWVzW2ldKQogICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUoYXR0YWNobWVudHMsIFBBTDo6a0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZC
b29sZWFuVHJ1ZSk7Ci0gICAgICAgIH0KICAgICB9Ci0KLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFj
ay50cmFja191aWQudmFsdWUoKTsKLSAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKFdURk1v
dmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRCwgbWV0YWRhdGEucG9zaXRpb24pOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9uVGltZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNhbXBs
ZUNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotI2VuZGlmIC8vIEVOQUJMRShW
UDkpCiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OnJl
c2V0Q29tcGxldGVkKCkKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0Rh
dGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQogewogICAgIG1OdW1GcmFtZXNJbkNvbXBs
ZXRlQmxvY2sgPSAwOwotICAgIG1fcGFja2V0U2l6ZXMuY2xlYXIoKTsKLSAgICBtX3BhY2tldFRp
bWluZ3MuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ID0gMDsKLSAgICBU
cmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKCk7CisgICAgVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZEZyYW1lc1N0YXRlKCk7CiB9CiAKIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwg
Y29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywg
Y29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCkBAIC0xMzgz
LDggKzEzMzYsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9U
cmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgICAgICBhdXRvJiBsYXN0
VGltaW5nID0gbV9wYWNrZXRUaW1pbmdzLmxhc3QoKTsKICAgICAgICAgaWYgKFBBTDo6Q01UaW1l
Q29tcGFyZShQQUw6OkNNVGltZUFkZChsYXN0VGltaW5nLmR1cmF0aW9uLCBsYXN0VGltaW5nLnBy
ZXNlbnRhdGlvblRpbWVTdGFtcCksIHByZXNlbnRhdGlvblRpbWUpKSB7CiAgICAgICAgICAgICAv
LyBEaXNjb250aW51aXR5IGVuY291bnRlcmVkLCBlbWl0IHRoZSBwcmV2aW91c2x5IGRlbXV4ZWQg
c2FtcGxlcy4KLSAgICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3NpdGlv
bik7Ci0gICAgICAgICAgICByZXNldCgpOworICAgICAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxl
cygpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzkyLDExICsxMzQ0LDYgQEAgd2VibTo6U3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVE
YXRhKHdlYm06OlJlYWQKICAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAg
cmV0dXJuIHN0YXR1czsKIAotICAgIC8vIEF0dGVtcHRzIHRvIG1pbmltaXNlIHRoZSBhbW91bnQg
b2YgbWVtb3J5IGFsbG9jYXRpb25zIGR1ZSB0byByZXBldGl0dmUgQ01CbG9ja0J1ZmZlckFwcGVu
ZEJ1ZmZlclJlZmVyZW5jZSBjYWxscyBpbiByZWFkRnJhbWVEYXRhLgotICAgIG1OdW1GcmFtZXNJ
bkNvbXBsZXRlQmxvY2srKzsKLSAgICBpZiAobU51bUZyYW1lc0luQ29tcGxldGVCbG9jayA+IG1N
YXhCbG9ja0J1ZmZlckNhcGFjaXR5KQotICAgICAgICBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSA9
IG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2s7Ci0KICAgICBpZiAobV9wYWNrZXRTaXplcy5pc0Vt
cHR5KCkpCiAgICAgICAgIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRhdGlvblRp
bWU7CiAKQEAgLTE0MTYsMTIgKzEzNjMsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAg
ICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9j
ayIpOwogICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5n
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9
IG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERh
dGFQb2ludGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChj
aGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAg
ICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERh
dGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVyLT5k
YXRhKCk7CiAgICAgICAgICAgICBPcHVzQ29va2llQ29udGVudHMgY29va2llQ29udGVudHM7CiAg
ICAgICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwg
cHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21wbGV0ZVBhY2tldFNpemUsIGJsb2NrQnVmZmVyRGF0
YSwgY29va2llQ29udGVudHMpKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9J
Rl9QT1NTSUJMRSgiRmFpbGVkIHRvIHBhcnNlIE9wdXMgcHJpdmF0ZSBkYXRhIik7CkBAIC0xNDYw
LDEyICsxNDAyLDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlv
VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgICAgIFBBUlNF
Ul9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRh
OiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOwogICAgICAgICAgICAg
cmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICB9Ci0gICAgICAg
IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gZXJyID0g
UEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIoY29udGlndW91c0J1ZmZlci5nZXQoKSwg
MCwgbnVsbHB0ciwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKLSAgICAgICAg
aWYgKGVycikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01C
bG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAg
ICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgfQor
ICAgICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVy
LT5kYXRhKCk7CiAgICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEu
c2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxvY2tC
dWZmZXJEYXRhLCBjb29raWVDb250ZW50cykKICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRz
LmZyYW1lc1BlclBhY2tldCAhPSBtX2ZyYW1lc1BlclBhY2tldAogICAgICAgICAgICAgfHwgY29v
a2llQ29udGVudHMuZnJhbWVEdXJhdGlvbiAhPSBtX2ZyYW1lRHVyYXRpb24pIHsKQEAgLTE0ODEs
NDAgKzE0MTgsMTggQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlv
VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKIAogICAgIGF1dG8gc2FtcGxl
RHVyYXRpb24gPSBQQUw6OkNNVGltZUdldFNlY29uZHMoUEFMOjpDTVRpbWVTdWJ0cmFjdChwcmVz
ZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSArIFBBTDo6Q01UaW1lR2V0
U2Vjb25kcyhtX3BhY2tldER1cmF0aW9uKSAqIHNhbXBsZUNvdW50OwogCi0gICAgaWYgKHNhbXBs
ZUR1cmF0aW9uID49IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uKSB7Ci0gICAgICAgIGNyZWF0ZVNh
bXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3NpdGlvbik7Ci0gICAgICAgIHJlc2V0KCk7Ci0gICAgfQor
ICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlvbikKKyAgICAg
ICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCiAgICAgQVNTRVJUKCEqYnl0ZXNSZW1haW5pbmcp
OwogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOwog
fQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjcmVhdGVT
YW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCkK
LXsKLSAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgYXV0
byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdldCgp
LCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRUaW1pbmdzLnNpemUoKSwgbV9wYWNrZXRU
aW1pbmdzLmRhdGEoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0U2l6ZXMuZGF0YSgp
LCAmcmF3U2FtcGxlQnVmZmVyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0df
RVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0RGVz
Y3JpcHRpb25zIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKLQotICAg
IGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2VyKCku
cHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIGxhdGVzdEJ5
dGVSYW5nZU9mZnNldCk7Ci19Ci0KIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQ
ZW5kaW5nQXVkaW9CdWZmZXJzKCkKIHsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3Mp
IHsKLSAgICAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvKSB7Ci0gICAgICAgICAgICBBdWRpb1RyYWNrRGF0
YSYgYXVkaW9UcmFjayA9IGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFjay5nZXQoKSk7Ci0g
ICAgICAgICAgICBhdWRpb1RyYWNrLmNyZWF0ZVNhbXBsZUJ1ZmZlcigpOwotICAgICAgICAgICAg
YXVkaW9UcmFjay5yZXNldENvbXBsZXRlZCgpOwotICAgICAgICB9CisgICAgICAgIGlmICh0cmFj
ay0+dHJhY2tUeXBlKCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBl
OjpBdWRpbykKKyAgICAgICAgICAgIHRyYWNrLT5kcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5kZXggZTg3NmFiNDE0YTRhYmIz
M2Q1MThjMzdiNDFmZTVhMTQ3NzZhYjQ5Ni4uYWZkYmY0OWIyZjQ2OTIxNmUxYjlkZjdlZDE4MjFi
M2FhMjI3N2Y5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAtMjcsNiArMjcs
NyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgogI2luY2x1ZGUgPENvcmVBdWRp
by9Db3JlQXVkaW9UeXBlcy5oPgogI2luY2x1ZGUgPENvcmVNZWRpYS9DTVRpbWUuaD4KQEAgLTM5
LDcgKzQwLDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHR5cGVkZWYgY29uc3Qgc3Ry
dWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7Ci10
eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUJsb2NrQnVmZmVyICpDTUJsb2NrQnVmZmVyUmVmOwogCiBu
YW1lc3BhY2Ugd2VibSB7CiBjbGFzcyBXZWJtUGFyc2VyOwpAQCAtMTU1LDMyICsxNTUsNDQgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtJ
bnZhbGlkRWxlbWVudElkKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNl
dENvbXBsZXRlZCgpCisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0
YXRlKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlcnMucmVzZXQoKTsKKyAgICAg
ICAgICAgIG1fcGFja2V0U2l6ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGFja2V0VGltaW5n
cy5jbGVhcigpOworICAgICAgICAgICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCA9IDA7CiAg
ICAgICAgIH0KICAgICAgICAgdm9pZCByZXNldCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
c2V0Q29tcGxldGVkKCk7CisgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7
CiAgICAgICAgICAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6bnVsbG9wdDsKICAgICAg
ICAgICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9j
a0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlci5yZXNl
dCgpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYWluUGVuZGluZ1NhbXBs
ZXMoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCA9IHN0ZDo6bnVs
bG9wdCkKKyAgICAgICAgeworICAgICAgICAgICAgY3JlYXRlU2FtcGxlQnVmZmVyKGxhdGVzdEJ5
dGVSYW5nZU9mZnNldCk7CisgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7
CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tC
dWZmZXJSZWY+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNp
emVfdCBsZW5ndGgpIGNvbnN0OworICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6
Om9wdGlvbmFsPHNpemVfdD4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2Nlc3MoQ01T
YW1wbGVCdWZmZXJSZWYpIHsgfTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY29udGln
dW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29u
c3Q7CiAgICAgICAgIHdlYm06OlN0YXR1cyByZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNv
bnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpOwotICAg
ICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOwor
ICAgICAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIG1fY29tcGxldGVCbG9ja0J1ZmZlcnM7CiAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAgICAgICAg
Ly8gSW5pdGlhbCBhbGxvY2F0aW9uIHNpemUgb2YgZW1wdHkgQ01CbG9ja0J1ZmZlci4KLSAgICAg
ICAgc2l6ZV90IG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5IHsgMCB9OworICAgICAgICBzaXplX3Qg
bV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCB7IDAgfTsKKyAgICAgICAgVmVjdG9yPHNpemVfdD4g
bV9wYWNrZXRTaXplczsKKyAgICAgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gbV9wYWNr
ZXRUaW1pbmdzOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29kZWNUeXBlIG1fY29kZWM7CiAg
ICAgICAgIHdlYm06OlRyYWNrRW50cnkgbV90cmFjazsKICAgICAgICAgVHlwZSBtX3RyYWNrVHlw
ZTsKICAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVz
Y3JpcHRpb247Ci0gICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBtX2N1cnJlbnRC
bG9ja0J1ZmZlcjsKKyAgICAgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBtX2N1cnJlbnRCbG9ja0J1
ZmZlcjsKICAgICAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgbV9wYXJzZXI7CiAgICAgICAg
IC8vIFNpemUgb2YgdGhlIGN1cnJlbnRseSBpbmNvbXBsZXRlIHBhcnNlZCBwYWNrZXQuCiAgICAg
ICAgIHNpemVfdCBtX3BhcnRpYWxCeXRlc1JlYWQgeyAwIH07CkBAIC0xOTgsMTQgKzIxMCwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHdlYm06OlN0YXR1cyBj
b25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEm
LCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7Ci0KICAgICBwcml2YXRlOgot
ICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmLCBpbnQsIGNvbnN0
IHdlYm06OkZyYW1lTWV0YWRhdGEmKTsKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlZpZGVvVHJhY2tEYXRhIjsgfQotCisgICAgICAgIHdlYm06OlN0
YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0
YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7CisgICAgICAgIHZv
aWQgcG9zdFByb2Nlc3MoQ01TYW1wbGVCdWZmZXJSZWYpIGZpbmFsOworICAgICAgICB2b2lkIHJl
c2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICNpZiBFTkFCTEUoVlA5KQogICAgICAg
ICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIgbV9oZWFkZXJQYXJzZXI7CisgICAgICAgIFZl
Y3Rvcjxib29sPiBtX2tleUZyYW1lczsKICNlbmRpZgogICAgIH07CiAKQEAgLTIyMiwyMCArMjM0
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgd2VibTo6U3Rh
dHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRh
ZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKLSAgICAgICAgdm9p
ZCByZXNldENvbXBsZXRlZCgpIGZpbmFsOwotICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZl
cihzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0ID0gc3RkOjpudWxs
b3B0KTsKLQogICAgIHByaXZhdGU6CisgICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVE
YXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCos
IGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7CisgICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWRG
cmFtZXNTdGF0ZSgpIGZpbmFsOwogICAgICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBj
b25zdCB7IHJldHVybiAiQXVkaW9UcmFja0RhdGEiOyB9CiAKICAgICAgICAgQ01UaW1lIG1fc2Ft
cGxlUHJlc2VudGF0aW9uVGltZTsKICAgICAgICAgQ01UaW1lIG1fcGFja2V0RHVyYXRpb247Ci0g
ICAgICAgIHNpemVfdCBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0IHsgMCB9OwogICAgICAgICB1
aW50OF90IG1fZnJhbWVzUGVyUGFja2V0IHsgMCB9OwogICAgICAgICBTZWNvbmRzIG1fZnJhbWVE
dXJhdGlvbiB7IDBfcyB9OwotICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX3BhY2tldFNpemVzOwot
ICAgICAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBtX3BhY2tldFRpbWluZ3M7CiAgICAg
ICAgIHNpemVfdCBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrIHsgMCB9OwogICAgICAgICAvLyBG
SVhNRTogMC41IC0gMS4wIHNlY29uZHMgaXMgYSBiZXR0ZXIgZHVyYXRpb24gcGVyIHNhbXBsZSBi
dWZmZXIsIGJ1dCB1c2UgMiBzZWNvbmRzIHNvIGF0IGxlYXN0IHRoZSBmaXJzdAogICAgICAgICAv
LyBzYW1wbGUgYnVmZmVyIHdpbGwgcGxheSB1bnRpbCB3ZSBmaXggTWVkaWFTYW1wbGVDdXJzb3I6
OmNyZWF0ZVNhbXBsZUJ1ZmZlciB0byBkZWFsIHdpdGggYGVuZEN1cnNvcmAuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2Nv
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVz
Q29jb2EuaAppbmRleCA5NDEwYTdjNDc5NjM0NzA0ZWI1OWM5OTk2MDM0ODQ0YjY5YTg4NzZkLi45
NTQ0ZDljMjU3ZmUwYmQ1NTgyODAzYWUxYTgwODQ1MDE3M2M1MGI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLmgKQEAgLTY1LDcgKzY1LDcgQEAgc3RydWN0IFZQOEZyYW1lSGVhZGVyIHsKICAgICBib29s
IG5lZWRzQ2xhbXBpbmcgeyBmYWxzZSB9OwogfTsKIAotc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhl
YWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFt
ZVNpemUpOworc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRl
cihjb25zdCB1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpOwogUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhl
YWRlcihjb25zdCBWUDhGcmFtZUhlYWRlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29s
b3VyPiYpOwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBWUDlUZXN0aW5nT3ZlcnJpZGVzIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxp
dGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EubW0KaW5kZXggNWMwZGZhZmRiMmU2N2YwNDgwNTA1ZmVhYzY2YTRlZDU0
NGEyOWUzMy4uZGQxNzc5ZjI2Mzg5MjY5NTk0NGY0MjM3NmZjZGFlNWI2ZDMwYjI2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVz
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EubW0KQEAgLTYwOSw3ICs2MDksNyBAQCBSZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2Vy
KGNvbgogICAgIHJldHVybiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZChyZWNvcmQsIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCkpOwog
fQogCi1zdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKHVp
bnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKK3N0ZDo6b3B0aW9uYWw8VlA4RnJh
bWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJhbWVEYXRhLCBz
aXplX3QgZnJhbWVTaXplKQogewogICAgIC8vIFZQOCBmcmFtZSBoZWFkZXJzIGFyZSBkZWZpbmVk
IGluIFJGQyA2Mzg2OiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYzODY+LgogCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTI0NTM2
ZmM3YmYyZDNmMjVjZGNkMGNhNDgxNzBmM2NhYmI0ZWEzNy4uMmVkZjQxM2IyMTc5ODlkODdkNjY0
YzI3NTczNDYxMTdiZmJiZmU4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAyLTIzICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gY29udmVydCBG
cmFnbWVudGVkU2hhcmVkQnVmZmVyIHRvIENNQmxvY2tCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgor
CiAyMDIyLTAyLTI0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbUHl0aG9uM10gQ2hhbmdlIHNoZWJhbmcgZm9yIHZhcmlvdXMgc2NyaXB0cwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcAppbmRl
eCAzMTU1YzA5ZjI0NzNlYmVhNjkwMGIzOWMwZDliZWNhYWNhYTVhMDE1Li5iMDExMjhiMjZiMWNj
MGEyMDVjNjU0MWE0ODU2YjdmMDJmNDhiYzc2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcApAQCAtMjM5LDYgKzIzOSw0MSBAQCBU
RVNUX0YoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlclRlc3QsIGdldFNvbWVEYXRhKQogICAgIGNoZWNr
QnVmZmVyKGwuZGF0YSgpLCBsLnNpemUoKSwgImwiKTsKIH0KIAorVEVTVF9GKEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXJUZXN0LCBnZXRDb250aWd1b3VzRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gczEgPSB7ICdhJywgJ2InLCAnYycsICdkJyB9OworICAgIFZlY3Rvcjx1aW50OF90PiBzMiA9
IHsgJ2UnLCAnZicsICdnJywgJ2gnIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHMzID0geyAnaScs
ICdqJywgJ2snLCAnbCcgfTsKKworICAgIFNoYXJlZEJ1ZmZlckJ1aWxkZXIgYnVpbGRlcjsKKyAg
ICBidWlsZGVyLmFwcGVuZChXVEZNb3ZlKHMxKSk7CisgICAgYnVpbGRlci5hcHBlbmQoV1RGTW92
ZShzMikpOworICAgIGJ1aWxkZXIuYXBwZW5kKFdURk1vdmUoczMpKTsKKyAgICBhdXRvIGJ1ZmZl
ciA9IGJ1aWxkZXIudGFrZSgpOworCisgICAgYXV0byBhYmNkID0gYnVmZmVyLT5nZXRDb250aWd1
b3VzRGF0YSgwLCA0KTsKKyAgICBhdXRvIGJjZGVmZ2hpID0gYnVmZmVyLT5nZXRDb250aWd1b3Vz
RGF0YSgxLCA4KTsKKyAgICBhdXRvIGdoID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSg2LCAy
KTsKKyAgICBhdXRvIGdoaWogPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDYsIDQpOworICAg
IGF1dG8gaCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoNywgMSk7CisgICAgYXV0byBpamsg
PSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDgsIDMpOworICAgIGF1dG8ga2wgPSBidWZmZXIt
PmdldENvbnRpZ3VvdXNEYXRhKDEwLCAyKTsKKyAgICBhdXRvIGwgPSBidWZmZXItPmdldENvbnRp
Z3VvdXNEYXRhKDExLCAxKTsKKyAgICBjaGVja0J1ZmZlcihhYmNkLT5kYXRhKCksIGFiY2QtPnNp
emUoKSwgImFiY2QiKTsKKyAgICBjaGVja0J1ZmZlcihiY2RlZmdoaS0+ZGF0YSgpLCBiY2RlZmdo
aS0+c2l6ZSgpLCAiYmNkZWZnaGkiKTsKKyAgICBjaGVja0J1ZmZlcihnaC0+ZGF0YSgpLCBnaC0+
c2l6ZSgpLCAiZ2giKTsKKyAgICBjaGVja0J1ZmZlcihnaGlqLT5kYXRhKCksIGdoaWotPnNpemUo
KSwgImdoaWoiKTsKKyAgICBjaGVja0J1ZmZlcihoLT5kYXRhKCksIGgtPnNpemUoKSwgImgiKTsK
KyAgICBjaGVja0J1ZmZlcihpamstPmRhdGEoKSwgaWprLT5zaXplKCksICJpamsiKTsKKyAgICBj
aGVja0J1ZmZlcihrbC0+ZGF0YSgpLCBrbC0+c2l6ZSgpLCAia2wiKTsKKyAgICBjaGVja0J1ZmZl
cihsLT5kYXRhKCksIGwtPnNpemUoKSwgImwiKTsKKyAgICBhdXRvIGZnaGlqa2wgPSBidWZmZXIt
PmdldENvbnRpZ3VvdXNEYXRhKDUsIDIwKTsKKyAgICBFWFBFQ1RfRVEoZmdoaWprbC0+c2l6ZSgp
LCBidWZmZXItPnNpemUoKSAtIDUpOworICAgIGNoZWNrQnVmZmVyKGZnaGlqa2wtPmRhdGEoKSwg
ZmdoaWprbC0+c2l6ZSgpLCAiZmdoaWprbCIpOworICAgIGF1dG8gb3V0Qm91bmQgPSBidWZmZXIt
PmdldENvbnRpZ3VvdXNEYXRhKDMwLCAyMCk7CisgICAgRVhQRUNUX0VRKG91dEJvdW5kLT5zaXpl
KCksIDB1KTsKK30KKwogVEVTVF9GKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXJUZXN0LCBpc0VxdWFs
VG8pCiB7CiAgICAgYXV0byBtYWtlQnVmZmVyID0gW10gKFZlY3RvcjxWZWN0b3I8dWludDhfdD4+
JiYgY29udGVudHMpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>