<?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>193007</bug_id>
          
          <creation_ts>2018-12-22 01:00:56 -0800</creation_ts>
          <short_desc>[WHLSL] Implement the NameResolver</short_desc>
          <delta_ts>2019-01-11 22:27:29 -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>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>192826</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1490621</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-22 01:00:56 -0800</bug_when>
    <thetext>Implement the NameResolver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490622</commentid>
    <comment_count>1</comment_count>
      <attachid>358021</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-22 01:01:29 -0800</bug_when>
    <thetext>Created attachment 358021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490623</commentid>
    <comment_count>2</comment_count>
      <attachid>358022</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-22 03:15:59 -0800</bug_when>
    <thetext>Created attachment 358022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491074</commentid>
    <comment_count>3</comment_count>
      <attachid>358157</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-31 17:41:23 -0800</bug_when>
    <thetext>Created attachment 358157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491086</commentid>
    <comment_count>4</comment_count>
      <attachid>358164</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-31 22:07:32 -0800</bug_when>
    <thetext>Created attachment 358164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491090</commentid>
    <comment_count>5</comment_count>
      <attachid>358167</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-31 23:03:50 -0800</bug_when>
    <thetext>Created attachment 358167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491093</commentid>
    <comment_count>6</comment_count>
      <attachid>358169</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-01 00:41:14 -0800</bug_when>
    <thetext>Created attachment 358169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493637</commentid>
    <comment_count>7</comment_count>
      <attachid>358883</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 00:24:05 -0800</bug_when>
    <thetext>Created attachment 358883
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493703</commentid>
    <comment_count>8</comment_count>
      <attachid>358908</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 10:41:09 -0800</bug_when>
    <thetext>Created attachment 358908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493735</commentid>
    <comment_count>9</comment_count>
      <attachid>358922</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 11:50:27 -0800</bug_when>
    <thetext>Created attachment 358922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493744</commentid>
    <comment_count>10</comment_count>
      <attachid>358922</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 12:18:38 -0800</bug_when>
    <thetext>Comment on attachment 358922
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLProgram.h:47
&gt;      bool append(AST::TypeDefinition&amp;&amp; typeDefinition)

#include &quot;WHLSLNameContext.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493749</commentid>
    <comment_count>11</comment_count>
      <attachid>358928</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 12:33:23 -0800</bug_when>
    <thetext>Created attachment 358928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493940</commentid>
    <comment_count>12</comment_count>
      <attachid>358977</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 19:53:52 -0800</bug_when>
    <thetext>Created attachment 358977
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493954</commentid>
    <comment_count>13</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 22:26:27 -0800</bug_when>
    <thetext>Committed r239896: &lt;https://trac.webkit.org/changeset/239896&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493955</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-11 22:27:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/47229039&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358021</attachid>
            <date>2018-12-22 01:01:29 -0800</date>
            <delta_ts>2018-12-22 03:15:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>39539</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGNmNWVhMDMyMmQzZTExY2M2YjIzYjY3Mzk2M2U1N2M1MDFmNDQ1MzkKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBGcmkgRGVjIDIx
IDIxOjMwOjUzIDIwMTggLTA4MDAKCiAgICBJbXBsZW1lbnQgbmFtZSByZXNvbHZlcgoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5
UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmM0ODJhZjhkY2M1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtNDksNyArNDksNyBAQCBw
dWJsaWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYp
ID0gZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikg
PSBkZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBl
PiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaAppbmRleCA0MGI1
ZjhkZjZmZS4uZjcwZDY2NjI2MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC01MiwxMSArNTIsMTAg
QEAgcHVibGljOgogICAgIEFycmF5VHlwZShjb25zdCBBcnJheVR5cGUmKSA9IGRlbGV0ZTsKICAg
ICBBcnJheVR5cGUoQXJyYXlUeXBlJiYpID0gZGVmYXVsdDsKIAotICAgIHVuc2lnbmVkIG51bUVs
ZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50czsgfQotCi0gICAgYm9vbCBpc0Fy
cmF5VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0Fy
cmF5VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFR5cGUmIHR5
cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50czsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Np
b24uaAppbmRleCA2NGFmNzEzMjk5Yy4uYjFlYTNiNzBmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJl
c3Npb24uaApAQCAtNTQsOSArNTQsMzYgQEAgcHVibGljOgogCiAgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxFeHByZXNzaW9uPj4mIGFyZ3VtZW50cygpIHsgcmV0dXJuIG1fYXJndW1lbnRzOyB9
CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KKworICAgIHZvaWQgc2V0
Q2FzdERhdGEoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAg
fQorCisgICAgdHlwZWRlZiBWYXJpYW50PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5j
dGlvbkRlZmluaXRpb24+LCBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbj4+IE92ZXJsb2FkOworICAgIGJvb2wgaGFzT3ZlcmxvYWRzKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9vdmVybG9hZHMpOyB9CisgICAgdm9pZCBzZXRP
dmVybG9hZHMoVmVjdG9yPE92ZXJsb2FkLCAxPiYmIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAg
IG1fb3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKworICAgIHZvaWQgc2V0RnVuY3Rpb24o
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAg
ICAgIGZ1bmN0aW9uID0gRnVuY3Rpb25SZWZlcmVuY2UoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uID0g
RnVuY3Rpb25SZWZlcmVuY2UobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgfQorCiBw
cml2YXRlOgogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxF
eHByZXNzaW9uPj4gbV9hcmd1bWVudHM7CisgICAgT3B0aW9uYWw8VmVjdG9yPE92ZXJsb2FkLCAx
Pj4gbV9vdmVybG9hZHM7CisgICAgdHlwZWRlZiBWYXJpYW50PHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+LCBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+IEZ1bmN0aW9uUmVmZXJlbmNlOworICAgIE9wdGlv
bmFsPEZ1bmN0aW9uUmVmZXJlbmNlPiBmdW5jdGlvbjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJl
c3Npb24uaAppbmRleCBjNDNjNjllZTU0MS4uNTU4MzY3MTUxYzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHBy
ZXNzaW9uLmgKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogICAgIERvdEV4cHJlc3Npb24oY29u
c3QgRG90RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Npb24oRG90RXhwcmVz
c2lvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9maWVsZE5h
bWU7CiB9OwpAQCAtNTksNCArNjEsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihEb3RFeHByZXNzaW9uLCBpc0RvdEV4cHJlc3Npb24o
KSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCmluZGV4
IDc5NzBiNTllNTRhLi5iMGZmOWUxZjEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25E
ZWZpbml0aW9uLmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNw
YWNlIEFTVCB7CiAKLWNsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOb2RlIHsK
K2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKIHB1YmxpYzoKICAg
ICBFbnVtZXJhdGlvbkRlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBu
YW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4mJiB0eXBlLCBFbnVtZXJhdGlvbk1lbWJlcnMmJiBt
ZW1iZXJzKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKQEAgLTU0LDkgKzU0
LDE4IEBAIHB1YmxpYzoKICAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oY29uc3QgRW51bWVyYXRp
b25EZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKEVudW1l
cmF0aW9uRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRW51bWVyYXRpb25E
ZWZpbml0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgU3RyaW5n
JiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICpt
X3R5cGU7IH0KICAgICBFbnVtZXJhdGlvbk1lbWJlcnMmIGVudW1lcmF0aW9uTWVtYmVycygpIHsg
cmV0dXJuIG1fbWVtYmVyczsgfQogCisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2Vu
IG1fb3JpZ2luOwogICAgIFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggZTM2
ODM4MzY0NmQuLjIzNWYwNTQ5MGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01NSw3ICs1NSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQ29tbWFFeHByZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEZXJlZmVyZW5jZUV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RvdEV4
cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zs
b2F0TGl0ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
SW5kZXhFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNJbnRlZ2VyTGl0ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzTG9naWNhbEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0xvZ2ljYWxOb3RFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCA3YTdlMGEwNjU2
Yy4uN2RlOTUzY2JiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAg
LTY3LDYgKzY3LDcgQEAgcHVibGljOgogCiAgICAgQXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJs
b2NrKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsgfQogICAgIEFTVDo6VHlwZSYgdHlwZSgp
IHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7
IH0KICAgICBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9
CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1h
bnRpYzsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCmluZGV4IDZiYjZhMGYwZGFiLi5l
OTQ5NmEzNDI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKQEAgLTQ5LDYgKzQ5LDEw
IEBAIHB1YmxpYzoKICAgICBJbmRleEV4cHJlc3Npb24oY29uc3QgSW5kZXhFeHByZXNzaW9uJikg
PSBkZWxldGU7CiAgICAgSW5kZXhFeHByZXNzaW9uKEluZGV4RXhwcmVzc2lvbiYmKSA9IGRlZmF1
bHQ7CiAKKyAgICBib29sIGlzSW5kZXhFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgRXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKCkgeyByZXR1cm4g
Km1faW5kZXg7IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4g
bV9pbmRleDsKIH07CkBAIC01OSw0ICs2Myw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKEluZGV4RXhwcmVzc2lvbiwgaXNJbmRleEV4
cHJlc3Npb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oCmluZGV4IDMyMGFiYzNjNDc1Li4yOWRlZDFmNDI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0
aXZlVHlwZURlY2xhcmF0aW9uLmgKQEAgLTUyLDYgKzUyLDkgQEAgcHVibGljOgogICAgIE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbihjb25zdCBOYXRpdmVUeXBlRGVjbGFyYXRpb24mKSA9IGRlbGV0ZTsK
ICAgICBOYXRpdmVUeXBlRGVjbGFyYXRpb24oTmF0aXZlVHlwZURlY2xhcmF0aW9uJiYpID0gZGVm
YXVsdDsKIAorICAgIGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7
IH0KICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBlQXJn
dW1lbnRzOyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVy
cmlkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUGFyYW1ldGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xQYXJhbWV0ZXIuaAppbmRleCA5MjU4NmY4NjkxZi4uYzdhZWMwZjE1MWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFt
ZXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFBhcmFtZXRlci5oCkBAIC01Nyw2ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBQYXJhbWV0ZXIoY29u
c3QgUGFyYW1ldGVyJikgPSBkZWxldGU7CiAgICAgUGFyYW1ldGVyKFBhcmFtZXRlciYmKSA9IGRl
ZmF1bHQ7CiAKKyAgICBPcHRpb25hbDxTdHJpbmc+JiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9
CisKICAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQogICAgIE9wdGlvbmFsPEFT
VDo6U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRl
clR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBv
aW50ZXJUeXBlLmgKaW5kZXggMTUyOTQyNmEyZWQuLjIyZjc3YWVhOWJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50
ZXJUeXBlLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIFBvaW50ZXJUeXBlKGNvbnN0
IFBvaW50ZXJUeXBlJikgPSBkZWxldGU7CiAgICAgUG9pbnRlclR5cGUoUG9pbnRlclR5cGUmJikg
PSBkZWZhdWx0OwogCi0gICAgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25z
dCBvdmVycmlkZQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzViZmM5ZTQyODYuLmFjOTMyM2QyNDE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTEgQEAgcHVibGljOgogCiAgICAgRXhwcmVzc2lv
biogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAKKyAgICB2b2lkIHNldEZ1bmN0
aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9uKSB7IG1fZnVuY3Rpb24g
PSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAgICBGdW5jdGlvbkRlZmluaXRpb24q
IG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgK
aW5kZXggODdjYzYyZjIzNTYuLjA5YzQwMDZjMDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJl
RGVmaW5pdGlvbi5oCkBAIC01Myw2ICs1Myw5IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVEZWZp
bml0aW9uKGNvbnN0IFN0cnVjdHVyZURlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBTdHJ1Y3R1
cmVEZWZpbml0aW9uKFN0cnVjdHVyZURlZmluaXRpb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9v
bCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICBTdHJ1Y3R1cmVF
bGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRz
OyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlw
ZS5oCmluZGV4IGNmNGNiYzg4NzkwLi5lYjRjZDhiODI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUuaApAQCAtNDksNiArNDks
MTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVHlwZURlZmluaXRpb24o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1N0cnVjdHVyZURl
ZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Vu
dW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzTmF0aXZlVHlwZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZURlZmluaXRpb24uaAppbmRleCBmNzM2MjllMjliMS4uNGJlM2FmZGNlZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFR5cGVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaApAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6CiAg
ICAgVHlwZURlZmluaXRpb24oY29uc3QgVHlwZURlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBU
eXBlRGVmaW5pdGlvbihUeXBlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlz
VHlwZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBT
dHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICBBU1Q6OlR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBj
b25zdCBvdmVycmlkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCmluZGV4IDQ5NDQxZDhiNWM3Li5l
ZDc0NGMxNzY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaApAQCAtNTQsNyArNTQsOSBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzVHlwZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KIAorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAg
IFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJldHVybiBtX3R5cGVBcmd1bWVudHM7
IH0KKyAgICBUeXBlKiYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFR5cGVSZWZlcmVuY2U+IGNsb25lVHlwZVJlZmVyZW5jZSgpIGNvbnN0CiAgICAgewpA
QCAtNzAsNiArNzIsNyBAQCBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAg
ICBTdHJpbmcgbV9uYW1lOwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOworICAg
IFR5cGUqIG1fdHlwZSB7IG51bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxl
RGVjbGFyYXRpb24uaAppbmRleCBmZjAzNjgxOTNiZC4uYTFkMWE0MDQ1MjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKQEAgLTYwLDYgKzYwLDcgQEAgcHVibGljOgogICAg
IFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAK
ICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAg
ICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KIAogICAgIFR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+JiBzZW1hbnRpYygpIHsg
cmV0dXJuIG1fc2VtYW50aWM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oCmluZGV4
IDJhZTgyOGQ1Mjk1Li4zNDNlN2I2ZGQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5j
ZS5oCkBAIC01NSwxOSArNTUsMzkgQEAgcHVibGljOgogICAgIHN0YXRpYyBWYXJpYWJsZVJlZmVy
ZW5jZSB3cmFwKFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAg
ewogICAgICAgICBWYXJpYWJsZVJlZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKHZhcmlhYmxl
RGVjbGFyYXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZ2
YXJpYWJsZURlY2xhcmF0aW9uIH07CisgICAgICAgIHJlc3VsdC5tX3ZhcmlhYmxlID0gVmFyaWFi
bGVUeXBlKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VmFyaWFibGVEZWNsYXJhdGlvbj4odmFyaWFi
bGVEZWNsYXJhdGlvbikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHN0
YXRpYyBWYXJpYWJsZVJlZmVyZW5jZSB3cmFwKEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24m
IGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBWYXJpYWJsZVJl
ZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24u
b3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZhbm9ueW1vdXNWYXJp
YWJsZURlY2xhcmF0aW9uIH07CisgICAgICAgIHJlc3VsdC5tX3ZhcmlhYmxlID0gVmFyaWFibGVU
eXBlKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbj4o
YW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbikpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQor
CisgICAgdHlwZWRlZiBWYXJpYW50PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VmFyaWFibGVEZWNs
YXJhdGlvbj4sIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QW5vbnltb3VzVmFyaWFibGVEZWNsYXJh
dGlvbj4sIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UGFyYW1ldGVyPj4gVmFyaWFibGVUeXBlOwor
ICAgIE9wdGlvbmFsPFZhcmlhYmxlVHlwZT4mIHZhcmlhYmxlKCkgeyByZXR1cm4gbV92YXJpYWJs
ZTsgfQorCisgICAgdm9pZCBzZXRWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJs
ZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgbV92YXJpYWJsZSA9IFZhcmlhYmxlVHlwZShz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFZhcmlhYmxlRGVjbGFyYXRpb24+KHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFZhcmlhYmxlKEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24mIGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24pCisgICAgeworICAgICAg
ICBtX3ZhcmlhYmxlID0gVmFyaWFibGVUeXBlKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QW5vbnlt
b3VzVmFyaWFibGVEZWNsYXJhdGlvbj4oYW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0VmFyaWFibGUoUGFyYW1ldGVyJiBwYXJhbWV0ZXIpCisgICAg
eworICAgICAgICBtX3ZhcmlhYmxlID0gVmFyaWFibGVUeXBlKHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UGFyYW1ldGVyPihwYXJhbWV0ZXIpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgVmFyaWFi
bGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQogICAgICAgICA6IEV4cHJlc3Npb24o
V1RGTW92ZShvcmlnaW4pKQpAQCAtNzUsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAg
IFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8VmFyaWFudDxWYXJpYWJsZURlY2xhcmF0aW9u
KiwgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbio+PiBtX3ZhcmlhYmxlOworICAgIE9wdGlv
bmFsPFZhcmlhYmxlVHlwZT4gbV92YXJpYWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApp
bmRleCA3ODBkNWM1NDI1YS4uZDljNjAzNGJlODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTM0
LDE1ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAot
Y2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgewotICAgIH5OYW1lUmVzb2x2ZXIo
KSA9IGRlZmF1bHQ7Ci19OwotCi12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYpCi17
Ci0KLX0KLQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAppbmRleCA0N2Q0ZDZhNTc5My4uNDJmOGJjMTU3
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TmFtZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lUmVzb2x2ZXIuaApAQCAtMjgsMTIgKzI4LDIxOSBAQAogI2lmIEVOQUJMRShXRUJH
UFUpCiAKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3Iu
aCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBu
YW1lc3BhY2UgV0hMU0wgewogCi12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJv
Z3JhbSk7CitjbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6Cisg
ICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAgICAgICAgOiBtX25h
bWVDb250ZXh0KG5hbWVDb250ZXh0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OYW1l
UmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5j
ZSYgdHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlUmVmZXJlbmNl
KTsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UudHlwZSgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBhdXRvKiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlKHR5cGVS
ZWZlcmVuY2UubmFtZSgpKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0gbnVsbHB0cikgewor
ICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNhbmRpZGF0ZXMtPnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBt
X2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgbWF0Y2ggaG93IGZ1bmN0aW9uIG92ZXJsb2FkIHJlc29sdXRp
b24gd29ya3MuCisgICAgICAgIC8vIEhvd2V2ZXIsIEkgaGF2ZW4ndCBpbXBsZW1lbnRlZCB0aGF0
IHlldCwgc28gSSdsbCBsZWF2ZSB0aGlzIGJsYW5rIGZvciBub3cuCisgICAgICAgIC8vIEknbGwg
ZmlsbCBpdCBpbiBhcyBzb29uIGFzIEkgaW1wbGVtZW50IGZ1bmN0aW9uIG92ZXJsb2FkIHJlc29s
dXRpb24uCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3Ip
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTmFtZUNvbnRleHQgbmV3TmFtZUNvbnRl
eHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVy
KG5ld05hbWVDb250ZXh0KTsKKyAgICAgICAgdmlzaXRUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50
eXBlKCkpOworICAgICAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgICAgIG5ld05hbWVSZXNvbHZlci5WaXNpdG9yOjp2
aXNpdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gbmV3TmFtZUNvbnRl
eHQuYWRkKHBhcmFtZXRlcik7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAg
ICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmV3TmFtZVJlc29sdmVyLnZpc2l0KGZ1bmN0aW9u
RGVmaW5pdGlvbi5ibG9jaygpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QmxvY2sm
IGJsb2NrKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRl
eHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KGJs
b2NrKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVt
ZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwo
KSk7CisgICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAg
ICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5WaXNpdG9yOjp2aXNpdChpZlN0YXRlbWVu
dC5ib2R5KCkpOworICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgeworICAgICAg
ICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICAg
ICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5WaXNpdG9yOjp2aXNpdCgqaWZTdGF0ZW1lbnQu
ZWxzZUJvZHkoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6V2hp
bGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWaXNpdG9yOjp2aXNpdCh3aGlsZUxvb3Au
Y29uZGl0aW9uYWwoKSk7CisgICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVD
b250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5WaXNpdG9yOjp2aXNp
dCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGls
ZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZt
X25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5WaXNpdG9y
Ojp2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQod2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29w
JiBmb3JMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNv
bnRleHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0
KGZvckxvb3ApOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1f
ZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9uYW1lQ29udGV4dC5hZGQo
dmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHZhcmlhYmxlRGVj
bGFyYXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJv
cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodmFyaWFibGVSZWZlcmVuY2Uu
dmFyaWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGF1dG8qIHZhcmlh
YmxlID0gbV9uYW1lQ29udGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCkp
KSB7CisgICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6UGFy
YW1ldGVyJiBwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS5z
ZXRWYXJpYWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikgeworICAgICAgICAgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlLnNldFZhcmlhYmxlKHZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgICAgICAg
ICAgfSksICp2YXJpYWJsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Vycm9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpSZXR1cm4mIHJldHVybk5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV9j
dXJyZW50RnVuY3Rpb24pOworICAgICAgICByZXR1cm5Ob2RlLnNldEZ1bmN0aW9uKG1fY3VycmVu
dEZ1bmN0aW9uKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQocmV0dXJuTm9kZSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OkluZGV4RXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Np
b24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3Ip
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFjYWxsRXhwcmVzc2lvbi5oYXNP
dmVybG9hZHMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNv
bnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAgICAgICAgICAg
ICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKFZlY3RvcjxBU1Q6OkNhbGxFeHByZXNzaW9u
OjpPdmVybG9hZCwgMT4oKmZ1bmN0aW9ucykpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoY2FsbEV4cHJl
c3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3Zl
cmxvYWRzKFZlY3RvcjxBU1Q6OkNhbGxFeHByZXNzaW9uOjpPdmVybG9hZCwgMT4oKmZ1bmN0aW9u
cykpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2Vycm9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBWaXNpdG9yOjp2aXNpdChjYWxsRXhw
cmVzc2lvbik7CisgICAgfQorCisgICAgdm9pZCBzZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9u
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRpb24pCisgICAgeworICAg
ICAgICBtX2N1cnJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKKyAgICBBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07CisgICAgYm9vbCBtX2Vy
cm9yIHsgZmFsc2UgfTsgLy8gRklYTUU6IE1pZ3JhdGUgdGhpcyB0byBiZSBzb21lIHNvcnQgb2Yg
ZGVzY3JpcHRpdmUgc3RyaW5nLgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlIGVy
cm9yIGludG8gVmlzaXRvcgorfTsKKworaW5saW5lIHZvaWQgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQ
cm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3Ig
KGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKKyAgICAg
ICAgbmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KCp0eXBlRGVmaW5pdGlvbik7CisgICAgZm9y
IChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9u
cygpKQorICAgICAgICBuYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKnN0cnVjdHVyZURlZmlu
aXRpb24pOworICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5l
bnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgIG5hbWVSZXNvbHZlci5WaXNpdG9yOjp2
aXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKQorICAgICAgICBu
YW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisK
K2lubGluZSB2b2lkIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5h
bWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZp
bml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJl
c29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oZnVuY3Rpb25EZWZpbml0aW9uLmdl
dCgpKTsKKyAgICAgICAgbmFtZVJlc29sdmVyLnZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOwor
ICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihudWxs
cHRyKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFt
Lm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgIG5hbWVSZXNvbHZlci5WaXNp
dG9yOjp2aXNpdCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Cit9CiAKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCmlu
ZGV4IGJjNmU3M2U2YTFmLi5mYTA3NmEyOTczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApAQCAtMzgsNyArMzgsOCBAQCBQ
YXJzZXI6OlBhcnNlcigpCiB7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1
bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hbDxFcnJvcj4K
Ky8vIEZJWE1FOiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBmcm9tIHRoaXMsIGFuZCByZXBv
cnQgaXQgdG8gSmF2YVNjcmlwdC4KK2F1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFt
LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYWw8RXJyb3I+CiB7
CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcpOwogICAgIG1fbW9kZSA9IG1vZGU7CkBA
IC01NCw3ICs1NSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJp
bmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIGlmICh0eXBlRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
V1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3Mg
PSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOworICAgICAgICAgICAg
ICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5h
bWUgRXJyb3IhICVzIiwgdHlwZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTY0LDcgKzY5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmlu
Z1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAg
IGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRp
b24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIHN0cnVjdHVyZURlZmluaXRpb24tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0LDcgKzgzLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9u
KCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChlbnVtZXJhdGlvbkRlZmluaXRp
b24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9u
RGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJy
b3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC04NSw3ICs5OCwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJp
bmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24p
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIGZ1bmN0aW9uRGVmaW5pdGlvbi0+bmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVycm9yID0gZnVuY3Rpb25EZWZpbml0aW9uLmVycm9yKCk7CkBA
IC05Niw3ICsxMTMsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3Ry
aW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVz
IiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTA2LDcgKzEyNywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJp
bmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBl
RGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAg
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5kZXggMGViNjRkZWNkNGQu
LmRhYjE0MDM4MjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTUwLDcgKzUwLDkgQEAgT3B0aW9uYWw8UHJlcGFy
YXRpb25SZXN1bHQ+IHByZXBhcmUoU3RyaW5nVmlldyBzb3VyY2UpCiAgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmVzb2x2ZU5hbWVzSW5UeXBl
cyhwcm9ncmFtKTsKKyAgICBOYW1lUmVzb2x2ZXIgbmFtZVJlc29sdmVyKHByb2dyYW0ubmFtZUNv
bnRleHQoKSk7CisgICAgcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIp
OworICAgIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CiAK
ICAgICByZXR1cm4gUHJlcGFyYXRpb25SZXN1bHQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKaW5kZXggNTYzMGZlNjllZTQu
LjMxOTg2MTU1MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByb2dyYW0uaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xF
bnVtZXJhdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKICNpbmNsdWRlICJXSExTTE5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgpAQCAtNDQsNDUg
KzQ1LDU4IEBAIHB1YmxpYzoKICAgICBQcm9ncmFtKCkgPSBkZWZhdWx0OwogICAgIFByb2dyYW0o
UHJvZ3JhbSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIGFwcGVuZChBU1Q6OlR5cGVEZWZpbml0
aW9uJiYgdHlwZURlZmluaXRpb24pCisgICAgYm9vbCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlv
biYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBw
ZW5kKFdURk1vdmUodHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlRGVmaW5pdGlvbj4oV1RGTW92ZSh0eXBl
RGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3R5cGVE
ZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKICAgICB7Ci0gICAg
ICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoc3RydWN0dXJlRGVmaW5p
dGlvbikpOworICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1Y3R1cmVEZWZpbml0
aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fc3RydWN0dXJlRGVm
aW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVuZChB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICB7
Ci0gICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShlbnVtZXJh
dGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihXVEZNb3ZlKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRk
KCptX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBl
bmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCisKKyAgICBi
b29sIGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9uRGVmaW5pdGlvbikK
ICAgICB7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShmdW5j
dGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlZmluaXRpb25zLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihXVEZNb3ZlKGZ1bmN0aW9u
RGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX2Z1bmN0
aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKKworICAg
IGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
bV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorCisgICAgYm9vbCBh
cHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24p
CiAgICAgewotICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUo
bmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9u
cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oV1RG
TW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250
ZXh0LmFkZCgqbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAg
VmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBt
X3R5cGVEZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+
JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7
IH0KLSAgICBWZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+JiBlbnVtZXJhdGlvbkRl
ZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9Ci0gICAgVmVj
dG9yPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIHsgcmV0
dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1f
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVU
eXBlRGVjbGFyYXRpb25zOyB9CisgICAgTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KCkgeyByZXR1
cm4gbV9uYW1lQ29udGV4dDsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
RGVmaW5pdGlvbj4+JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5cGVEZWZpbml0aW9u
czsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
Pj4mIHN0cnVjdHVyZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9u
czsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24+PiYgZW51bWVyYXRpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZp
bml0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24+PiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0
aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uPj4mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+PiYgbmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0
dXJuIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxB
U1Q6OlR5cGVEZWZpbml0aW9uPiBtX3R5cGVEZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uPiBtX3N0cnVjdHVyZURlZmluaXRpb25zOwotICAgIFZlY3RvcjxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOwotICAg
IFZlY3RvcjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4gbV9mdW5jdGlvbkRlZmluaXRpb25zOwot
ICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IG1fbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPiBt
X25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7CisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZURlZmluaXRpb24+PiBtX3R5cGVE
ZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbj4+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+IG1fZW51bWVyYXRpb25EZWZpbml0aW9u
czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPj4g
bV9mdW5jdGlvbkRlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPj4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPj4g
bV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAppbmRleCA1MTY4NTZlNDFkMC4u
MTZjMjQyMzk3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMVmlzaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMVmlzaXRvci5oCkBAIC0xMDMsMjIgKzEwMywyMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBWaXNpdG9yIHsKLSAgICB+VmlzaXRvcigp
ID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WaXNpdG9yKCkgPSBkZWZhdWx0Owog
CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KFByb2dyYW0mIHByb2dyYW0pCiAgICAgewogICAgICAg
ICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkK
LSAgICAgICAgICAgIHZpc2l0KHR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCp0
eXBlRGVmaW5pdGlvbik7CiAgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6
IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHN0cnVj
dHVyZURlZmluaXRpb24pOworICAgICAgICAgICAgdmlzaXQoKnN0cnVjdHVyZURlZmluaXRpb24p
OwogICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51
bWVyYXRpb25EZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZW51bWVyYXRpb25EZWZp
bml0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCplbnVtZXJhdGlvbkRlZmluaXRpb24pOwogICAg
ICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZp
bml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAg
ICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOwogICAgICAgICBmb3IgKGF1dG8mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAg
ICAgICAgICAgIHZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKICAgICAgICAgZm9y
IChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJh
dGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAg
ICAgICAgICB2aXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICB9CiAKICAgICB2b2lk
IHZpc2l0VHlwZShBU1Q6OlR5cGUmIHR5cGUpCkBAIC00MDIsOCArNDAzLDEwIEBAIGNsYXNzIFZp
c2l0b3IgewogICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlUG9pbnRlckV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKTsKICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpOdWxsTGl0ZXJh
bD4oZXhwcmVzc2lvbikpCiAgICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6Ok51bGxMaXRl
cmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6RG90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKICAgICAg
ICAgZWxzZSBpZiAoaXM8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKICAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpOwogICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5hcnlFeHBy
ZXNzaW9uPihleHByZXNzaW9uKSkKQEAgLTQxNiw2ICs0MTksMjIgQEAgY2xhc3MgVmlzaXRvciB7
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHBy
ZXNzaW9uJiBkb3RFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgdmlzaXQoc3RhdGljX2Nhc3Q8
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihkb3RFeHByZXNzaW9uKSk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJl
c3Npb24pCisgICAgeworICAgICAgICB2aXNpdChpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNz
aW9uKCkpOworICAgICAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiY+KGluZGV4RXhwcmVzc2lvbikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKKyAgICB7Cisg
ICAgICAgIHZpc2l0KGV4cHJlc3Npb24uYmFzZSgpKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50KQogICAgIHsKICAgICAgICAgdmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwpAQCAtNTM2LDExICs1NTUsNiBAQCBj
bGFzcyBWaXNpdG9yIHsKICAgICAgICAgdmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1
ZSgpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZp
c2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgIH0KLQogICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24pCiAgICAgewogICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAwN2MxNmVmMTc3NS4uMjQ0ODFjMDJiY2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0
MDYsNiArNjQwNiw3IEBACiAJCTFDMzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAvKiBGb250Q2FjaGVD
b3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2Fj
aGVDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBFMUM2
RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
NjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QzdDQzIxRDIxQ0RFMTk4MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTE5hbWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
ODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5z
cGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFC
OTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNTMzMiwxMSArMjUzMzMsMTIgQEAKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAy
Mjc5NzkgLyogV0hMU0xQYXJzZXIuY3BwICovLAogCQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3
OSAvKiBXSExTTFBhcnNlci5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBX
SExTTFByb2dyYW0uaCAqLywKLSAJCQkJQzI4OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNM
VmlzaXRvci5oICovLAotIAkJCQlDMjg4QzcyOTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVw
YXJlLmNwcCAqLywKLSAJCQkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFy
ZS5oICovLAotIAkJCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2
ZXIuY3BwICovLAotIAkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVz
b2x2ZXIuaCAqLywKKwkJCQlDMjg4QzcyNzIxQzhDNkVGMDAyREY1Q0EgLyogV0hMU0xWaXNpdG9y
LmggKi8sCisJCQkJQzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAg
Ki8sCisJCQkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovLAor
CQkJCUMyODhDNzJCMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8s
CisJCQkJQzI4OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8s
CisJCQkJMUM3Q0MyMUQyMUNERTE5ODAwQzFGQTJDIC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gV0hMU0w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MjU0MTIsNyArMjU0MTQsNyBAQAogCQkJCUMyMUJGNzE0MjFDRDg5RDMwMDIyNzk3OSAvKiBXSExT
TFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8sCiAJCQkJQzIxQkY3MTMyMUNEODlE
MjAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVSZWZlcmVuY2UuaCAqLywKIAkJCQlDMjFCRjcwNDIx
Q0Q4OUM2MDAyMjc5NzkgLyogV0hMU0xXaGlsZUxvb3AuaCAqLywKLSAJCQkJQzI4OEM3MkQyMUM5
OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJCQlDMjg4QzcyRDIx
Qzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAogCQkJKTsKIAkJCXBh
dGggPSBBU1Q7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358022</attachid>
            <date>2018-12-22 03:15:59 -0800</date>
            <delta_ts>2018-12-31 17:41:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>file.txt</filename>
            <type>text/plain</type>
            <size>46733</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDg4YWM4OTFiNjRhYTFmMjdkZmEyZGE3MWEyNjQ2YzBlYTQxYjllZjMKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBTYXQgRGVjIDIy
IDAyOjEyOjAyIDIwMTggLTA4MDAKCiAgICBOYW1lIFJlc29sdmVyCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJh
eVJlZmVyZW5jZVR5cGUuaAppbmRleCAyZDU2N2YwMGU3MC4uYzQ4MmFmOGRjYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVm
ZXJlbmNlVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAg
ICBBcnJheVJlZmVyZW5jZVR5cGUoY29uc3QgQXJyYXlSZWZlcmVuY2VUeXBlJikgPSBkZWxldGU7
CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKEFycmF5UmVmZXJlbmNlVHlwZSYmKSA9IGRlZmF1bHQ7
CiAKLSAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCmluZGV4IDQwYjVmOGRmNmZlLi5m
NzBkNjY2MjYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgKQEAgLTUyLDExICs1MiwxMCBAQCBwdWJsaWM6
CiAgICAgQXJyYXlUeXBlKGNvbnN0IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlw
ZShBcnJheVR5cGUmJikgPSBkZWZhdWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBj
b25zdCB7IHJldHVybiBtX251bUVsZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgVHlwZSYgdHlwZSgpIHsgcmV0
dXJuICptX2VsZW1lbnRUeXBlOyB9CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7
IHJldHVybiBtX251bUVsZW1lbnRzOyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xv
bmUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCmluZGV4
IDY0YWY3MTMyOTljLi5iMWVhM2I3MGYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCkBA
IC01NCw5ICs1NCwzNiBAQCBwdWJsaWM6CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4
cHJlc3Npb24+PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9hcmd1bWVudHM7IH0KIAorICAgIFN0
cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgdm9pZCBzZXRDYXN0RGF0YSgp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICB9CisKKyAgICB0
eXBlZGVmIFZhcmlhbnQ8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbj4sIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uPj4gT3ZlcmxvYWQ7CisgICAgYm9vbCBoYXNPdmVybG9hZHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihtX292ZXJsb2Fkcyk7IH0KKyAgICB2b2lkIHNldE92ZXJsb2FkcyhW
ZWN0b3I8T3ZlcmxvYWQsIDE+JiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAgbV9vdmVybG9h
ZHMgPSBvdmVybG9hZHM7CisgICAgfQorCisgICAgdm9pZCBzZXRGdW5jdGlvbihBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgZnVuY3Rp
b24gPSBGdW5jdGlvblJlZmVyZW5jZShmdW5jdGlvbkRlZmluaXRpb24pOworICAgIH0KKworICAg
IHZvaWQgc2V0RnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gPSBGdW5jdGlvblJl
ZmVyZW5jZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1fbmFtZTsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
PiBtX2FyZ3VtZW50czsKKyAgICBPcHRpb25hbDxWZWN0b3I8T3ZlcmxvYWQsIDE+PiBtX292ZXJs
b2FkczsKKyAgICB0eXBlZGVmIFZhcmlhbnQ8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbj4sIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uPj4gRnVuY3Rpb25SZWZlcmVuY2U7CisgICAgT3B0aW9uYWw8RnVuY3Rp
b25SZWZlcmVuY2U+IGZ1bmN0aW9uOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCmlu
ZGV4IGM0M2M2OWVlNTQxLi41NTgzNjcxNTFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaApA
QCAtNDksNiArNDksOCBAQCBwdWJsaWM6CiAgICAgRG90RXhwcmVzc2lvbihjb25zdCBEb3RFeHBy
ZXNzaW9uJikgPSBkZWxldGU7CiAgICAgRG90RXhwcmVzc2lvbihEb3RFeHByZXNzaW9uJiYpID0g
ZGVmYXVsdDsKIAorICAgIGJvb2wgaXNEb3RFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpZWxkTmFtZTsKIH07CkBA
IC01OSw0ICs2MSw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlzRG90RXhwcmVzc2lvbigpKQorCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXggNzk3MGI1OWU1
NGEuLmIwZmY5ZTFmMTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24u
aApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsK
IAotY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uIDogcHVibGljIE5vZGUgeworY2xhc3MgRW51
bWVyYXRpb25EZWZpbml0aW9uIDogcHVibGljIFR5cGUgewogcHVibGljOgogICAgIEVudW1lcmF0
aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6
dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJlcnMpCiAg
ICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQpAQCAtNTQsOSArNTQsMTggQEAgcHVi
bGljOgogICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihjb25zdCBFbnVtZXJhdGlvbkRlZmluaXRp
b24mKSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oRW51bWVyYXRpb25EZWZp
bml0aW9uJiYpID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNFbnVtZXJhdGlvbkRlZmluaXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcmIG5hbWUoKSB7
IHJldHVybiBtX25hbWU7IH0KICAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQog
ICAgIEVudW1lcmF0aW9uTWVtYmVycyYgZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4gbV9t
ZW1iZXJzOyB9CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKwogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47
CiAgICAgU3RyaW5nIG1fbmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBlMzY4MzgzNjQ2ZC4u
MjM1ZjA1NDkwYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTU1LDcgKzU1LDkgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFs
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ludGVn
ZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNM
b2dpY2FsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzTG9naWNhbE5vdEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVu
Y3Rpb25EZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDdhN2UwYTA2NTZjLi43ZGU5NTNj
YmI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaApAQCAtNjcsNiArNjcs
NyBAQCBwdWJsaWM6CiAKICAgICBBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2soKSB7IHJl
dHVybiBtX2F0dHJpYnV0ZUJsb2NrOyB9CiAgICAgQVNUOjpUeXBlJiB0eXBlKCkgeyByZXR1cm4g
Km1fdHlwZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIFBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICBPcHRp
b25hbDxBU1Q6OlNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEluZGV4RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKaW5kZXggNmJiNmEwZjBkYWIuLmU5NDk2YTM0Mjgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbmRleEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaApAQCAtNDksNiArNDksMTAgQEAgcHVibGlj
OgogICAgIEluZGV4RXhwcmVzc2lvbihjb25zdCBJbmRleEV4cHJlc3Npb24mKSA9IGRlbGV0ZTsK
ICAgICBJbmRleEV4cHJlc3Npb24oSW5kZXhFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKIAorICAg
IGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICBFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9pbmRleDsg
fQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2luZGV4Owog
fTsKQEAgLTU5LDQgKzYzLDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1dITFNMX0VYUFJFU1NJT04oSW5kZXhFeHByZXNzaW9uLCBpc0luZGV4RXhwcmVzc2lvbigp
KQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgKaW5kZXgg
MzIwYWJjM2M0NzUuLjI5ZGVkMWY0MjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVj
bGFyYXRpb24uaApAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xh
cmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCisg
ICAgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIFR5
cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJldHVybiBtX3R5cGVBcmd1bWVudHM7IH0K
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJh
bWV0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBh
cmFtZXRlci5oCmluZGV4IDkyNTg2Zjg2OTFmLi5jN2FlYzBmMTUxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVy
LmgKQEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgogICAgIFBhcmFtZXRlcihjb25zdCBQYXJhbWV0
ZXImKSA9IGRlbGV0ZTsKICAgICBQYXJhbWV0ZXIoUGFyYW1ldGVyJiYpID0gZGVmYXVsdDsKIAor
ICAgIE9wdGlvbmFsPFN0cmluZz4mIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KKwogICAgIFR5
cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRp
Yz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUu
aAppbmRleCAxNTI5NDI2YTJlZC4uMjJmNzdhZWE5YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaApA
QCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgUG9pbnRlclR5cGUoY29uc3QgUG9pbnRlclR5
cGUmKSA9IGRlbGV0ZTsKICAgICBQb2ludGVyVHlwZShQb2ludGVyVHlwZSYmKSA9IGRlZmF1bHQ7
CiAKLSAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmV0dXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xSZXR1cm4uaAppbmRleCBjNWJmYzllNDI4Ni4uYWM5MzIzZDI0MTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVy
bi5oCkBAIC01NCw4ICs1NCwxMSBAQCBwdWJsaWM6CiAKICAgICBFeHByZXNzaW9uKiB2YWx1ZSgp
IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KIAorICAgIHZvaWQgc2V0RnVuY3Rpb24oRnVuY3Rp
b25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRpb24pIHsgbV9mdW5jdGlvbiA9IGZ1bmN0aW9u
RGVmaW5pdGlvbjsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9u
PiBtX3ZhbHVlOyAvLyBudWxsYWJsZQorICAgIEZ1bmN0aW9uRGVmaW5pdGlvbiogbV9mdW5jdGlv
bjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAppbmRleCA4N2Nj
NjJmMjM1Ni4uMDljNDAwNmMwNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmgKQEAgLTUzLDYgKzUzLDkgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24oY29u
c3QgU3RydWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZURlZmluaXRp
b24oU3RydWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzU3RydWN0
dXJlRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0
cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIFN0cnVjdHVyZUVsZW1lbnRzJiBz
dHJ1Y3R1cmVFbGVtZW50cygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRWxlbWVudHM7IH0KIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKaW5kZXgg
Y2Y0Y2JjODg3OTAuLmViNGNkOGI4MjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCkBAIC00OSw2ICs0OSwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlRGVmaW5pdGlvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU3RydWN0dXJlRGVmaW5pdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRpb25E
ZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNO
YXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZp
bml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xU
eXBlRGVmaW5pdGlvbi5oCmluZGV4IGY3MzYyOWUyOWIxLi40YmUzYWZkY2VmZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmlu
aXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlRGVmaW5pdGlvbi5oCkBAIC01Miw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICBUeXBlRGVm
aW5pdGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFR5cGVEZWZpbml0
aW9uKFR5cGVEZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNUeXBlRGVmaW5p
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyYgbmFt
ZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIEFTVDo6VHlwZSYgdHlwZSgpIHsgcmV0dXJuICpt
X3R5cGU7IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKaW5kZXggNDk0NDFkOGI1YzcuLmVkNzQ0YzE3NjY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCkBAIC01NCw3ICs1NCw5IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgVHlwZUFyZ3Vt
ZW50cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1fdHlwZUFyZ3VtZW50czsgfQorICAgIFR5
cGUqJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVJlZmVyZW5jZT4gY2xvbmVUeXBlUmVmZXJlbmNlKCkgY29uc3QKICAgICB7CkBAIC03MCw2ICs3
Miw3IEBAIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFN0cmluZyBt
X25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CisgICAgVHlwZSogbV90
eXBlIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlv
bi5oCmluZGV4IGZmMDM2ODE5M2JkLi5hMWQxYTQwNDUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlh
YmxlRGVjbGFyYXRpb24uaApAQCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgVmFyaWFibGVE
ZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKIAogICAgIExleGVy
OjpUb2tlbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyYg
bmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogCiAgICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICpt
X3R5cGU7IH0KICAgICBPcHRpb25hbDxTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9z
ZW1hbnRpYzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKaW5kZXggMmFlODI4ZDUy
OTUuLjM0M2U3YjZkZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKQEAgLTU1
LDE5ICs1NSwzOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhcmlhYmxlUmVmZXJlbmNlIHdyYXAo
VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAg
IFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4odmFyaWFibGVEZWNsYXJhdGlv
bi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJsZSA9IHsgJnZhcmlhYmxlRGVj
bGFyYXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSBWYXJpYWJsZVR5cGUoc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxWYXJpYWJsZURlY2xhcmF0aW9uPih2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgc3RhdGljIFZhcmlh
YmxlUmVmZXJlbmNlIHdyYXAoQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYgYW5vbnltb3Vz
VmFyaWFibGVEZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJl
c3VsdChMZXhlcjo6VG9rZW4oYW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkp
OwotICAgICAgICByZXN1bHQubV92YXJpYWJsZSA9IHsgJmFub255bW91c1ZhcmlhYmxlRGVjbGFy
YXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSBWYXJpYWJsZVR5cGUoc3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uPihhbm9ueW1vdXNW
YXJpYWJsZURlY2xhcmF0aW9uKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgYm9vbCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB0eXBl
ZGVmIFZhcmlhbnQ8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxWYXJpYWJsZURlY2xhcmF0aW9uPiwg
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uPiwgc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxQYXJhbWV0ZXI+PiBWYXJpYWJsZVR5cGU7CisgICAgT3B0aW9u
YWw8VmFyaWFibGVUeXBlPiYgdmFyaWFibGUoKSB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKKyAg
ICB2b2lkIHNldFZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRp
b24pCisgICAgeworICAgICAgICBtX3ZhcmlhYmxlID0gVmFyaWFibGVUeXBlKHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8VmFyaWFibGVEZWNsYXJhdGlvbj4odmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0VmFyaWFibGUoQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlv
biYgYW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIG1fdmFyaWFi
bGUgPSBWYXJpYWJsZVR5cGUoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uPihhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRWYXJpYWJsZShQYXJhbWV0ZXImIHBhcmFtZXRlcikKKyAgICB7CisgICAgICAg
IG1fdmFyaWFibGUgPSBWYXJpYWJsZVR5cGUoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxQYXJhbWV0
ZXI+KHBhcmFtZXRlcikpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJpYWJsZVJlZmVyZW5j
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9y
aWdpbikpCkBAIC03NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgU3RyaW5nIG1f
bmFtZTsKLSAgICBPcHRpb25hbDxWYXJpYW50PFZhcmlhYmxlRGVjbGFyYXRpb24qLCBBbm9ueW1v
dXNWYXJpYWJsZURlY2xhcmF0aW9uKj4+IG1fdmFyaWFibGU7CisgICAgT3B0aW9uYWw8VmFyaWFi
bGVUeXBlPiBtX3ZhcmlhYmxlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hY2JjYzFlMDk2MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApAQCAt
MCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5p
dGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVU
eXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgorI2luY2x1ZGUg
IldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBOYW1lQ29udGV4dCB7
CitwdWJsaWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIp
CisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFk
ZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGlm
IChleGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1l
KCksIFZlY3RvcjxUeXBlLCAxPigpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQodHlwZURlZmluaXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRp
b24pCisgICAgeworICAgICAgICBpZiAoZXhpc3RzKHN0cnVjdHVyZURlZmluaXRpb24ubmFtZSgp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5
cGVzLmFkZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPFR5cGUsIDE+KCkpOwor
ICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChzdHJ1Y3R1cmVEZWZpbml0
aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBhZGQoQVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAg
ICAgIGlmIChleGlzdHMoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoZW51bWVy
YXRpb25EZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPFR5cGUsIDE+KCkpOworICAgICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6OkZ1bmN0aW9uRGVm
aW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZXMu
ZmluZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAg
ICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1f
dmFyaWFibGVzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRv
IHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0
b3I8RnVuY3Rpb24sIDE+KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pCisgICAgeworICAgICAgICBpZiAobV90eXBlcy5maW5kKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgICAgICB8fCBt
X3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3Zh
cmlhYmxlcy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCks
IFZlY3RvcjxGdW5jdGlvbiwgMT4oKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZl
VHlwZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fZnVuY3Rpb25zLmZpbmQobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAg
ICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0g
bV92YXJpYWJsZXMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwgVmVj
dG9yPFR5cGUsIDE+KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChu
YXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIGFkZChBU1Q6OlBhcmFtZXRlciYgcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgaWYg
KHBhcmFtZXRlci5uYW1lKCkpIHsKKyAgICAgICAgICAgIGlmIChleGlzdHMoKnBhcmFtZXRlci5u
YW1lKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gbV92YXJpYWJsZXMuYWRkKCpwYXJhbWV0ZXIubmFtZSgpLCBwYXJhbWV0ZXIpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pc05ld0VudHJ5OworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmIChleGlzdHModmFy
aWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBhdXRvIHJlc3VsdCA9IG1fdmFyaWFibGVzLmFkZCh2YXJpYWJsZURlY2xhcmF0aW9uLm5h
bWUoKSwgdmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgICAgIHJldHVybiByZXN1bHQuaXNOZXdF
bnRyeTsKKyAgICB9CisKKyAgICB0eXBlZGVmIFZhcmlhbnQ8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OlR5cGVEZWZpbml0aW9uPiwKKyAgICAgICAgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24+LAorICAgICAgICBzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiwKKyAgICAgICAgc3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+IFR5cGU7CisgICAgVmVjdG9yPFR5cGUs
IDE+KiBnZXRUeXBlKFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3R5cGVzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX3R5cGVzLmVu
ZCgpKSB7CisgICAgICAgICAgICBpZiAobV9wYXJlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fcGFyZW50LT5nZXRUeXBlKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAg
dHlwZWRlZiBWYXJpYW50PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24+LCBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4+IEZ1bmN0aW9uOworICAgIFZlY3RvcjxGdW5jdGlvbiwgMT4qIGdldEZ1bmN0aW9ucyhT
dHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnMu
ZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7
CisgICAgICAgICAgICBpZiAobV9wYXJlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcGFy
ZW50LT5nZXRGdW5jdGlvbnMobmFtZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICB0
eXBlZGVmIFZhcmlhbnQ8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlBhcmFtZXRlcj4sIHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gVmFyaWFibGU7
CisgICAgVmFyaWFibGUqIGdldFZhcmlhYmxlKFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAg
IGF1dG8gaXRlcmF0b3IgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXRl
cmF0b3IgPT0gbV92YXJpYWJsZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFZhcmlhYmxlKG5hbWUpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICZpdGVy
YXRvci0+dmFsdWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgZXhpc3RzKFN0cmluZyYg
bmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGVzLmZpbmQobmFtZSkgIT0gbV90eXBl
cy5lbmQoKQorICAgICAgICAgICAgfHwgbV9mdW5jdGlvbnMuZmluZChuYW1lKSAhPSBtX2Z1bmN0
aW9ucy5lbmQoKQorICAgICAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYW1lKSAhPSBtX3Zh
cmlhYmxlcy5lbmQoKTsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFR5cGUs
IDE+PiBtX3R5cGVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8RnVuY3Rpb24sIDE+PiBt
X2Z1bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmFyaWFibGU+IG1fdmFyaWFibGVzOwor
ICAgIE5hbWVDb250ZXh0KiBtX3BhcmVudDsKK307CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29s
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJl
c29sdmVyLmNwcAppbmRleCA3ODBkNWM1NDI1YS4uZDljNjAzNGJlODMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZl
ci5jcHAKQEAgLTM0LDE1ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNl
IFdITFNMIHsKIAotY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgewotICAgIH5O
YW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7Ci19OwotCi12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMo
UHJvZ3JhbSYpCi17Ci0KLX0KLQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAppbmRleCA0N2Q0ZDZhNTc5
My4uNDJmOGJjMTU3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaApAQCAtMjgsMTIgKzI4LDIxOSBAQAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJX
SExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMo
UHJvZ3JhbSYgcHJvZ3JhbSk7CitjbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7
CitwdWJsaWM6CisgICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAg
ICAgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBWaXNpdG9yOjp2aXNpdCh0
eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UudHlwZSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBhdXRvKiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5n
ZXRUeXBlKHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZXMgPT0g
bnVsbHB0cikgeworICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbmRpZGF0ZXMtPnNpemUoKSA9PSAwKSB7Cisg
ICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbWF0Y2ggaG93IGZ1bmN0aW9uIG92ZXJs
b2FkIHJlc29sdXRpb24gd29ya3MuCisgICAgICAgIC8vIEhvd2V2ZXIsIEkgaGF2ZW4ndCBpbXBs
ZW1lbnRlZCB0aGF0IHlldCwgc28gSSdsbCBsZWF2ZSB0aGlzIGJsYW5rIGZvciBub3cuCisgICAg
ICAgIC8vIEknbGwgZmlsbCBpdCBpbiBhcyBzb29uIGFzIEkgaW1wbGVtZW50IGZ1bmN0aW9uIG92
ZXJsb2FkIHJlc29sdXRpb24uCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKG1fZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTmFtZUNvbnRleHQg
bmV3TmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIgbmV3
TmFtZVJlc29sdmVyKG5ld05hbWVDb250ZXh0KTsKKyAgICAgICAgdmlzaXRUeXBlKGZ1bmN0aW9u
RGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgICAgIG5ld05hbWVSZXNvbHZl
ci5WaXNpdG9yOjp2aXNpdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgYXV0byBzdWNjZXNzID0g
bmV3TmFtZUNvbnRleHQuYWRkKHBhcmFtZXRlcik7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmV3TmFtZVJlc29sdmVyLnZp
c2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QmxvY2smIGJsb2NrKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3Ip
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQo
Jm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0
b3I6OnZpc2l0KGJsb2NrKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1l
bnQmIGlmU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoaWZTdGF0ZW1lbnQu
Y29uZGl0aW9uYWwoKSk7CisgICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVD
b250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5WaXNpdG9yOjp2aXNp
dChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHko
KSkgeworICAgICAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQp
OworICAgICAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5WaXNpdG9yOjp2aXNpdCgq
aWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWaXNpdG9yOjp2aXNp
dCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250
ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5W
aXNpdG9yOjp2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RG9XaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5hbWVDb250ZXh0IG5h
bWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250
ZXh0KS5WaXNpdG9yOjp2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICAgICAgVmlzaXRvcjo6
dmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpGb3JMb29wJiBmb3JMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJy
b3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRl
eHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZp
c2l0b3I6OnZpc2l0KGZvckxvb3ApOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9uYW1l
Q29udGV4dC5hZGQodmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0
KHZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodmFyaWFi
bGVSZWZlcmVuY2UudmFyaWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KGF1dG8qIHZhcmlhYmxlID0gbV9uYW1lQ29udGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVy
ZW5jZS5uYW1lKCkpKSB7CisgICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKEFTVDo6UGFyYW1ldGVyJiBwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJs
ZVJlZmVyZW5jZS5zZXRWYXJpYWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfSwgWyZdKEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikgeworICAgICAgICAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNldFZhcmlhYmxlKHZhcmlhYmxlRGVjbGFyYXRpb24p
OworICAgICAgICAgICAgfSksICp2YXJpYWJsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mIHJldHVybk5vZGUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBBU1NFUlQobV9jdXJyZW50RnVuY3Rpb24pOworICAgICAgICByZXR1cm5Ob2RlLnNldEZ1bmN0
aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQocmV0dXJuTm9k
ZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKG1fZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFjYWxsRXhw
cmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9u
cyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisg
ICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKFZlY3RvcjxBU1Q6OkNh
bGxFeHByZXNzaW9uOjpPdmVybG9hZCwgMT4oKmZ1bmN0aW9ucykpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlv
bnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJl
c3Npb24uc2V0T3ZlcmxvYWRzKFZlY3RvcjxBU1Q6OkNhbGxFeHByZXNzaW9uOjpPdmVybG9hZCwg
MT4oKmZ1bmN0aW9ucykpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBWaXNpdG9yOjp2
aXNpdChjYWxsRXhwcmVzc2lvbik7CisgICAgfQorCisgICAgdm9pZCBzZXRDdXJyZW50RnVuY3Rp
b25EZWZpbml0aW9uKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRpb24p
CisgICAgeworICAgICAgICBtX2N1cnJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlvbjsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKKyAgICBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07Cisg
ICAgYm9vbCBtX2Vycm9yIHsgZmFsc2UgfTsgLy8gRklYTUU6IE1pZ3JhdGUgdGhpcyB0byBiZSBz
b21lIHNvcnQgb2YgZGVzY3JpcHRpdmUgc3RyaW5nLgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBt
b3ZpbmcgdGhlIGVycm9yIGludG8gVmlzaXRvcgorfTsKKworaW5saW5lIHZvaWQgcmVzb2x2ZU5h
bWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikK
K3sKKyAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlv
bnMoKSkKKyAgICAgICAgbmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KCp0eXBlRGVmaW5pdGlv
bik7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1
cmVEZWZpbml0aW9ucygpKQorICAgICAgICBuYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKnN0
cnVjdHVyZURlZmluaXRpb24pOworICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9u
IDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgIG5hbWVSZXNvbHZl
ci5WaXNpdG9yOjp2aXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygp
KQorICAgICAgICBuYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKm5hdGl2ZVR5cGVEZWNsYXJh
dGlvbik7Cit9CisKK2lubGluZSB2b2lkIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0m
IHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0byYg
ZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAg
ICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oZnVuY3Rpb25E
ZWZpbml0aW9uLmdldCgpKTsKKyAgICAgICAgbmFtZVJlc29sdmVyLnZpc2l0KCpmdW5jdGlvbkRl
ZmluaXRpb24pOworICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVm
aW5pdGlvbihudWxscHRyKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgIG5hbWVS
ZXNvbHZlci5WaXNpdG9yOjp2aXNpdCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Cit9CiAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi5mYTA3NmEyOTczNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApAQCAtMzgs
NyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZShQ
cm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRp
b25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBmcm9tIHRo
aXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KK2F1dG8gUGFyc2VyOjpwYXJzZShQcm9n
cmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9u
YWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcpOwogICAgIG1fbW9k
ZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYg
cmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOwor
ICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZM
b2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlwZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBy
ZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlRGVmaW5pdGlvbikgewotICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAg
ICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnN0cnVj
dHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAg
ICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIHN0cnVjdHVyZURl
ZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0LDcgKzgzLDExIEBAIGF1dG8g
UGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9k
ZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRW51bWVyYXRp
b25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChlbnVtZXJh
dGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUo
KmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9
IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAg
ICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYg
cmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlv
bkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAg
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIGZ1bmN0aW9uRGVmaW5p
dGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm9yID0gZnVuY3Rpb25EZWZpbml0aW9u
LmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0m
IHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5h
cHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
ICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5h
bWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYg
cmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3Zl
KCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5kZXgg
MGViNjRkZWNkNGQuLmRhYjE0MDM4MjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTUwLDcgKzUwLDkgQEAgT3B0
aW9uYWw8UHJlcGFyYXRpb25SZXN1bHQ+IHByZXBhcmUoU3RyaW5nVmlldyBzb3VyY2UpCiAgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmVzb2x2
ZU5hbWVzSW5UeXBlcyhwcm9ncmFtKTsKKyAgICBOYW1lUmVzb2x2ZXIgbmFtZVJlc29sdmVyKHBy
b2dyYW0ubmFtZUNvbnRleHQoKSk7CisgICAgcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBu
YW1lUmVzb2x2ZXIpOworICAgIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVS
ZXNvbHZlcik7CiAKICAgICByZXR1cm4gUHJlcGFyYXRpb25SZXN1bHQoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKaW5kZXgg
NTYzMGZlNjllZTQuLjMxOTg2MTU1MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0
aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKICNpbmNsdWRl
ICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5o
IgpAQCAtNDQsNDUgKzQ1LDU4IEBAIHB1YmxpYzoKICAgICBQcm9ncmFtKCkgPSBkZWZhdWx0Owog
ICAgIFByb2dyYW0oUHJvZ3JhbSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIGFwcGVuZChBU1Q6
OlR5cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24pCisgICAgYm9vbCBhcHBlbmQoQVNUOjpU
eXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV90eXBlRGVm
aW5pdGlvbnMuYXBwZW5kKFdURk1vdmUodHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgbV90eXBl
RGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlRGVmaW5pdGlvbj4o
V1RGTW92ZSh0eXBlRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQu
YWRkKCptX3R5cGVEZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorCisgICAgYm9v
bCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikK
ICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoc3Ry
dWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1
Y3R1cmVEZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1f
c3RydWN0dXJlRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCisKKyAgICBi
b29sIGFwcGVuZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKICAgICB7Ci0gICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RG
TW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkRlZmlu
aXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
PihXVEZNb3ZlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFt
ZUNvbnRleHQuYWRkKCptX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0g
ICAgdm9pZCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRp
b24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9u
RGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQo
V1RGTW92ZShmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlZmluaXRp
b25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihXVEZN
b3ZlKGZ1bmN0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQu
YWRkKCptX2Z1bmN0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBl
bmQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYm
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBtX25hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCpt
X25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBw
ZW5kKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQor
CisgICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBw
ZW5kKFdURk1vdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlVHlw
ZURlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbj4oV1RGTW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKSk7CisgICAgICAgIHJldHVy
biBtX25hbWVDb250ZXh0LmFkZCgqbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAg
ICAgfQogCi0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+JiB0eXBlRGVmaW5pdGlvbnMo
KSB7IHJldHVybiBtX3R5cGVEZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0dXJl
RGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+JiBl
bnVtZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25z
OyB9Ci0gICAgVmVjdG9yPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPiYgZnVuY3Rpb25EZWZpbml0
aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygp
IHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1
cm4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOyB9CisgICAgTmFtZUNvbnRleHQmIG5hbWVDb250
ZXh0KCkgeyByZXR1cm4gbV9uYW1lQ29udGV4dDsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlRGVmaW5pdGlvbj4+JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5
cGVEZWZpbml0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uPj4mIHN0cnVjdHVyZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9zdHJ1Y3R1
cmVEZWZpbml0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+PiYgZW51bWVyYXRpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51
bWVyYXRpb25EZWZpbml0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpG
dW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWZpbml0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uPj4mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyBy
ZXR1cm4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+PiYgbmF0aXZlVHlwZURlY2xhcmF0
aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgot
ICAgIFZlY3RvcjxBU1Q6OlR5cGVEZWZpbml0aW9uPiBtX3R5cGVEZWZpbml0aW9uczsKLSAgICBW
ZWN0b3I8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPiBtX3N0cnVjdHVyZURlZmluaXRpb25zOwot
ICAgIFZlY3RvcjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4gbV9lbnVtZXJhdGlvbkRlZmlu
aXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4gbV9mdW5jdGlvbkRl
ZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IG1f
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7CisgICAgTmFtZUNvbnRleHQgbV9u
YW1lQ29udGV4dDsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZURlZmluaXRp
b24+PiBtX3R5cGVEZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
U3RydWN0dXJlRGVmaW5pdGlvbj4+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7CisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+IG1fZW51bWVyYXRp
b25EZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uPj4gbV9mdW5jdGlvbkRlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPj4gbV9uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPj4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAppbmRleCA1
MTY4NTZlNDFkMC4uMTZjMjQyMzk3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCkBAIC0xMDMsMjIgKzEwMywyMyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBWaXNpdG9yIHsKLSAg
ICB+VmlzaXRvcigpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WaXNpdG9yKCkg
PSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KFByb2dyYW0mIHByb2dyYW0pCiAg
ICAgewogICAgICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVm
aW5pdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAg
ICAgIHZpc2l0KCp0eXBlRGVmaW5pdGlvbik7CiAgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJl
RGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAg
IHZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICAgICAgdmlzaXQoKnN0cnVjdHVy
ZURlZmluaXRpb24pOwogICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZW51
bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCplbnVtZXJhdGlvbkRlZmlu
aXRpb24pOwogICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0u
ZnVuY3Rpb25EZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZpbml0
aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOwogICAgICAgICBm
b3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsK
ICAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbik7CisgICAgICAgICAgICB2aXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICB9
CiAKICAgICB2b2lkIHZpc2l0VHlwZShBU1Q6OlR5cGUmIHR5cGUpCkBAIC00MDIsOCArNDAzLDEw
IEBAIGNsYXNzIFZpc2l0b3IgewogICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtl
UG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKICAgICAgICAgZWxzZSBpZiAoaXM8QVNU
OjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpCiAgICAgICAgICAgICB2aXNpdChkb3duY2FzdDxB
U1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0
KGRvd25jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Cisg
ICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RG90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsK
KyAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQor
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKTsKICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
PihleHByZXNzaW9uKSkKICAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwogICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9uKSkKQEAgLTQxNiw2ICs0MTksMjIgQEAgY2xh
c3MgVmlzaXRvciB7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgdmlzaXQo
c3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihkb3RFeHByZXNzaW9u
KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9u
JiBpbmRleEV4cHJlc3Npb24pCisgICAgeworICAgICAgICB2aXNpdChpbmRleEV4cHJlc3Npb24u
aW5kZXhFeHByZXNzaW9uKCkpOworICAgICAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiY+KGluZGV4RXhwcmVzc2lvbikpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgZXhwcmVzc2lv
bikKKyAgICB7CisgICAgICAgIHZpc2l0KGV4cHJlc3Npb24uYmFzZSgpKTsKKyAgICB9CisKICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBl
ZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQogICAgIHsKICAgICAgICAgdmlzaXQoZWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwpAQCAtNTM2LDEx
ICs1NTUsNiBAQCBjbGFzcyBWaXNpdG9yIHsKICAgICAgICAgdmlzaXQobWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLmxWYWx1ZSgpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKLSAgICB7
Ci0gICAgICAgIHZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgIH0K
LQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24m
IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCiAgICAgewogICAgICAgICB2aXNpdChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwN2MxNmVmMTc3NS4uMjQ0ODFjMDJi
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTY0MDYsNiArNjQwNiw3IEBACiAJCTFDMzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAv
KiBGb250Q2FjaGVDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb250Q2FjaGVDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzdDQzIxRDIxQ0RFMTk4MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4dC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3
IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTMzMiwxMSArMjUzMzMsMTIgQEAKIAkJCQlDMjFCRjcz
NzIxQ0Q4QTAyMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuY3BwICovLAogCQkJCUMyMUJGNzM4MjFD
RDhBMDMwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAw
MDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywKLSAJCQkJQzI4OEM3MjcyMUM4QzZFRjAwMkRG
NUNBIC8qIFdITFNMVmlzaXRvci5oICovLAotIAkJCQlDMjg4QzcyOTIxQzhDQTUwMDAyREY1Q0Eg
LyogV0hMU0xQcmVwYXJlLmNwcCAqLywKLSAJCQkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8q
IFdITFNMUHJlcGFyZS5oICovLAotIAkJCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0EgLyogV0hM
U0xOYW1lUmVzb2x2ZXIuY3BwICovLAotIAkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1Q0EgLyog
V0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQlDMjg4QzcyNzIxQzhDNkVGMDAyREY1Q0EgLyog
V0hMU0xWaXNpdG9yLmggKi8sCisJCQkJQzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNM
UHJlcGFyZS5jcHAgKi8sCisJCQkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJl
cGFyZS5oICovLAorCQkJCUMyODhDNzJCMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNv
bHZlci5jcHAgKi8sCisJCQkJQzI4OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJl
c29sdmVyLmggKi8sCisJCQkJMUM3Q0MyMUQyMUNERTE5ODAwQzFGQTJDIC8qIFdITFNMTmFtZUNv
bnRleHQuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gV0hMU0w7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjU0MTIsNyArMjU0MTQsNyBAQAogCQkJCUMyMUJGNzE0MjFDRDg5RDMwMDIy
Nzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8sCiAJCQkJQzIx
QkY3MTMyMUNEODlEMjAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVSZWZlcmVuY2UuaCAqLywKIAkJ
CQlDMjFCRjcwNDIxQ0Q4OUM2MDAyMjc5NzkgLyogV0hMU0xXaGlsZUxvb3AuaCAqLywKLSAJCQkJ
QzI4OEM3MkQyMUM5OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJ
CQlDMjg4QzcyRDIxQzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAog
CQkJKTsKIAkJCXBhdGggPSBBU1Q7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358157</attachid>
            <date>2018-12-31 17:41:23 -0800</date>
            <delta_ts>2018-12-31 22:07:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>166714</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYTI4NzE0MDRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOSBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAg
IGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7
IH0KKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVu
dHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVy
OjpUb2tlbihtX29yaWdpbiksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRU
eXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7CiB9OwogCkBA
IC03NSw2ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfVU5OQU1FRF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDYWxsRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAppbmRleCA2NGFmNzEzMjk5Yy4uOGIyYmRhZjRiZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENhbGxFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTU0LDkgKzU1LDMxIEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVybiBtX2FyZ3Vt
ZW50czsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB2
b2lkIHNldENhc3REYXRhKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cworICAgIH0KKworICAgIGJvb2wgaGFzT3ZlcmxvYWRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9vdmVybG9hZHMpOyB9CisgICAgdm9pZCBzZXRPdmVybG9hZHMoY29uc3Qg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBv
dmVybG9hZHMpCisgICAgeworICAgICAgICBhc3NlcnQoIWhhc092ZXJsb2FkcygpKTsKKyAgICAg
ICAgbV9vdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorCisgICAgdm9pZCBzZXRGdW5jdGlv
bihGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0KCFtX2Z1bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlvbiA9ICZmdW5jdGlvbkRl
Y2xhcmF0aW9uOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+IG1fYXJndW1lbnRzOworICAgIE9wdGlv
bmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
Pj4gbV9vdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9mdW5jdGlvbiB7IG51
bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXgg
YTM4YjBkNWIzYTEuLmYwNDIwNTMyNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaApAQCAtNzYsMTEgKzc2LDY5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgSW50
ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpOworICAgIH0KKwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpCiAgICAgewogICAgICAgICBX
VEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkgY29uc3QKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoZXMo
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIE9w
dGlvbmFsPGJvb2w+IHJlc3VsdDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICB2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHZhbHVlID0gZmxvYXRMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8TnVsbExpdGVyYWw+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJCb29sZWFuTGl0ZXJhbCA9IFdU
Rjo6Z2V0PEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPT0gb3RoZXJCb29sZWFuTGl0ZXJhbC52
YWx1ZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UpIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3ZhcmlhbnQpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJNZW1iZXJSZWZlcmVuY2UgPSBXVEY6Omdl
dDxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92
YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmY29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSAmb3RoZXJNZW1i
ZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0OworCisgICAgICAgIG90aGVyLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gaW50ZWdlckxpdGVyYWwudmFs
dWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0
ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSBmbG9h
dExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJikgewor
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBCb29sZWFu
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSkpOworCisgICAgICAgIEFTU0VS
VChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgVmFyaWFudDwKICAgICAgICAgSW50ZWdlckxpdGVyYWwsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAppbmRleCAyYzI0YTk4YjJjYS4uMjEwMGQ3Y2E0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UuaApAQCAtMzYsMTAgKzM2LDEyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5h
bWVzcGFjZSBBU1QgewogCi1jbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworCitj
bGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGxlZnQsIFN0
cmluZyYmIHJpZ2h0KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2xlZnQoV1RGTW92
ZShsZWZ0KSkKICAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQogICAgIHsKQEAgLTUw
LDEwICs1MiwzMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlZmF1bHQ7CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgY29uc3QgU3RyaW5nJiBsZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgY29uc3QgU3RyaW5nJiByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHQ7IH0KKworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsK
KyAgICAgICAgcmV0dXJuICptX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIGNvbnN0
IEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsKKyAgICAgICAgcmV0dXJuICpt
X2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1i
ZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAg
ICAgICBtX2VudW1lcmF0aW9uTWVtYmVyID0gJmVudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKwog
cHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbGVmdDsK
ICAgICBTdHJpbmcgbV9yaWdodDsKKyAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiBtX2VudW1l
cmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5o
CmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4cHJlc3Npb24oY29uc3QgRG90
RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Npb24oRG90RXhwcmVzc2lvbiYm
KSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4l
cyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgbV9maWVsZE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nJiBmaWVsZE5hbWUoKSB7IHJl
dHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpZWxkTmFtZTsK
IH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlzRG90RXhwcmVzc2lvbigpKQor
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXggNzk3
MGI1OWU1NGEuLjFiOGYxNDUyOGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaApAQCAtMjksNyArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC0zOSwxMyArNDAsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7
CiAKLWNsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUs
IHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJl
cnMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFt
ZShXVEZNb3ZlKG5hbWUpKQorICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0
eXBlKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkp
CiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdU
Rk1vdmUobWVtYmVycykpCiAgICAgewogICAgIH0KIApAQCAtNTQsMTQgKzUzLDM1IEBAIHB1Ymxp
YzoKICAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9u
JikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5p
dGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsg
fQotICAgIEVudW1lcmF0aW9uTWVtYmVycyYgZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4g
bV9tZW1iZXJzOyB9CisgICAgYm9vbCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1
cm4gKm1fdHlwZTsgfQorCisgICAgYm9vbCBhZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIp
CisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUo
KSwgc3RkOjptYWtlX3VuaXF1ZTxFbnVtZXJhdGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7
CisgICAgICAgIHJldHVybiAhcmVzdWx0LmlzTmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVy
YXRpb25NZW1iZXIqIG1lbWJlckJ5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9tZW1iZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChp
dGVyYXRvciA9PSBtX21lbWJlcnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9u
TWVtYmVycygpCisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxF
bnVtZXJhdGlvbk1lbWJlcj4+IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9t
ZW1iZXJzKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29y
aWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5
cGU7Ci0gICAgRW51bWVyYXRpb25NZW1iZXJzIG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVf
cHRyPEVudW1lcmF0aW9uTWVtYmVyPj4gbV9tZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTAs
NiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURf
VFlQRShFbnVtZXJhdGlvbkRlZmluaXRpb24sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2Uu
LjRmMzg1MTk1NTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDYg
KzU0LDcgQEAgcHVibGljOgogICAgIEVudW1lcmF0aW9uTWVtYmVyKGNvbnN0IEVudW1lcmF0aW9u
TWVtYmVyJikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRpb25NZW1iZXIoRW51bWVyYXRpb25NZW1i
ZXImJikgPSBkZWZhdWx0OwogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9
CiAgICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3Zh
bHVlOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaApzaW1pbGFy
aXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCmluZGV4
IDc4MGQ1YzU0MjVhLi5jOWU5NjI5Mzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bC5oCkBAIC0yMywyMyArMjMsNDAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWYgRU5BQkxFKFdFQkdQVSkKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKKyNpZiBFTkFCTEUoV0VC
R1BVKQogCi0jaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJh
dGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewog
Ci1jbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7Ci0gICAgfk5hbWVSZXNvbHZl
cigpID0gZGVmYXVsdDsKLX07CituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEVudW1lcmF0aW9uTWVtYmVy
JiBlbnVtZXJhdGlvbk1lbWJlcikKKyAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2lu
KSkKKyAgICAgICAgLCBtX2VudW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0aW9uTWVtYmVyKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5FbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSA9IGRl
ZmF1bHQ7CiAKLXZvaWQgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJikKLXsKKyAgICBleHBs
aWNpdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoY29uc3QgRW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsJikgPSBkZWZhdWx0OworICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0VudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIEVudW1l
cmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcigpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25N
ZW1iZXI7IH0KKworcHJpdmF0ZToKKyAgICBFbnVtZXJhdGlvbk1lbWJlciYgbV9lbnVtZXJhdGlv
bk1lbWJlcjsKK307CiAKIH0KIApAQCAtNDcsNCArNjQsNiBAQCB2b2lkIHJlc29sdmVOYW1lc0lu
VHlwZXMoUHJvZ3JhbSYpCiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBS
RVNTSU9OKEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggZTM2ODM4MzY0NmQuLmE3ODg2
ZmJhNmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzQ29tbWFFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEZXJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0TGl0ZXJhbCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5kZXhFeHByZXNzaW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2VyTGl0
ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNh
bEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0xvZ2ljYWxOb3RFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY3LDYg
KzY5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Rlcm5hcnlFeHByZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVn
ZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNW
YXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5j
dGlvbkRlY2xhcmF0aW9uLmgKaW5kZXggN2E3ZTBhMDY1NmMuLjU2MmFmNjQwMDc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNp
bmNsdWRlICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1
ZGUgIldITFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBDb21wdXRlCiAgICAgfTsKIAotICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9j
ayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5
cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgUGFy
YW1ldGVycyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMp
CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0
ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBv
aW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5n
JiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6
OlNlbWFudGljPiYmIHNlbWFudGljKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2lu
KSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQog
ICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBAIC02NSwyNiArNjUs
MzMgQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgRnVuY3Rpb25EZWNs
YXJhdGlvbiYpID0gZGVsZXRlOwogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNs
YXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgQXR0
cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsg
fQotICAgIEFTVDo6VHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgQVNU
OjpVbm5hbWVkVHlwZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBBU1Q6
OlVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb25zJiBwYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgVmFyaWFibGVEZWNsYXJh
dGlvbnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICBPcHRpb25h
bDxBU1Q6OlNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAKICAg
ICBMZXhlcjo6VG9rZW4mJiB0YWtlT3JpZ2luKCkgeyByZXR1cm4gV1RGTW92ZShtX29yaWdpbik7
IH0KICAgICBBdHRyaWJ1dGVCbG9jayYmIHRha2VBdHRyaWJ1dGVCbG9jaygpIHsgcmV0dXJuIFdU
Rk1vdmUobV9hdHRyaWJ1dGVCbG9jayk7IH0KICAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4m
JiB0YWtlRW50cnlQb2ludFR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2ludFR5cGUp
OyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0YWtlVHlwZSgpIHsgcmV0dXJu
IFdURk1vdmUobV90eXBlKTsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZShtX3R5cGUpOyB9CiAgICAgU3RyaW5nJiYg
dGFrZU5hbWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmFtZSk7IH0KLSAgICBQYXJhbWV0ZXJzJiYg
dGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1ldGVycyk7IH0KKyAgICBW
YXJpYWJsZURlY2xhcmF0aW9ucyYmIHRha2VQYXJhbWV0ZXJzKCkgeyByZXR1cm4gV1RGTW92ZSht
X3BhcmFtZXRlcnMpOyB9CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiB0YWtlU2VtYW50
aWMoKSB7IHJldHVybiBXVEZNb3ZlKG1fc2VtYW50aWMpOyB9CiAKIHByaXZhdGU6CiAgICAgTGV4
ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7
CiAgICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IG1fZW50cnlQb2ludFR5cGU7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5h
bWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMgbV9wYXJhbWV0ZXJzOwogICAgIE9w
dGlvbmFsPEFTVDo6U2VtYW50aWM+IG1fc2VtYW50aWM7CiB9OwogCkBAIC05NCw0ICsxMDEsOSBA
QCBwcml2YXRlOgogCiB9CiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9G
VU5DVElPTl9ERUNMQVJBVElPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpUb1ZhbHVlVHlwZU5h
bWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6OkFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rp
b25EZWZpbml0aW9uLmgKaW5kZXggYTQ5MDdiMGQyOTguLmI2YjdiYTA3N2QzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRl
ZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaApAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAg
RnVuY3Rpb25EZWZpbml0aW9uKGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpID0gZGVsZXRlOwog
ICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihGdW5jdGlvbkRlZmluaXRpb24mJikgPSBkZWZhdWx0Owog
CisgICAgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKwogICAgIEJsb2NrJiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICBi
b29sIHJlc3RyaWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3RyaWN0ZWQ7IH0KIApAQCAtNjQs
NCArNjYsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
RlVOQ1RJT05fREVDTEFSQVRJT04oRnVuY3Rpb25EZWZpbml0aW9uLCBpc0Z1bmN0aW9uRGVmaW5p
dGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKaW5kZXggNmJiNmEw
ZjBkYWIuLjQzZTYwYTEwNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaApAQCAtNDks
NiArNDksMjUgQEAgcHVibGljOgogICAgIEluZGV4RXhwcmVzc2lvbihjb25zdCBJbmRleEV4cHJl
c3Npb24mKSA9IGRlbGV0ZTsKICAgICBJbmRleEV4cHJlc3Npb24oSW5kZXhFeHByZXNzaW9uJiYp
ID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1lKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9yW10iLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc2V0RnVuY3Rp
b25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9w
ZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQorCisgICAg
U3RyaW5nIGFuZEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gU3RyaW5nKCJvcGVyYXRvcltdPSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgIH0KKworICAgIEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbigpIHsgcmV0dXJuICpt
X2luZGV4OyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1f
aW5kZXg7CiB9OwpAQCAtNTksNCArNzgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihJbmRleEV4cHJlc3Npb24sIGlzSW5kZXhFeHBy
ZXNzaW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaApzaW1pbGFyaXR5IGluZGV4IDYxJQpy
ZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQ
YXJhbWV0ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMTmFtZWRUeXBlLmgKaW5kZXggOTI1ODZmODY5MWYuLjI0NDdlYzc0ZWUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJh
bWV0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOYW1lZFR5cGUuaApAQCAtMjgsMTEgKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAj
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCi0jaW5j
bHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMTm9kZS5oIgogI2luY2x1ZGUg
IldITFNMVHlwZS5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQxLDM5ICszOCw0NiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
QVNUIHsKIAotY2xhc3MgUGFyYW1ldGVyIDogcHVibGljIFZhbHVlIHsKK2NsYXNzIE5hbWVkVHlw
ZSA6IHB1YmxpYyBUeXBlIHsKIHB1YmxpYzoKLSAgICBQYXJhbWV0ZXIoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlw
ZT4mJiB0eXBlLCBPcHRpb25hbDxTdHJpbmc+JiYgbmFtZSwgT3B0aW9uYWw8QVNUOjpTZW1hbnRp
Yz4mJiBzZW1hbnRpYykKKyAgICBOYW1lZFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJp
bmcmJiBuYW1lKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAg
LCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKLSAgICAgICAgLCBtX3R5cGUoV1RG
TW92ZSh0eXBlKSkKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBt
X3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFs
IH5QYXJhbWV0ZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+TmFtZWRUeXBlKCkgPSBkZWZh
dWx0OwogCi0gICAgUGFyYW1ldGVyKGNvbnN0IFBhcmFtZXRlciYpID0gZGVsZXRlOwotICAgIFBh
cmFtZXRlcihQYXJhbWV0ZXImJikgPSBkZWZhdWx0OworICAgIE5hbWVkVHlwZShjb25zdCBOYW1l
ZFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOYW1lZFR5cGUoTmFtZWRUeXBlJiYpID0gZGVmYXVsdDsK
IAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9Ci0gICAgT3B0aW9uYWw8QVNU
OjpTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQorICAgIExleGVy
OjpUb2tlbiYgb3JpZ2luKCkgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcmIG5hbWUo
KSB7IHJldHVybiBtX25hbWU7IH0KKworICAgIGJvb2wgaXNOYW1lZFR5cGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzVHlwZURlZmluaXRpb24o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1N0cnVjdHVyZURl
ZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Vu
dW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzTmF0aXZlVHlwZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KworICAgIHZpcnR1YWwgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3QgeyByZXR1cm4gKnRo
aXM7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgUXVhbGlm
aWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBl
OwotICAgIE9wdGlvbmFsPFN0cmluZz4gbV9uYW1lOwotICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50
aWM+IG1fc2VtYW50aWM7CisgICAgU3RyaW5nIG1fbmFtZTsKIH07CiAKLXR5cGVkZWYgVmVjdG9y
PFBhcmFtZXRlcj4gUGFyYW1ldGVyczsKLQogfQogCiB9CiAKIH0KIAorI2RlZmluZSBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNh
dGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6
VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OldITFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0g
XAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1dITFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlwZSgpKQorCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCAwMTBlNmViYTcwMC4u
MjQ0ZTg0MTAxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiBwdWJsaWM6
Ci0gICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0
dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBl
bnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcm
JiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4m
JiBzZW1hbnRpYywgYm9vbCByZXN0cmljdGVkKQorICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2Nr
LCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxlRGVjbGFy
YXRpb25zJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYywg
Ym9vbCByZXN0cmljdGVkKQogICAgICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZShv
cmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50VHlwZSks
IFdURk1vdmUodHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1v
dmUoc2VtYW50aWMpKQogICAgICAgICAsIG1fcmVzdHJpY3RlZChyZXN0cmljdGVkKQogICAgIHsK
QEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
Y29uc3QgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7
CiAKKyAgICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzdHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAtNjAsNCArNjIsNiBAQCBwcml2YXRlOgog
CiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04o
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkp
CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAppbmRleCAz
MjBhYmMzYzQ3NS4uNmVkOThlYzc0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDExICszOCwxMCBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDog
cHVibGljIFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIE5hbWVk
VHlwZSB7CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCi0g
ICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZN
b3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUo
bmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3VtZW50cykp
CiAgICAgewogICAgIH0KQEAgLTUyLDE2ICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlVHlw
ZURlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAg
IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0
OwogCi0gICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1fdHlwZUFy
Z3VtZW50czsgfQorICAgIGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUo
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25h
bWU7IH0KKyAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBl
QXJndW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAg
IFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CiB9OwpA
QCAtNzIsNCArNjgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfTkFNRURfVFlQRShOYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlzTmF0aXZlVHlwZURlY2xh
cmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKaW5kZXggMTUyOTQyNmEyZWQu
LjYzYzIwOTNjNTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKQEAgLTM5LDggKzM5LDggQEAgbmFt
ZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFBvaW50ZXJUeXBlIDogcHVibGljIFJlZmVyZW5jZVR5cGUg
ewogcHVibGljOgotICAgIFBvaW50ZXJUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5n
JiYgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gZWxlbWVudFR5cGUpCi0gICAg
ICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYWRkcmVzc1NwYWNl
KSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IGVsZW1lbnRUeXBlKQorICAgICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmln
aW4pLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAK
QEAgLTQ5LDExICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgUG9pbnRlclR5cGUoY29uc3QgUG9pbnRl
clR5cGUmKSA9IGRlbGV0ZTsKICAgICBQb2ludGVyVHlwZShQb2ludGVyVHlwZSYmKSA9IGRlZmF1
bHQ7CiAKLSAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4o
TGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKGFkZHJlc3NTcGFjZSgpKSwgZWxlbWVudFR5
cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UG9pbnRlclR5
cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgp
LmNsb25lKCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTY1LDYgKzY1LDYgQEAgcHJpdmF0ZToK
IAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoUG9pbnRlclR5cGUsIGlz
UG9pbnRlclR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBF
KFBvaW50ZXJUeXBlLCBpc1BvaW50ZXJUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAppbmRleCBiYTM4YTVjMDFlYS4uZDA1YTcyYzFm
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC01
MSwxMCArNTEsMzAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Byb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1YWwgU3Ry
aW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgYW5kRnVuY3Rpb25O
YW1lKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3ZlcmxvYWRz
OworICAgIH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRz
KQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAg
ICB9CisKICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gKm1fYmFzZTsgfQogCiBwcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2Jhc2U7CisgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2li
bGVHZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVTZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVB
bmRPdmVybG9hZHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmgKaW5kZXggYTRjMTRjZTFjZjMuLmNkNTU2MzIwZGIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCkBAIC0yNyw3ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1
ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgog
ICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBzdGQ6
OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuKG9yaWdpbikpCiAgICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQot
ICAgICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAgICwgbV9u
ZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9r
ZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBudWxscHRyKQorICAgICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pLCBRdWFsaWZp
ZXJzKCksIG51bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpCiAgICAgewog
ICAgIH0KIApAQCAtODcsMTUgKzg3LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAg
IEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuICptX2xWYWx1ZTsgfQotICAgIEFub255bW91
c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQot
ICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9u
ZXdWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4g
bV9vbGRWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1
cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24mIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsg
cmV0dXJuICptX25ld1ZhbHVlRXhwcmVzc2lvbjsgfQogICAgIEV4cHJlc3Npb24mIHJlc3VsdEV4
cHJlc3Npb24oKSB7IHJldHVybiAqbV9yZXN1bHRFeHByZXNzaW9uOyB9CiAKIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uIG1fbmV3VmFsdWU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX29sZFZhbHVlOwor
ICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXhwcmVzc2lvbj4gbV9uZXdWYWx1ZUV4cHJlc3Npb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
cHJlc3Npb24+IG1fcmVzdWx0RXhwcmVzc2lvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgK
aW5kZXggMjI1N2Y5YmUyNDAuLjRlNjlmNzliOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5o
CkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM3LDExICszNywxOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
QVNUIHsKIAotY2xhc3MgUmVmZXJlbmNlVHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFJlZmVy
ZW5jZVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIFJlZmVyZW5jZVR5
cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUo
b3JpZ2luKSkKLSAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShXVEZNb3ZlKGFkZHJlc3NTcGFjZSkp
CisgICAgZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UgeworICAgICAgICBDb25zdGFudCwKKyAgICAg
ICAgRGV2aWNlLAorICAgICAgICBUaHJlYWRncm91cCwKKyAgICAgICAgVGhyZWFkCisgICAgfTsK
KworICAgIFJlZmVyZW5jZVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBZGRyZXNzU3BhY2Ug
YWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgZWxlbWVudFR5cGUp
CisgICAgICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fYWRk
cmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUo
ZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CkBAIC01MCwxOCArNTcsMTYgQEAgcHVibGljOgog
CiAgICAgUmVmZXJlbmNlVHlwZShjb25zdCBSZWZlcmVuY2VUeXBlJikgPSBkZWxldGU7CiAgICAg
UmVmZXJlbmNlVHlwZShSZWZlcmVuY2VUeXBlJiYpID0gZGVmYXVsdDsKLSAgICAKLSAgICBUeXBl
JiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CiAKLXByb3RlY3RlZDoK
LSAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
OyB9Ci0gICAgY29uc3QgU3RyaW5nJiBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2Fk
ZHJlc3NTcGFjZTsgfQotICAgIGNvbnN0IFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1
cm4gKm1fZWxlbWVudFR5cGU7IH0KKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKyAgICBjb25zdCBVbm5hbWVkVHlw
ZSYgZWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAgIFVu
bmFtZWRUeXBlJiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CiAKIHBy
aXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX2FkZHJlc3NT
cGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBBZGRy
ZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBl
PiBtX2VsZW1lbnRUeXBlOwogfTsKIAogfQpAQCAtNzAsNCArNzUsNiBAQCBwcml2YXRlOgogCiB9
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBFKFJlZmVyZW5jZVR5
cGUsIGlzUmVmZXJlbmNlVHlwZSgpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzViZmM5ZTQy
ODYuLmFjOTMyM2QyNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTEgQEAgcHVibGljOgog
CiAgICAgRXhwcmVzc2lvbiogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAKKyAg
ICB2b2lkIHNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9u
KSB7IG1fZnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAgICBGdW5j
dGlvbkRlZmluaXRpb24qIG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1
cmVEZWZpbml0aW9uLmgKaW5kZXggODdjYzYyZjIzNTYuLmE4Yzk4ZTk5YjRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVE
ZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM5
LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xh
c3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFN0cnVjdHVyZURl
ZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVEZWZp
bml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgU3RydWN0dXJlRWxl
bWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9y
aWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgIDogTmFtZWRU
eXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3N0cnVjdHVy
ZUVsZW1lbnRzKFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMpKQogICAgIHsKICAgICB9CkBAIC01
MywxNyArNTIsMTEgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24oY29uc3QgU3Ry
dWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZURlZmluaXRpb24oU3Ry
dWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJ1Y3R1cmVFbGVtZW50cyYg
c3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CisgICAg
Ym9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KKyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7
IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRv
a2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RydWN0dXJlRWxlbWVudHMg
bV9zdHJ1Y3R1cmVFbGVtZW50czsKIH07CiAKQEAgLTczLDQgKzY2LDYgQEAgcHJpdmF0ZToKIAog
fQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoU3RydWN0dXJlRGVm
aW5pdGlvbiwgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRWxlbWVudC5oCmluZGV4IDE0YmU0MWM3Mjk4Li5hOGNiZjk4ZGY1NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJl
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFN0cnVjdHVyZUVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgQVNUIHsK
IAogY2xhc3MgU3RydWN0dXJlRWxlbWVudCA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKLSAgICBT
dHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxp
ZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIE9wdGlv
bmFsPFNlbWFudGljPiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tl
biYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxVbm5h
bWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4gc2VtYW50
aWMpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVh
bGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5
cGUpKQpAQCAtNTUsMTMgKzU1LDE1IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVFbGVtZW50KGNv
bnN0IFN0cnVjdHVyZUVsZW1lbnQmKSA9IGRlbGV0ZTsKICAgICBTdHJ1Y3R1cmVFbGVtZW50KFN0
cnVjdHVyZUVsZW1lbnQmJikgPSBkZWZhdWx0OwogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJu
ICptX3R5cGU7IH0KKyAgICBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIHsgcmV0dXJuIG1fb3JpZ2lu
OyB9CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50
aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogcHJpdmF0ZToKICAgICBM
ZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPFNlbWFudGlj
PiBtX3NlbWFudGljOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGUuaAppbmRleCBjZjRjYmM4ODc5MC4uNTczYThiYjY4YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5
cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xU
eXBlLmgKQEAgLTQ1LDEyICs0NSw4IEBAIHB1YmxpYzoKICAgICBUeXBlKGNvbnN0IFR5cGUmKSA9
IGRlbGV0ZTsKICAgICBUeXBlKFR5cGUmJikgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBib29s
IGlzVHlwZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAg
IHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzVW5uYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2
YXRlOgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCmluZGV4IGY3MzYyOWUyOWIxLi42OWFh
MjNhMWZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw4IEBACiAK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0jaW5jbHVk
ZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewog
CiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMgVHlwZSB7
CitjbGFzcyBUeXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgotICAg
IFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1v
dmUob3JpZ2luKSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICBUeXBlRGVm
aW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1v
dmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBl
KSkKICAgICB7CiAgICAgfQpAQCAtNTIsMTggKzUyLDE4IEBAIHB1YmxpYzoKICAgICBUeXBlRGVm
aW5pdGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFR5cGVEZWZpbml0
aW9uKFR5cGVEZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIEFTVDo6VHlwZSYgdHlwZSgp
IHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBib29sIGlzVHlwZURlZmluaXRpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xv
bmUoKSBjb25zdCBvdmVycmlkZQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVy
biAqbV90eXBlOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBBU1NFUlQobV90eXBlKTsKKyAgICAgICAgcmV0dXJuIG1fdHlwZS0+
dW5pZnlOb2RlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdp
bjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1f
dHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogfTsK
IAogfQpAQCAtNzIsNCArNzIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfTkFNRURfVFlQRShUeXBlRGVmaW5pdGlvbiwgaXNUeXBlRGVmaW5pdGlvbigp
KQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAppbmRleCA0OTQ0MWQ4YjVjNy4uOTI5
M2FhMjY0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKQEAgLTI4LDggKzI4LDkgQEAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldI
TFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM4LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsK
IAotY2xhc3MgVHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFR5cGVSZWZlcmVu
Y2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgogICAgIFR5cGVSZWZlcmVuY2UoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFy
Z3VtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgIDog
VW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5h
bWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3ZlKHR5cGVBcmd1bWVudHMpKQog
ICAgIHsKQEAgLTUyLDI0ICs1Myw0NyBAQCBwdWJsaWM6CiAgICAgVHlwZVJlZmVyZW5jZShjb25z
dCBUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgVHlwZVJlZmVyZW5jZShUeXBlUmVmZXJl
bmNlJiYpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVy
ZW5jZT4gd3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBl
KQorICAgIHsKKyAgICAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOworICAgICAgICBp
ZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAgICAgICAg
dHlwZUFyZ3VtZW50cyA9IEFTVDo6Y2xvbmUoZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9u
PihyZXNvbHZlZFR5cGUpLnR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
c3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZyhy
ZXNvbHZlZFR5cGUubmFtZSgpKSwgV1RGTW92ZSh0eXBlQXJndW1lbnRzKSk7CisgICAgICAgIHJl
c3VsdC0+c2V0UmVzb2x2ZWRUeXBlKHJlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCiAgICAgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0K
ICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBlQXJndW1l
bnRzOyB9CisgICAgTmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSB7IHJldHVybiBtX3Jlc29sdmVk
VHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVybiBtX3Jl
c29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UmVzb2x2
ZWRUeXBlKE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9yZXNvbHZl
ZFR5cGUgPSAmcmVzb2x2ZWRUeXBlOworICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBl
UmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKG1fb3JpZ2lu
KSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7CisgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tlbihvcmln
aW4oKSksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50cykpOwogICAg
IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAg
ICAgewogICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVmZXJlbmNlKCk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9uYW1lOwogICAg
IFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOworICAgIE5hbWVkVHlwZSogbV9yZXNvbHZl
ZFR5cGUgeyBudWxscHRyIH07CiB9OwogCiB9CkBAIC03OCw2ICsxMDIsNiBAQCBwcml2YXRlOgog
CiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShUeXBlUmVmZXJlbmNlLCBp
c1R5cGVSZWZlcmVuY2UoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9U
WVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRU
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5h
bWVkVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43M2E4ZjBh
MGM0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVW5uYW1lZFR5cGUg
OiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5cGUoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB+VW5uYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBVbm5hbWVk
VHlwZShjb25zdCBVbm5hbWVkVHlwZSYpID0gZGVsZXRlOworICAgIFVubmFtZWRUeXBlKFVubmFt
ZWRUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlUmVmZXJlbmNl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludGVyVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJyYXlSZWZl
cmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNB
cnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Jl
ZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBjb25z
dCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisgICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOworCisgICAg
Y29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQor
Citwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKK307CisKK30KKworfQorCit9
CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoVG9W
YWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlVubmFtZWRUeXBlJiB0eXBlKSB7IHJl
dHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShVbm5hbWVkVHlwZSwgaXNVbm5hbWVk
VHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAppbmRl
eCBmZjAzNjgxOTNiZC4uODUyMGNhZGNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFZhcmlh
YmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgotICAgIFZhcmlhYmxlRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywg
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25h
bDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5p
dGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywg
c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAgIDogbV9v
cmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1
YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjAsMjAgKzYw
LDIzIEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRp
b24mJikgPSBkZWZhdWx0OwogCiAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAK
LSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIFVubmFtZWRUeXBlJiB0
eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQogICAgIE9wdGlvbmFsPFNlbWFudGljPiYgc2VtYW50
aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAgICAgRXhwcmVzc2lvbiogaW5pdGlhbGl6ZXIo
KSB7IHJldHVybiBtX2luaXRpYWxpemVyLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgTGV4ZXI6
OlRva2VuIG1fb3JpZ2luOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8U2Vt
YW50aWM+IG1fc2VtYW50aWM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1faW5p
dGlhbGl6ZXI7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiBWYXJp
YWJsZURlY2xhcmF0aW9uczsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2Uu
aAppbmRleCAyYWU4MjhkNTI5NS4uZTM5ZWNmNWM1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVS
ZWZlcmVuY2UuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2lu
Y2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgog
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRp
b24uaCIKQEAgLTU1LDE5ICs1NSwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhcmlhYmxlUmVm
ZXJlbmNlIHdyYXAoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAg
ICB7CiAgICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4odmFyaWFi
bGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJsZSA9IHsg
JnZhcmlhYmxlRGVjbGFyYXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSAmdmFy
aWFibGVEZWNsYXJhdGlvbjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBz
dGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3JhcChBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
JiBhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKQorICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVy
ZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyYgbmFt
ZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiogdmFyaWFi
bGUoKSB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKKyAgICB2b2lkIHNldFZhcmlhYmxlKFZhcmlh
YmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBWYXJp
YWJsZVJlZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKGFub255bW91c1ZhcmlhYmxlRGVjbGFy
YXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZhbm9ueW1v
dXNWYXJpYWJsZURlY2xhcmF0aW9uIH07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IG1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9CiAKLSAgICBib29sIGlz
VmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KIHBy
aXZhdGU6CiAgICAgVmFyaWFibGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQogICAg
ICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQpAQCAtNzUsNyArNzcsNyBAQCBwcml2
YXRlOgogICAgIH0KIAogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8VmFyaWFudDxW
YXJpYWJsZURlY2xhcmF0aW9uKiwgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbio+PiBtX3Zh
cmlhYmxlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIG1fdmFyaWFibGU7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNr
RHVwbGljYXRlRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjNjMzJmNGNmY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5o
CkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hM
U0xQcm9ncmFtLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2lubGluZSBib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rp
b25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPj4gZnVuY3Rpb25zOworICAgIGZvciAo
YXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkp
CisgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgZm9y
IChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKTsKKworICAgIHN0ZDo6c29ydChmdW5jdGlvbnMuYmVnaW4oKSwgZnVuY3Rp
b25zLmVuZCgpLCBbXShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGEsIGNvbnN0IEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgYikgLT4gYm9vbCB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdGQ6Om1pbihhLm5hbWUoKS5sZW5ndGgoKSwgYi5uYW1lKCkubGVuZ3Ro
KCkpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA8IGIubmFtZSgpW2ldKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKGEubmFtZSgpW2ld
ID4gYi5uYW1lKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBhLm5hbWUoKS5sZW5ndGgoKSA8IGIubmFtZSgpLmxlbmd0aCgpOwor
ICAgIH0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGZ1bmN0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgIT0gZnVu
Y3Rpb25zW2pdLmdldCgpLm5hbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGlmIChpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9uc1tpXS5n
ZXQoKSkgJiYgaXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbal0u
Z2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5w
YXJhbWV0ZXJzKCkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yIGNhc3QiKSB7Cisg
ICAgICAgICAgICAgICAgYm9vbCBzYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1h
dGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgpLnR5cGUo
KSkpCisgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50
eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2FtZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBib29sIHNhbWUgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCk7
ICsraykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJz
KClba10udHlwZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIiAm
JiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAgICAg
ICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVswXS50eXBlKCkpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlID0gZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCk7CisgICAgICAgICAgICBpZiAoaXM8QVNU
OjpUeXBlUmVmZXJlbmNlPih0eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNv
bHZlZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlw
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4oKnJlc29sdmVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
PigqcmVzb2x2ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5h
bWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAxCisgICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKQorICAgICAgICAg
ICAgfHwgaXM8QVNUOjpBcnJheVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVsc2UgaWYg
KGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCisgICAgICAgICAgICAm
JiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKQorICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSkKKyAgICAgICAgICAgICYmIG1h
dGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9u
c1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZl
clR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVy
VHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGIxM2RkMGE2
M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEluZmVyVHlwZXMuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMVHlwZURlZmlu
aXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworaW5saW5lIGJvb2wgbWF0Y2hlcyhj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgQVNUOjpVbm5hbWVkVHlw
ZSYgb3RoZXIpCit7CisgICAgYXV0byYgdW5pZnlUaGlzID0gdW5uYW1lZFR5cGUudW5pZnlOb2Rl
KCk7CisgICAgYXV0byYgdW5pZnlPdGhlciA9IG90aGVyLnVuaWZ5Tm9kZSgpOworCisgICAgaWYg
KCZ1bmlmeVRoaXMgPT0gJnVuaWZ5T3RoZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpICYmIGlzPEFTVDo6TmFtZWRUeXBlPih1
bmlmeU90aGVyKSkgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgYXV0byYgbmFtZWRU
aGlzID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8m
IG5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlPdGhlcik7CisgICAg
ICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUaGlzKSAmJiAhaXM8QVNU
OjpUeXBlRGVmaW5pdGlvbj4obmFtZWRPdGhlcikpOworI2VuZGlmCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5VGhpcykgJiYg
aXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcikpIHsKKyAgICAgICAgYXV0byYgdW5uYW1l
ZFRoaXMgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMpOworICAgICAgICBh
dXRvJiB1bm5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU90aGVy
KTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUaGlzKSAm
JiAhaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkT3RoZXIpKTsKKyAgICAgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkT3RoZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBwb2ludGVyVGhpcyA9IGRvd25jYXN0
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAgIGF1dG8mIHBvaW50
ZXJPdGhlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcik7CisgICAg
ICAgICAgICBpZiAocG9pbnRlclRoaXMuYWRkcmVzc1NwYWNlKCkgIT0gcG9pbnRlck90aGVyLmFk
ZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBtYXRjaGVzKHBvaW50ZXJUaGlzLmVsZW1lbnRUeXBlKCksIHBvaW50ZXJPdGhlci5l
bGVtZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5u
YW1lZE90aGVyKSl7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVRoaXMgPSBkb3du
Y2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpOworICAgICAgICAgICAg
YXV0byYgYXJyYXlSZWZlcmVuY2VPdGhlciA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFycmF5UmVmZXJlbmNlVGhpcy5h
ZGRyZXNzU3BhY2UoKSAhPSBhcnJheVJlZmVyZW5jZU90aGVyLmFkZHJlc3NTcGFjZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGFy
cmF5UmVmZXJlbmNlVGhpcy5lbGVtZW50VHlwZSgpLCBhcnJheVJlZmVyZW5jZU90aGVyLmVsZW1l
bnRUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5u
YW1lZFRoaXMpICYmIGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkT3RoZXIpKSB7CisgICAgICAg
ICAgICBhdXRvJiBhcnJheVRoaXMgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFRo
aXMpOworICAgICAgICAgICAgYXV0byYgYXJyYXlPdGhlciA9IGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFycmF5VGhpcy5udW1FbGVtZW50
cygpICE9IGFycmF5T3RoZXIubnVtRWxlbWVudHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhhcnJheVRoaXMudHlwZSgpLCBhcnJh
eU90aGVyLnR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIGluZmVyVHlwZXNGb3JUeXBlQXJn
dW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYg
dHlwZUFyZ3VtZW50cykKK3sKKyAgICBpZiAoaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4ocG9zc2li
bGVUeXBlKQorICAgICAgICB8fCBpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KHBvc3NpYmxl
VHlwZSkKKyAgICAgICAgfHwgaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHBvc3NpYmxl
VHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVBcmd1bWVudHMuaXNFbXB0eSgpOworICAgIH0K
KworICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocG9zc2libGVUeXBl
KSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSk7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpICE9IHR5cGVBcmd1bWVudHMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFT
VDo6Q29uc3RhbnRFeHByZXNzaW9uKiB0eXBlQXJndW1lbnRFeHByZXNzaW9uID0gbnVsbHB0cjsK
KyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiB0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlID0g
bnVsbHB0cjsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qIG5hdGl2ZVR5cGVBcmd1
bWVudEV4cHJlc3Npb24gPSBudWxscHRyOworICAgICAgICBBU1Q6OlR5cGVSZWZlcmVuY2UqIG5h
dGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgPSBudWxscHRyOworCisgICAgICAgIGF1dG8g
YXNzaWduID0gWyZdKEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQsIEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uKiYgZXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlKiYgdHlwZVJlZmVy
ZW5jZSkgeworICAgICAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAg
ICAgZXhwcmVzc2lvbiA9ICZjb25zdGFudEV4cHJlc3Npb247CisgICAgICAgICAgICB9LCBbJl0o
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHRoZVR5cGVSZWZlcmVuY2UpIHsK
KyAgICAgICAgICAgICAgICB0eXBlUmVmZXJlbmNlID0gdGhlVHlwZVJlZmVyZW5jZS5nZXQoKTsK
KyAgICAgICAgICAgIH0pLCB0eXBlQXJndW1lbnQpOworICAgICAgICB9OworCisgICAgICAgIGFz
c2lnbih0eXBlQXJndW1lbnRzW2ldLCB0eXBlQXJndW1lbnRFeHByZXNzaW9uLCB0eXBlQXJndW1l
bnRUeXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXNzaWduKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50
eXBlQXJndW1lbnRzKClbaV0sIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24sIG5hdGl2ZVR5
cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOworCisgICAgICAgIGlmICh0eXBlQXJndW1lbnRFeHBy
ZXNzaW9uICYmIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIGlm
ICghdHlwZUFyZ3VtZW50RXhwcmVzc2lvbi0+bWF0Y2hlcygqbmF0aXZlVHlwZUFyZ3VtZW50RXhw
cmVzc2lvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2Ug
aWYgKHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgJiYgbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJl
ZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCp0eXBlQXJndW1lbnRUeXBlUmVm
ZXJlbmNlLCAqbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi44MzIyMjcyNTQ0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAKQEAgLTAsMCAr
MSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorCisjaW5jbHVkZSAiV0hMU0xD
b25zdGFudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2lu
Y2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBXSExTTCB7CisKK0ludHJpbnNpY3M6OkludHJpbnNpY3MoKQorICAgIDogdGV4dHVy
ZVR5cGVOYW1lcyB7IFN0cmluZygiVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUxREFycmF5IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVy
ZTFEQXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0
cmluZygiVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAg
ICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
CisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEQXJyYXkiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTNE
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJX
VGV4dHVyZTNEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBT
dHJpbmcoIlRleHR1cmVDdWJlIiwgIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAg
ICAsIHRleHR1cmVJbm5lclR5cGVOYW1lcyB7IFN0cmluZygidWNoYXIiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidXNob3J0IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInVpbnQiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiY2hhciIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJzaG9ydCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJpbnQiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiaGFsZiIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJmbG9h
dCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIGRlcHRoVGV4dHVyZUlu
bmVyVHlwZXMgeyBTdHJpbmcoImhhbGYiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwK
KyAgICAgICAgICAgIFN0cmluZygiZmxvYXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSB9Cit7CisgICAgQVNTRVJUKHRleHR1cmVUeXBlTmFtZXMuc2l6ZSgpID09IDExKTsgLy8gZnVs
bFRleHR1cmVzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNTRVJU
KHRleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkgPT0gOCk7IC8vIGZ1bGxUZXh0dXJlcyBoYXJk
Y29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChkZXB0aFRleHR1cmVJ
bm5lclR5cGVzLnNpemUoKSA9PSAyKTsgLy8gdGV4dHVyZURlcHRoMkQgJiBmcmllbmRzIGhhcmRj
b2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRk
UHJpbWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRp
b24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6
ZSgpICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpID09ICJ2b2lkIikKKyAgICAgICAgdm9pZFR5cGUgPSAmbmF0aXZlVHlw
ZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gImJvb2wiKQorICAgICAgICBib29sVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247Cisg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWNoYXIiKQorICAg
ICAgICB1Y2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgIHVzaG9ydFR5
cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICB1aW50VHlwZSA9ICZuYXRpdmVUeXBl
RGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiY2hhciIpCisgICAgICAgIGNoYXJUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAg
ICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJzaG9ydCIpCisgICAg
ICAgIHNob3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgaW50VHlwZSA9ICZu
YXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAiaGFsZiIpCisgICAgICAgIGhhbGZUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJh
dGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJmbG9h
dCIpCisgICAgICAgIGZsb2F0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxz
ZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX2ludCIpCisgICAg
ICAgIGF0b21pY0ludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAgICAg
YXRvbWljVWludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNhbXBsZXIiKQorICAgICAgICBzYW1wbGVy
VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjph
ZGRWZWN0b3IoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAidmVjdG9yIikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQb2ludGVyID0gV1RG
OjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8mIGxlbmd0aEV4cHJlc3Npb24g
PSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgQVNTRVJUKGlubmVyVHlwZVBvaW50ZXIpOworICAg
IGF1dG8mIGlubmVyVHlwZSA9ICppbm5lclR5cGVQb2ludGVyOworICAgIEFTU0VSVChpbm5lclR5
cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAwKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbioqIGFycmF5OworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJib29sIikKKyAg
ICAgICAgYXJyYXkgPSB2ZWN0b3JCb29sOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkg
PT0gInVjaGFyIikKKyAgICAgICAgYXJyYXkgPSB2ZWN0b3JVY2hhcjsKKyAgICBlbHNlIGlmIChp
bm5lclR5cGUubmFtZSgpID09ICJ1c2hvcnQiKQorICAgICAgICBhcnJheSA9IHZlY3RvclVzaG9y
dDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgYXJy
YXkgPSB2ZWN0b3JVaW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImNoYXIi
KQorICAgICAgICBhcnJheSA9IHZlY3RvckNoYXI7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5h
bWUoKSA9PSAic2hvcnQiKQorICAgICAgICBhcnJheSA9IHZlY3RvclNob3J0OworICAgIGVsc2Ug
aWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImludCIpCisgICAgICAgIGFycmF5ID0gdmVjdG9ySW50
OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICBhcnJh
eSA9IHZlY3RvckhhbGY7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQi
KQorICAgICAgICBhcnJheSA9IHZlY3RvckZsb2F0OworICAgIGVsc2UKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgaW50IGxlbmd0aCA9IGxlbmd0aEV4cHJlc3Npb24uaW50ZWdl
ckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChsZW5ndGggPj0gMiAmJiBsZW5ndGggPD0g
NCk7CisgICAgYXJyYXlbbGVuZ3RoIC0gMl0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZE1hdHJpeChBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJtYXRyaXgiKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5z
aXplKCkgPT0gMyk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsx
XSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzJdKSk7CisgICAg
YXV0byYgaW5uZXJUeXBlUG9pbnRlciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsK
KyAgICBhdXRvJiByb3dFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Np
b24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pOworICAgIGF1dG8m
IGNvbHVtbkV4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSk7CisgICAgQVNTRVJUKGlubmVy
VHlwZVBvaW50ZXIpOworICAgIGF1dG8mIGlubmVyVHlwZSA9ICppbm5lclR5cGVQb2ludGVyOwor
ICAgIEFTU0VSVChpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAwKTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogKCphcnJheSlbM107CisgICAgaWYgKGlubmVyVHlw
ZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICBhcnJheSA9IG1hdHJpeEhhbGY7CisgICAgaWYg
KGlubmVyVHlwZS5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBtYXRyaXhGbG9h
dDsKKyAgICBpbnQgcm93ID0gcm93RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7
CisgICAgQVNTRVJUKHJvdyA+PSAyICYmIHJvdyA8PSA0KTsKKyAgICBpbnQgY29sdW1uID0gY29s
dW1uRXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGNvbHVt
biA+PSAyICYmIGNvbHVtbiA8PSA0KTsKKyAgICBhcnJheVtyb3cgLSAyXVtjb2x1bW4gLSAyXSA9
ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50
cmluc2ljczo6YWRkRnVsbFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBlUmVmZXJlbmNlJiBpbm5lclR5cGUpCit7CisgICAg
dW5zaWduZWQgdGV4dHVyZVR5cGVJbmRleCA9IHRleHR1cmVUeXBlTmFtZXMuc2l6ZSgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09IHRleHR1cmVUeXBl
TmFtZXNbaV0pCisgICAgICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAg
aWYgKHRleHR1cmVUeXBlSW5kZXggPT0gdGV4dHVyZVR5cGVOYW1lcy5zaXplKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIGlubmVyVHlwZUluZGV4ID0gdGV4dHVyZUlu
bmVyVHlwZU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKS5zdGFydHNXaXRoKHRleHR1cmVJbm5lclR5
cGVOYW1lc1tpXSkpIHsKKyAgICAgICAgICAgIHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgICAg
ICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKQor
ICAgICAgICAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDE7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSA9PSB0ZXh0dXJl
SW5uZXJUeXBlTmFtZXNbaV0ubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
aW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzInCisg
ICAgICAgICAgICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5s
ZW5ndGgoKSAtIDFdID09ICczJworICAgICAgICAgICAgICAgICAgICB8fCBpbm5lclR5cGUubmFt
ZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnNCcpOworICAgICAgICAgICAg
ICAgIHZlY3Rvckxlbmd0aCA9IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5n
dGgoKSAtIDFdIC0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFT
U0VSVChpbm5lclR5cGVJbmRleCAhPSB0ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpKTsKKyAg
ICBmdWxsVGV4dHVyZXNbdGV4dHVyZVR5cGVJbmRleF1baW5uZXJUeXBlSW5kZXhdW3ZlY3Rvckxl
bmd0aCAtIDFdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBJbnRyaW5zaWNzOjphZGREZXB0aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBlUmVmZXJlbmNlJiBpbm5lclR5
cGUpCit7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qKiB0ZXh0dXJlOworICAgIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGgyRCIpCisgICAg
ICAgIHRleHR1cmUgPSB0ZXh0dXJlRGVwdGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9
IHJ3VGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJl
RGVwdGgyREFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIlJXVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSByd1RleHR1cmVE
ZXB0aDJEQXJyYXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiVGV4dHVyZURlcHRoQ3ViZSIpCisgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlRGVwdGhDdWJl
OworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWduZWQg
aW5uZXJUeXBlSW5kZXggPSBkZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSBkZXB0aFRleHR1cmVJbm5lclR5cGVz
W2ldKQorICAgICAgICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBBU1NFUlQo
aW5uZXJUeXBlSW5kZXggIT0gZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCkpOworICAgIHRl
eHR1cmVbaW5uZXJUeXBlSW5kZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKK30KKwordm9p
ZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRp
dmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50
eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRl
ciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBl
UG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7CisgICAg
QVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIGlmIChh
ZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlwZSkpCisgICAgICAg
IHJldHVybjsKKyAgICBhZGREZXB0aFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uLCBpbm5l
clR5cGUpOworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChhZGRQcmltaXRpdmUobmF0
aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhZGRWZWN0b3Io
bmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhZGRNYXRy
aXgobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZFRleHR1
cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNz
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3Mu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTViOGYyYTNmNmEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEludHJpbnNpY3MuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEludHJpbnNpY3Mg
eworcHVibGljOgorICAgIEludHJpbnNpY3MoKTsKKworICAgIHZvaWQgYWRkKEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKKyAgICB7Cisg
ICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXNkZiIpIHsK
KyAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFkZChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYpOworCitwcml2YXRlOgorICAgIGJvb2wgYWRkUHJpbWl0aXZlKEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRWZWN0b3IoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYpOworICAgIGJvb2wgYWRkRnVsbFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGFkZERlcHRoVGV4dHVyZShB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIHZv
aWQgYWRkVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworCisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIHZvaWRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBib29sVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogdWNoYXJU
eXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB1c2hvcnRUeXBlOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB1aW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogY2hhclR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHNo
b3J0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogaW50VHlwZTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogaGFsZlR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIGZsb2F0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
YXRvbWljSW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogYXRvbWljVWlu
dFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHNhbXBsZXJUeXBlOworCisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHZlY3RvckJvb2xbM107CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIHZlY3RvclVjaGFyWzNdOworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiB2ZWN0b3JVc2hvcnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIHZlY3RvclVpbnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHZl
Y3RvckNoYXJbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHZlY3RvclNob3J0
WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB2ZWN0b3JJbnRbM107CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHZlY3RvckhhbGZbM107CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIHZlY3RvckZsb2F0WzNdOworCisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1hdHJpeEhhbGZbM11bM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIG1hdHJpeEZsb2F0WzNdWzNdOworCisgICAgVmVjdG9yPFN0cmluZz4gdGV4dHVyZVR5
cGVOYW1lczsKKyAgICBWZWN0b3I8U3RyaW5nPiB0ZXh0dXJlSW5uZXJUeXBlTmFtZXM7CisKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogZnVsbFRleHR1cmVzWzExXVs4XVs0XTsKKwor
ICAgIFZlY3RvcjxTdHJpbmc+IGRlcHRoVGV4dHVyZUlubmVyVHlwZXM7CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIHRleHR1cmVEZXB0aDJEWzJdOworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiByd1RleHR1cmVEZXB0aDJEWzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiB0ZXh0dXJlRGVwdGgyREFycmF5WzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiByd1RleHR1cmVEZXB0aDJEQXJyYXlbMl07CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIHRleHR1cmVEZXB0aEN1YmVbMl07Cit9OworCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiNzAz
Nzg4MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xUeXBl
RGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2lu
Y2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5j
dGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUg
IldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBOYW1lQ29udGV4dCB7
CitwdWJsaWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIp
CisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFk
ZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGlm
IChleGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1l
KCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7
CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHR5cGVEZWZpbml0aW9u
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBhZGQoQVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KGV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoc3RydWN0dXJlRGVmaW5p
dGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
PiwgMT4oKSk7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVj
dHVyZURlZmluaXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29s
IGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKGV4aXN0cyhlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5cGVz
LmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZXMuZmluZChmdW5jdGlv
bkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgICAgICB8fCBtX3Zh
cmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1f
ZnVuY3Rpb25zLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAg
aWYgKG1fdHlwZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90
eXBlcy5lbmQoKQorICAgICAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisgICAgeworICAgICAgICBpZiAobV9mdW5jdGlv
bnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0aW9ucy5lbmQo
KQorICAgICAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+
KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVUeXBlRGVj
bGFyYXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGFkZChB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCisgICAgeworICAg
ICAgICBpZiAoZXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3ZhcmlhYmxlcy5hZGQoU3Ry
aW5nKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSwgJnZhcmlhYmxlRGVjbGFyYXRpb24pOwor
ICAgICAgICByZXR1cm4gcmVzdWx0LmlzTmV3RW50cnk7CisgICAgfQorCisgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3Qg
U3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXMuZmlu
ZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fdHlwZXMuZW5kKCkpIHsKKyAgICAg
ICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdl
dFR5cGVzKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0
aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9mdW5jdGlvbnMuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rp
b25zLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAobV9wYXJlbnQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMobmFtZSk7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICB9CisKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0IFN0
cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ZhcmlhYmxlcy5m
aW5kKG5hbWUpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV92YXJpYWJsZXMuZW5kKCkpIHsK
KyAgICAgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wYXJl
bnQtPmdldFZhcmlhYmxlKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgYm9vbCBleGlzdHMoU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgICAgICB8fCBtX2Z1bmN0
aW9ucy5maW5kKG5hbWUpICE9IG1fZnVuY3Rpb25zLmVuZCgpCisgICAgICAgICAgICB8fCBtX3Zh
cmlhYmxlcy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVuZCgpOworICAgIH0KKworICAgIEhh
c2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4sIDE+PiBtX3R5cGVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPj4gbV9mdW5jdGlvbnM7Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbio+IG1fdmFyaWFibGVz
OworICAgIE5hbWVDb250ZXh0KiBtX3BhcmVudDsKK307CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJl
c29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVS
ZXNvbHZlci5oCmluZGV4IDQ3ZDRkNmE1NzkzLi5kMGQ1YjYzNzE1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5o
CkBAIC0yNywxMyArMjcsMjk2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAi
V0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250
ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZl
T3ZlcmxvYWRJbXBsLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMoUHJv
Z3JhbSYgcHJvZ3JhbSk7CitjbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7Citw
dWJsaWM6CisgICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAgICAg
ICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlw
ZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICht
X2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHR5
cGVSZWZlcmVuY2UpOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBjYW5kaWRhdGVzID0gbV9uYW1l
Q29udGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5hbWUoKSk7CisgICAgICAgIGlmIChjYW5k
aWRhdGVzID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29s
dmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVu
dHMoKSkpCisgICAgICAgICAgICB0eXBlUmVmZXJlbmNlLnNldFJlc29sdmVkVHlwZSgqcmVzdWx0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5hbWVDb250
ZXh0IG5ld05hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVy
IG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7CisgICAgICAgIHZpc2l0VW5uYW1lZFR5
cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAgIGZvciAoYXV0byYgcGFyYW1l
dGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICAgICAgbmV3
TmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgICAgICBhdXRv
IHN1Y2Nlc3MgPSBuZXdOYW1lQ29udGV4dC5hZGQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBuZXdOYW1l
UmVzb2x2ZXIudmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBOYW1lQ29udGV4dCBu
YW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAgIE5hbWVSZXNvbHZlcihuYW1lQ29u
dGV4dCkuVmlzaXRvcjo6dmlzaXQoYmxvY2spOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
bV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWaXNpdG9yOjp2aXNpdChp
ZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRl
eHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZp
c2l0b3I6OnZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgICAgIGlmIChpZlN0YXRlbWVu
dC5lbHNlQm9keSgpKSB7CisgICAgICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9u
YW1lQ29udGV4dCk7CisgICAgICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0
b3I6OnZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZp
c2l0b3I6OnZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgTmFtZUNvbnRl
eHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIobmFt
ZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgd2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTmFt
ZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVzb2x2
ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworICAgICAg
ICBWaXNpdG9yOjp2aXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBOYW1lQ29udGV4
dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAgIE5hbWVSZXNvbHZlcihuYW1l
Q29udGV4dCkuVmlzaXRvcjo6dmlzaXQoZm9yTG9vcCk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBtX25hbWVDb250ZXh0LmFkZCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICAgICAgVmlz
aXRvcjo6dmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChhdXRvKiB2YXJpYWJsZSA9IG1fbmFtZUNvbnRleHQuZ2V0VmFyaWFibGUo
dmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKSkKKyAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
LnNldFZhcmlhYmxlKCp2YXJpYWJsZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9l
cnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5Ob2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJU
KG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuTm9kZS5zZXRGdW5jdGlvbihtX2N1
cnJlbnRGdW5jdGlvbik7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHJldHVybk5vZGUpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9y
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChhdXRvKiBnZXRGdW5jdGlvbnMg
PSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0
RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNl
dFBvc3NpYmxlR2V0T3ZlcmxvYWRzKCpnZXRGdW5jdGlvbnMpOworICAgICAgICBpZiAoYXV0byog
c2V0RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLnNldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgICAgIHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5zZXRQb3NzaWJsZVNldE92ZXJsb2Fkcygqc2V0RnVuY3Rpb25zKTsKKyAgICAg
ICAgaWYgKGF1dG8qIGFuZEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgICAgICBw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVBbmRPdmVybG9hZHMoKmFuZEZ1bmN0
aW9ucyk7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Np
b24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoaXM8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVz
c2lvbi5iYXNlKCkpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0g
bV9uYW1lQ29udGV4dC5nZXRUeXBlcyhkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihk
b3RFeHByZXNzaW9uLmJhc2UoKSkubmFtZSgpKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChl
bnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICAgICAgQVNUOjpOYW1l
ZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOworICAgICAgICAgICAgICAgIGlm
IChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9
IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJC
eU5hbWUoZG90RXhwcmVzc2lvbi5maWVsZE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8
PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJl
IGFibGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGlu
ZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgTGV4ZXI6OlRva2Vu
IG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFyaWFudHMgb3IgYSBSZXdyaXRlciBp
bnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVz
c2lvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikgQVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShvcmlnaW4pLCAqbWVtYmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQo
ZG90RXhwcmVzc2lvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9y
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghY2FsbEV4cHJlc3Npb24uaGFz
T3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVD
b250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKQorICAgICAgICAgICAg
ICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldENhc3REYXRhKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVu
Y3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAgICAgICAgICAgICAgICAgIGNhbGxF
eHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgVmlzaXRvcjo6dmlzaXQoY2FsbEV4cHJlc3Npb24pOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhj
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5sZWZ0KCkpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOworICAgICAg
ICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOworICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKSkgeworICAg
ICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmlu
aXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1i
ZXJCeU5hbWUoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uucmln
aHQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1iZXIoKm1lbWJlcik7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBNYWtlIHN1cmUgYWxsIHRoZSBuYW1lcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCisK
KyAgICB2b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIG1fY3VycmVudEZ1bmN0
aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOworICAgIH0KKworICAgIGJvb2wgZXJyb3IoKSB7IHJl
dHVybiBtX2Vycm9yOyB9CisKK3ByaXZhdGU6CisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4
dDsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxs
cHRyIH07CisgICAgYm9vbCBtX2Vycm9yIHsgZmFsc2UgfTsgLy8gRklYTUU6IE1pZ3JhdGUgdGhp
cyB0byBiZSBzb21lIHNvcnQgb2YgZGVzY3JpcHRpdmUgc3RyaW5nLgorICAgIC8vIEZJWE1FOiBD
b25zaWRlciBtb3ZpbmcgdGhlIGVycm9yIGludG8gVmlzaXRvcgorfTsKKworaW5saW5lIGJvb2wg
cmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVS
ZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBl
RGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKnR5
cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmlu
aXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJl
c29sdmVyLlZpc2l0b3I6OnZpc2l0KCpzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYg
KG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRp
b25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5WaXNpdG9yOjp2aXNpdCgq
ZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKSB7Cisg
ICAgICAgIG5hbWVSZXNvbHZlci5WaXNpdG9yOjp2aXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9u
KTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgcmVzb2x2
ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVz
b2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1
bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1
bmN0aW9uRGVmaW5pdGlvbihmdW5jdGlvbkRlZmluaXRpb24uZ2V0KCkpOworICAgICAgICBuYW1l
UmVzb2x2ZXIudmlzaXQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVz
b2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbmFt
ZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obnVsbHB0cik7CisgICAgZm9y
IChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5WaXNpdG9yOjp2aXNpdCgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJy
b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQYXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi5lNzJlYzZkNmQ5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApA
QCAtMzgsNyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7CiB9CiAKLWF1dG8gUGFyc2VyOjpw
YXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAt
PiBPcHRpb25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBm
cm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KK2F1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcpOwogICAg
IG1fbW9kZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJv
Z3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9u
YQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbikgewotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlv
bikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlwZURlZmluaXRpb24tPm5hbWUoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9n
cmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25h
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlRGVmaW5pdGlvbikgewotICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikp
OworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUo
KnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIHN0cnVj
dHVyZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0LDcgKzgzLDExIEBA
IGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmll
dywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRW51
bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChl
bnVtZXJhdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3Vj
Y2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOwor
ICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZM
b2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLT5uYW1lKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJv
Z3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9u
YQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpm
dW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIGZ1bmN0aW9u
RGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm9yID0gZnVuY3Rpb25EZWZp
bml0aW9uLmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFBy
b2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlv
bmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIk5hbWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi0+bmFtZSgpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJv
Z3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9u
YQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAl
cyIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDU0
LDE2ICs0NzksNTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
KCkgLT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihyaWdodFNxdWFyZUJyYWNrZXQuZXJyb3IoKSk7CiAgICAgICAg
IHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51bUVsZW1lbnRzIH19OwogICAgIH0K
LSAgICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5
cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOwotICAgIGlmICgh
YWRkcmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1Nw
YWNlLmVycm9yKCkpOwotICAgIHJldHVybiB7eyAqdG9rZW4sIHsgKmFkZHJlc3NTcGFjZSB9LCBX
VEY6Om51bGxvcHQgfX07CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBl
cyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2
aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICBBU1Q6OlJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAgc3dpdGNoIChhZGRy
ZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25z
dGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNz
U3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6
VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6
OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVm
ZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAgYWRkcmVzc1NwYWNl
ID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkg
YmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHt7ICp0b2tlbiwgeyBhZGRyZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0IH19Owog
fQogCi1hdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2Ug
PSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBMZXhlcjo6VG9r
ZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cCwgTGV4ZXI6
OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFkZHJlc3NTcGFjZSkKLSAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZS5lcnJvcigpKTsKK2F1dG8gUGFy
c2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9
IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tl
bjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6
VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsK
KyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAg
c3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VU
eXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFj
ZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAg
YWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0
aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
KTsKKyAgICB9CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBl
OjpJZGVudGlmaWVyKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihuYW1lLmVycm9yKCkpOwpAQCAtNDcxLDEyICs1MzIsMTIgQEAgYXV0byBQYXJzZXI6
OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+LCBFcnIKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwogCi0gICAgYXV0byBjb25zdHJ1
Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJyZXZp
YXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYm
IHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25z
dHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewog
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3Vm
Zml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJpbmco
KSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50
b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50b1N0
cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhB
YmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAg
ICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1
ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQ4OCw3
ICs1NDksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgogICAgIGF1dG8gZmlyc3RUeXBlU3Vm
Zml4QWJicmV2aWF0ZWQgPSBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAgIGlmICgh
Zmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZC5lcnJvcigpKTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVy
ZW5jZT4oTGV4ZXI6OlRva2VuKCphZGRyZXNzU3BhY2UpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3Ry
aW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZlcmVu
Y2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgcmVzdWx0ID0gY29uc3RydWN0VHlw
ZUZyb21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQsIFdURk1v
dmUocmVzdWx0KSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3VmZml4
QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2
aWF0ZWQsIEVycm9yPj4oWyZdKCkgewpAQCAtNTAzLDcgKzU2NCw3IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiwgRXJyCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6
OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGU+LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlw
ZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+
IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTUxNCwxMiArNTc1
LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwog
Ci0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNv
bnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlh
dGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykg
LT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgc3dpdGNoICh0
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQu
dG9rZW4pLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLT5zdHJpbmdWaWV3
LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFj
ZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6
U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZp
YXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbih0
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
LmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJy
ZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTUyOCw3ICs1ODksNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZl
cmVuY2U+KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RG
TW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4oV1RGTW92
ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJn
dW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewogICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkKCk7CkBAIC01NDIsMTQgKzYwMywxNCBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZT4sCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6
OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJv
cj4gewotICAgIGF1dG8gdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKK2F1dG8gUGFyc2VyOjpwYXJzZVR5
cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9y
PiB7CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJu
IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0eXBlKQogICAgICAg
ICByZXR1cm4gdHlwZTsKIAotICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+PihbJl0oKSB7CisgICAgdHlwZSA9IGJh
Y2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5
cGUoKTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKQEAgLTg0Nyw3ICs5MDgsNyBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
PiB0eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB0eXBlOwogICAg
IGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgIGF1dG8g
cGFyc2VkVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICBpZiAoIXBhcnNlZFR5cGUpCkBAIC04
NjMsMjEgKzkyNCwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24o
KSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghZmlyc3RF
bnVtZXJhdGlvbk1lbWJlcikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0
RW51bWVyYXRpb25NZW1iZXIuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
cyBtZW1iZXJzOwotICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25N
ZW1iZXIpKTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiByZXN1bHQoV1RGTW92ZSgq
b3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHR5cGUpKTsKKyAg
ICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25NZW1i
ZXIpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fu
bm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewog
ICAgICAgICBhdXRvIG1lbWJlciA9IHBhcnNlRW51bWVyYXRpb25NZW1iZXIoKTsKICAgICAgICAg
aWYgKCFtZW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obWVtYmVy
LmVycm9yKCkpOwotICAgICAgICBtZW1iZXJzLmFwcGVuZChXVEZNb3ZlKCptZW1iZXIpKTsKKyAg
ICAgICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqbWVtYmVyKSk7CisgICAgICAgIGlm
ICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fubm90IGFkZCBl
bnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAg
fQogCiAgICAgYXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tl
bjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQpOwogICAgIGlmICghcmlnaHRDdXJseUJyYWNrZXQp
CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodEN1cmx5QnJhY2tldC5lcnJv
cigpKTsKIAotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbihXVEZNb3ZlKCpv
cmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSksIFdURk1v
dmUobWVtYmVycykpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIGF1dG8gUGFy
c2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlv
bk1lbWJlciwgRXJyb3I+IHsKQEAgLTk4MSw3ICsxMDQ2LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNl
QXR0cmlidXRlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBFcnJvcj4g
ewogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVBh
cmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4geworYXV0byBQYXJz
ZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
LCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQog
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtOTky
LDcgKzEwNTcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxB
U1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0gICAgT3B0aW9uYWw8U3RyaW5nPiBu
YW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhdXRvIHRva2VuID0gdHJ5VHlwZShMZXhl
cjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpKQogICAgICAgICBuYW1lID0gdG9rZW4tPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKTsKIApAQCAtMTAwMCwxOCArMTA2NSwxOCBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAg
ICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1h
bnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJv
cigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdpbiksIFdU
Rk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3Zl
KCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdU
Rk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIG51bGxwdHIpOwogICAgIH0KIAotICAgIHJl
dHVybiBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMp
LCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1
cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVh
bGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQsIG51
bGxwdHIpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8
QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVycygp
IC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiB7CiAgICAgYXV0
byBsZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRQ
YXJlbnRoZXNpcyk7CiAgICAgaWYgKCFsZWZ0UGFyZW50aGVzaXMpCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OlBh
cmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhl
c2lzKSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1ldGVycyk7CiAKQEAgLTE0NDMsNyAr
MTUwOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZURvV2hpbGVMb29wKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpEb1doaWxlTG9vcCwgRXJyb3I+IHsKICAgICByZXR1cm4gQVNUOjpEb1doaWxlTG9vcChXVEZN
b3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpib2R5KSwgV1RGTW92ZSgqY29uZGl0aW9uYWwpKTsKIH0K
IAotYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiYmIHR5cGUpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwg
RXJyb3I+IHsKK2F1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlm
ICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9y
KCkpOwpAQCAtMTQ4OCw3ICsxNTUzLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNs
YXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICBp
ZiAoIXR5cGUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkp
OwogCi0gICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4oKCp0eXBlKS0+Y2xvbmUoKSkpOwor
ICAgIGF1dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9uKCgqdHlwZSktPmNsb25lKCkpOwogICAgIGlmICghZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9u
KQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RWYXJpYWJsZURlY2xhcmF0
aW9uLmVycm9yKCkpOwogCkBAIC0xNDk2LDcgKzE1NjEsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnNTdAogICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9u
KSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewot
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4oKCp0eXBlKS0+Y2xvbmUoKSkpOworICAgICAg
ICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0
eXBlKS0+Y2xvbmUoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YXJpYWJsZURlY2xhcmF0aW9uLmVycm9y
KCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5oCmluZGV4IGRhM2UwNmIwMWU0Li44MDEzOTE0OTgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCkBAIC0yNyw3ICsyNyw2IEBA
CiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKICNp
bmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJl
c3Npb24uaCIKQEAgLTY4LDcgKzY3LDYgQEAKICNpbmNsdWRlICJXSExTTE5vZGUuaCIKICNpbmNs
dWRlICJXSExTTE51bGxMaXRlcmFsLmgiCiAjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1ZGUgIldI
TFNMUG9pbnRlclR5cGUuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKICNpbmNsdWRlICJX
SExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgpAQCAtMTU0LDEzICsxNTIsMTMgQEAgcHJp
dmF0ZToKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPiBwYXJzZVR5
cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAgIHN0cnVjdCBUeXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQgewogICAgICAgICBMZXhlcjo6VG9rZW4gdG9rZW47Ci0gICAgICAgIE9wdGlvbmFsPExleGVy
OjpUb2tlbj4gYWRkcmVzc1NwYWNlOworICAgICAgICBPcHRpb25hbDxBU1Q6OlJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwogICAgICAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gbnVtRWxlbWVudHM7CiAgICAgfTsKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQsIEVycm9yPiBwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpOwotICAgIEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VU
eXBlKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBw
YXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiwgRXJyb3I+IHBhcnNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwor
ICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBh
cnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlVHlwZSgpOwogICAgIEV4cGVjdGVkPEFTVDo6
VHlwZURlZmluaXRpb24sIEVycm9yPiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgRXhwZWN0
ZWQ8QVNUOjpCdWlsdEluU2VtYW50aWMsIEVycm9yPiBwYXJzZUJ1aWx0SW5TZW1hbnRpYygpOwog
ICAgIEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VTZW1hbnRpYywgRXJyb3I+IHBhcnNlUmVzb3VyY2VT
ZW1hbnRpYygpOwpAQCAtMTc1LDggKzE3Myw4IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlv
bigpOwogICAgIEV4cGVjdGVkPEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLCBFcnJv
cj4gcGFyc2VOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUoKTsKICAgICBFeHBlY3RlZDxBU1Q6
OkF0dHJpYnV0ZUJsb2NrLCBFcnJvcj4gcGFyc2VBdHRyaWJ1dGVCbG9jaygpOwotICAgIEV4cGVj
dGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXIoKTsKLSAgICBFeHBlY3Rl
ZDxBU1Q6OlBhcmFtZXRlcnMsIEVycm9yPiBwYXJzZVBhcmFtZXRlcnMoKTsKKyAgICBFeHBlY3Rl
ZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVBhcmFtZXRlcigpOworICAg
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiBwYXJzZVBhcmFtZXRl
cnMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJz
ZUVudHJ5UG9pbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigp
OwogICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlT3Bl
cmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CkBAIC0xOTIsNyArMTkwLDcgQEAgcHJpdmF0ZToK
ICAgICBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiBwYXJzZUZvckxvb3AoKTsKICAgICBF
eHBlY3RlZDxBU1Q6OldoaWxlTG9vcCwgRXJyb3I+IHBhcnNlV2hpbGVMb29wKCk7CiAgICAgRXhw
ZWN0ZWQ8QVNUOjpEb1doaWxlTG9vcCwgRXJyb3I+IHBhcnNlRG9XaGlsZUxvb3AoKTsKLSAgICBF
eHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJik7CisgICAgRXhwZWN0ZWQ8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmKTsKICAgICBFeHBlY3RlZDxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9ucygpOwogICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0YXRlbWVudD4sIEVy
cm9yPiBwYXJzZVN0YXRlbWVudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAppbmRleCAwZWI2NGRlY2Q0ZC4uYjM5Nzk1
ZjUyYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcApAQCAtMjgsMTAgKzI4LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCiAKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJXSExTTFBhcnNlci5oIgogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YW5kYXJkTGlicmFy
eS5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCIKKyNp
bmNsdWRlICJXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oIgorI2luY2x1ZGUg
IldITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTUwLDcgKzU1LDE4IEBAIE9wdGlvbmFsPFByZXBhcmF0aW9uUmVzdWx0PiBwcmVw
YXJlKFN0cmluZ1ZpZXcgc291cmNlKQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIHJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSk7CisgICAg
TmFtZVJlc29sdmVyIG5hbWVSZXNvbHZlcihwcm9ncmFtLm5hbWVDb250ZXh0KCkpOworICAgIGlm
ICghcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghY2hlY2tSZWN1cnNpdmVUeXBlcyhwcm9ncmFt
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBzeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhw
cm9ncmFtKTsKKyAgICBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChwcm9ncmFtKTsKKyAg
ICBpZiAoIWNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKHByb2dyYW0pKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGlmICghcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwg
bmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHJldHVy
biBQcmVwYXJhdGlvblJlc3VsdCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAppbmRleCA1NjMwZmU2OWVlNC4uNjZmNzVmNjll
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJvZ3JhbS5oCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9u
RGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgog
I2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZp
bml0aW9uLmgiCkBAIC00NCw0NSArNDYsNjMgQEAgcHVibGljOgogICAgIFByb2dyYW0oKSA9IGRl
ZmF1bHQ7CiAgICAgUHJvZ3JhbShQcm9ncmFtJiYpID0gZGVmYXVsdDsKIAotICAgIHZvaWQgYXBw
ZW5kKEFTVDo6VHlwZURlZmluaXRpb24mJiB0eXBlRGVmaW5pdGlvbikKKyAgICBib29sIGFwcGVu
ZChBU1Q6OlR5cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24pCiAgICAgewotICAgICAgICBt
X3R5cGVEZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZSh0eXBlRGVmaW5pdGlvbikpOworICAgICAg
ICBtX3R5cGVEZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVEZWZp
bml0aW9uPihXVEZNb3ZlKHR5cGVEZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1l
Q29udGV4dC5hZGQoKm1fdHlwZURlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQg
YXBwZW5kKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRpb24pCisK
KyAgICBib29sIGFwcGVuZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZp
bml0aW9uKQogICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBlbmQoV1RG
TW92ZShzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgIG1fc3RydWN0dXJlRGVmaW5pdGlv
bnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihXVEZN
b3ZlKHN0cnVjdHVyZURlZmluaXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0
LmFkZCgqbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFw
cGVuZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikK
KworICAgIGJvb2wgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiYgZW51bWVyYXRp
b25EZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmFw
cGVuZChXVEZNb3ZlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBtX2VudW1lcmF0
aW9uRGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24+KFdURk1vdmUoZW51bWVyYXRpb25EZWZpbml0aW9uKSkpOworICAgICAgICByZXR1
cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5sYXN0KCkpOwog
ICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9u
RGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiYg
ZnVuY3Rpb25EZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV9mdW5jdGlvbkRlZmluaXRpb25z
LmFwcGVuZChXVEZNb3ZlKGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBtX2Z1bmN0aW9u
RGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24+KFdURk1vdmUoZnVuY3Rpb25EZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1l
Q29udGV4dC5hZGQoKm1fZnVuY3Rpb25EZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2
b2lkIGFwcGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKICAgICB7Ci0gICAgICAgIG1fbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikpOworICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oV1RGTW92ZShu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpOworICAgICAgICBtX2ludHJpbnNpY3MuYWRkKCpt
X25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmxhc3QoKSk7CisgICAgICAgIHJldHVybiBtX25h
bWVDb250ZXh0LmFkZCgqbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0KCkpOwogICAg
IH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQogICAgIHsKLSAgICAgICAgbV9uYXRpdmVUeXBl
RGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworICAg
ICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkp
OworICAgICAgICBtX2ludHJpbnNpY3MuYWRkKCptX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMubGFz
dCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2ZVR5cGVEZWNs
YXJhdGlvbnMubGFzdCgpKTsKICAgICB9CiAKLSAgICBWZWN0b3I8QVNUOjpUeXBlRGVmaW5pdGlv
bj4mIHR5cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRpb25zOyB9Ci0gICAg
VmVjdG9yPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4mIHN0cnVjdHVyZURlZmluaXRpb25zKCkg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2Vu
dW1lcmF0aW9uRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlZmluaXRpb25z
OyB9Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4mIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
czsgfQotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7IH0KKyAgICBO
YW1lQ29udGV4dCYgbmFtZUNvbnRleHQoKSB7IHJldHVybiBtX25hbWVDb250ZXh0OyB9CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4mIHR5cGVEZWZpbml0
aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiYgc3RydWN0dXJlRGVmaW5pdGlvbnMo
KSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+JiBlbnVtZXJhdGlvbkRlZmluaXRp
b25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9CisgICAgY29uc3QgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRl
ZmluaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkRlZmluaXRpb25zOyB9CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlv
bkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlZmluaXRpb25zOyB9CisgICAgY29u
c3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+
PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7
IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+JiBuYXRpdmVUeXBlRGVjbGFy
YXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6
Ci0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+IG1fdHlwZURlZmluaXRpb25zOwotICAg
IFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7
Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiBtX2VudW1lcmF0aW9uRGVm
aW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPiBtX2Z1bmN0aW9u
RGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4g
bV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24+IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsKKyAgICBOYW1lQ29udGV4dCBt
X25hbWVDb250ZXh0OworICAgIEludHJpbnNpY3MgbV9pbnRyaW5zaWNzOworICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlRGVmaW5pdGlvbj4+IG1fdHlwZURlZmluaXRpb25zOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4gbV9z
dHJ1Y3R1cmVEZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uPj4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOworICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiBtX2Z1bmN0aW9uRGVm
aW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24+PiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOworICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+PiBtX25hdGl2ZVR5cGVE
ZWNsYXJhdGlvbnM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEwZDE4ZDg3OTc3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNp
dmVUeXBlQ2hlY2tlci5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitjbGFzcyBSZWN1cnNpdmVUeXBlQ2hlY2tlciA6IHB1YmxpYyBWaXNpdG9y
IHsKK3B1YmxpYzoKKyAgICB+UmVjdXJzaXZlVHlwZUNoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgmdHlwZURlZmluaXRpb24pOworICAg
ICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIG1fZXJyb3IgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmlzaXRvcjo6
dmlzaXQodHlwZURlZmluaXRpb24pOworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMu
cmVtb3ZlKCZ0eXBlRGVmaW5pdGlvbik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywg
c3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9l
cnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHlwZXMuYWRkKCZzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KSB7CisgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0cnVjdHVyZURlZmlu
aXRpb24pOworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZzdHJ1Y3R1
cmVEZWZpbml0aW9uKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5j
ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnR5cGVSZWZlcmVu
Y2UpOworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Zm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkK
KyAgICAgICAgICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgICAgIHZpc2l0
TmFtZWRUeXBlKCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKworICAgICAgICBhdXRv
IHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZVJlZmVyZW5jZSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OlJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVycm9y
KCkgeyByZXR1cm4gbV9lcnJvcjsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9lcnJvciB7IGZh
bHNlIH07CisgICAgSGFzaFNldDxBU1Q6OlR5cGUqPiBtX3R5cGVzOworfTsKKworaW5saW5lIGJv
b2wgY2hlY2tSZWN1cnNpdmVUeXBlcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFJlY3Vyc2l2
ZVR5cGVDaGVja2VyIHJlY3Vyc2l2ZVR5cGVDaGVja2VyOworICAgIHJlY3Vyc2l2ZVR5cGVDaGVj
a2VyLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hl
Y2tlci5lcnJvcigpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJl
c29sdmVPdmVybG9hZEltcGwuaApzaW1pbGFyaXR5IGluZGV4IDcyJQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCmluZGV4IGVmNjFlZDEyNjE5Li41MDJiYTky
NDg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCkBAIC0yNywz
MyArMjcsMjYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExleGVy
LmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50
LmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLW5hbWVzcGFj
ZSBBU1QgewotCi1jbGFzcyBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIDogcHVibGljIFZh
bHVlIHsKLXB1YmxpYzoKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbikKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAg
eworaW5saW5lIEFTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBwb3NzaWJsZVR5cGVz
LCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAgQVNUOjpOYW1lZFR5
cGUqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBwb3NzaWJsZVR5cGUgOiBwb3Nz
aWJsZVR5cGVzKSB7CisgICAgICAgIGlmIChpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhwb3Nz
aWJsZVR5cGUsIHR5cGVBcmd1bWVudHMpKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0YXRp
Y19jYXN0PEFTVDo6TmFtZWRUeXBlJj4ocG9zc2libGVUeXBlKTsKKyAgICAgICAgfQogICAgIH0K
IAotICAgIHZpcnR1YWwgfkFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oKSA9IGRlZmF1bHQ7
Ci0KLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IEFub255bW91c1Zhcmlh
YmxlRGVjbGFyYXRpb24mKSA9IGRlbGV0ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0
aW9uKEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwotCi0gICAgTGV4
ZXI6OlRva2VuIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9Ci0KLXByaXZhdGU6
Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotfTsKLQorICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTg5NzU3MjUyZjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUHJv
Z3JhbS5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBG
aW5kQXJyYXlUeXBlcyA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFycmF5
VHlwZXMoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJh
eVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2FycmF5VHlwZXMuYXBwZW5kKGFycmF5
VHlwZSk7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpB
cnJheVR5cGU+PiYmIHRha2VBcnJheVR5cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZN
b3ZlKG1fYXJyYXlUeXBlcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6QXJyYXlUeXBlPj4gbV9hcnJheVR5cGVzOworfTsKKworaW5s
aW5lIHZvaWQgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYgcHJvZ3JhbSkK
K3sKKyAgICBGaW5kQXJyYXlUeXBlcyBmaW5kQXJyYXlUeXBlczsKKyAgICBmaW5kQXJyYXlUeXBl
cy5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKKyAgICBhdXRvIGFycmF5VHlwZXMgPSBmaW5kQXJy
YXlUeXBlcy50YWtlQXJyYXlUeXBlcygpOworCisgICAgZm9yIChhdXRvJiBhcnJheVR5cGUgOiBh
cnJheVR5cGVzKSB7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0
ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgLy8gRklYTUU6IHVzZSAidWludCIgZnJvbSBpbnRyaW5zaWNzIGhlcmUu
CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgYXJyYXlUeXBlLmdldCgpLmNsb25lKCksIFN0
cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICBwcm9ncmFt
LmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICB9Cit9CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1
bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTM2YzE5
NjJjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2lubGluZSB2b2lk
IHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAg
IGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRl
ZmluaXRpb25zKCkpIHsKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVt
ZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCks
IFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3Zl
KHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogdXNl
ICJib29sIiBmcm9tIGludHJpbnNpY3MgaGVyZS4KKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihl
bnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJp
bmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICBwcm9ncmFtLmFw
cGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24p
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwg
U3RyaW5nKCJvcGVyYXRvci52YWx1ZSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgIHBy
b2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAg
ICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0aW9uRGVm
aW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICBB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5j
bG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAg
ICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6
QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
TGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRp
b25EZWZpbml0aW9uKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOwor
ICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmM3ZDdhOTA0OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK2lubGluZSB2b2lkIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJv
Z3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBw
cm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1
Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi0+c3RydWN0dXJlRWxlbWVudHMoKSkg
eworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9y
LmZpZWxkCisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxl
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURlZmluaXRpb24pLCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
V1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgU3RyaW5nOjpmb3Jt
YXQoIm9wZXJhdG9yLiVzIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgpLmRhdGEoKSks
IFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHNl
dHRlcjogb3BlcmF0b3IuZmllbGQ9CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50
Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0
aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExleGVyOjpUb2tl
bihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHN0cnVjdHVy
ZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24xKSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJp
YWJsZURlY2xhcmF0aW9uMikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5v
cmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9y
LiVzPSIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFt
LmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKKyAgICAgICAg
ICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3Bh
Y2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24geworICAg
ICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJl
c3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBXVEZNb3Zl
KGFyZ3VtZW50VHlwZSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRk
cmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmc6OmZv
cm1hdCgib3BlcmF0b3ImLiVzIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgpLmRhdGEo
KSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlw
ZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFudCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQo
Y3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZSkpOwor
ICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBl
OjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwKSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVu
ZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKaW5kZXggNTE2ODU2
ZTQxZDAuLjVmMTkwM2UwYTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKLSNpbmNsdWRlICJXSExTTEFub255
bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNl
VHlwZS5oIgogI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBc3Np
Z25tZW50RXhwcmVzc2lvbi5oIgpAQCAtNjgsNyArNjcsNiBAQAogI2luY2x1ZGUgIldITFNMTm9k
ZS5oIgogI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKICNpbmNsdWRlICJXSExTTE51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMUGFyYW1ldGVyLmgiCiAj
aW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgogI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKQEAgLTEwMyw0MSAr
MTAxLDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNsYXNz
IFZpc2l0b3IgewotICAgIH5WaXNpdG9yKCkgPSBkZWZhdWx0OworcHVibGljOgorICAgIHZpcnR1
YWwgflZpc2l0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3Jh
bSYgcHJvZ3JhbSkKICAgICB7CiAgICAgICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBw
cm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQodHlwZURlZmluaXRp
b24pOworICAgICAgICAgICAgdmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKICAgICAgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygp
KQotICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgICAgICB2
aXNpdCgqc3RydWN0dXJlRGVmaW5pdGlvbik7CiAgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCi0gICAgICAg
ICAgICB2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICAgICAgdmlzaXQoKmVu
dW1lcmF0aW9uRGVmaW5pdGlvbik7CiAgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0
aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChm
dW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICAgICAgdmlzaXQoKmZ1bmN0aW9uRGVmaW5pdGlv
bik7CiAgICAgICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dy
YW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICAgICAgdmlzaXQoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pOwogICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6
IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQobmF0
aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCpuYXRpdmVUeXBlRGVjbGFy
YXRpb24pOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRUeXBlKEFTVDo6VHlwZSYgdHlwZSkKKyAg
ICB2b2lkIHZpc2l0VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCiAg
ICAgewotICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpOwotICAgICAgICBl
bHNlIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih0eXBlKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHR5cGUpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHR5cGUpKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6VHlw
ZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICB2aXNpdChkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSk7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih0eXBlKSk7Ci0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOworICAgICAgICAg
ICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5
cGUpCisgICAgeworICAgICAgICBpZiAoaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBl
KSkKKyAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVk
VHlwZSkpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5h
bWVkVHlwZSkpCisgICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkp
OworICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KG5hbWVkVHlwZSkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgdmlz
aXRUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUo
dHlwZURlZmluaXRpb24udHlwZSgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQpAQCAtMTQ4LDcg
KzE2MSw3IEBAIGNsYXNzIFZpc2l0b3IgewogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgewotICAg
ICAgICB2aXNpdFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAgIHZp
c2l0VW5uYW1lZFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7CiAgICAgICAgIGZv
ciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVy
YXRpb25NZW1iZXJzKCkpCiAgICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJlcik7CiAg
ICAgfQpAQCAtMTc0LDYgKzE4Nyw4IEBAIGNsYXNzIFZpc2l0b3IgewogICAgIHsKICAgICAgICAg
Zm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkK
ICAgICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgICAgIGlmICh0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpICYmIGlzPEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoZG93bmNh
c3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLnR5
cGUoKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUm
IHBvaW50ZXJUeXBlKQpAQCAtMTg4LDEyICsyMDMsMTIgQEAgY2xhc3MgVmlzaXRvciB7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKICAgICB7Ci0g
ICAgICAgIHZpc2l0VHlwZShhcnJheVR5cGUudHlwZSgpKTsKKyAgICAgICAgdmlzaXRVbm5hbWVk
VHlwZShhcnJheVR5cGUudHlwZSgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQogICAgIHsKLSAgICAgICAg
dmlzaXRUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKKyAgICAgICAgdmlzaXRVbm5hbWVk
VHlwZShzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVt
ZW50LnNlbWFudGljKCkpCiAgICAgICAgICAgICB2aXNpdCgqc3RydWN0dXJlRWxlbWVudC5zZW1h
bnRpYygpKTsKICAgICB9CkBAIC0yMDcsNyArMjIyLDcgQEAgY2xhc3MgVmlzaXRvciB7CiAgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNs
YXJhdGlvbikKICAgICB7CiAgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24uYXR0cmli
dXRlQmxvY2soKSk7Ci0gICAgICAgIHZpc2l0VHlwZShmdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUo
KSk7CisgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkp
OwogICAgICAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpKQogICAgICAgICAgICAgdmlzaXQocGFyYW1ldGVyKTsKICAgICAgICAgaWYgKGZ1
bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKQEAgLTIyNSw3ICsyNDAsNyBAQCBjbGFzcyBW
aXNpdG9yIHsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJl
ZmVyZW5jZVR5cGUpCiAgICAgewotICAgICAgICB2aXNpdFR5cGUocmVmZXJlbmNlVHlwZS5lbGVt
ZW50VHlwZSgpKTsKKyAgICAgICAgdmlzaXRVbm5hbWVkVHlwZShyZWZlcmVuY2VUeXBlLmVsZW1l
bnRUeXBlKCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNlbWFudGlj
JiBzZW1hbnRpYykKQEAgLTI2NCwxMyArMjc5LDYgQEAgY2xhc3MgVmlzaXRvciB7CiAgICAgICAg
ICAgICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6UGFyYW1ldGVyJiBwYXJhbWV0ZXIpCi0gICAgewotICAgICAgICB2aXNpdFR5
cGUocGFyYW1ldGVyLnR5cGUoKSk7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXIuc2VtYW50aWMoKSkK
LSAgICAgICAgICAgIHZpc2l0KCpwYXJhbWV0ZXIuc2VtYW50aWMoKSk7Ci0gICAgfQotCiAgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJikKICAgICB7CiAgICAgfQpA
QCAtNDAyLDggKzQxMCwxMCBAQCBjbGFzcyBWaXNpdG9yIHsKICAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CiAgICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKQogICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBl
bHNlIGlmIChpczxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0g
ICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4o
ZXhwcmVzc2lvbikpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGV4
cHJlc3Npb24pKQorICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9u
PihleHByZXNzaW9uKSk7CisgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6SW5kZXhFeHByZXNzaW9u
PihleHByZXNzaW9uKSkKKyAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6SW5kZXhFeHBy
ZXNzaW9uPihleHByZXNzaW9uKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCiAgICAgICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKICAgICAgICAg
ZWxzZSBpZiAoaXM8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCkBAIC00MTYs
NiArNDI2LDIyIEBAIGNsYXNzIFZpc2l0b3IgewogICAgICAgICB9CiAgICAgfQogCisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKKyAgICB7
CisgICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
Jj4oZG90RXhwcmVzc2lvbikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgdmlzaXQo
aW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICAgICAgdmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJlc3Npb24pKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24mIGV4cHJlc3Npb24pCisgICAgeworICAgICAgICB2aXNpdChleHByZXNzaW9uLmJhc2Uo
KSk7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVz
c2lvblN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKICAgICB7CiAgICAg
ICAgIHZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lv
bigpKTsKQEAgLTQ4NSw3ICs1MTEsNyBAQCBjbGFzcyBWaXNpdG9yIHsKIAogICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24p
CiAgICAgewotICAgICAgICB2aXNpdFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwor
ICAgICAgICB2aXNpdFVubmFtZWRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKICAg
ICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKICAgICAgICAgICAgIHZp
c2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpOwogICAgICAgICBpZiAodmFyaWFi
bGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQpAQCAtNTM2LDExICs1NjIsNiBAQCBjbGFzcyBW
aXNpdG9yIHsKICAgICAgICAgdmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgIH0KLQogICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24pCiAgICAgewogICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmxWYWx1ZSgpKTsKQEAgLTU2MCwxMCArNTgxLDYgQEAgY2xhc3MgVmlzaXRvciB7CiAgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKQogICAgIHsKICAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
JikKLSAgICB7Ci0gICAgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAzYzBlMzY0NzA1NC4u
MTQ2NGViMzdiN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMDYsNyArMzA2LDcgQEAgTW9kdWxlcy93
ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhl
ci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAotTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCiBNb2R1bGVzL3dl
YmdwdS9XZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVBZGFwdGVyLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDA3
YzE2ZWYxNzc1Li5hMGU0ZTMwZDE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQwMyw5ICs2NDAzLDIwIEBACiAJCTFDMjRF
RUE3MUM3MkE3QjQwMDgwRjhGQyAvKiBKU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEpTRm9udEZhY2VTZXQuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQkxQzI2NDk3OTBEN0UyNDhBMDBCRDEwRjIgLyogRG9jdW1lbnRMb2FkZXJNYWMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2FkZXJNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzMyNDkxMDFDNkQ2QTNCMDA3RURCMzIg
LyogRm9udFZhcmlhbnRCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZvbnRWYXJpYW50QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDMzMyNzZDMjFDRURBNDIwMDBEQzlGMiAvKiBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2RTIxQ0VGRjc0MDAwREM5RjIgLyog
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2RjIxQ0Yw
MTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW5m
ZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3MTIxQ0YwQkUx
MDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lZFR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzIyMUNGMEQyRTAwMERD
OUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NDIxRDVBNzA2MDAwREM5
RjIgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJl
Y3Vyc2l2ZVR5cGVDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMy
Nzc1MjFENUIwRjgwMDBEQzlGMiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzYyMUQ1QzA3RTAwMERDOUYyIC8qIFdITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3
NzcyMUQ1Q0E4MzAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc4MjFENUNFRDQwMDBEQzlGMiAv
KiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUMzOTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEUxQzZFN0NBNjAwQUI1
MjdDIC8qIEZvbnRGYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZvbnRGYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEYxQzZF
N0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvbnRGYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDN0NDMjFEMjFD
REUxOTgwMEMxRkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
TmFtZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTYwRTk3
MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDb250
cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3MzMw
ODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEzMjE0LDYgKzEzMjI1LDggQEAKIAkJQzExQTlFQ0QyMTQwM0E1QzAwQ0ZCMjBBIC8qIFN3aXRj
aGluZ0dQVUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzExQTlFRDIyMTQwNTc4QjAwQ0ZCMjBBIC8qIFN3
aXRjaGluZ0dQVUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMUUxRDIzNTIwM0RGMTU0MDA1
ODQ2NjUgLyogU2NyZWVuUHJvcGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JlZW5Qcm9wZXJ0
aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ0MjFEQUMwOTUwMEI2
MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ2MjFEQUVFNkUwMEI2MEMy
NyAvKiBXSExTTEludHJpbnNpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRyaW5z
aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwMTVDMDkxQkU2RkUyQzAw
ODIyMzg5IC8qIEZvbnRWYXJpYW50QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250VmFyaWFu
dEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTEyMUI0QkQx
MDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMZXhl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTBFOTEyMjFCNEJEMTAwMEI3
RjgzRCAvKiBXSExTTExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTGV4ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjQ1LDcgKzEzMjU4LDYgQEAKIAkJQzIxQkY3MEMy
MUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEQyMUNE
ODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFJlZmVyZW5jZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEUy
MUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUMyMUJGNzBGMjFDRDg5Q0YwMDIyNzk3OSAvKiBXSExTTEFub255bW91c1ZhcmlhYmxlRGVj
bGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzEwMjFDRDg5RDAwMDIy
Nzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJG
NzExMjFDRDg5RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFR5cGVBcmd1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFC
RjcxMjIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUzLDcg
KzEzMjY1LDYgQEAKIAkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcx
NTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHByZXNzaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2FsbEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1ldGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFyYW1ldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Npb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xEb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRjaENhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyMUJGNzFBMjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJyZWFrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMQnJlYWsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
MzAyLDcgKzEzMzEzLDYgQEAKIAkJQzI4OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlz
aXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFByZXBhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjg4QzcyQTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMUHJlcGFyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzI4OEM3MkQyMUM5OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVHlwZUFyZ3VtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBQjBBRjQxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxl
Y3Rpb25BbGdvcml0aG0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udFNlbGVjdGlvbkFsZ29yaXRobS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTMzMiwxMSArMjUzNDIsMjAgQEAKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5NzkgLyog
V0hMU0xQYXJzZXIuY3BwICovLAogCQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBXSExT
TFBhcnNlci5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dy
YW0uaCAqLywKLSAJCQkJQzI4OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5o
ICovLAotIAkJCQlDMjg4QzcyOTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmNwcCAq
LywKLSAJCQkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovLAot
IAkJCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICov
LAotIAkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAq
LywKKwkJCQlDMjg4QzcyNzIxQzhDNkVGMDAyREY1Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8sCisJ
CQkJQzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCisJCQkJ
QzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovLAorCQkJCUMyODhD
NzJDMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAorCQkJCTFDN0ND
MjFEMjFDREUxOTgwMEMxRkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8sCisJCQkJMUMzMzI3
NkUyMUNFRkY3NDAwMERDOUYyIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oICovLAorCQkJ
CTFDMzMyNzZGMjFDRjAxMzEwMDBEQzlGMiAvKiBXSExTTEluZmVyVHlwZXMuaCAqLywKKwkJCQkx
QzMzMjc3NDIxRDVBNzA2MDAwREM5RjIgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oICov
LAorCQkJCTFDMzMyNzc1MjFENUIwRjgwMDBEQzlGMiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zLmggKi8sCisJCQkJMUMzMzI3NzYyMUQ1QzA3RTAwMERDOUYyIC8qIFdITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovLAorCQkJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlG
MiAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovLAorCQkJCTFDMzMy
Nzc4MjFENUNFRDQwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
LmggKi8sCisJCQkJQzIwMTMzNDQyMURBQzA5NTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5o
ICovLAorCQkJCUMyMDEzMzQ2MjFEQUVFNkUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuY3Bw
ICovLAogCQkJKTsKIAkJCXBhdGggPSBXSExTTDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0yNTM0NCw3ICsyNTM2Myw2IEBACiAJCUMyMUJGNkYxMjFDRDg5OEQwMDIyNzk3OSAvKiBB
U1QgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUMyMUJG
NzBGMjFDRDg5Q0YwMDIyNzk3OSAvKiBXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24u
aCAqLywKIAkJCQlDMjFCRjcyNTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5j
ZVR5cGUuaCAqLywKIAkJCQlDMjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5
cGUuaCAqLywKIAkJCQlDMjFCRjczMDIxQ0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50
RXhwcmVzc2lvbi5oICovLApAQCAtMjUzODQsNyArMjU0MDIsNiBAQAogCQkJCUMyMUJGNzI0MjFD
RDg5RTEwMDIyNzk3OSAvKiBXSExTTE5vZGUuaCAqLywKIAkJCQlDMjFCRjcwNzIxQ0Q4OUM4MDAy
Mjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovLAogCQkJCUMyMUJGNzIxMjFDRDg5REUwMDIy
Nzk3OSAvKiBXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAotCQkJCUMyMUJG
NzE3MjFDRDg5RDYwMDIyNzk3OSAvKiBXSExTTFBhcmFtZXRlci5oICovLAogCQkJCUMyMUJGNzJG
MjFDRDg5RUMwMDIyNzk3OSAvKiBXSExTTFBvaW50ZXJUeXBlLmggKi8sCiAJCQkJQzIxQkY3MkUy
MUNEODlFQTAwMjI3OTc5IC8qIFdITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmggKi8sCiAJ
CQkJQzIxQkY3MEIyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMUXVhbGlmaWVyLmggKi8sCkBAIC0y
NTQxMiw3ICsyNTQyOSwxMCBAQAogCQkJCUMyMUJGNzE0MjFDRDg5RDMwMDIyNzk3OSAvKiBXSExT
TFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8sCiAJCQkJQzIxQkY3MTMyMUNEODlE
MjAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVSZWZlcmVuY2UuaCAqLywKIAkJCQlDMjFCRjcwNDIx
Q0Q4OUM2MDAyMjc5NzkgLyogV0hMU0xXaGlsZUxvb3AuaCAqLywKLSAJCQkJQzI4OEM3MkQyMUM5
OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJCQlDMjg4QzcyRDIx
Qzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAorCQkJCTFDMzMyNzZD
MjFDRURBNDIwMDBEQzlGMiAvKiBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oICovLAor
CQkJCTFDMzMyNzcxMjFDRjBCRTEwMDBEQzlGMiAvKiBXSExTTE5hbWVkVHlwZS5oICovLAorCQkJ
CTFDMzMyNzcyMjFDRjBEMkUwMDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8sCiAJCQkp
OwogCQkJcGF0aCA9IEFTVDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358164</attachid>
            <date>2018-12-31 22:07:32 -0800</date>
            <delta_ts>2018-12-31 23:03:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>168242</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYTI4NzE0MDRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOSBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAg
IGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7
IH0KKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVu
dHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVy
OjpUb2tlbihtX29yaWdpbiksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRU
eXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7CiB9OwogCkBA
IC03NSw2ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfVU5OQU1FRF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDYWxsRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAppbmRleCA2NGFmNzEzMjk5Yy4uOGIyYmRhZjRiZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENhbGxFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTU0LDkgKzU1LDMxIEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVybiBtX2FyZ3Vt
ZW50czsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB2
b2lkIHNldENhc3REYXRhKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cworICAgIH0KKworICAgIGJvb2wgaGFzT3ZlcmxvYWRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9vdmVybG9hZHMpOyB9CisgICAgdm9pZCBzZXRPdmVybG9hZHMoY29uc3Qg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBv
dmVybG9hZHMpCisgICAgeworICAgICAgICBhc3NlcnQoIWhhc092ZXJsb2FkcygpKTsKKyAgICAg
ICAgbV9vdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorCisgICAgdm9pZCBzZXRGdW5jdGlv
bihGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0KCFtX2Z1bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlvbiA9ICZmdW5jdGlvbkRl
Y2xhcmF0aW9uOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+IG1fYXJndW1lbnRzOworICAgIE9wdGlv
bmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
Pj4gbV9vdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9mdW5jdGlvbiB7IG51
bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXgg
YTM4YjBkNWIzYTEuLmYwNDIwNTMyNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaApAQCAtNzYsMTEgKzc2LDY5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgSW50
ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpOworICAgIH0KKwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpCiAgICAgewogICAgICAgICBX
VEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkgY29uc3QKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoZXMo
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIE9w
dGlvbmFsPGJvb2w+IHJlc3VsdDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICB2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHZhbHVlID0gZmxvYXRMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8TnVsbExpdGVyYWw+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJCb29sZWFuTGl0ZXJhbCA9IFdU
Rjo6Z2V0PEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPT0gb3RoZXJCb29sZWFuTGl0ZXJhbC52
YWx1ZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UpIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3ZhcmlhbnQpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJNZW1iZXJSZWZlcmVuY2UgPSBXVEY6Omdl
dDxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92
YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmY29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSAmb3RoZXJNZW1i
ZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0OworCisgICAgICAgIG90aGVyLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gaW50ZWdlckxpdGVyYWwudmFs
dWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0
ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSBmbG9h
dExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJikgewor
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBCb29sZWFu
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSkpOworCisgICAgICAgIEFTU0VS
VChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgVmFyaWFudDwKICAgICAgICAgSW50ZWdlckxpdGVyYWwsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAppbmRleCAyYzI0YTk4YjJjYS4uMjEwMGQ3Y2E0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UuaApAQCAtMzYsMTAgKzM2LDEyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5h
bWVzcGFjZSBBU1QgewogCi1jbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworCitj
bGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGxlZnQsIFN0
cmluZyYmIHJpZ2h0KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2xlZnQoV1RGTW92
ZShsZWZ0KSkKICAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQogICAgIHsKQEAgLTUw
LDEwICs1MiwzMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlZmF1bHQ7CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgY29uc3QgU3RyaW5nJiBsZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgY29uc3QgU3RyaW5nJiByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHQ7IH0KKworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsK
KyAgICAgICAgcmV0dXJuICptX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIGNvbnN0
IEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsKKyAgICAgICAgcmV0dXJuICpt
X2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1i
ZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAg
ICAgICBtX2VudW1lcmF0aW9uTWVtYmVyID0gJmVudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKwog
cHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbGVmdDsK
ICAgICBTdHJpbmcgbV9yaWdodDsKKyAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiBtX2VudW1l
cmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5o
CmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4cHJlc3Npb24oY29uc3QgRG90
RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Npb24oRG90RXhwcmVzc2lvbiYm
KSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4l
cyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgbV9maWVsZE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nJiBmaWVsZE5hbWUoKSB7IHJl
dHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpZWxkTmFtZTsK
IH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlzRG90RXhwcmVzc2lvbigpKQor
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXggNzk3
MGI1OWU1NGEuLjFiOGYxNDUyOGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaApAQCAtMjksNyArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC0zOSwxMyArNDAsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7
CiAKLWNsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUs
IHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJl
cnMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFt
ZShXVEZNb3ZlKG5hbWUpKQorICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0
eXBlKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkp
CiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdU
Rk1vdmUobWVtYmVycykpCiAgICAgewogICAgIH0KIApAQCAtNTQsMTQgKzUzLDM1IEBAIHB1Ymxp
YzoKICAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9u
JikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5p
dGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsg
fQotICAgIEVudW1lcmF0aW9uTWVtYmVycyYgZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4g
bV9tZW1iZXJzOyB9CisgICAgYm9vbCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1
cm4gKm1fdHlwZTsgfQorCisgICAgYm9vbCBhZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIp
CisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUo
KSwgc3RkOjptYWtlX3VuaXF1ZTxFbnVtZXJhdGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7
CisgICAgICAgIHJldHVybiAhcmVzdWx0LmlzTmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVy
YXRpb25NZW1iZXIqIG1lbWJlckJ5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9tZW1iZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChp
dGVyYXRvciA9PSBtX21lbWJlcnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9u
TWVtYmVycygpCisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxF
bnVtZXJhdGlvbk1lbWJlcj4+IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9t
ZW1iZXJzKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29y
aWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5
cGU7Ci0gICAgRW51bWVyYXRpb25NZW1iZXJzIG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVf
cHRyPEVudW1lcmF0aW9uTWVtYmVyPj4gbV9tZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTAs
NiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURf
VFlQRShFbnVtZXJhdGlvbkRlZmluaXRpb24sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2Uu
LjRmMzg1MTk1NTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDYg
KzU0LDcgQEAgcHVibGljOgogICAgIEVudW1lcmF0aW9uTWVtYmVyKGNvbnN0IEVudW1lcmF0aW9u
TWVtYmVyJikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRpb25NZW1iZXIoRW51bWVyYXRpb25NZW1i
ZXImJikgPSBkZWZhdWx0OwogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9
CiAgICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3Zh
bHVlOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaApzaW1pbGFy
aXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCmluZGV4
IDc4MGQ1YzU0MjVhLi5jOWU5NjI5Mzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bC5oCkBAIC0yMywyMyArMjMsNDAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWYgRU5BQkxFKFdFQkdQVSkKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKKyNpZiBFTkFCTEUoV0VC
R1BVKQogCi0jaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJh
dGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewog
Ci1jbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7Ci0gICAgfk5hbWVSZXNvbHZl
cigpID0gZGVmYXVsdDsKLX07CituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEVudW1lcmF0aW9uTWVtYmVy
JiBlbnVtZXJhdGlvbk1lbWJlcikKKyAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2lu
KSkKKyAgICAgICAgLCBtX2VudW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0aW9uTWVtYmVyKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5FbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSA9IGRl
ZmF1bHQ7CiAKLXZvaWQgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJikKLXsKKyAgICBleHBs
aWNpdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoY29uc3QgRW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsJikgPSBkZWZhdWx0OworICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0VudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIEVudW1l
cmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcigpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25N
ZW1iZXI7IH0KKworcHJpdmF0ZToKKyAgICBFbnVtZXJhdGlvbk1lbWJlciYgbV9lbnVtZXJhdGlv
bk1lbWJlcjsKK307CiAKIH0KIApAQCAtNDcsNCArNjQsNiBAQCB2b2lkIHJlc29sdmVOYW1lc0lu
VHlwZXMoUHJvZ3JhbSYpCiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBS
RVNTSU9OKEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggZTM2ODM4MzY0NmQuLmE3ODg2
ZmJhNmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzQ29tbWFFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEZXJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0TGl0ZXJhbCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5kZXhFeHByZXNzaW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2VyTGl0
ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNh
bEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0xvZ2ljYWxOb3RFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY3LDYg
KzY5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Rlcm5hcnlFeHByZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVn
ZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNW
YXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5j
dGlvbkRlY2xhcmF0aW9uLmgKaW5kZXggN2E3ZTBhMDY1NmMuLjgyMzU2NjZkOTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNp
bmNsdWRlICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1
ZGUgIldITFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBDb21wdXRlCiAgICAgfTsKIAotICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9j
ayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5
cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgUGFy
YW1ldGVycyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMp
CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0
ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBv
aW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5n
JiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6
OlNlbWFudGljPiYmIHNlbWFudGljKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2lu
KSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQog
ICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBAIC02NSwyNiArNjUs
MzQgQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgRnVuY3Rpb25EZWNs
YXJhdGlvbiYpID0gZGVsZXRlOwogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNs
YXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgQXR0
cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsg
fQotICAgIEFTVDo6VHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgQVNU
OjpVbm5hbWVkVHlwZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBBU1Q6
OlVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgIGJvb2wgaXNDYXN0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
ID09ICJvcGVyYXRvciBjYXN0IjsgfQorICAgIGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb25zJiBw
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgVmFyaWFibGVE
ZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICBP
cHRpb25hbDxBU1Q6OlNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9
CiAKICAgICBMZXhlcjo6VG9rZW4mJiB0YWtlT3JpZ2luKCkgeyByZXR1cm4gV1RGTW92ZShtX29y
aWdpbik7IH0KICAgICBBdHRyaWJ1dGVCbG9jayYmIHRha2VBdHRyaWJ1dGVCbG9jaygpIHsgcmV0
dXJuIFdURk1vdmUobV9hdHRyaWJ1dGVCbG9jayk7IH0KICAgICBPcHRpb25hbDxFbnRyeVBvaW50
VHlwZT4mJiB0YWtlRW50cnlQb2ludFR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2lu
dFR5cGUpOyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0YWtlVHlwZSgpIHsg
cmV0dXJuIFdURk1vdmUobV90eXBlKTsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZShtX3R5cGUpOyB9CiAgICAgU3Ry
aW5nJiYgdGFrZU5hbWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmFtZSk7IH0KLSAgICBQYXJhbWV0
ZXJzJiYgdGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1ldGVycyk7IH0K
KyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHRha2VQYXJhbWV0ZXJzKCkgeyByZXR1cm4gV1RG
TW92ZShtX3BhcmFtZXRlcnMpOyB9CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiB0YWtl
U2VtYW50aWMoKSB7IHJldHVybiBXVEZNb3ZlKG1fc2VtYW50aWMpOyB9CiAKIHByaXZhdGU6CiAg
ICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmlidXRl
QmxvY2s7CiAgICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IG1fZW50cnlQb2ludFR5cGU7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgUGFyYW1ldGVy
cyBtX3BhcmFtZXRlcnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMgbV9wYXJhbWV0ZXJzOwog
ICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+IG1fc2VtYW50aWM7CiB9OwogCkBAIC05NCw0ICsx
MDIsOSBAQCBwcml2YXRlOgogCiB9CiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9GVU5DVElPTl9ERUNMQVJBVElPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpUb1ZhbHVl
VHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6
OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7
IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVm
aW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgKaW5kZXggYTQ5MDdiMGQyOTguLmI2YjdiYTA3N2QzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5j
dGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaApAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6
CiAgICAgRnVuY3Rpb25EZWZpbml0aW9uKGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpID0gZGVs
ZXRlOwogICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihGdW5jdGlvbkRlZmluaXRpb24mJikgPSBkZWZh
dWx0OwogCisgICAgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKwogICAgIEJsb2NrJiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7IH0K
ICAgICBib29sIHJlc3RyaWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3RyaWN0ZWQ7IH0KIApA
QCAtNjQsNCArNjYsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oRnVuY3Rpb25EZWZpbml0aW9uLCBpc0Z1bmN0aW9u
RGVmaW5pdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKaW5kZXgg
NmJiNmEwZjBkYWIuLjQzZTYwYTEwNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaApA
QCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIEluZGV4RXhwcmVzc2lvbihjb25zdCBJbmRl
eEV4cHJlc3Npb24mKSA9IGRlbGV0ZTsKICAgICBJbmRleEV4cHJlc3Npb24oSW5kZXhFeHByZXNz
aW9uJiYpID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9yW10i
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc2V0
RnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJp
bmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQor
CisgICAgU3RyaW5nIGFuZEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICByZXR1cm4gU3RyaW5nKCJvcGVyYXRvcltdPSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgIH0KKworICAgIEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbigpIHsgcmV0
dXJuICptX2luZGV4OyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Np
b24+IG1faW5kZXg7CiB9OwpAQCAtNTksNCArNzgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihJbmRleEV4cHJlc3Npb24sIGlzSW5k
ZXhFeHByZXNzaW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaApzaW1pbGFyaXR5IGluZGV4
IDYxJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xQYXJhbWV0ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKaW5kZXggOTI1ODZmODY5MWYuLjI0NDdlYzc0ZWUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xQYXJhbWV0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xOYW1lZFR5cGUuaApAQCAtMjgsMTEgKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgi
Ci0jaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMTm9kZS5oIgogI2lu
Y2x1ZGUgIldITFNMVHlwZS5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQxLDM5ICszOCw0NiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1l
c3BhY2UgQVNUIHsKIAotY2xhc3MgUGFyYW1ldGVyIDogcHVibGljIFZhbHVlIHsKK2NsYXNzIE5h
bWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKIHB1YmxpYzoKLSAgICBQYXJhbWV0ZXIoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZT4mJiB0eXBlLCBPcHRpb25hbDxTdHJpbmc+JiYgbmFtZSwgT3B0aW9uYWw8QVNUOjpT
ZW1hbnRpYz4mJiBzZW1hbnRpYykKKyAgICBOYW1lZFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBTdHJpbmcmJiBuYW1lKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAg
ICAgICAgLCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKLSAgICAgICAgLCBtX3R5
cGUoV1RGTW92ZSh0eXBlKSkKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAg
ICAgLCBtX3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQogICAgIHsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIH5QYXJhbWV0ZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+TmFtZWRUeXBlKCkg
PSBkZWZhdWx0OwogCi0gICAgUGFyYW1ldGVyKGNvbnN0IFBhcmFtZXRlciYpID0gZGVsZXRlOwot
ICAgIFBhcmFtZXRlcihQYXJhbWV0ZXImJikgPSBkZWZhdWx0OworICAgIE5hbWVkVHlwZShjb25z
dCBOYW1lZFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOYW1lZFR5cGUoTmFtZWRUeXBlJiYpID0gZGVm
YXVsdDsKIAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9Ci0gICAgT3B0aW9u
YWw8QVNUOjpTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQorICAg
IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcm
IG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KKworICAgIGJvb2wgaXNOYW1lZFR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzVHlwZURlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1N0cnVj
dHVyZURlZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGlzTmF0aXZlVHlwZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIHZpcnR1YWwgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3QgeyByZXR1
cm4gKnRoaXM7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAg
UXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4g
bV90eXBlOwotICAgIE9wdGlvbmFsPFN0cmluZz4gbV9uYW1lOwotICAgIE9wdGlvbmFsPEFTVDo6
U2VtYW50aWM+IG1fc2VtYW50aWM7CisgICAgU3RyaW5nIG1fbmFtZTsKIH07CiAKLXR5cGVkZWYg
VmVjdG9yPFBhcmFtZXRlcj4gUGFyYW1ldGVyczsKLQogfQogCiB9CiAKIH0KIAorI2RlZmluZSBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBw
cmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6
OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNh
dGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dITFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlwZSgpKQorCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCAwMTBlNmVi
YTcwMC4uMjQ0ZTg0MTAxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiBw
dWJsaWM6Ci0gICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRU
eXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBT
dHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1h
bnRpYz4mJiBzZW1hbnRpYywgYm9vbCByZXN0cmljdGVkKQorICAgIE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0
ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxl
RGVjbGFyYXRpb25zJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1h
bnRpYywgYm9vbCByZXN0cmljdGVkKQogICAgICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RG
TW92ZShvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50
VHlwZSksIFdURk1vdmUodHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURk1vdmUoc2VtYW50aWMpKQogICAgICAgICAsIG1fcmVzdHJpY3RlZChyZXN0cmljdGVkKQog
ICAgIHsKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oY29uc3QgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRl
ZmF1bHQ7CiAKKyAgICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAtNjAsNCArNjIsNiBAQCBwcml2
YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFS
QVRJT04oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaApp
bmRleCAzMjBhYmMzYzQ3NS4uNmVkOThlYzc0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAog
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRl
ICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDExICszOCwxMCBAQCBuYW1lc3Bh
Y2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0
aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGlj
IE5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVu
dHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFt
ZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdU
Rk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3Vt
ZW50cykpCiAgICAgewogICAgIH0KQEAgLTUyLDE2ICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgTmF0
aXZlVHlwZURlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRl
OwogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBk
ZWZhdWx0OwogCi0gICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1f
dHlwZUFyZ3VtZW50czsgfQorICAgIGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4g
Y2xvbmUoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVy
biBtX25hbWU7IH0KKyAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4g
bV90eXBlQXJndW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2lu
OwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7
CiB9OwpAQCAtNzIsNCArNjgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfTkFNRURfVFlQRShOYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlzTmF0aXZlVHlw
ZURlY2xhcmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKaW5kZXggMTUyOTQy
NmEyZWQuLjYzYzIwOTNjNTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKQEAgLTM5LDggKzM5LDgg
QEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFBvaW50ZXJUeXBlIDogcHVibGljIFJlZmVyZW5j
ZVR5cGUgewogcHVibGljOgotICAgIFBvaW50ZXJUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
U3RyaW5nJiYgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gZWxlbWVudFR5cGUp
Ci0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYWRkcmVz
c1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8
VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlKQorICAgICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92
ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAg
ICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgUG9pbnRlclR5cGUoY29uc3Qg
UG9pbnRlclR5cGUmKSA9IGRlbGV0ZTsKICAgICBQb2ludGVyVHlwZShQb2ludGVyVHlwZSYmKSA9
IGRlZmF1bHQ7CiAKLSAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0
IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0
IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVy
VHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKGFkZHJlc3NTcGFjZSgpKSwgZWxl
bWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UG9p
bnRlclR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50
VHlwZSgpLmNsb25lKCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTY1LDYgKzY1LDYgQEAgcHJp
dmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoUG9pbnRlclR5
cGUsIGlzUG9pbnRlclR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1F
RF9UWVBFKFBvaW50ZXJUeXBlLCBpc1BvaW50ZXJUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAppbmRleCBiYTM4YTVjMDFlYS4uZDA1
YTcyYzFmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5o
CkBAIC01MSwxMCArNTEsMzAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Byb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1
YWwgU3RyaW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgYW5kRnVu
Y3Rpb25OYW1lKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fk
cyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4mIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMg
PSBvdmVybG9hZHM7CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29u
c3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
JiBvdmVybG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3Zl
cmxvYWRzOworICAgIH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zl
cmxvYWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJsb2Fk
czsKKyAgICB9CisKICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gKm1fYmFzZTsgfQog
CiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2Jhc2U7CisgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1f
cG9zc2libGVHZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVTZXRPdmVybG9hZHM7CisgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9z
c2libGVBbmRPdmVybG9hZHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmgKaW5kZXggYTRjMTRjZTFjZjMuLmNkNTU2MzIwZGIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCkBAIC0yNyw3ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJp
YWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgog
I2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKQEAgLTUyLDggKzUyLDggQEAgcHVi
bGljOgogICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Np
b24oTGV4ZXI6OlRva2VuKG9yaWdpbikpCiAgICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFs
dWUpKQotICAgICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAg
ICwgbV9uZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9vbGRWYWx1ZShMZXhl
cjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBudWxscHRyKQorICAgICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pLCBR
dWFsaWZpZXJzKCksIG51bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpCiAg
ICAgewogICAgIH0KIApAQCAtODcsMTUgKzg3LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuICptX2xWYWx1ZTsgfQotICAgIEFu
b255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1
ZTsgfQotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1
cm4gbV9uZXdWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyBy
ZXR1cm4gbV9vbGRWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkg
eyByZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24mIG5ld1ZhbHVlRXhwcmVzc2lv
bigpIHsgcmV0dXJuICptX25ld1ZhbHVlRXhwcmVzc2lvbjsgfQogICAgIEV4cHJlc3Npb24mIHJl
c3VsdEV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9yZXN1bHRFeHByZXNzaW9uOyB9CiAKIHByaXZh
dGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIEFub255
bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX29sZFZh
bHVlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RXhwcmVzc2lvbj4gbV9uZXdWYWx1ZUV4cHJlc3Npb247CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEV4cHJlc3Npb24+IG1fcmVzdWx0RXhwcmVzc2lvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VU
eXBlLmgKaW5kZXggMjI1N2Y5YmUyNDAuLjRlNjlmNzliOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNl
VHlwZS5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVu
bmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM3LDExICszNywxOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1l
c3BhY2UgQVNUIHsKIAotY2xhc3MgUmVmZXJlbmNlVHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNz
IFJlZmVyZW5jZVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIFJlZmVy
ZW5jZVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0
ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlKQotICAgICAgICA6IG1fb3JpZ2luKFdU
Rk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShXVEZNb3ZlKGFkZHJlc3NT
cGFjZSkpCisgICAgZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UgeworICAgICAgICBDb25zdGFudCwK
KyAgICAgICAgRGV2aWNlLAorICAgICAgICBUaHJlYWRncm91cCwKKyAgICAgICAgVGhyZWFkCisg
ICAgfTsKKworICAgIFJlZmVyZW5jZVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBZGRyZXNz
U3BhY2UgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgZWxlbWVu
dFR5cGUpCisgICAgICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAs
IG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdU
Rk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CkBAIC01MCwxOCArNTcsMTYgQEAgcHVi
bGljOgogCiAgICAgUmVmZXJlbmNlVHlwZShjb25zdCBSZWZlcmVuY2VUeXBlJikgPSBkZWxldGU7
CiAgICAgUmVmZXJlbmNlVHlwZShSZWZlcmVuY2VUeXBlJiYpID0gZGVmYXVsdDsKLSAgICAKLSAg
ICBUeXBlJiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CiAKLXByb3Rl
Y3RlZDoKLSAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVy
biBtX2FkZHJlc3NTcGFjZTsgfQotICAgIGNvbnN0IFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBBZGRyZXNzU3BhY2UgYWRkcmVz
c1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKyAgICBjb25zdCBVbm5h
bWVkVHlwZSYgZWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQor
ICAgIFVubmFtZWRUeXBlJiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX2Fk
ZHJlc3NTcGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAg
ICBBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFt
ZWRUeXBlPiBtX2VsZW1lbnRUeXBlOwogfTsKIAogfQpAQCAtNzAsNCArNzUsNiBAQCBwcml2YXRl
OgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBFKFJlZmVy
ZW5jZVR5cGUsIGlzUmVmZXJlbmNlVHlwZSgpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzVi
ZmM5ZTQyODYuLmFjOTMyM2QyNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTEgQEAgcHVi
bGljOgogCiAgICAgRXhwcmVzc2lvbiogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9
CiAKKyAgICB2b2lkIHNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZp
bml0aW9uKSB7IG1fZnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAg
ICBGdW5jdGlvbkRlZmluaXRpb24qIG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZp
bml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dHJ1Y3R1cmVEZWZpbml0aW9uLmgKaW5kZXggODdjYzYyZjIzNTYuLmE4Yzk4ZTk5YjRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1
Y3R1cmVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNp
bmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTM5LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsK
IAotY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFN0cnVj
dHVyZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1
cmVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgU3RydWN0
dXJlRWxlbWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZN
b3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgIDog
TmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3N0
cnVjdHVyZUVsZW1lbnRzKFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMpKQogICAgIHsKICAgICB9
CkBAIC01MywxNyArNTIsMTEgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24oY29u
c3QgU3RydWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZURlZmluaXRp
b24oU3RydWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJ1Y3R1cmVFbGVt
ZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9
CisgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KKyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVu
dHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4
ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RydWN0dXJlRWxl
bWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKIH07CiAKQEAgLTczLDQgKzY2LDYgQEAgcHJpdmF0
ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoU3RydWN0
dXJlRGVmaW5pdGlvbiwgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0
dXJlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRWxlbWVudC5oCmluZGV4IDE0YmU0MWM3Mjk4Li5hOGNiZjk4ZGY1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgU3RydWN0dXJlRWxlbWVudCA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoK
LSAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYm
IHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUs
IE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0
cjxVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4g
c2VtYW50aWMpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAs
IG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZN
b3ZlKHR5cGUpKQpAQCAtNTUsMTMgKzU1LDE1IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVFbGVt
ZW50KGNvbnN0IFN0cnVjdHVyZUVsZW1lbnQmKSA9IGRlbGV0ZTsKICAgICBTdHJ1Y3R1cmVFbGVt
ZW50KFN0cnVjdHVyZUVsZW1lbnQmJikgPSBkZWZhdWx0OwogCi0gICAgVHlwZSYgdHlwZSgpIHsg
cmV0dXJuICptX3R5cGU7IH0KKyAgICBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIHsgcmV0dXJuIG1f
b3JpZ2luOyB9CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9Cisg
ICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8
U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogcHJpdmF0ZToK
ICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPFNl
bWFudGljPiBtX3NlbWFudGljOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUuaAppbmRleCBjZjRjYmM4ODc5MC4uNTczYThiYjY4
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlLmgKQEAgLTQ1LDEyICs0NSw4IEBAIHB1YmxpYzoKICAgICBUeXBlKGNvbnN0IFR5
cGUmKSA9IGRlbGV0ZTsKICAgICBUeXBlKFR5cGUmJikgPSBkZWZhdWx0OwogCi0gICAgdmlydHVh
bCBib29sIGlzVHlwZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzVW5uYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
CiBwcml2YXRlOgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCmluZGV4IGY3MzYyOWUyOWIx
Li42OWFhMjNhMWZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw4
IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0j
aW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMg
VHlwZSB7CitjbGFzcyBUeXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGlj
OgotICAgIFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKQotICAgICAgICA6IG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICBU
eXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBl
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92
ZSh0eXBlKSkKICAgICB7CiAgICAgfQpAQCAtNTIsMTggKzUyLDE4IEBAIHB1YmxpYzoKICAgICBU
eXBlRGVmaW5pdGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFR5cGVE
ZWZpbml0aW9uKFR5cGVEZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIEFTVDo6VHlwZSYg
dHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBib29sIGlzVHlwZURlZmluaXRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICBBU1NFUlQobV90eXBlKTsKKyAgICAgICAgcmV0dXJuIG1f
dHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBl
OwogfTsKIAogfQpAQCAtNzIsNCArNzIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUeXBlRGVmaW5pdGlvbiwgaXNUeXBlRGVmaW5p
dGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAppbmRleCA0OTQ0MWQ4YjVj
Ny4uOTI5M2FhMjY0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKQEAgLTI4LDggKzI4LDkg
QEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1
ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
QVNUIHsKIAotY2xhc3MgVHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFR5cGVS
ZWZlcmVuY2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgogICAgIFR5cGVSZWZlcmVu
Y2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYg
dHlwZUFyZ3VtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAg
ICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbmFtZShXVEZN
b3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3ZlKHR5cGVBcmd1bWVu
dHMpKQogICAgIHsKQEAgLTUyLDI0ICs1Myw0NyBAQCBwdWJsaWM6CiAgICAgVHlwZVJlZmVyZW5j
ZShjb25zdCBUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgVHlwZVJlZmVyZW5jZShUeXBl
UmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVJlZmVyZW5jZT4gd3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2
ZWRUeXBlKQorICAgIHsKKyAgICAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOworICAg
ICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAg
ICAgICAgdHlwZUFyZ3VtZW50cyA9IEFTVDo6Y2xvbmUoZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihyZXNvbHZlZFR5cGUpLnR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0
cmluZyhyZXNvbHZlZFR5cGUubmFtZSgpKSwgV1RGTW92ZSh0eXBlQXJndW1lbnRzKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKHJlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25h
bWU7IH0KICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBl
QXJndW1lbnRzOyB9CisgICAgTmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSB7IHJldHVybiBtX3Jl
c29sdmVkVHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
UmVzb2x2ZWRUeXBlKE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9y
ZXNvbHZlZFR5cGUgPSAmcmVzb2x2ZWRUeXBlOworICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKG1f
b3JpZ2luKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50cykp
OwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCiAgICAgewogICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVmZXJlbmNlKCk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9uYW1l
OwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOworICAgIE5hbWVkVHlwZSogbV9y
ZXNvbHZlZFR5cGUgeyBudWxscHRyIH07CiB9OwogCiB9CkBAIC03OCw2ICsxMDIsNiBAQCBwcml2
YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShUeXBlUmVmZXJl
bmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5O
QU1FRF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgpKQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVu
bmFtZWRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbm5hbWVkVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43
M2E4ZjBhMGM0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVW5uYW1l
ZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5cGUoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB+VW5uYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBV
bm5hbWVkVHlwZShjb25zdCBVbm5hbWVkVHlwZSYpID0gZGVsZXRlOworICAgIFVubmFtZWRUeXBl
KFVubmFtZWRUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlUmVm
ZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQb2lu
dGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJy
YXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOwor
CisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdp
bjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKK307CisKK30KKwor
fQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZ
UEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlVubmFtZWRUeXBlJiB0eXBl
KSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShVbm5hbWVkVHlwZSwgaXNV
bm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aAppbmRleCBmZjAzNjgxOTNiZC4uODUyMGNhZGNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IFZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgotICAgIFZhcmlh
YmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlm
aWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBP
cHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1h
bnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAg
IDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZN
b3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjAs
MjAgKzYwLDIzIEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVj
bGFyYXRpb24mJikgPSBkZWZhdWx0OwogCiAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIFVubmFtZWRU
eXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQogICAgIE9wdGlvbmFsPFNlbWFudGljPiYg
c2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAgICAgRXhwcmVzc2lvbiogaW5pdGlh
bGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAg
TGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9u
YWw8U2VtYW50aWM+IG1fc2VtYW50aWM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
IG1faW5pdGlhbGl6ZXI7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9u
PiBWYXJpYWJsZURlY2xhcmF0aW9uczsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZl
cmVuY2UuaAppbmRleCAyYWU4MjhkNTI5NS4uZTM5ZWNmNWM1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFy
aWFibGVSZWZlcmVuY2UuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaCIKQEAgLTU1LDE5ICs1NSwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhcmlh
YmxlUmVmZXJlbmNlIHdyYXAoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlv
bikKICAgICB7CiAgICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4o
dmFyaWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJs
ZSA9IHsgJnZhcmlhYmxlRGVjbGFyYXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUg
PSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBzdGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3JhcChBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uJiBhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKQorICAgIGJvb2wgaXNWYXJpYWJs
ZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmlu
ZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiog
dmFyaWFibGUoKSB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKKyAgICB2b2lkIHNldFZhcmlhYmxl
KFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewotICAgICAg
ICBWYXJpYWJsZVJlZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKGFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZh
bm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIH07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIG1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9CiAKLSAgICBi
b29sIGlzVmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
Ci0KIHByaXZhdGU6CiAgICAgVmFyaWFibGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
KQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQpAQCAtNzUsNyArNzcsNyBA
QCBwcml2YXRlOgogICAgIH0KIAogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8VmFy
aWFudDxWYXJpYWJsZURlY2xhcmF0aW9uKiwgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbio+
PiBtX3ZhcmlhYmxlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIG1fdmFyaWFibGU7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYwNGJkZTcxNjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0
aW9ucy5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVk
ZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2lubGluZSBib29sIGNoZWNrRHVwbGljYXRl
RnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPj4gZnVuY3Rpb25zOworICAg
IGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRp
b25zKCkpCisgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7Cisg
ICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKTsKKworICAgIHN0ZDo6c29ydChmdW5jdGlvbnMuYmVnaW4oKSwg
ZnVuY3Rpb25zLmVuZCgpLCBbXShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGEsIGNv
bnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgYikgLT4gYm9vbCB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzdGQ6Om1pbihhLm5hbWUoKS5sZW5ndGgoKSwgYi5uYW1lKCku
bGVuZ3RoKCkpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA8IGIubmFtZSgp
W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKGEubmFt
ZSgpW2ldID4gYi5uYW1lKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBhLm5hbWUoKS5sZW5ndGgoKSA8IGIubmFtZSgpLmxlbmd0
aCgpOworICAgIH0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGZ1bmN0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkg
IT0gZnVuY3Rpb25zW2pdLmdldCgpLm5hbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9u
c1tpXS5nZXQoKSkgJiYgaXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlv
bnNbal0uZ2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGZ1bmN0aW9uc1tqXS5n
ZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5pc0Nhc3QoKSkgeworICAgICAgICAgICAg
ICAgIGJvb2wgc2FtZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0
aW9uc1tpXS5nZXQoKS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS50eXBlKCkpKQorICAgICAg
ICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRjaGVzKGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpLCBmdW5j
dGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYm9vbCBzYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0g
MDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClba10udHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZSA9IGZ1bmN0aW9uc1tpXS5nZXQoKS5w
YXJhbWV0ZXJzKClbMV0udHlwZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVy
ZW5jZT4odHlwZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKS5yZXNvbHZlZFR5cGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNv
bHZlZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVk
VHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAidWludCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9w
ZXJhdG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMQorICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzPEFT
VDo6QXJyYXlUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChmdW5jdGlvbnNb
aV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvcj09IgorICAgICAgICAgICAgJiYgZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNU
OjpSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUo
KSkKKyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpCisgICAgICAgICAgICAmJiBtYXRjaGVzKGZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCBmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpWzFdLnR5cGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiMTNkZDBhNjNmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZl
clR5cGVzLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVt
ZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJn
dW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2lubGluZSBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpV
bm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIG90aGVyKQor
eworICAgIGF1dG8mIHVuaWZ5VGhpcyA9IHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpOworICAgIGF1
dG8mIHVuaWZ5T3RoZXIgPSBvdGhlci51bmlmeU5vZGUoKTsKKworICAgIGlmICgmdW5pZnlUaGlz
ID09ICZ1bmlmeU90aGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpczxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlPdGhlcikp
IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGF1dG8mIG5hbWVkVGhpcyA9IGRvd25j
YXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpOworICAgICAgICBhdXRvJiBuYW1lZE90aGVy
ID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQo
IWlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVGhpcykgJiYgIWlzPEFTVDo6VHlwZURlZmlu
aXRpb24+KG5hbWVkT3RoZXIpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSBlbHNlIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMpICYmIGlzPEFTVDo6VW5u
YW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisgICAgICAgIGF1dG8mIHVubmFtZWRUaGlzID0gZG93
bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKTsKKyAgICAgICAgYXV0byYgdW5uYW1l
ZE90aGVyID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcik7CisgICAgICAg
IEFTU0VSVCghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVGhpcykgJiYgIWlzPEFTVDo6
VHlwZVJlZmVyZW5jZT4odW5uYW1lZE90aGVyKSk7CisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZE90aGVy
KSkgeworICAgICAgICAgICAgYXV0byYgcG9pbnRlclRoaXMgPSBkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBwb2ludGVyT3RoZXIgPSBk
b3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYg
KHBvaW50ZXJUaGlzLmFkZHJlc3NTcGFjZSgpICE9IHBvaW50ZXJPdGhlci5hZGRyZXNzU3BhY2Uo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0
Y2hlcyhwb2ludGVyVGhpcy5lbGVtZW50VHlwZSgpLCBwb2ludGVyT3RoZXIuZWxlbWVudFR5cGUo
KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1
bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcikp
eworICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUaGlzID0gZG93bmNhc3Q8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5
UmVmZXJlbmNlT3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1l
ZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVJlZmVyZW5jZVRoaXMuYWRkcmVzc1NwYWNl
KCkgIT0gYXJyYXlSZWZlcmVuY2VPdGhlci5hZGRyZXNzU3BhY2UoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhhcnJheVJlZmVyZW5j
ZVRoaXMuZWxlbWVudFR5cGUoKSwgYXJyYXlSZWZlcmVuY2VPdGhlci5lbGVtZW50VHlwZSgpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUaGlzKSAm
JiBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90aGVyKSkgeworICAgICAgICAgICAgYXV0byYg
YXJyYXlUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAg
ICAgICAgIGF1dG8mIGFycmF5T3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVRoaXMubnVtRWxlbWVudHMoKSAhPSBhcnJh
eU90aGVyLm51bUVsZW1lbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlUaGlzLnR5cGUoKSwgYXJyYXlPdGhlci50eXBl
KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhBU1Q6
Ok5hbWVkVHlwZSYgcG9zc2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVu
dHMpCit7CisgICAgaWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAg
ICAgICAgfHwgaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAg
ICAgIHx8IGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpKSB7Cisg
ICAgICAgIHJldHVybiB0eXBlQXJndW1lbnRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBBU1NF
UlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSkpOworICAgIGF1
dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihwb3NzaWJsZVR5cGUpOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpLnNpemUoKSAhPSB0eXBlQXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbiogdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFT
VDo6VHlwZVJlZmVyZW5jZSogdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxwdHI7Cisg
ICAgICAgIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNz
aW9uID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiBuYXRpdmVUeXBlQXJn
dW1lbnRUeXBlUmVmZXJlbmNlID0gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGFzc2lnbiA9IFsm
XShBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50LCBBU1Q6OkNvbnN0YW50RXhwcmVzc2lv
biomIGV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZSomIHR5cGVSZWZlcmVuY2UpIHsKKyAg
ICAgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4
cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIGV4cHJlc3Np
b24gPSAmY29uc3RhbnRFeHByZXNzaW9uOworICAgICAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0aGVUeXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAg
ICAgICAgdHlwZVJlZmVyZW5jZSA9IHRoZVR5cGVSZWZlcmVuY2UuZ2V0KCk7CisgICAgICAgICAg
ICB9KSwgdHlwZUFyZ3VtZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBhc3NpZ24odHlwZUFy
Z3VtZW50c1tpXSwgdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiwgdHlwZUFyZ3VtZW50VHlwZVJlZmVy
ZW5jZSk7CisgICAgICAgIGFzc2lnbihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpW2ldLCBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uLCBuYXRpdmVUeXBlQXJndW1lbnRU
eXBlUmVmZXJlbmNlKTsKKworICAgICAgICBpZiAodHlwZUFyZ3VtZW50RXhwcmVzc2lvbiAmJiBu
YXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVBcmd1
bWVudEV4cHJlc3Npb24tPm1hdGNoZXMoKm5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlQXJn
dW1lbnRUeXBlUmVmZXJlbmNlICYmIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpIHsK
KyAgICAgICAgICAgIGlmICghbWF0Y2hlcygqdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSwgKm5h
dGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEludHJpbnNpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbnRyaW5zaWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMGM0NDIyZDUxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCkBAIC0wLDAgKzEsMjU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKworI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCitJbnRyaW5zaWNzOjpJbnRyaW5zaWNzKCkKKyAgICA6IG1fdGV4dHVyZVR5cGVOYW1l
cyB7IFN0cmluZygiVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisg
ICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUxREFycmF5IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEQXJyYXki
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4
dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJp
bmcoIlJXVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAg
ICAgICBTdHJpbmcoIlRleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEQXJyYXkiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTNEIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTNE
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRl
eHR1cmVDdWJlIiwgIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIG1fdGV4
dHVyZUlubmVyVHlwZU5hbWVzIHsgU3RyaW5nKCJ1Y2hhciIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJ1c2hvcnQiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidWludCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJjaGFyIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInNob3J0IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImludCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJoYWxmIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQorICAgICwgbV9kZXB0aFRleHR1cmVJbm5lclR5
cGVzIHsgU3RyaW5nKCJoYWxmIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAg
ICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQor
eworICAgIEFTU0VSVChtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpID09IDExKTsgLy8gZnVsbFRl
eHR1cmVzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNTRVJUKG1f
dGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSA9PSA4KTsgLy8gZnVsbFRleHR1cmVzIGhhcmRj
b2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNTRVJUKG1fZGVwdGhUZXh0dXJl
SW5uZXJUeXBlcy5zaXplKCkgPT0gMik7IC8vIHRleHR1cmVEZXB0aDJEICYgZnJpZW5kcyBoYXJk
Y29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorfQorCit2b2lkIEludHJpbnNpY3M6OmFk
ZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKQoreworICAgIC8vIEZJWE1FOiBQb3B1
bGF0ZSB0aGlzLgorfQorCitib29sIEludHJpbnNpY3M6OmFkZFByaW1pdGl2ZShBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSAhPSAwKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
dm9pZCIpCisgICAgICAgIG1fdm9pZFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImJvb2wiKQorICAgICAg
ICBtX2Jvb2xUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAgIG1fdWNoYXJUeXBl
ID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJ1c2hvcnQiKQorICAgICAgICBtX3VzaG9ydFR5cGUgPSAmbmF0aXZl
VHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gInVpbnQiKQorICAgICAgICBtX3VpbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJjaGFyIikK
KyAgICAgICAgbV9jaGFyVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKQorICAgICAgICBtX3No
b3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgbV9pbnRUeXBlID0gJm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJoYWxmIikKKyAgICAgICAgbV9oYWxmVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRp
b247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxvYXQi
KQorICAgICAgICBtX2Zsb2F0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxz
ZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX2ludCIpCisgICAg
ICAgIG1fYXRvbWljSW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX3VpbnQiKQorICAgICAg
ICBtX2F0b21pY1VpbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJzYW1wbGVyIikKKyAgICAgICAgbV9z
YW1wbGVyVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5z
aWNzOjphZGRWZWN0b3IoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAidmVj
dG9yIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQb2ludGVy
ID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8mIGxlbmd0aEV4cHJl
c3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgQVNTRVJUKGlubmVyVHlwZVBvaW50ZXIp
OworICAgIGF1dG8mIGlubmVyVHlwZSA9ICppbm5lclR5cGVQb2ludGVyOworICAgIEFTU0VSVChp
bm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAwKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbioqIGFycmF5OworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJib29s
IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckJvb2w7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBl
Lm5hbWUoKSA9PSAidWNoYXIiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVWNoYXI7CisgICAg
ZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgYXJyYXkgPSBt
X3ZlY3RvclVzaG9ydDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1aW50IikK
KyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclVpbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5h
bWUoKSA9PSAiY2hhciIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JDaGFyOworICAgIGVsc2Ug
aWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3Rv
clNob3J0OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImludCIpCisgICAgICAg
IGFycmF5ID0gbV92ZWN0b3JJbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAi
aGFsZiIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JIYWxmOworICAgIGVsc2UgaWYgKGlubmVy
VHlwZS5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckZsb2F0Owor
ICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaW50IGxlbmd0aCA9
IGxlbmd0aEV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChs
ZW5ndGggPj0gMiAmJiBsZW5ndGggPD0gNCk7CisgICAgYXJyYXlbbGVuZ3RoIC0gMl0gPSAmbmF0
aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNp
Y3M6OmFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJtYXRy
aXgiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMyk7CisgICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpWzJdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9IFdURjo6Z2V0
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvJiByb3dFeHByZXNzaW9uID0gV1RGOjpn
ZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMV0pOworICAgIGF1dG8mIGNvbHVtbkV4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KVsyXSk7CisgICAgQVNTRVJUKGlubmVyVHlwZVBvaW50ZXIpOworICAgIGF1dG8mIGlubmVyVHlw
ZSA9ICppbm5lclR5cGVQb2ludGVyOworICAgIEFTU0VSVChpbm5lclR5cGUudHlwZUFyZ3VtZW50
cygpLnNpemUoKSA9PSAwKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogKCphcnJh
eSlbM107CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICBhcnJh
eSA9IG1fbWF0cml4SGFsZjsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQor
ICAgICAgICBhcnJheSA9IG1fbWF0cml4RmxvYXQ7CisgICAgaW50IHJvdyA9IHJvd0V4cHJlc3Np
b24uaW50ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChyb3cgPj0gMiAmJiByb3cg
PD0gNCk7CisgICAgaW50IGNvbHVtbiA9IGNvbHVtbkV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwo
KS52YWx1ZSgpOworICAgIEFTU0VSVChjb2x1bW4gPj0gMiAmJiBjb2x1bW4gPD0gNCk7CisgICAg
YXJyYXlbcm93IC0gMl1bY29sdW1uIC0gMl0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZEZ1bGxUZXh0dXJlKEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24sIEFTVDo6VHlwZVJl
ZmVyZW5jZSYgaW5uZXJUeXBlKQoreworICAgIHVuc2lnbmVkIHRleHR1cmVUeXBlSW5kZXggPSBt
X3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gbV90ZXh0dXJlVHlwZU5hbWVzW2ldKQorICAgICAgICAgICAg
dGV4dHVyZVR5cGVJbmRleCA9IGk7CisgICAgfQorICAgIGlmICh0ZXh0dXJlVHlwZUluZGV4ID09
IG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHVuc2lnbmVkIGlubmVyVHlwZUluZGV4ID0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgp
OworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlu
bmVyVHlwZS5uYW1lKCkuc3RhcnRzV2l0aChtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXSkpIHsK
KyAgICAgICAgICAgIHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgICAgICAgICAgaWYgKGlubmVy
VHlwZS5uYW1lKCkgPT0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pCisgICAgICAgICAgICAg
ICAgdmVjdG9yTGVuZ3RoID0gMTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IEFTU0VSVChpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5h
bWVzW2ldLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlubmVyVHlwZS5u
YW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICcyJworICAgICAgICAgICAg
ICAgICAgICB8fCBpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAx
XSA9PSAnMycKKyAgICAgICAgICAgICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5
cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzQnKTsKKyAgICAgICAgICAgICAgICB2ZWN0b3JM
ZW5ndGggPSBpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSAt
ICcwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoaW5uZXJU
eXBlSW5kZXggIT0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpKTsKKyAgICBtX2Z1bGxU
ZXh0dXJlc1t0ZXh0dXJlVHlwZUluZGV4XVtpbm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3RoIC0g
MV0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IEludHJpbnNpY3M6OmFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4
dHVyZSA9IG1fdGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3
VGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVE
ZXB0aDJEQXJyYXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiUldUZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJl
RGVwdGgyREFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIlRleHR1cmVEZXB0aEN1YmUiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGhD
dWJlOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWdu
ZWQgaW5uZXJUeXBlSW5kZXggPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gbV9kZXB0aFRleHR1cmVJ
bm5lclR5cGVzW2ldKQorICAgICAgICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0KKyAg
ICBBU1NFUlQoaW5uZXJUeXBlSW5kZXggIT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUo
KSk7CisgICAgdGV4dHVyZVtpbm5lclR5cGVJbmRleF0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9u
OworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NFUlQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiBpbm5l
clR5cGVQb2ludGVyID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5j
ZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIEFTU0VS
VChpbm5lclR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9p
bnRlcjsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7
CisgICAgaWYgKGFkZEZ1bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5uZXJUeXBl
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZERlcHRoVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFy
YXRpb24sIGlubmVyVHlwZSk7Cit9CisKK3ZvaWQgSW50cmluc2ljczo6YWRkKEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGFkZFBy
aW1pdGl2ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGFkZFZlY3RvcihuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKGFkZE1hdHJpeChuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47Cisg
ICAgYWRkVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEludHJpbnNpY3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW50cmluc2ljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kN2I0
ZTM4NzIxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMSW50cmluc2ljcy5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFy
YXRpb24uaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
SW50cmluc2ljcyB7CitwdWJsaWM6CisgICAgSW50cmluc2ljcygpOworCisgICAgdm9pZCBhZGQo
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBhZGQoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mKTsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBi
b29sVHlwZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9ib29sVHlwZSk7CisgICAgICAgIHJl
dHVybiAqbV9ib29sVHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biYgdWludFR5cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdWludFR5cGUpOworICAgICAg
ICByZXR1cm4gKm1fdWludFR5cGU7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYWRkUHJp
bWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRWZWN0b3Io
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZE1hdHJpeChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkRnVsbFRleHR1cmUoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGFkZERl
cHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5j
ZSYpOworICAgIHZvaWQgYWRkVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOwor
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdm9pZFR5cGU7CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYm9vbFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fdWNoYXJUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3VzaG9ydFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdWludFR5cGU7
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fY2hhclR5cGU7CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fc2hvcnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiBtX2ludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
aGFsZlR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fZmxvYXRUeXBlOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0b21pY0ludFR5cGU7CisgICAgQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYXRvbWljVWludFR5cGU7CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1fc2FtcGxlclR5cGU7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV92ZWN0b3JCb29sWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX3ZlY3RvclVjaGFyWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3ZlY3RvclVzaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0
b3JVaW50WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckNoYXJb
M107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yU2hvcnRbM107Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9ySW50WzNdOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckhhbGZbM107CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yRmxvYXRbM107CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV9tYXRyaXhIYWxmWzNdWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX21hdHJpeEZsb2F0WzNdWzNdOworCisgICAgVmVjdG9yPFN0cmluZz4gbV90ZXh0
dXJlVHlwZU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVz
OworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fZnVsbFRleHR1cmVzWzExXVs4
XVs0XTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlczsKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1RleHR1cmVEZXB0aDJEWzJdOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aDJEQXJyYXlbMl07CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0dXJlRGVwdGgyREFycmF5WzJdOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aEN1YmVbMl07Cit9
OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmNiNzAzNzg4MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCkBAIC0wLDAgKzEs
MTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0
dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitjbGFzcyBOYW1lQ29udGV4dCB7CitwdWJsaWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRl
eHQqIHBhcmVudCA9IG51bGxwdHIpCisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlv
bikKKyAgICB7CisgICAgICAgIGlmIChleGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFk
ZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKHR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgYm9vbCBhZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKGV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV90eXBl
cy5hZGQoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51
bWVyYXRpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGV4aXN0cyhlbnVtZXJhdGlv
bkRlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAg
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRp
b24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KG1fdHlwZXMuZmluZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgp
CisgICAgICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFt
ZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPigpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBh
ZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICAgICAgfHwgbV92YXJpYWJs
ZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMu
ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
bV9mdW5jdGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgYWRkKEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisgICAgewor
ICAgICAgICBpZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
KSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBib29sIGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVj
bGFyYXRpb24pCisgICAgeworICAgICAgICBpZiAoZXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24u
bmFtZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBtX3ZhcmlhYmxlcy5hZGQoU3RyaW5nKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSwgJnZh
cmlhYmxlRGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm4gcmVzdWx0LmlzTmV3RW50cnk7Cisg
ICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+
LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fdHlwZXMuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1f
dHlwZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9wYXJlbnQtPmdldFR5cGVzKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CisgICAg
fQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnMuZmluZChuYW1lKTsKKyAgICAgICAgaWYg
KGl0ZXJhdG9yID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAobV9wYXJl
bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMobmFtZSk7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Jml0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24q
IGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0g
bV92YXJpYWJsZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFZhcmlhYmxlKG5hbWUpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBleGlzdHMoU3RyaW5nJiBuYW1lKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCisg
ICAgICAgICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5hbWUpICE9IG1fZnVuY3Rpb25zLmVuZCgp
CisgICAgICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVu
ZCgpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+PiBtX3R5cGVzOworICAgIEhhc2hNYXA8U3RyaW5n
LCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+
LCAxPj4gbV9mdW5jdGlvbnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbio+IG1fdmFyaWFibGVzOworICAgIE5hbWVDb250ZXh0KiBtX3BhcmVudDsKK307CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCmluZGV4IDQ3ZDRkNmE1NzkzLi5kMGQ1YjYz
NzE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xOYW1lUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVSZXNvbHZlci5oCkBAIC0yNywxMyArMjcsMjk2IEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIKKyNp
bmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisj
aW5jbHVkZSAiV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNp
dG9yLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi12b2lkIHJl
c29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSk7CitjbGFzcyBOYW1lUmVzb2x2ZXIg
OiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0
JiBuYW1lQ29udGV4dCkKKyAgICAgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgICAgICBpZiAodHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRv
KiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5hbWUo
KSk7CisgICAgICAgIGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlm
IChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBl
UmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgICAgICAgICB0eXBlUmVmZXJlbmNlLnNl
dFJlc29sdmVkVHlwZSgqcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Vy
cm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIE5hbWVDb250ZXh0IG5ld05hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsK
KyAgICAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7Cisg
ICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAg
ICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KSkgeworICAgICAgICAgICAgbmV3TmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KHBhcmFtZXRl
cik7CisgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBuZXdOYW1lQ29udGV4dC5hZGQocGFyYW1l
dGVyKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIG1fZXJy
b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBuZXdOYW1lUmVzb2x2ZXIudmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJs
b2NrKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spIG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAg
IE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQoYmxvY2spOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBWaXNpdG9yOjp2aXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAg
TmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVz
b2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7Cisg
ICAgICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgICAgICBOYW1lQ29u
dGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAgICAgICBOYW1lUmVzb2x2
ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxl
TG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgp
KTsKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAg
ICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KHdoaWxlTG9vcC5i
b2R5KCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgd2hpbGVM
b29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQp
OworICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KHdoaWxl
TG9vcC5ib2R5KCkpOworICAgICAgICBWaXNpdG9yOjp2aXNpdCh3aGlsZUxvb3AuY29uZGl0aW9u
YWwoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAg
ICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQoZm9yTG9vcCk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBtX25hbWVDb250ZXh0LmFkZCh2YXJpYWJsZURlY2xh
cmF0aW9uKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJl
ZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChhdXRvKiB2YXJpYWJsZSA9IG1fbmFt
ZUNvbnRleHQuZ2V0VmFyaWFibGUodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKSkKKyAgICAgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNldFZhcmlhYmxlKCp2YXJpYWJsZSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5Ob2Rl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJu
Tm9kZS5zZXRGdW5jdGlvbihtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgICAgIFZpc2l0b3I6OnZp
c2l0KHJldHVybk5vZGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChhdXRvKiBnZXRGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uZ2V0RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICAgICAgcHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKCpnZXRGdW5jdGlvbnMp
OworICAgICAgICBpZiAoYXV0byogc2V0RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5j
dGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAg
ICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZVNldE92ZXJsb2Fkcygq
c2V0RnVuY3Rpb25zKTsKKyAgICAgICAgaWYgKGF1dG8qIGFuZEZ1bmN0aW9ucyA9IG1fbmFtZUNv
bnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRGdW5jdGlvbk5h
bWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVB
bmRPdmVybG9hZHMoKmFuZEZ1bmN0aW9ucyk7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4
cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9l
cnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoaXM8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhkb3duY2FzdDxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkubmFtZSgpKSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7CisgICAg
ICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBd
OworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
Pih0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0
aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoZG90RXhwcmVzc2lvbi5maWVsZE5hbWUoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBl
eHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFy
aWFudHMgb3IgYSBSZXdyaXRlciBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAgZG90
RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3
ICgmZG90RXhwcmVzc2lvbikgQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShv
cmlnaW4pLCAqbWVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZXJyb3Ig
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgVmlzaXRvcjo6dmlzaXQoZG90RXhwcmVzc2lvbik7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5u
YW1lKCkpKQorICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVu
Y3Rpb25zKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNhbGxFeHByZXNz
aW9uLnNldENhc3REYXRhKCk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9
IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAg
ICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9lcnJvciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoY2FsbEV4cHJlc3Np
b24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9u
YW1lQ29udGV4dC5nZXRUeXBlcyhjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZS5sZWZ0KCkpKSB7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+
c2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1l
cmF0aW9uVHlwZXMpWzBdOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4odHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1l
cmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UucmlnaHQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1i
ZXIoKm1lbWJlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZXJyb3Ig
PSB0cnVlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgYWxsIHRoZSBuYW1lcyBo
YXZlIGJlZW4gcmVzb2x2ZWQuCisKKyAgICB2b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRp
b24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7Cisg
ICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOworICAgIH0KKwor
ICAgIGJvb2wgZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yOyB9CisKK3ByaXZhdGU6CisgICAgTmFt
ZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9j
dXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07CisgICAgYm9vbCBtX2Vycm9yIHsgZmFsc2UgfTsg
Ly8gRklYTUU6IE1pZ3JhdGUgdGhpcyB0byBiZSBzb21lIHNvcnQgb2YgZGVzY3JpcHRpdmUgc3Ry
aW5nLgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlIGVycm9yIGludG8gVmlzaXRv
cgorfTsKKworaW5saW5lIGJvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFt
LCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIHR5cGVEZWZp
bml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2
ZXIuVmlzaXRvcjo6dmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNv
bHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3Ig
KGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25z
KCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KCpzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNv
bHZlci5WaXNpdG9yOjp2aXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYg
KG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlw
ZURlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5WaXNpdG9yOjp2aXNpdCgq
bmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW5saW5lIGJvb2wgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwg
TmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRl
ZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1l
UmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jdGlvbkRlZmluaXRpb24u
Z2V0KCkpOworICAgICAgICBuYW1lUmVzb2x2ZXIudmlzaXQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7
CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRp
b24obnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDog
cHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNv
bHZlci5WaXNpdG9yOjp2aXNpdCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAg
IGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi4z
MzM2YjliMmVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmNwcApAQCAtMzgsNyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7
CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3Ry
aW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4g
YSBiZXR0ZXIgZXJyb3IgY29kZSBmcm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlw
dC4KK2F1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExl
eGVyKHN0cmluZ1ZpZXcpOwogICAgIG1fbW9kZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBh
dXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVE
ZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5p
dGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmlu
aXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlw
ZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1
dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
TW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0
dXJlRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgq
c3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHBy
b2dyYW0uYXBwZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJO
YW1lIEVycm9yISAlcyIsIHN0cnVjdHVyZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTc0LDcgKzgzLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQs
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIGlmIChlbnVtZXJhdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAg
ICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1l
cmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAg
ICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRp
b25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBh
dXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0
aW9uRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rp
b25EZWZpbml0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpm
dW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1l
IEVycm9yISAlcyIsIGZ1bmN0aW9uRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGVycm9yID0gZnVuY3Rpb25EZWZpbml0aW9uLmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAg
YXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3
LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAg
ICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBh
dXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2
ZVR5cGVEZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZN
b3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nl
c3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9n
QWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtNDU0LDE2ICs0NzksNTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCkgLT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGUKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodFNxdWFyZUJyYWNr
ZXQuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51
bUVsZW1lbnRzIH19OwogICAgIH0KLSAgICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBl
cyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2
aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZH0pOwotICAgIGlmICghYWRkcmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNlLmVycm9yKCkpOwotICAgIHJldHVybiB7eyAqdG9rZW4s
IHsgKmFkZHJlc3NTcGFjZSB9LCBXVEY6Om51bGxvcHQgfX07CisgICAgYXV0byBhZGRyZXNzU3Bh
Y2VUb2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExl
eGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3Vw
LCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9r
ZW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5l
cnJvcigpKTsKKyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3Bh
Y2U7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpS
ZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2Ug
PSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFk
ZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91
cDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoK
KyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6
OlRocmVhZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJp
bmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHt7ICp0b2tlbiwgeyBhZGRyZXNzU3BhY2Ug
fSwgV1RGOjpudWxsb3B0IH19OwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VU
eXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0g
ICAgYXV0byBhZGRyZXNzU3BhY2UgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6
OkNvbnN0YW50LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBl
OjpUaHJlYWRncm91cCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFk
ZHJlc3NTcGFjZSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFj
ZS5lcnJvcigpKTsKK2F1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0
byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6
Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRk
cmVzc1NwYWNlVG9rZW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNz
U3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFj
ZSBhZGRyZXNzU3BhY2U7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgewor
ICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1Nw
YWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBh
ZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6
CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpUaHJlYWRncm91cDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5
cGU6OlRocmVhZDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5
cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICBpZiAoIW5hbWUpCiAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOwpAQCAtNDcxLDEyICs1
MzIsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnIKICAgICBpZiAoIXR5cGVBcmd1bWVudHMp
CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkp
OwogCi0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNv
bnN0IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZd
KGNvbnN0IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVf
cHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2
aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3Rh
cjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+
KExleGVyOjpUb2tlbih0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2Ut
PnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91
cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NT
cGFjZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4
ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RG
TW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNx
dWFyZUJyYWNrZXQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFy
cmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdURk1v
dmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAg
ICAgZGVmYXVsdDoKQEAgLTQ4OCw3ICs1NDksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNz
U3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgog
ICAgIGF1dG8gZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQgPSBwYXJzZVR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCgpOwogICAgIGlmICghZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQpCiAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZC5lcnJv
cigpKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKCphZGRyZXNzU3BhY2UpLCBu
YW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFt
ZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAg
cmVzdWx0ID0gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3Vm
Zml4QWJicmV2aWF0ZWQsIFdURk1vdmUocmVzdWx0KSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgYXV0byB0eXBlU3VmZml4QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBl
Y3RlZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewpAQCAtNTAzLDcgKzU2
NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBh
cnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBp
ZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJv
cigpKTsKQEAgLTUxNCwxMiArNTc1LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NT
cGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICBp
ZiAoIXR5cGVBcmd1bWVudHMpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBl
QXJndW1lbnRzLmVycm9yKCkpOwogCi0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5v
bkFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3Vz
KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBl
RnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZp
YXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkg
ewogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRk
cmVzc1NwYWNlLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVy
OjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2Vu
KHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRl
ZC5hZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykp
OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwog
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRv
a2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAq
dHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoK
QEAgLTUyOCw3ICs1ODksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBl
KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gcmVzdWx0ID0gc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
VHlwZVJlZmVyZW5jZT4oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICAgYXV0byB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBl
Y3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewogICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCk7CkBAIC01NDIsMTQgKzYw
MywxNCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gewotICAgIGF1dG8gdHlwZSA9IGJhY2t0cmFja2luZ1Nj
b3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsK
K2F1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2Nv
cGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsm
XSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwog
ICAgIGlmICh0eXBlKQogICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIHR5cGUgPSBiYWNrdHJh
Y2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+Pihb
Jl0oKSB7CisgICAgdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBw
YXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKQEAgLTg0
Nyw3ICs5MDgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAt
PiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghbmFtZSkKICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB0eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiB0eXBlOwogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29s
b24pKSB7CiAgICAgICAgIGF1dG8gcGFyc2VkVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICBp
ZiAoIXBhcnNlZFR5cGUpCkBAIC04NjMsMjEgKzkyNCwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VF
bnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbgogICAgIGlmICghZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikKICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0RW51bWVyYXRpb25NZW1iZXIuZXJyb3IoKSk7CiAKLSAgICBB
U1Q6OkVudW1lcmF0aW9uTWVtYmVycyBtZW1iZXJzOwotICAgIG1lbWJlcnMuYXBwZW5kKFdURk1v
dmUoKmZpcnN0RW51bWVyYXRpb25NZW1iZXIpKTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiByZXN1bHQoV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygp
LCBXVEZNb3ZlKHR5cGUpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUo
KmZpcnN0RW51bWVyYXRpb25NZW1iZXIpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJl
dHVybiBmYWlsKFN0cmluZygiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9r
ZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIG1lbWJlciA9IHBhcnNlRW51bWVyYXRp
b25NZW1iZXIoKTsKICAgICAgICAgaWYgKCFtZW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4obWVtYmVyLmVycm9yKCkpOwotICAgICAgICBtZW1iZXJzLmFwcGVuZChX
VEZNb3ZlKCptZW1iZXIpKTsKKyAgICAgICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgq
bWVtYmVyKSk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWls
KFN0cmluZygiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7CiAgICAgfQogCiAgICAgYXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNv
bnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQpOwogICAgIGlm
ICghcmlnaHRDdXJseUJyYWNrZXQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihy
aWdodEN1cmx5QnJhY2tldC5lcnJvcigpKTsKIAotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCks
IFdURk1vdmUodHlwZSksIFdURk1vdmUobWVtYmVycykpOworICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbk1lbWJlciwgRXJyb3I+IHsKQEAgLTk4MSw3ICsxMDQ2LDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlQXR0cmlidXRlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkF0
dHJpYnV0ZUJsb2NrLCBFcnJvcj4gewogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAK
LWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVy
LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygp
OwogICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3Jp
Z2luLmVycm9yKCkpOwpAQCAtOTkyLDcgKzEwNTcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJh
bWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICBpZiAoIXR5
cGUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0g
ICAgT3B0aW9uYWw8U3RyaW5nPiBuYW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhdXRv
IHRva2VuID0gdHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpKQogICAgICAg
ICBuYW1lID0gdG9rZW4tPnN0cmluZ1ZpZXcudG9TdHJpbmcoKTsKIApAQCAtMTAwMCwxOCArMTA2
NSwxOCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBh
cmFtZXRlciwgRXJyb3I+IHsKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMo
KTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVy
KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyks
IFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIG51bGxw
dHIpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4p
LCBXVEZNb3ZlKHF1YWxpZmllcnMpLCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RG
OjpudWxsb3B0KTsKKyAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUo
Km9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5h
bWUpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJh
bWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4geworYXV0byBQYXJz
ZXI6OnBhcnNlUGFyYW1ldGVycygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnMsIEVycm9yPiB7CiAgICAgYXV0byBsZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhl
cjo6VG9rZW46OlR5cGU6OkxlZnRQYXJlbnRoZXNpcyk7CiAgICAgaWYgKCFsZWZ0UGFyZW50aGVz
aXMpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJy
b3IoKSk7CiAKLSAgICBBU1Q6OlBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2Vu
OjpUeXBlOjpSaWdodFBhcmVudGhlc2lzKSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1l
dGVycyk7CiAKQEAgLTExNDksMTAgKzEyMTQsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0
b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmEK
ICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFz
ZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5l
cnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3Zl
KCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygiT3Bl
cmF0b3IgQ2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJh
bWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92
ZSgqdHlwZSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKICAgICB9
CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiks
IHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJPcGVyYXRvciBDYXN0
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92
ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIm9w
ZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9u
RGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9y
PiB7CkBAIC0xNDQzLDcgKzE1MDgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VEb1doaWxlTG9vcCgp
IC0+IEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiB7CiAgICAgcmV0dXJuIEFTVDo6
RG9XaGlsZUxvb3AoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoKmNv
bmRpdGlvbmFsKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24o
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+IEV4cGVj
dGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHsKICAgICBhdXRvIG9yaWdpbiA9
IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTE0ODgsNyArMTU1Myw3IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uc1N0CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4odHlwZS5lcnJvcigpKTsKIAotICAgIGF1dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uID0g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+KCgqdHlw
ZSktPmNsb25lKCkpKTsKKyAgICBhdXRvIGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICBpZiAoIWZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0
VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKIApAQCAtMTQ5Niw3ICsxNTYxLDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbikpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpU
eXBlOjpDb21tYSkpIHsKLSAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+KCgqdHlwZSktPmNs
b25lKCkpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOwogICAgICAgICBpZiAoIXZhcmlhYmxlRGVj
bGFyYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFyaWFibGVE
ZWNsYXJhdGlvbi5lcnJvcigpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp2YXJp
YWJsZURlY2xhcmF0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCBkYTNlMDZiMDFlNC4uODAxMzkxNDk4MDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaApA
QCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNM
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMQXJyYXlSZWZl
cmVuY2VUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKICNpbmNsdWRlICJXSExT
TEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCkBAIC02OCw3ICs2Nyw2IEBACiAjaW5jbHVkZSAiV0hM
U0xOb2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgogI2luY2x1ZGUgIldITFNM
TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xQYXJhbWV0ZXIu
aCIKICNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFt
LmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKQEAgLTE1NCwx
MyArMTUyLDEzIEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeEFiYnJldmlhdGVk
LCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKTsKICAgICBzdHJ1Y3QgVHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkIHsKICAgICAgICAgTGV4ZXI6OlRva2VuIHRva2VuOwotICAgICAg
ICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IGFkZHJlc3NTcGFjZTsKKyAgICAgICAgT3B0aW9uYWw8
QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKICAgICAgICAg
T3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRzOwogICAgIH07CiAgICAgRXhwZWN0ZWQ8VHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHBh
cnNlQWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZVR5cGUoKTsKKyAgICBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZUFkZHJl
c3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZVR5cGUoKTsKICAg
ICBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJvcj4gcGFyc2VUeXBlRGVmaW5pdGlv
bigpOwogICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGljLCBFcnJvcj4gcGFyc2VCdWls
dEluU2VtYW50aWMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMsIEVycm9y
PiBwYXJzZVJlc291cmNlU2VtYW50aWMoKTsKQEAgLTE3NSw4ICsxNzMsOCBAQCBwcml2YXRlOgog
ICAgIEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VOYXRp
dmVUeXBlRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6Ok51bVRocmVhZHNGdW5jdGlv
bkF0dHJpYnV0ZSwgRXJyb3I+IHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKCk7CiAg
ICAgRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+IHBhcnNlQXR0cmlidXRlQmxv
Y2soKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHBhcnNlUGFyYW1ldGVy
KCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXJz
KCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VQ
YXJhbWV0ZXIoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zLCBFcnJv
cj4gcGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uLCBFcnJvcj4gcGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNsYXJhdGlvbigpOwogICAgIEV4
cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlUmVndWxhckZ1bmN0
aW9uRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24s
IEVycm9yPiBwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpOwpAQCAtMTkyLDcgKzE5
MCw3IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJvcj4gcGFyc2VG
b3JMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVycm9yPiBwYXJzZVdoaWxl
TG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiBwYXJzZURvV2hp
bGVMb29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYpOwor
ICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlVmFyaWFi
bGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJik7CiAgICAg
RXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJyb3I+IHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5kZXggMGVi
NjRkZWNkNGQuLmIzOTc5NWY1MmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTI4LDEwICsyOCwxNSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMUHJlcGFyZS5oIgogCisjaW5jbHVkZSAi
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0u
aCIKKyNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hM
U0xTdGFuZGFyZExpYnJhcnkuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlv
bnMuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw3ICs1NSwxOCBAQCBPcHRpb25hbDxQcmVwYXJh
dGlvblJlc3VsdD4gcHJlcGFyZShTdHJpbmdWaWV3IHNvdXJjZSkKICAgICBpZiAoIXN1Y2Nlc3Mp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXNvbHZlTmFtZXNJblR5cGVz
KHByb2dyYW0pOworICAgIE5hbWVSZXNvbHZlciBuYW1lUmVzb2x2ZXIocHJvZ3JhbS5uYW1lQ29u
dGV4dCgpKTsKKyAgICBpZiAoIXJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29s
dmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWNoZWNrUmVjdXJz
aXZlVHlwZXMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgc3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplRW51bWVy
YXRpb25GdW5jdGlvbnMocHJvZ3JhbSk7CisgICAgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5n
dGgocHJvZ3JhbSk7CisgICAgaWYgKCFjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhwcm9ncmFtKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIXJlc29sdmVOYW1lc0luRnVu
Y3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICByZXR1cm4gUHJlcGFyYXRpb25SZXN1bHQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKaW5kZXggNTYzMGZl
NjllZTQuLjYwZWU0NzkwMTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb2dyYW0uaApAQCAtMjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAi
V0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNM
TmFtZUNvbnRleHQuaCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgpAQCAtNDQsNDUgKzQ2LDY0IEBAIHB1YmxpYzoKICAg
ICBQcm9ncmFtKCkgPSBkZWZhdWx0OwogICAgIFByb2dyYW0oUHJvZ3JhbSYmKSA9IGRlZmF1bHQ7
CiAKLSAgICB2b2lkIGFwcGVuZChBU1Q6OlR5cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24p
CisgICAgYm9vbCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQog
ICAgIHsKLSAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUodHlwZURlZmlu
aXRpb24pKTsKKyAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlx
dWU8QVNUOjpUeXBlRGVmaW5pdGlvbj4oV1RGTW92ZSh0eXBlRGVmaW5pdGlvbikpKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3R5cGVEZWZpbml0aW9ucy5sYXN0KCkpOwog
ICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1
cmVEZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
JiYgc3RydWN0dXJlRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlRGVmaW5p
dGlvbnMuYXBwZW5kKFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICBtX3N0
cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1Y3R1cmVEZWZpbml0aW9uKSkpOworICAgICAgICByZXR1
cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fc3RydWN0dXJlRGVmaW5pdGlvbnMubGFzdCgpKTsKICAg
ICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJh
dGlvbkRlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fZW51bWVyYXRp
b25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAg
ICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihXVEZNb3ZlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikp
KTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX2VudW1lcmF0aW9uRGVmaW5p
dGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9uRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fZnVu
Y3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAg
ICAgICAgbV9mdW5jdGlvbkRlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uPihXVEZNb3ZlKGZ1bmN0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX2Z1bmN0aW9uRGVmaW5pdGlvbnMubGFzdCgp
KTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAg
ewotICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKTsKKyAgICAgICAgbV9p
bnRyaW5zaWNzLmFkZCgqbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0KCkpOworICAg
ICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKICAgICB7Ci0gICAg
ICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShuYXRpdmVUeXBlRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbikpKTsKKyAgICAgICAgbV9pbnRyaW5zaWNzLmFkZCgqbV9uYXRpdmVUeXBl
RGVjbGFyYXRpb25zLmxhc3QoKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgq
bV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgVmVjdG9yPEFT
VDo6VHlwZURlZmluaXRpb24+JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5cGVEZWZp
bml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+JiBzdHJ1Y3R1
cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7IH0KLSAgICBW
ZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+JiBlbnVtZXJhdGlvbkRlZmluaXRpb25z
KCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uPiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFy
YXRpb25zOyB9CisgICAgTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KCkgeyByZXR1cm4gbV9uYW1l
Q29udGV4dDsgfQorICAgIEludHJpbnNpY3MmIGludHJpbnNpY3MoKSB7IHJldHVybiBtX2ludHJp
bnNpY3M7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZURlZmluaXRpb24+
PiYgdHlwZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4+JiBzdHJ1Y3R1
cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7IH0KKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4mIGVudW1l
cmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7IH0K
KyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
Pj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5p
dGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlv
bnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbj4+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+JiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPj4mIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7
IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8QVNUOjpUeXBlRGVmaW5pdGlvbj4gbV90eXBlRGVm
aW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4gbV9zdHJ1Y3R1
cmVEZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+IG1f
ZW51bWVyYXRpb25EZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24+IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uPiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOwotICAgIFZlY3RvcjxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOworICAg
IE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CisgICAgSW50cmluc2ljcyBtX2ludHJpbnNpY3M7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90eXBl
RGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+PiBtX3N0cnVjdHVyZURlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlv
bnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+
IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+IG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+
IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNo
ZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTBkMThkODc5
NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExT
TFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFJlY3Vyc2l2ZVR5cGVDaGVja2VyIDog
cHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5SZWN1cnNpdmVUeXBlQ2hlY2tlcigpID0g
ZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmlu
aXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZ0eXBlRGVm
aW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAg
ICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlvbik7CisKKyAgICAgICAgYXV0byBzdWNj
ZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBp
ZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIG1fZXJyb3IgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQo
c3RydWN0dXJlRGVmaW5pdGlvbik7CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5y
ZW1vdmUoJnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNl
JiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFk
ZCgmdHlwZVJlZmVyZW5jZSk7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewor
ICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2UudHlw
ZUFyZ3VtZW50cygpKQorICAgICAgICAgICAgVmlzaXRvcjo6dmlzaXQodHlwZUFyZ3VtZW50KTsK
KyAgICAgICAgdmlzaXROYW1lZFR5cGUoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZ0eXBlUmVmZXJlbmNlKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yOyB9CisKK3ByaXZhdGU6CisgICAgYm9v
bCBtX2Vycm9yIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0PEFTVDo6VHlwZSo+IG1fdHlwZXM7Cit9
OworCitpbmxpbmUgYm9vbCBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mIHByb2dyYW0pCit7
CisgICAgUmVjdXJzaXZlVHlwZUNoZWNrZXIgcmVjdXJzaXZlVHlwZUNoZWNrZXI7CisgICAgcmVj
dXJzaXZlVHlwZUNoZWNrZXIuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuIHJl
Y3Vyc2l2ZVR5cGVDaGVja2VyLmVycm9yKCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFub255
bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCnNpbWlsYXJpdHkgaW5kZXggNzIlCnJl
bmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFu
b255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKaW5kZXggZWY2MWVk
MTI2MTkuLjUwMmJhOTI0ODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJ
bXBsLmgKQEAgLTI3LDMzICsyNywyNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNM
IHsKIAotbmFtZXNwYWNlIEFTVCB7Ci0KLWNsYXNzIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRp
b24gOiBwdWJsaWMgVmFsdWUgewotcHVibGljOgotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUo
b3JpZ2luKSkKLSAgICB7CitpbmxpbmUgQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3Zlcmxv
YWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4m
IHBvc3NpYmxlVHlwZXMsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAg
ICBBU1Q6Ok5hbWVkVHlwZSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBmb3IgKGF1dG8mIHBvc3Np
YmxlVHlwZSA6IHBvc3NpYmxlVHlwZXMpIHsKKyAgICAgICAgaWYgKGluZmVyVHlwZXNGb3JUeXBl
QXJndW1lbnRzKHBvc3NpYmxlVHlwZSwgdHlwZUFyZ3VtZW50cykpIHsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBy
ZXN1bHQgPSAmc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5cGUmPihwb3NzaWJsZVR5cGUpOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgdmlydHVhbCB+QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlv
bigpID0gZGVmYXVsdDsKLQotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3Qg
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwotICAgIEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24oQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1
bHQ7Ci0KLSAgICBMZXhlcjo6VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47
IH0KLQotcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci19OwotCisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NDhlM2Yz
MTg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaApAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK2NsYXNzIEZpbmRBcnJheVR5cGVzIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgor
ICAgIH5GaW5kQXJyYXlUeXBlcygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpB
cnJheVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYXJyYXlUeXBl
cy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5VHlwZXMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFdURk1vdmUobV9hcnJheVR5cGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+PiBtX2FycmF5VHlw
ZXM7Cit9OworCitpbmxpbmUgdm9pZCBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9n
cmFtJiBwcm9ncmFtKQoreworICAgIEZpbmRBcnJheVR5cGVzIGZpbmRBcnJheVR5cGVzOworICAg
IGZpbmRBcnJheVR5cGVzLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOworICAgIGF1dG8gYXJyYXlU
eXBlcyA9IGZpbmRBcnJheVR5cGVzLnRha2VBcnJheVR5cGVzKCk7CisKKyAgICBmb3IgKGF1dG8m
IGFycmF5VHlwZSA6IGFycmF5VHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCAgYXJyYXlUeXBlLmdldCgpLmNsb25lKCksIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFy
aWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgp
Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwg
cHJvZ3JhbS5pbnRyaW5zaWNzKCkuYm9vbFR5cGUoKSksIFN0cmluZygib3BlcmF0b3IubGVuZ3Ro
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdU
Rjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yY2RiOGUwMzEwZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2lubGluZSB2b2lkIHN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGZvciAoYXV0byYgZW51bWVyYXRp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFy
YXRpb24xKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0
cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Cisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24x
KSk7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24yKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3Jp
Z2luKCkpLCBwcm9ncmFtLmludHJpbnNpY3MoKS51aW50VHlwZSgpKSwgU3RyaW5nKCJvcGVyYXRv
cj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7Cisg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCks
IFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3Zl
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJh
dGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygib3Bl
cmF0b3IudmFsdWUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCks
IFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3Ry
aW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICAgICAgcHJvZ3Jh
bS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIH0K
KworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9u
ZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tl
bihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0aW9uRGVmaW5pdGlv
biksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAg
IHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAg
ICAgICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5jN2Q3YTkwNDk5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCkBA
IC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitpbmxpbmUgdm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dy
YW0pCit7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1
Y3R1cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVu
dCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAg
ICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9u
KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVu
dC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBw
YXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFy
aWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRv
ci4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFt
LmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJh
dG9yLmZpZWxkPQorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJp
YWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2Vu
KHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVtZW50LnR5
cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOwor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJh
dGlvbjIpKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAq
c3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBzdHJ1
Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
V1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAgICBhdXRvIGNy
ZWF0ZUFuZGVyID0gWyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NT
cGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGFyZ3VtZW50VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4o
TGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmln
aW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVy
ZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1bWVudFR5
cGUpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAg
ICAgICAgYXV0byByZXR1cm5UeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50ZXJUeXBl
PihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwg
c3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAgQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCks
IFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJh
dG9yJi4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NT
cGFjZTo6Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVy
KEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKTsKKyAgICAgICAgICAg
IHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5k
ZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpOworICAgICAgICB9
CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCmluZGV4IDUxNjg1NmU0MWQwLi41ZjE5
MDNlMGE5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xWaXNpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xWaXNpdG9yLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAj
aW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKICNp
bmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJl
c3Npb24uaCIKQEAgLTY4LDcgKzY3LDYgQEAKICNpbmNsdWRlICJXSExTTE5vZGUuaCIKICNpbmNs
dWRlICJXSExTTE51bGxMaXRlcmFsLmgiCiAjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1ZGUgIldI
TFNMUG9pbnRlclR5cGUuaCIKICNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCkBAIC0xMDMsNDEgKzEwMSw1NiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgV0hMU0wgewogCiBjbGFzcyBWaXNpdG9yIHsK
LSAgICB+VmlzaXRvcigpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WaXNpdG9y
KCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KFByb2dyYW0mIHByb2dyYW0p
CiAgICAgewogICAgICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBl
RGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVEZWZpbml0aW9uKTsKKyAgICAg
ICAgICAgIHZpc2l0KCp0eXBlRGVmaW5pdGlvbik7CiAgICAgICAgIGZvciAoYXV0byYgc3RydWN0
dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKLSAgICAgICAg
ICAgIHZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICAgICAgdmlzaXQoKnN0cnVj
dHVyZURlZmluaXRpb24pOwogICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQo
ZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCplbnVtZXJhdGlvbkRl
ZmluaXRpb24pOwogICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dy
YW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZp
bml0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOwogICAgICAg
ICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KTsKICAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbik7CisgICAgICAgICAgICB2aXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAg
ICB9CiAKLSAgICB2b2lkIHZpc2l0VHlwZShBU1Q6OlR5cGUmIHR5cGUpCisgICAgdm9pZCB2aXNp
dFVubmFtZWRUeXBlKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQogICAgIHsKLSAgICAg
ICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpCi0gICAgICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpQb2ludGVyVHlwZT4odHlwZSkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OlBvaW50ZXJUeXBlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPih0eXBlKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih0eXBlKSk7CisgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVy
ZW5jZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHR5cGUpKTsKKyAgICAgICAgICAgIEFTU0VSVChp
czxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdE5hbWVkVHlwZShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQorICAgIHsK
KyAgICAgICAgaWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAg
ICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQor
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1l
ZFR5cGUpKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+
KG5hbWVkVHlwZSkpCisgICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUp
KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIHZpc2l0VHlwZSh0eXBl
RGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICB2aXNpdFVubmFtZWRUeXBlKHR5cGVEZWZpbml0
aW9uLnR5cGUoKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKQEAgLTE0OCw3ICsxNjEsNyBAQCBj
bGFzcyBWaXNpdG9yIHsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgdmlzaXRU
eXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICB2aXNpdFVubmFtZWRU
eXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgICAgICBmb3IgKGF1dG8mIGVu
dW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVy
cygpKQogICAgICAgICAgICAgdmlzaXQoZW51bWVyYXRpb25NZW1iZXIpOwogICAgIH0KQEAgLTE3
NCw2ICsxODcsOCBAQCBjbGFzcyBWaXNpdG9yIHsKICAgICB7CiAgICAgICAgIGZvciAoYXV0byYg
dHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCiAgICAgICAgICAg
ICB2aXNpdCh0eXBlQXJndW1lbnQpOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSAmJiBpczxBU1Q6OlR5cGVEZWZpbml0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSkpCisgICAgICAgICAgICB2aXNpdFVubmFtZWRUeXBlKGRvd25jYXN0PEFTVDo6VHlw
ZURlZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS50eXBlKCkpOwogICAg
IH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlw
ZSkKQEAgLTE4OCwxMiArMjAzLDEyIEBAIGNsYXNzIFZpc2l0b3IgewogCiAgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCiAgICAgewotICAgICAgICB2aXNp
dFR5cGUoYXJyYXlUeXBlLnR5cGUoKSk7CisgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoYXJyYXlU
eXBlLnR5cGUoKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0
dXJlRWxlbWVudCYgc3RydWN0dXJlRWxlbWVudCkKICAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShz
dHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CisgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoc3RydWN0
dXJlRWxlbWVudC50eXBlKCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRp
YygpKQogICAgICAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSk7CiAg
ICAgfQpAQCAtMjA3LDcgKzIyMiw3IEBAIGNsYXNzIFZpc2l0b3IgewogICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCiAg
ICAgewogICAgICAgICB2aXNpdChmdW5jdGlvbkRlY2xhcmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkp
OwotICAgICAgICB2aXNpdFR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAg
ICB2aXNpdFVubmFtZWRUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAg
Zm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKSkK
ICAgICAgICAgICAgIHZpc2l0KHBhcmFtZXRlcik7CiAgICAgICAgIGlmIChmdW5jdGlvbkRlY2xh
cmF0aW9uLnNlbWFudGljKCkpCkBAIC0yMjUsNyArMjQwLDcgQEAgY2xhc3MgVmlzaXRvciB7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJiByZWZlcmVuY2VUeXBl
KQogICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7
CisgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUocmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMp
CkBAIC0yNjQsMTMgKzI3OSw2IEBAIGNsYXNzIFZpc2l0b3IgewogICAgICAgICAgICAgdmlzaXQo
ZnVuY3Rpb25BdHRyaWJ1dGUpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlBhcmFtZXRlciYgcGFyYW1ldGVyKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHBhcmFtZXRl
ci50eXBlKCkpOwotICAgICAgICBpZiAocGFyYW1ldGVyLnNlbWFudGljKCkpCi0gICAgICAgICAg
ICB2aXNpdCgqcGFyYW1ldGVyLnNlbWFudGljKCkpOwotICAgIH0KLQogICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpCiAgICAgewogICAgIH0KQEAgLTQwMiw4ICs0
MTAsMTAgQEAgY2xhc3MgVmlzaXRvciB7CiAgICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwogICAgICAgICBlbHNlIGlmIChp
czxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSkKICAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Npb24p
KTsKKyAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkK
KyAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpCisgICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpOwogICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKQogICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CiAgICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQpAQCAtNDE2LDYgKzQyNiwyMiBA
QCBjbGFzcyBWaXNpdG9yIHsKICAgICAgICAgfQogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCisgICAgeworICAgICAgICB2
aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiY+KGRvdEV4cHJl
c3Npb24pKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbmRleEV4cHJl
c3Npb24mIGluZGV4RXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIHZpc2l0KGluZGV4RXhwcmVz
c2lvbi5pbmRleEV4cHJlc3Npb24oKSk7CisgICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJj4oaW5kZXhFeHByZXNzaW9uKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHBy
ZXNzaW9uKQorICAgIHsKKyAgICAgICAgdmlzaXQoZXhwcmVzc2lvbi5iYXNlKCkpOworICAgIH0K
KwogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCiAgICAgewogICAgICAgICB2aXNpdChl
ZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7CkBAIC00
ODUsNyArNTExLDcgQEAgY2xhc3MgVmlzaXRvciB7CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgIHsKLSAg
ICAgICAgdmlzaXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgdmlz
aXRVbm5hbWVkVHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIGlmICh2
YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCiAgICAgICAgICAgICB2aXNpdCgqdmFyaWFi
bGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKICAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRp
b24uaW5pdGlhbGl6ZXIoKSkKQEAgLTUzNiwxMSArNTYyLDYgQEAgY2xhc3MgVmlzaXRvciB7CiAg
ICAgICAgIHZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQog
ICAgIHsKICAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7
CkBAIC01NjAsMTAgKzU4MSw2IEBAIGNsYXNzIFZpc2l0b3IgewogICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikKICAgICB7CiAgICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpCi0gICAgewot
ICAgIH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggM2MwZTM2NDcwNTQuLjE0NjRlYjM3Yjdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dApAQCAtMzA2LDcgKzMwNiw3IEBAIE1vZHVsZXMvd2ViZ3B1L0RPTVdp
bmRvd1dlYkdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAKLU1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BV
LmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQWRhcHRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwN2MxNmVmMTc3NS4u
YTBlNGUzMGQxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0MDMsOSArNjQwMywyMCBAQAogCQkxQzI0RUVBNzFDNzJBN0I0
MDA4MEY4RkMgLyogSlNGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBKU0ZvbnRGYWNlU2V0Lmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9u
dEZhY2VTZXQuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUMyNjQ5
NzkwRDdFMjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZGVyTWFjLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMzMjQ5MTAxQzZENkEzQjAwN0VEQjMyIC8qIEZvbnRWYXJp
YW50QnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250
VmFyaWFudEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2
QzIxQ0VEQTQyMDAwREM5RjIgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NkUyMUNFRkY3NDAwMERDOUYyIC8qIFdITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmVPdmVybG9hZEltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NkYyMUNGMDEzMTAwMERDOUYy
IC8qIFdITFNMSW5mZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEluZmVyVHlwZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8q
IFdITFNMTmFtZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZWRUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzcyMjFDRjBEMkUwMDBEQzlGMiAvKiBXSExT
TFVubmFtZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZWN1cnNpdmVUeXBl
Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NTIxRDVCMEY4
MDAwREM5RjIgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFDMzMyNzc2MjFENUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc3MjFENUNBODMw
MDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3ODIxRDVDRUQ0MDAwREM5RjIgLyogV0hMU0xTeW50
aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
Mzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAvKiBGb250Q2FjaGVDb3JlVGV4dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FjaGVDb3JlVGV4dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250
RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3
QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzdDQzIxRDIxQ0RFMTk4MDBDMUZB
MkMgLyogV0hMU0xOYW1lQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUw
NyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAv
KiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzIxNCw2ICsx
MzIyNSw4IEBACiAJCUMxMUE5RUNEMjE0MDNBNUMwMENGQjIwQSAvKiBTd2l0Y2hpbmdHUFVDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3dpdGNoaW5nR1BVQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMxMUE5RUQyMjE0MDU3OEIwMENGQjIwQSAvKiBTd2l0Y2hpbmdHUFVD
bGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3dpdGNoaW5nR1BVQ2xpZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzFFMUQyMzUyMDNERjE1NDAwNTg0NjY1IC8qIFNj
cmVlblByb3BlcnRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyZWVuUHJvcGVydGllcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjAxMzM0NDIxREFDMDk1MDBCNjBDMjcgLyogV0hM
U0xJbnRyaW5zaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjAxMzM0NjIxREFFRTZFMDBCNjBDMjcgLyogV0hMU0xJ
bnRyaW5zaWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMDE1QzA5MUJFNkZFMkMwMDgyMjM4OSAvKiBG
b250VmFyaWFudEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFZhcmlhbnRCdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTBFOTExMjFCNEJEMTAwMEI3RjgzRCAv
KiBXSExTTExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGV4ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjEwRTkxMjIxQjRCRDEwMDBCN0Y4M0QgLyogV0hM
U0xMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzI0NSw3ICsxMzI1OCw2IEBACiAJCUMyMUJGNzBDMjFDRDg5Q0MwMDIy
Nzk3OSAvKiBXSExTTEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xFeHByZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzBEMjFDRDg5Q0QwMDIyNzk3
OSAvKiBXSExTTFJlZmVyZW5jZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZWZlcmVuY2VU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzBFMjFDRDg5Q0UwMDIy
Nzk3OSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN0
YWdlSW5PdXRTZW1hbnRpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjFCRjcw
RjIxQ0Q4OUNGMDAyMjc5NzkgLyogV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxMDIxQ0Q4OUQwMDAyMjc5NzkgLyogV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmFyaWFibGVEZWNs
YXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxMTIxQ0Q4OUQx
MDAyMjc5NzkgLyogV0hMU0xUeXBlQXJndW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBl
QXJndW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTIyMUNEODlE
MTAwMjI3OTc5IC8qIFdITFNMU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3RhdGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzI1Myw3ICsxMzI2NSw2IEBA
CiAJCUMyMUJGNzE0MjFDRDg5RDMwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTUyMUNEODlENDAw
MjI3OTc5IC8qIFdITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxNjIxQ0Q4OUQ1MDAyMjc5NzkgLyogV0hMU0xDYWxsRXhwcmVzc2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTENhbGxFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUMyMUJGNzE3MjFDRDg5RDYwMDIyNzk3OSAvKiBXSExTTFBhcmFtZXRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFBhcmFtZXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxODIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xEb3RFeHByZXNzaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMRG90RXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMjFCRjcxOTIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xTd2l0Y2hDYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xCcmVhay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTEJyZWFrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzMwMiw3ICsxMzMx
Myw2IEBACiAJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyODhDNzI5MjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xQcmVwYXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFByZXBhcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzI4OEM3MkIy
MUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMTmFtZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzI4OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMTmFtZVJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTFR5cGVBcmd1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQUIwQUY0MUU2QjNDNkMwMDEzNDhDNSAvKiBGb250U2VsZWN0aW9uQWxnb3Jp
dGhtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRTZWxlY3Rp
b25BbGdvcml0aG0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzMzIsMTEg
KzI1MzQyLDIwIEBACiAJCQkJQzIxQkY3MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2Vy
LmNwcCAqLywKIAkJCQlDMjFCRjczODIxQ0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAq
LywKIAkJCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCi0g
CQkJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKLSAJCQkJ
QzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCi0gCQkJCUMy
ODhDNzJBMjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKLSAJCQkJQzI4OEM3
MkIyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKLSAJCQkJQzI4
OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzI4
OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovLAorCQkJCUMyODhDNzI5
MjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAorCQkJCUMyODhDNzJBMjFD
OENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKKwkJCQlDMjg4QzcyQzIxQzhDQ0My
MDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQkxQzdDQzIxRDIxQ0RFMTk4
MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4dC5oICovLAorCQkJCTFDMzMyNzZFMjFDRUZGNzQw
MDBEQzlGMiAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLywKKwkJCQkxQzMzMjc2RjIx
Q0YwMTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8sCisJCQkJMUMzMzI3NzQyMUQ1
QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLywKKwkJCQkxQzMz
Mjc3NTIxRDVCMEY4MDAwREM5RjIgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICov
LAorCQkJCTFDMzMyNzc2MjFENUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMuaCAqLywKKwkJCQkxQzMzMjc3NzIxRDVDQTgzMDAwREM5RjIgLyogV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCAqLywKKwkJCQkxQzMzMjc3ODIxRDVDRUQ0
MDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oICovLAorCQkJ
CUMyMDEzMzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLywKKwkJCQlD
MjAxMzM0NjIxREFFRTZFMDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gV0hMU0w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjUzNDQs
NyArMjUzNjMsNiBAQAogCQlDMjFCRjZGMTIxQ0Q4OThEMDAyMjc5NzkgLyogQVNUICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlDMjFCRjcwRjIxQ0Q4OUNG
MDAyMjc5NzkgLyogV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8sCiAJCQkJ
QzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmggKi8s
CiAJCQkJQzIxQkY3MDkyMUNEODlDQTAwMjI3OTc5IC8qIFdITFNMQXJyYXlUeXBlLmggKi8sCiAJ
CQkJQzIxQkY3MzAyMUNEODlFRDAwMjI3OTc5IC8qIFdITFNMQXNzaWdubWVudEV4cHJlc3Npb24u
aCAqLywKQEAgLTI1Mzg0LDcgKzI1NDAyLDYgQEAKIAkJCQlDMjFCRjcyNDIxQ0Q4OUUxMDAyMjc5
NzkgLyogV0hMU0xOb2RlLmggKi8sCiAJCQkJQzIxQkY3MDcyMUNEODlDODAwMjI3OTc5IC8qIFdI
TFNMTnVsbExpdGVyYWwuaCAqLywKIAkJCQlDMjFCRjcyMTIxQ0Q4OURFMDAyMjc5NzkgLyogV0hM
U0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFCRjcxNzIxQ0Q4OUQ2
MDAyMjc5NzkgLyogV0hMU0xQYXJhbWV0ZXIuaCAqLywKIAkJCQlDMjFCRjcyRjIxQ0Q4OUVDMDAy
Mjc5NzkgLyogV0hMU0xQb2ludGVyVHlwZS5oICovLAogCQkJCUMyMUJGNzJFMjFDRDg5RUEwMDIy
Nzk3OSAvKiBXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oICovLAogCQkJCUMyMUJGNzBC
MjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExTTFF1YWxpZmllci5oICovLApAQCAtMjU0MTIsNyArMjU0
MjksMTAgQEAKIAkJCQlDMjFCRjcxNDIxQ0Q4OUQzMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudC5oICovLAogCQkJCUMyMUJGNzEzMjFDRDg5RDIwMDIyNzk3OSAv
KiBXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmggKi8sCiAJCQkJQzIxQkY3MDQyMUNEODlDNjAwMjI3
OTc5IC8qIFdITFNMV2hpbGVMb29wLmggKi8sCi0gCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVD
QSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJQzI4OEM3MkQyMUM5OTFEQTAwMkRG
NUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJCQkxQzMzMjc2QzIxQ0VEQTQyMDAw
REM5RjIgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLywKKwkJCQkxQzMzMjc3
MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLywKKwkJCQkxQzMzMjc3MjIx
Q0YwRDJFMDAwREM5RjIgLyogV0hMU0xVbm5hbWVkVHlwZS5oICovLAogCQkJKTsKIAkJCXBhdGgg
PSBBU1Q7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358167</attachid>
            <date>2018-12-31 23:03:50 -0800</date>
            <delta_ts>2019-01-01 00:41:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>174392</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYTI4NzE0MDRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOSBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAg
IGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7
IH0KKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVu
dHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVy
OjpUb2tlbihtX29yaWdpbiksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRU
eXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7CiB9OwogCkBA
IC03NSw2ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfVU5OQU1FRF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDYWxsRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAppbmRleCA2NGFmNzEzMjk5Yy4uOGIyYmRhZjRiZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENhbGxFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTU0LDkgKzU1LDMxIEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVybiBtX2FyZ3Vt
ZW50czsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB2
b2lkIHNldENhc3REYXRhKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cworICAgIH0KKworICAgIGJvb2wgaGFzT3ZlcmxvYWRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9vdmVybG9hZHMpOyB9CisgICAgdm9pZCBzZXRPdmVybG9hZHMoY29uc3Qg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBv
dmVybG9hZHMpCisgICAgeworICAgICAgICBhc3NlcnQoIWhhc092ZXJsb2FkcygpKTsKKyAgICAg
ICAgbV9vdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorCisgICAgdm9pZCBzZXRGdW5jdGlv
bihGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0KCFtX2Z1bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlvbiA9ICZmdW5jdGlvbkRl
Y2xhcmF0aW9uOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+IG1fYXJndW1lbnRzOworICAgIE9wdGlv
bmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
Pj4gbV9vdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9mdW5jdGlvbiB7IG51
bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXgg
YTM4YjBkNWIzYTEuLmYwNDIwNTMyNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaApAQCAtNzYsMTEgKzc2LDY5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgSW50
ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpOworICAgIH0KKwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpCiAgICAgewogICAgICAgICBX
VEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkgY29uc3QKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoZXMo
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIE9w
dGlvbmFsPGJvb2w+IHJlc3VsdDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICB2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHZhbHVlID0gZmxvYXRMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8TnVsbExpdGVyYWw+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJCb29sZWFuTGl0ZXJhbCA9IFdU
Rjo6Z2V0PEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPT0gb3RoZXJCb29sZWFuTGl0ZXJhbC52
YWx1ZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UpIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3ZhcmlhbnQpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJNZW1iZXJSZWZlcmVuY2UgPSBXVEY6Omdl
dDxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92
YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmY29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSAmb3RoZXJNZW1i
ZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0OworCisgICAgICAgIG90aGVyLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gaW50ZWdlckxpdGVyYWwudmFs
dWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0
ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSBmbG9h
dExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJikgewor
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBCb29sZWFu
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSkpOworCisgICAgICAgIEFTU0VS
VChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgVmFyaWFudDwKICAgICAgICAgSW50ZWdlckxpdGVyYWwsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAppbmRleCAyYzI0YTk4YjJjYS4uMjEwMGQ3Y2E0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UuaApAQCAtMzYsMTAgKzM2LDEyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5h
bWVzcGFjZSBBU1QgewogCi1jbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworCitj
bGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGxlZnQsIFN0
cmluZyYmIHJpZ2h0KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2xlZnQoV1RGTW92
ZShsZWZ0KSkKICAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQogICAgIHsKQEAgLTUw
LDEwICs1MiwzMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlZmF1bHQ7CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgY29uc3QgU3RyaW5nJiBsZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgY29uc3QgU3RyaW5nJiByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHQ7IH0KKworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsK
KyAgICAgICAgcmV0dXJuICptX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIGNvbnN0
IEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsKKyAgICAgICAgcmV0dXJuICpt
X2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1i
ZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAg
ICAgICBtX2VudW1lcmF0aW9uTWVtYmVyID0gJmVudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKwog
cHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbGVmdDsK
ICAgICBTdHJpbmcgbV9yaWdodDsKKyAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiBtX2VudW1l
cmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5o
CmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4cHJlc3Npb24oY29uc3QgRG90
RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Npb24oRG90RXhwcmVzc2lvbiYm
KSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4l
cyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgbV9maWVsZE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nJiBmaWVsZE5hbWUoKSB7IHJl
dHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpZWxkTmFtZTsK
IH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlzRG90RXhwcmVzc2lvbigpKQor
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXggNzk3
MGI1OWU1NGEuLjFiOGYxNDUyOGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaApAQCAtMjksNyArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC0zOSwxMyArNDAsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7
CiAKLWNsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUs
IHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJl
cnMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFt
ZShXVEZNb3ZlKG5hbWUpKQorICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0
eXBlKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkp
CiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdU
Rk1vdmUobWVtYmVycykpCiAgICAgewogICAgIH0KIApAQCAtNTQsMTQgKzUzLDM1IEBAIHB1Ymxp
YzoKICAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9u
JikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5p
dGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsg
fQotICAgIEVudW1lcmF0aW9uTWVtYmVycyYgZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4g
bV9tZW1iZXJzOyB9CisgICAgYm9vbCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1
cm4gKm1fdHlwZTsgfQorCisgICAgYm9vbCBhZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIp
CisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUo
KSwgc3RkOjptYWtlX3VuaXF1ZTxFbnVtZXJhdGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7
CisgICAgICAgIHJldHVybiAhcmVzdWx0LmlzTmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVy
YXRpb25NZW1iZXIqIG1lbWJlckJ5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9tZW1iZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChp
dGVyYXRvciA9PSBtX21lbWJlcnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9u
TWVtYmVycygpCisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxF
bnVtZXJhdGlvbk1lbWJlcj4+IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9t
ZW1iZXJzKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29y
aWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5
cGU7Ci0gICAgRW51bWVyYXRpb25NZW1iZXJzIG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVf
cHRyPEVudW1lcmF0aW9uTWVtYmVyPj4gbV9tZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTAs
NiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURf
VFlQRShFbnVtZXJhdGlvbkRlZmluaXRpb24sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2Uu
LjRmMzg1MTk1NTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDYg
KzU0LDcgQEAgcHVibGljOgogICAgIEVudW1lcmF0aW9uTWVtYmVyKGNvbnN0IEVudW1lcmF0aW9u
TWVtYmVyJikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRpb25NZW1iZXIoRW51bWVyYXRpb25NZW1i
ZXImJikgPSBkZWZhdWx0OwogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9
CiAgICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3Zh
bHVlOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaApzaW1pbGFy
aXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCmluZGV4
IDc4MGQ1YzU0MjVhLi5jOWU5NjI5Mzk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bC5oCkBAIC0yMywyMyArMjMsNDAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWYgRU5BQkxFKFdFQkdQVSkKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKKyNpZiBFTkFCTEUoV0VC
R1BVKQogCi0jaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJh
dGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewog
Ci1jbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7Ci0gICAgfk5hbWVSZXNvbHZl
cigpID0gZGVmYXVsdDsKLX07CituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEVudW1lcmF0aW9uTWVtYmVy
JiBlbnVtZXJhdGlvbk1lbWJlcikKKyAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2lu
KSkKKyAgICAgICAgLCBtX2VudW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0aW9uTWVtYmVyKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5FbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSA9IGRl
ZmF1bHQ7CiAKLXZvaWQgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJikKLXsKKyAgICBleHBs
aWNpdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoY29uc3QgRW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsJikgPSBkZWZhdWx0OworICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0VudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIEVudW1l
cmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcigpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25N
ZW1iZXI7IH0KKworcHJpdmF0ZToKKyAgICBFbnVtZXJhdGlvbk1lbWJlciYgbV9lbnVtZXJhdGlv
bk1lbWJlcjsKK307CiAKIH0KIApAQCAtNDcsNCArNjQsNiBAQCB2b2lkIHJlc29sdmVOYW1lc0lu
VHlwZXMoUHJvZ3JhbSYpCiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBS
RVNTSU9OKEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggZTM2ODM4MzY0NmQuLmE3ODg2
ZmJhNmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzQ29tbWFFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEZXJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0TGl0ZXJhbCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5kZXhFeHByZXNzaW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2VyTGl0
ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNh
bEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0xvZ2ljYWxOb3RFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY3LDYg
KzY5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Rlcm5hcnlFeHByZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVn
ZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNW
YXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5j
dGlvbkRlY2xhcmF0aW9uLmgKaW5kZXggN2E3ZTBhMDY1NmMuLjgyMzU2NjZkOTQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNp
bmNsdWRlICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1
ZGUgIldITFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBDb21wdXRlCiAgICAgfTsKIAotICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9j
ayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5
cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgUGFy
YW1ldGVycyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMp
CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0
ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBv
aW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5n
JiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6
OlNlbWFudGljPiYmIHNlbWFudGljKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2lu
KSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQog
ICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBAIC02NSwyNiArNjUs
MzQgQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgRnVuY3Rpb25EZWNs
YXJhdGlvbiYpID0gZGVsZXRlOwogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNs
YXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgQXR0
cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsg
fQotICAgIEFTVDo6VHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgQVNU
OjpVbm5hbWVkVHlwZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBBU1Q6
OlVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgIGJvb2wgaXNDYXN0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
ID09ICJvcGVyYXRvciBjYXN0IjsgfQorICAgIGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb25zJiBw
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgVmFyaWFibGVE
ZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICBP
cHRpb25hbDxBU1Q6OlNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9
CiAKICAgICBMZXhlcjo6VG9rZW4mJiB0YWtlT3JpZ2luKCkgeyByZXR1cm4gV1RGTW92ZShtX29y
aWdpbik7IH0KICAgICBBdHRyaWJ1dGVCbG9jayYmIHRha2VBdHRyaWJ1dGVCbG9jaygpIHsgcmV0
dXJuIFdURk1vdmUobV9hdHRyaWJ1dGVCbG9jayk7IH0KICAgICBPcHRpb25hbDxFbnRyeVBvaW50
VHlwZT4mJiB0YWtlRW50cnlQb2ludFR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2lu
dFR5cGUpOyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0YWtlVHlwZSgpIHsg
cmV0dXJuIFdURk1vdmUobV90eXBlKTsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZShtX3R5cGUpOyB9CiAgICAgU3Ry
aW5nJiYgdGFrZU5hbWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmFtZSk7IH0KLSAgICBQYXJhbWV0
ZXJzJiYgdGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1ldGVycyk7IH0K
KyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHRha2VQYXJhbWV0ZXJzKCkgeyByZXR1cm4gV1RG
TW92ZShtX3BhcmFtZXRlcnMpOyB9CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiB0YWtl
U2VtYW50aWMoKSB7IHJldHVybiBXVEZNb3ZlKG1fc2VtYW50aWMpOyB9CiAKIHByaXZhdGU6CiAg
ICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmlidXRl
QmxvY2s7CiAgICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IG1fZW50cnlQb2ludFR5cGU7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgUGFyYW1ldGVy
cyBtX3BhcmFtZXRlcnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMgbV9wYXJhbWV0ZXJzOwog
ICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+IG1fc2VtYW50aWM7CiB9OwogCkBAIC05NCw0ICsx
MDIsOSBAQCBwcml2YXRlOgogCiB9CiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9GVU5DVElPTl9ERUNMQVJBVElPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpUb1ZhbHVl
VHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6
OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7
IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVm
aW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgKaW5kZXggYTQ5MDdiMGQyOTguLmI2YjdiYTA3N2QzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5j
dGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaApAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6
CiAgICAgRnVuY3Rpb25EZWZpbml0aW9uKGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpID0gZGVs
ZXRlOwogICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihGdW5jdGlvbkRlZmluaXRpb24mJikgPSBkZWZh
dWx0OwogCisgICAgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKwogICAgIEJsb2NrJiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7IH0K
ICAgICBib29sIHJlc3RyaWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3RyaWN0ZWQ7IH0KIApA
QCAtNjQsNCArNjYsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oRnVuY3Rpb25EZWZpbml0aW9uLCBpc0Z1bmN0aW9u
RGVmaW5pdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKaW5kZXgg
NmJiNmEwZjBkYWIuLjQzZTYwYTEwNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaApA
QCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIEluZGV4RXhwcmVzc2lvbihjb25zdCBJbmRl
eEV4cHJlc3Npb24mKSA9IGRlbGV0ZTsKICAgICBJbmRleEV4cHJlc3Npb24oSW5kZXhFeHByZXNz
aW9uJiYpID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9yW10i
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc2V0
RnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJp
bmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQor
CisgICAgU3RyaW5nIGFuZEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICByZXR1cm4gU3RyaW5nKCJvcGVyYXRvcltdPSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgIH0KKworICAgIEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbigpIHsgcmV0
dXJuICptX2luZGV4OyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Np
b24+IG1faW5kZXg7CiB9OwpAQCAtNTksNCArNzgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihJbmRleEV4cHJlc3Npb24sIGlzSW5k
ZXhFeHByZXNzaW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaApzaW1pbGFyaXR5IGluZGV4
IDYxJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xQYXJhbWV0ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKaW5kZXggOTI1ODZmODY5MWYuLjI0NDdlYzc0ZWUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xQYXJhbWV0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xOYW1lZFR5cGUuaApAQCAtMjgsMTEgKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgi
Ci0jaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMTm9kZS5oIgogI2lu
Y2x1ZGUgIldITFNMVHlwZS5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQxLDM5ICszOCw0NiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1l
c3BhY2UgQVNUIHsKIAotY2xhc3MgUGFyYW1ldGVyIDogcHVibGljIFZhbHVlIHsKK2NsYXNzIE5h
bWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKIHB1YmxpYzoKLSAgICBQYXJhbWV0ZXIoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZT4mJiB0eXBlLCBPcHRpb25hbDxTdHJpbmc+JiYgbmFtZSwgT3B0aW9uYWw8QVNUOjpT
ZW1hbnRpYz4mJiBzZW1hbnRpYykKKyAgICBOYW1lZFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBTdHJpbmcmJiBuYW1lKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAg
ICAgICAgLCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKLSAgICAgICAgLCBtX3R5
cGUoV1RGTW92ZSh0eXBlKSkKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAg
ICAgLCBtX3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQogICAgIHsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIH5QYXJhbWV0ZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+TmFtZWRUeXBlKCkg
PSBkZWZhdWx0OwogCi0gICAgUGFyYW1ldGVyKGNvbnN0IFBhcmFtZXRlciYpID0gZGVsZXRlOwot
ICAgIFBhcmFtZXRlcihQYXJhbWV0ZXImJikgPSBkZWZhdWx0OworICAgIE5hbWVkVHlwZShjb25z
dCBOYW1lZFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOYW1lZFR5cGUoTmFtZWRUeXBlJiYpID0gZGVm
YXVsdDsKIAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9Ci0gICAgT3B0aW9u
YWw8QVNUOjpTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQorICAg
IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcm
IG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KKworICAgIGJvb2wgaXNOYW1lZFR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzVHlwZURlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1N0cnVj
dHVyZURlZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGlzTmF0aXZlVHlwZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIHZpcnR1YWwgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3QgeyByZXR1
cm4gKnRoaXM7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAg
UXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4g
bV90eXBlOwotICAgIE9wdGlvbmFsPFN0cmluZz4gbV9uYW1lOwotICAgIE9wdGlvbmFsPEFTVDo6
U2VtYW50aWM+IG1fc2VtYW50aWM7CisgICAgU3RyaW5nIG1fbmFtZTsKIH07CiAKLXR5cGVkZWYg
VmVjdG9yPFBhcmFtZXRlcj4gUGFyYW1ldGVyczsKLQogfQogCiB9CiAKIH0KIAorI2RlZmluZSBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBw
cmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6
OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNh
dGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dITFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlwZSgpKQorCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCAwMTBlNmVi
YTcwMC4uMjQ0ZTg0MTAxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiBw
dWJsaWM6Ci0gICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRU
eXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBT
dHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1h
bnRpYz4mJiBzZW1hbnRpYywgYm9vbCByZXN0cmljdGVkKQorICAgIE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0
ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxl
RGVjbGFyYXRpb25zJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1h
bnRpYywgYm9vbCByZXN0cmljdGVkKQogICAgICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RG
TW92ZShvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50
VHlwZSksIFdURk1vdmUodHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURk1vdmUoc2VtYW50aWMpKQogICAgICAgICAsIG1fcmVzdHJpY3RlZChyZXN0cmljdGVkKQog
ICAgIHsKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oY29uc3QgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRl
ZmF1bHQ7CiAKKyAgICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAtNjAsNCArNjIsNiBAQCBwcml2
YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFS
QVRJT04oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaApp
bmRleCAzMjBhYmMzYzQ3NS4uNmVkOThlYzc0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAog
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRl
ICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDExICszOCwxMCBAQCBuYW1lc3Bh
Y2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0
aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGlj
IE5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVu
dHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFt
ZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdU
Rk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3Vt
ZW50cykpCiAgICAgewogICAgIH0KQEAgLTUyLDE2ICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgTmF0
aXZlVHlwZURlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRl
OwogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBk
ZWZhdWx0OwogCi0gICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1f
dHlwZUFyZ3VtZW50czsgfQorICAgIGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4g
Y2xvbmUoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVy
biBtX25hbWU7IH0KKyAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4g
bV90eXBlQXJndW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2lu
OwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7
CiB9OwpAQCAtNzIsNCArNjgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfTkFNRURfVFlQRShOYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlzTmF0aXZlVHlw
ZURlY2xhcmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKaW5kZXggMTUyOTQy
NmEyZWQuLjYzYzIwOTNjNTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKQEAgLTM5LDggKzM5LDgg
QEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFBvaW50ZXJUeXBlIDogcHVibGljIFJlZmVyZW5j
ZVR5cGUgewogcHVibGljOgotICAgIFBvaW50ZXJUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
U3RyaW5nJiYgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gZWxlbWVudFR5cGUp
Ci0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYWRkcmVz
c1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8
VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlKQorICAgICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92
ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAg
ICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgUG9pbnRlclR5cGUoY29uc3Qg
UG9pbnRlclR5cGUmKSA9IGRlbGV0ZTsKICAgICBQb2ludGVyVHlwZShQb2ludGVyVHlwZSYmKSA9
IGRlZmF1bHQ7CiAKLSAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0
IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0
IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVy
VHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKGFkZHJlc3NTcGFjZSgpKSwgZWxl
bWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UG9p
bnRlclR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50
VHlwZSgpLmNsb25lKCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTY1LDYgKzY1LDYgQEAgcHJp
dmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoUG9pbnRlclR5
cGUsIGlzUG9pbnRlclR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1F
RF9UWVBFKFBvaW50ZXJUeXBlLCBpc1BvaW50ZXJUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAppbmRleCBiYTM4YTVjMDFlYS4uZDA1
YTcyYzFmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5o
CkBAIC01MSwxMCArNTEsMzAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Byb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1
YWwgU3RyaW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgYW5kRnVu
Y3Rpb25OYW1lKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fk
cyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4mIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMg
PSBvdmVybG9hZHM7CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29u
c3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
JiBvdmVybG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3Zl
cmxvYWRzOworICAgIH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zl
cmxvYWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJsb2Fk
czsKKyAgICB9CisKICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gKm1fYmFzZTsgfQog
CiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2Jhc2U7CisgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1f
cG9zc2libGVHZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVTZXRPdmVybG9hZHM7CisgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9z
c2libGVBbmRPdmVybG9hZHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmgKaW5kZXggYTRjMTRjZTFjZjMuLmNkNTU2MzIwZGIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCkBAIC0yNyw3ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJp
YWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgog
I2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKQEAgLTUyLDggKzUyLDggQEAgcHVi
bGljOgogICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Np
b24oTGV4ZXI6OlRva2VuKG9yaWdpbikpCiAgICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFs
dWUpKQotICAgICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAg
ICwgbV9uZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9vbGRWYWx1ZShMZXhl
cjo6VG9rZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBudWxscHRyKQorICAgICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pLCBR
dWFsaWZpZXJzKCksIG51bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpCiAg
ICAgewogICAgIH0KIApAQCAtODcsMTUgKzg3LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuICptX2xWYWx1ZTsgfQotICAgIEFu
b255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1
ZTsgfQotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1
cm4gbV9uZXdWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyBy
ZXR1cm4gbV9vbGRWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkg
eyByZXR1cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24mIG5ld1ZhbHVlRXhwcmVzc2lv
bigpIHsgcmV0dXJuICptX25ld1ZhbHVlRXhwcmVzc2lvbjsgfQogICAgIEV4cHJlc3Npb24mIHJl
c3VsdEV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9yZXN1bHRFeHByZXNzaW9uOyB9CiAKIHByaXZh
dGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIEFub255
bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX29sZFZh
bHVlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RXhwcmVzc2lvbj4gbV9uZXdWYWx1ZUV4cHJlc3Npb247CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEV4cHJlc3Npb24+IG1fcmVzdWx0RXhwcmVzc2lvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VU
eXBlLmgKaW5kZXggMjI1N2Y5YmUyNDAuLjRlNjlmNzliOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNl
VHlwZS5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVu
bmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM3LDExICszNywxOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1l
c3BhY2UgQVNUIHsKIAotY2xhc3MgUmVmZXJlbmNlVHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNz
IFJlZmVyZW5jZVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIFJlZmVy
ZW5jZVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0
ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlKQotICAgICAgICA6IG1fb3JpZ2luKFdU
Rk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShXVEZNb3ZlKGFkZHJlc3NT
cGFjZSkpCisgICAgZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UgeworICAgICAgICBDb25zdGFudCwK
KyAgICAgICAgRGV2aWNlLAorICAgICAgICBUaHJlYWRncm91cCwKKyAgICAgICAgVGhyZWFkCisg
ICAgfTsKKworICAgIFJlZmVyZW5jZVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBZGRyZXNz
U3BhY2UgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgZWxlbWVu
dFR5cGUpCisgICAgICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAs
IG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdU
Rk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CkBAIC01MCwxOCArNTcsMTYgQEAgcHVi
bGljOgogCiAgICAgUmVmZXJlbmNlVHlwZShjb25zdCBSZWZlcmVuY2VUeXBlJikgPSBkZWxldGU7
CiAgICAgUmVmZXJlbmNlVHlwZShSZWZlcmVuY2VUeXBlJiYpID0gZGVmYXVsdDsKLSAgICAKLSAg
ICBUeXBlJiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CiAKLXByb3Rl
Y3RlZDoKLSAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVy
biBtX2FkZHJlc3NTcGFjZTsgfQotICAgIGNvbnN0IFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBBZGRyZXNzU3BhY2UgYWRkcmVz
c1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKyAgICBjb25zdCBVbm5h
bWVkVHlwZSYgZWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQor
ICAgIFVubmFtZWRUeXBlJiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX2Fk
ZHJlc3NTcGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAg
ICBBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFt
ZWRUeXBlPiBtX2VsZW1lbnRUeXBlOwogfTsKIAogfQpAQCAtNzAsNCArNzUsNiBAQCBwcml2YXRl
OgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBFKFJlZmVy
ZW5jZVR5cGUsIGlzUmVmZXJlbmNlVHlwZSgpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzVi
ZmM5ZTQyODYuLmFjOTMyM2QyNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTEgQEAgcHVi
bGljOgogCiAgICAgRXhwcmVzc2lvbiogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9
CiAKKyAgICB2b2lkIHNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZp
bml0aW9uKSB7IG1fZnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAg
ICBGdW5jdGlvbkRlZmluaXRpb24qIG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZp
bml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dHJ1Y3R1cmVEZWZpbml0aW9uLmgKaW5kZXggODdjYzYyZjIzNTYuLmE4Yzk4ZTk5YjRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1
Y3R1cmVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNp
bmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTM5LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsK
IAotY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFN0cnVj
dHVyZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1
cmVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgU3RydWN0
dXJlRWxlbWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZN
b3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgIDog
TmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3N0
cnVjdHVyZUVsZW1lbnRzKFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMpKQogICAgIHsKICAgICB9
CkBAIC01MywxNyArNTIsMTEgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24oY29u
c3QgU3RydWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZURlZmluaXRp
b24oU3RydWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJ1Y3R1cmVFbGVt
ZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9
CisgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KKyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVu
dHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4
ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RydWN0dXJlRWxl
bWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKIH07CiAKQEAgLTczLDQgKzY2LDYgQEAgcHJpdmF0
ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoU3RydWN0
dXJlRGVmaW5pdGlvbiwgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0
dXJlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRWxlbWVudC5oCmluZGV4IDE0YmU0MWM3Mjk4Li5hOGNiZjk4ZGY1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgU3RydWN0dXJlRWxlbWVudCA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoK
LSAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYm
IHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUs
IE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0
cjxVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4g
c2VtYW50aWMpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAs
IG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZN
b3ZlKHR5cGUpKQpAQCAtNTUsMTMgKzU1LDE1IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVFbGVt
ZW50KGNvbnN0IFN0cnVjdHVyZUVsZW1lbnQmKSA9IGRlbGV0ZTsKICAgICBTdHJ1Y3R1cmVFbGVt
ZW50KFN0cnVjdHVyZUVsZW1lbnQmJikgPSBkZWZhdWx0OwogCi0gICAgVHlwZSYgdHlwZSgpIHsg
cmV0dXJuICptX3R5cGU7IH0KKyAgICBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIHsgcmV0dXJuIG1f
b3JpZ2luOyB9CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9Cisg
ICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8
U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogcHJpdmF0ZToK
ICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPFNl
bWFudGljPiBtX3NlbWFudGljOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUuaAppbmRleCBjZjRjYmM4ODc5MC4uNTczYThiYjY4
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlLmgKQEAgLTQ1LDEyICs0NSw4IEBAIHB1YmxpYzoKICAgICBUeXBlKGNvbnN0IFR5
cGUmKSA9IGRlbGV0ZTsKICAgICBUeXBlKFR5cGUmJikgPSBkZWZhdWx0OwogCi0gICAgdmlydHVh
bCBib29sIGlzVHlwZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzVW5uYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
CiBwcml2YXRlOgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCmluZGV4IGY3MzYyOWUyOWIx
Li42OWFhMjNhMWZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw4
IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0j
aW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMg
VHlwZSB7CitjbGFzcyBUeXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGlj
OgotICAgIFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKQotICAgICAgICA6IG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICBU
eXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBl
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92
ZSh0eXBlKSkKICAgICB7CiAgICAgfQpAQCAtNTIsMTggKzUyLDE4IEBAIHB1YmxpYzoKICAgICBU
eXBlRGVmaW5pdGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFR5cGVE
ZWZpbml0aW9uKFR5cGVEZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIEFTVDo6VHlwZSYg
dHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBib29sIGlzVHlwZURlZmluaXRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICBBU1NFUlQobV90eXBlKTsKKyAgICAgICAgcmV0dXJuIG1f
dHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBl
OwogfTsKIAogfQpAQCAtNzIsNCArNzIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUeXBlRGVmaW5pdGlvbiwgaXNUeXBlRGVmaW5p
dGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAppbmRleCA0OTQ0MWQ4YjVj
Ny4uOTI5M2FhMjY0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKQEAgLTI4LDggKzI4LDkg
QEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1
ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
QVNUIHsKIAotY2xhc3MgVHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFR5cGVS
ZWZlcmVuY2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgogICAgIFR5cGVSZWZlcmVu
Y2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYg
dHlwZUFyZ3VtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAg
ICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbmFtZShXVEZN
b3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3ZlKHR5cGVBcmd1bWVu
dHMpKQogICAgIHsKQEAgLTUyLDI0ICs1Myw0NyBAQCBwdWJsaWM6CiAgICAgVHlwZVJlZmVyZW5j
ZShjb25zdCBUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgVHlwZVJlZmVyZW5jZShUeXBl
UmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVJlZmVyZW5jZT4gd3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2
ZWRUeXBlKQorICAgIHsKKyAgICAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOworICAg
ICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAg
ICAgICAgdHlwZUFyZ3VtZW50cyA9IEFTVDo6Y2xvbmUoZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihyZXNvbHZlZFR5cGUpLnR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0
cmluZyhyZXNvbHZlZFR5cGUubmFtZSgpKSwgV1RGTW92ZSh0eXBlQXJndW1lbnRzKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKHJlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25h
bWU7IH0KICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBl
QXJndW1lbnRzOyB9CisgICAgTmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSB7IHJldHVybiBtX3Jl
c29sdmVkVHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
UmVzb2x2ZWRUeXBlKE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9y
ZXNvbHZlZFR5cGUgPSAmcmVzb2x2ZWRUeXBlOworICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKG1f
b3JpZ2luKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50cykp
OwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCiAgICAgewogICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVmZXJlbmNlKCk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9uYW1l
OwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOworICAgIE5hbWVkVHlwZSogbV9y
ZXNvbHZlZFR5cGUgeyBudWxscHRyIH07CiB9OwogCiB9CkBAIC03OCw2ICsxMDIsNiBAQCBwcml2
YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShUeXBlUmVmZXJl
bmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5O
QU1FRF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgpKQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVu
bmFtZWRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbm5hbWVkVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43
M2E4ZjBhMGM0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVW5uYW1l
ZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5cGUoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB+VW5uYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBV
bm5hbWVkVHlwZShjb25zdCBVbm5hbWVkVHlwZSYpID0gZGVsZXRlOworICAgIFVubmFtZWRUeXBl
KFVubmFtZWRUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlUmVm
ZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQb2lu
dGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJy
YXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOwor
CisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdp
bjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKK307CisKK30KKwor
fQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZ
UEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlVubmFtZWRUeXBlJiB0eXBl
KSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShVbm5hbWVkVHlwZSwgaXNV
bm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aAppbmRleCBmZjAzNjgxOTNiZC4uODUyMGNhZGNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IFZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgotICAgIFZhcmlh
YmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlm
aWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBP
cHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1h
bnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAg
IDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZN
b3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjAs
MjAgKzYwLDIzIEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVj
bGFyYXRpb24mJikgPSBkZWZhdWx0OwogCiAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIFVubmFtZWRU
eXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQogICAgIE9wdGlvbmFsPFNlbWFudGljPiYg
c2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAgICAgRXhwcmVzc2lvbiogaW5pdGlh
bGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAg
TGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9u
YWw8U2VtYW50aWM+IG1fc2VtYW50aWM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
IG1faW5pdGlhbGl6ZXI7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9u
PiBWYXJpYWJsZURlY2xhcmF0aW9uczsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZl
cmVuY2UuaAppbmRleCAyYWU4MjhkNTI5NS4uZTM5ZWNmNWM1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFy
aWFibGVSZWZlcmVuY2UuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaCIKQEAgLTU1LDE5ICs1NSwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhcmlh
YmxlUmVmZXJlbmNlIHdyYXAoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlv
bikKICAgICB7CiAgICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4o
dmFyaWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJs
ZSA9IHsgJnZhcmlhYmxlRGVjbGFyYXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUg
PSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBzdGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3JhcChBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uJiBhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKQorICAgIGJvb2wgaXNWYXJpYWJs
ZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmlu
ZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiog
dmFyaWFibGUoKSB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKKyAgICB2b2lkIHNldFZhcmlhYmxl
KFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewotICAgICAg
ICBWYXJpYWJsZVJlZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKGFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZh
bm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIH07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIG1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9CiAKLSAgICBi
b29sIGlzVmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
Ci0KIHByaXZhdGU6CiAgICAgVmFyaWFibGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
KQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQpAQCAtNzUsNyArNzcsNyBA
QCBwcml2YXRlOgogICAgIH0KIAogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8VmFy
aWFudDxWYXJpYWJsZURlY2xhcmF0aW9uKiwgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbio+
PiBtX3ZhcmlhYmxlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIG1fdmFyaWFibGU7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYwNGJkZTcxNjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0
aW9ucy5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVk
ZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2lubGluZSBib29sIGNoZWNrRHVwbGljYXRl
RnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPj4gZnVuY3Rpb25zOworICAg
IGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRp
b25zKCkpCisgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7Cisg
ICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKTsKKworICAgIHN0ZDo6c29ydChmdW5jdGlvbnMuYmVnaW4oKSwg
ZnVuY3Rpb25zLmVuZCgpLCBbXShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGEsIGNv
bnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgYikgLT4gYm9vbCB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzdGQ6Om1pbihhLm5hbWUoKS5sZW5ndGgoKSwgYi5uYW1lKCku
bGVuZ3RoKCkpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA8IGIubmFtZSgp
W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKGEubmFt
ZSgpW2ldID4gYi5uYW1lKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBhLm5hbWUoKS5sZW5ndGgoKSA8IGIubmFtZSgpLmxlbmd0
aCgpOworICAgIH0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGZ1bmN0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkg
IT0gZnVuY3Rpb25zW2pdLmdldCgpLm5hbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9u
c1tpXS5nZXQoKSkgJiYgaXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlv
bnNbal0uZ2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGZ1bmN0aW9uc1tqXS5n
ZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5pc0Nhc3QoKSkgeworICAgICAgICAgICAg
ICAgIGJvb2wgc2FtZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0
aW9uc1tpXS5nZXQoKS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS50eXBlKCkpKQorICAgICAg
ICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXRjaGVzKGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpLCBmdW5j
dGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYm9vbCBzYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0g
MDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClba10udHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZSA9IGZ1bmN0aW9uc1tpXS5nZXQoKS5w
YXJhbWV0ZXJzKClbMV0udHlwZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVy
ZW5jZT4odHlwZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKS5yZXNvbHZlZFR5cGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNv
bHZlZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVk
VHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAidWludCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9w
ZXJhdG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMQorICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzPEFT
VDo6QXJyYXlUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChmdW5jdGlvbnNb
aV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvcj09IgorICAgICAgICAgICAgJiYgZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNU
OjpSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUo
KSkKKyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpCisgICAgICAgICAgICAmJiBtYXRjaGVzKGZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCBmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpWzFdLnR5cGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiMTNkZDBhNjNmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZl
clR5cGVzLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVt
ZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJn
dW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2lubGluZSBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpV
bm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIG90aGVyKQor
eworICAgIGF1dG8mIHVuaWZ5VGhpcyA9IHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpOworICAgIGF1
dG8mIHVuaWZ5T3RoZXIgPSBvdGhlci51bmlmeU5vZGUoKTsKKworICAgIGlmICgmdW5pZnlUaGlz
ID09ICZ1bmlmeU90aGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpczxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlPdGhlcikp
IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGF1dG8mIG5hbWVkVGhpcyA9IGRvd25j
YXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpOworICAgICAgICBhdXRvJiBuYW1lZE90aGVy
ID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQo
IWlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVGhpcykgJiYgIWlzPEFTVDo6VHlwZURlZmlu
aXRpb24+KG5hbWVkT3RoZXIpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSBlbHNlIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMpICYmIGlzPEFTVDo6VW5u
YW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisgICAgICAgIGF1dG8mIHVubmFtZWRUaGlzID0gZG93
bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKTsKKyAgICAgICAgYXV0byYgdW5uYW1l
ZE90aGVyID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcik7CisgICAgICAg
IEFTU0VSVCghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVGhpcykgJiYgIWlzPEFTVDo6
VHlwZVJlZmVyZW5jZT4odW5uYW1lZE90aGVyKSk7CisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZE90aGVy
KSkgeworICAgICAgICAgICAgYXV0byYgcG9pbnRlclRoaXMgPSBkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBwb2ludGVyT3RoZXIgPSBk
b3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYg
KHBvaW50ZXJUaGlzLmFkZHJlc3NTcGFjZSgpICE9IHBvaW50ZXJPdGhlci5hZGRyZXNzU3BhY2Uo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0
Y2hlcyhwb2ludGVyVGhpcy5lbGVtZW50VHlwZSgpLCBwb2ludGVyT3RoZXIuZWxlbWVudFR5cGUo
KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1
bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcikp
eworICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUaGlzID0gZG93bmNhc3Q8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5
UmVmZXJlbmNlT3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1l
ZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVJlZmVyZW5jZVRoaXMuYWRkcmVzc1NwYWNl
KCkgIT0gYXJyYXlSZWZlcmVuY2VPdGhlci5hZGRyZXNzU3BhY2UoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhhcnJheVJlZmVyZW5j
ZVRoaXMuZWxlbWVudFR5cGUoKSwgYXJyYXlSZWZlcmVuY2VPdGhlci5lbGVtZW50VHlwZSgpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUaGlzKSAm
JiBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90aGVyKSkgeworICAgICAgICAgICAgYXV0byYg
YXJyYXlUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAg
ICAgICAgIGF1dG8mIGFycmF5T3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVRoaXMubnVtRWxlbWVudHMoKSAhPSBhcnJh
eU90aGVyLm51bUVsZW1lbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlUaGlzLnR5cGUoKSwgYXJyYXlPdGhlci50eXBl
KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhBU1Q6
Ok5hbWVkVHlwZSYgcG9zc2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVu
dHMpCit7CisgICAgaWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAg
ICAgICAgfHwgaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAg
ICAgIHx8IGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpKSB7Cisg
ICAgICAgIHJldHVybiB0eXBlQXJndW1lbnRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBBU1NF
UlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSkpOworICAgIGF1
dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihwb3NzaWJsZVR5cGUpOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpLnNpemUoKSAhPSB0eXBlQXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbiogdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFT
VDo6VHlwZVJlZmVyZW5jZSogdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxwdHI7Cisg
ICAgICAgIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNz
aW9uID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiBuYXRpdmVUeXBlQXJn
dW1lbnRUeXBlUmVmZXJlbmNlID0gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGFzc2lnbiA9IFsm
XShBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50LCBBU1Q6OkNvbnN0YW50RXhwcmVzc2lv
biomIGV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZSomIHR5cGVSZWZlcmVuY2UpIHsKKyAg
ICAgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4
cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIGV4cHJlc3Np
b24gPSAmY29uc3RhbnRFeHByZXNzaW9uOworICAgICAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0aGVUeXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAg
ICAgICAgdHlwZVJlZmVyZW5jZSA9IHRoZVR5cGVSZWZlcmVuY2UuZ2V0KCk7CisgICAgICAgICAg
ICB9KSwgdHlwZUFyZ3VtZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBhc3NpZ24odHlwZUFy
Z3VtZW50c1tpXSwgdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiwgdHlwZUFyZ3VtZW50VHlwZVJlZmVy
ZW5jZSk7CisgICAgICAgIGFzc2lnbihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpW2ldLCBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uLCBuYXRpdmVUeXBlQXJndW1lbnRU
eXBlUmVmZXJlbmNlKTsKKworICAgICAgICBpZiAodHlwZUFyZ3VtZW50RXhwcmVzc2lvbiAmJiBu
YXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVBcmd1
bWVudEV4cHJlc3Npb24tPm1hdGNoZXMoKm5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlQXJn
dW1lbnRUeXBlUmVmZXJlbmNlICYmIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpIHsK
KyAgICAgICAgICAgIGlmICghbWF0Y2hlcygqdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSwgKm5h
dGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEludHJpbnNpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbnRyaW5zaWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMGM0NDIyZDUxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCkBAIC0wLDAgKzEsMjU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKworI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCitJbnRyaW5zaWNzOjpJbnRyaW5zaWNzKCkKKyAgICA6IG1fdGV4dHVyZVR5cGVOYW1l
cyB7IFN0cmluZygiVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisg
ICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUxREFycmF5IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEQXJyYXki
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4
dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJp
bmcoIlJXVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAg
ICAgICBTdHJpbmcoIlRleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEQXJyYXkiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTNEIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTNE
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRl
eHR1cmVDdWJlIiwgIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIG1fdGV4
dHVyZUlubmVyVHlwZU5hbWVzIHsgU3RyaW5nKCJ1Y2hhciIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJ1c2hvcnQiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidWludCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJjaGFyIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInNob3J0IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImludCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJoYWxmIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQorICAgICwgbV9kZXB0aFRleHR1cmVJbm5lclR5
cGVzIHsgU3RyaW5nKCJoYWxmIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAg
ICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQor
eworICAgIEFTU0VSVChtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpID09IDExKTsgLy8gZnVsbFRl
eHR1cmVzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNTRVJUKG1f
dGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSA9PSA4KTsgLy8gZnVsbFRleHR1cmVzIGhhcmRj
b2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNTRVJUKG1fZGVwdGhUZXh0dXJl
SW5uZXJUeXBlcy5zaXplKCkgPT0gMik7IC8vIHRleHR1cmVEZXB0aDJEICYgZnJpZW5kcyBoYXJk
Y29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorfQorCit2b2lkIEludHJpbnNpY3M6OmFk
ZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKQoreworICAgIC8vIEZJWE1FOiBQb3B1
bGF0ZSB0aGlzLgorfQorCitib29sIEludHJpbnNpY3M6OmFkZFByaW1pdGl2ZShBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSAhPSAwKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
dm9pZCIpCisgICAgICAgIG1fdm9pZFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImJvb2wiKQorICAgICAg
ICBtX2Jvb2xUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAgIG1fdWNoYXJUeXBl
ID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJ1c2hvcnQiKQorICAgICAgICBtX3VzaG9ydFR5cGUgPSAmbmF0aXZl
VHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gInVpbnQiKQorICAgICAgICBtX3VpbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJjaGFyIikK
KyAgICAgICAgbV9jaGFyVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKQorICAgICAgICBtX3No
b3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgbV9pbnRUeXBlID0gJm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJoYWxmIikKKyAgICAgICAgbV9oYWxmVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRp
b247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxvYXQi
KQorICAgICAgICBtX2Zsb2F0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxz
ZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX2ludCIpCisgICAg
ICAgIG1fYXRvbWljSW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX3VpbnQiKQorICAgICAg
ICBtX2F0b21pY1VpbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJzYW1wbGVyIikKKyAgICAgICAgbV9z
YW1wbGVyVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5z
aWNzOjphZGRWZWN0b3IoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAidmVj
dG9yIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQb2ludGVy
ID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8mIGxlbmd0aEV4cHJl
c3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgQVNTRVJUKGlubmVyVHlwZVBvaW50ZXIp
OworICAgIGF1dG8mIGlubmVyVHlwZSA9ICppbm5lclR5cGVQb2ludGVyOworICAgIEFTU0VSVChp
bm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAwKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbioqIGFycmF5OworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJib29s
IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckJvb2w7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBl
Lm5hbWUoKSA9PSAidWNoYXIiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVWNoYXI7CisgICAg
ZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgYXJyYXkgPSBt
X3ZlY3RvclVzaG9ydDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1aW50IikK
KyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclVpbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5h
bWUoKSA9PSAiY2hhciIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JDaGFyOworICAgIGVsc2Ug
aWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3Rv
clNob3J0OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImludCIpCisgICAgICAg
IGFycmF5ID0gbV92ZWN0b3JJbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAi
aGFsZiIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JIYWxmOworICAgIGVsc2UgaWYgKGlubmVy
VHlwZS5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckZsb2F0Owor
ICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaW50IGxlbmd0aCA9
IGxlbmd0aEV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChs
ZW5ndGggPj0gMiAmJiBsZW5ndGggPD0gNCk7CisgICAgYXJyYXlbbGVuZ3RoIC0gMl0gPSAmbmF0
aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNp
Y3M6OmFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJtYXRy
aXgiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMyk7CisgICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpWzJdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9IFdURjo6Z2V0
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvJiByb3dFeHByZXNzaW9uID0gV1RGOjpn
ZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMV0pOworICAgIGF1dG8mIGNvbHVtbkV4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KVsyXSk7CisgICAgQVNTRVJUKGlubmVyVHlwZVBvaW50ZXIpOworICAgIGF1dG8mIGlubmVyVHlw
ZSA9ICppbm5lclR5cGVQb2ludGVyOworICAgIEFTU0VSVChpbm5lclR5cGUudHlwZUFyZ3VtZW50
cygpLnNpemUoKSA9PSAwKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogKCphcnJh
eSlbM107CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICBhcnJh
eSA9IG1fbWF0cml4SGFsZjsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQor
ICAgICAgICBhcnJheSA9IG1fbWF0cml4RmxvYXQ7CisgICAgaW50IHJvdyA9IHJvd0V4cHJlc3Np
b24uaW50ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChyb3cgPj0gMiAmJiByb3cg
PD0gNCk7CisgICAgaW50IGNvbHVtbiA9IGNvbHVtbkV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwo
KS52YWx1ZSgpOworICAgIEFTU0VSVChjb2x1bW4gPj0gMiAmJiBjb2x1bW4gPD0gNCk7CisgICAg
YXJyYXlbcm93IC0gMl1bY29sdW1uIC0gMl0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZEZ1bGxUZXh0dXJlKEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24sIEFTVDo6VHlwZVJl
ZmVyZW5jZSYgaW5uZXJUeXBlKQoreworICAgIHVuc2lnbmVkIHRleHR1cmVUeXBlSW5kZXggPSBt
X3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gbV90ZXh0dXJlVHlwZU5hbWVzW2ldKQorICAgICAgICAgICAg
dGV4dHVyZVR5cGVJbmRleCA9IGk7CisgICAgfQorICAgIGlmICh0ZXh0dXJlVHlwZUluZGV4ID09
IG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHVuc2lnbmVkIGlubmVyVHlwZUluZGV4ID0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgp
OworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlu
bmVyVHlwZS5uYW1lKCkuc3RhcnRzV2l0aChtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXSkpIHsK
KyAgICAgICAgICAgIHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgICAgICAgICAgaWYgKGlubmVy
VHlwZS5uYW1lKCkgPT0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pCisgICAgICAgICAgICAg
ICAgdmVjdG9yTGVuZ3RoID0gMTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IEFTU0VSVChpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5h
bWVzW2ldLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlubmVyVHlwZS5u
YW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICcyJworICAgICAgICAgICAg
ICAgICAgICB8fCBpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAx
XSA9PSAnMycKKyAgICAgICAgICAgICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5
cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzQnKTsKKyAgICAgICAgICAgICAgICB2ZWN0b3JM
ZW5ndGggPSBpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSAt
ICcwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoaW5uZXJU
eXBlSW5kZXggIT0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpKTsKKyAgICBtX2Z1bGxU
ZXh0dXJlc1t0ZXh0dXJlVHlwZUluZGV4XVtpbm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3RoIC0g
MV0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IEludHJpbnNpY3M6OmFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4
dHVyZSA9IG1fdGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3
VGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVE
ZXB0aDJEQXJyYXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiUldUZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJl
RGVwdGgyREFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIlRleHR1cmVEZXB0aEN1YmUiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGhD
dWJlOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWdu
ZWQgaW5uZXJUeXBlSW5kZXggPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gbV9kZXB0aFRleHR1cmVJ
bm5lclR5cGVzW2ldKQorICAgICAgICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0KKyAg
ICBBU1NFUlQoaW5uZXJUeXBlSW5kZXggIT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUo
KSk7CisgICAgdGV4dHVyZVtpbm5lclR5cGVJbmRleF0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9u
OworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NFUlQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiBpbm5l
clR5cGVQb2ludGVyID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5j
ZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIEFTU0VS
VChpbm5lclR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9p
bnRlcjsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7
CisgICAgaWYgKGFkZEZ1bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5uZXJUeXBl
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZERlcHRoVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFy
YXRpb24sIGlubmVyVHlwZSk7Cit9CisKK3ZvaWQgSW50cmluc2ljczo6YWRkKEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGFkZFBy
aW1pdGl2ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGFkZFZlY3RvcihuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKGFkZE1hdHJpeChuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47Cisg
ICAgYWRkVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEludHJpbnNpY3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW50cmluc2ljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kN2I0
ZTM4NzIxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMSW50cmluc2ljcy5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFy
YXRpb24uaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
SW50cmluc2ljcyB7CitwdWJsaWM6CisgICAgSW50cmluc2ljcygpOworCisgICAgdm9pZCBhZGQo
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBhZGQoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mKTsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBi
b29sVHlwZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9ib29sVHlwZSk7CisgICAgICAgIHJl
dHVybiAqbV9ib29sVHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biYgdWludFR5cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdWludFR5cGUpOworICAgICAg
ICByZXR1cm4gKm1fdWludFR5cGU7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYWRkUHJp
bWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRWZWN0b3Io
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZE1hdHJpeChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkRnVsbFRleHR1cmUoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGFkZERl
cHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5j
ZSYpOworICAgIHZvaWQgYWRkVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOwor
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdm9pZFR5cGU7CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYm9vbFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fdWNoYXJUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3VzaG9ydFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdWludFR5cGU7
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fY2hhclR5cGU7CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fc2hvcnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiBtX2ludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
aGFsZlR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fZmxvYXRUeXBlOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0b21pY0ludFR5cGU7CisgICAgQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYXRvbWljVWludFR5cGU7CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1fc2FtcGxlclR5cGU7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV92ZWN0b3JCb29sWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX3ZlY3RvclVjaGFyWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3ZlY3RvclVzaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0
b3JVaW50WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckNoYXJb
M107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yU2hvcnRbM107Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9ySW50WzNdOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckhhbGZbM107CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yRmxvYXRbM107CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV9tYXRyaXhIYWxmWzNdWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX21hdHJpeEZsb2F0WzNdWzNdOworCisgICAgVmVjdG9yPFN0cmluZz4gbV90ZXh0
dXJlVHlwZU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVz
OworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fZnVsbFRleHR1cmVzWzExXVs4
XVs0XTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlczsKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1RleHR1cmVEZXB0aDJEWzJdOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aDJEQXJyYXlbMl07CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0dXJlRGVwdGgyREFycmF5WzJdOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aEN1YmVbMl07Cit9
OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmNiNzAzNzg4MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCkBAIC0wLDAgKzEs
MTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0
dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitjbGFzcyBOYW1lQ29udGV4dCB7CitwdWJsaWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRl
eHQqIHBhcmVudCA9IG51bGxwdHIpCisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlv
bikKKyAgICB7CisgICAgICAgIGlmIChleGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFk
ZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKHR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgYm9vbCBhZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKGV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV90eXBl
cy5hZGQoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51
bWVyYXRpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGV4aXN0cyhlbnVtZXJhdGlv
bkRlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAg
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRp
b24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGFkZChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KG1fdHlwZXMuZmluZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgp
CisgICAgICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFt
ZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPigpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBh
ZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICAgICAgfHwgbV92YXJpYWJs
ZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMu
ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
bV9mdW5jdGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgYWRkKEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisgICAgewor
ICAgICAgICBpZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
KSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBib29sIGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVj
bGFyYXRpb24pCisgICAgeworICAgICAgICBpZiAoZXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24u
bmFtZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBtX3ZhcmlhYmxlcy5hZGQoU3RyaW5nKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSwgJnZh
cmlhYmxlRGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm4gcmVzdWx0LmlzTmV3RW50cnk7Cisg
ICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+
LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fdHlwZXMuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1f
dHlwZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9wYXJlbnQtPmdldFR5cGVzKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CisgICAg
fQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnMuZmluZChuYW1lKTsKKyAgICAgICAgaWYg
KGl0ZXJhdG9yID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAobV9wYXJl
bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMobmFtZSk7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Jml0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24q
IGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0g
bV92YXJpYWJsZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFZhcmlhYmxlKG5hbWUpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBleGlzdHMoU3RyaW5nJiBuYW1lKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCisg
ICAgICAgICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5hbWUpICE9IG1fZnVuY3Rpb25zLmVuZCgp
CisgICAgICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVu
ZCgpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+PiBtX3R5cGVzOworICAgIEhhc2hNYXA8U3RyaW5n
LCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+
LCAxPj4gbV9mdW5jdGlvbnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbio+IG1fdmFyaWFibGVzOworICAgIE5hbWVDb250ZXh0KiBtX3BhcmVudDsKK307CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCmluZGV4IDQ3ZDRkNmE1NzkzLi5kMGQ1YjYz
NzE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xOYW1lUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVSZXNvbHZlci5oCkBAIC0yNywxMyArMjcsMjk2IEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIKKyNp
bmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisj
aW5jbHVkZSAiV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNp
dG9yLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi12b2lkIHJl
c29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSk7CitjbGFzcyBOYW1lUmVzb2x2ZXIg
OiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0
JiBuYW1lQ29udGV4dCkKKyAgICAgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgICAgICBpZiAodHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRv
KiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5hbWUo
KSk7CisgICAgICAgIGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlm
IChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBl
UmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgICAgICAgICB0eXBlUmVmZXJlbmNlLnNl
dFJlc29sdmVkVHlwZSgqcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Vy
cm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIE5hbWVDb250ZXh0IG5ld05hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsK
KyAgICAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7Cisg
ICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAg
ICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KSkgeworICAgICAgICAgICAgbmV3TmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KHBhcmFtZXRl
cik7CisgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBuZXdOYW1lQ29udGV4dC5hZGQocGFyYW1l
dGVyKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIG1fZXJy
b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBuZXdOYW1lUmVzb2x2ZXIudmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJs
b2NrKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spIG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAg
IE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQoYmxvY2spOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBWaXNpdG9yOjp2aXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAg
TmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVz
b2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7Cisg
ICAgICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgICAgICBOYW1lQ29u
dGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAgICAgICBOYW1lUmVzb2x2
ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxl
TG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgp
KTsKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAg
ICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KHdoaWxlTG9vcC5i
b2R5KCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgd2hpbGVM
b29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQp
OworICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KHdoaWxl
TG9vcC5ib2R5KCkpOworICAgICAgICBWaXNpdG9yOjp2aXNpdCh3aGlsZUxvb3AuY29uZGl0aW9u
YWwoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAg
ICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQoZm9yTG9vcCk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBtX25hbWVDb250ZXh0LmFkZCh2YXJpYWJsZURlY2xh
cmF0aW9uKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJl
ZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChhdXRvKiB2YXJpYWJsZSA9IG1fbmFt
ZUNvbnRleHQuZ2V0VmFyaWFibGUodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKSkKKyAgICAgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNldFZhcmlhYmxlKCp2YXJpYWJsZSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5Ob2Rl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJu
Tm9kZS5zZXRGdW5jdGlvbihtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgICAgIFZpc2l0b3I6OnZp
c2l0KHJldHVybk5vZGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChhdXRvKiBnZXRGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uZ2V0RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICAgICAgcHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKCpnZXRGdW5jdGlvbnMp
OworICAgICAgICBpZiAoYXV0byogc2V0RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5j
dGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAg
ICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZVNldE92ZXJsb2Fkcygq
c2V0RnVuY3Rpb25zKTsKKyAgICAgICAgaWYgKGF1dG8qIGFuZEZ1bmN0aW9ucyA9IG1fbmFtZUNv
bnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRGdW5jdGlvbk5h
bWUoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVB
bmRPdmVybG9hZHMoKmFuZEZ1bmN0aW9ucyk7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4
cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9l
cnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoaXM8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhkb3duY2FzdDxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkubmFtZSgpKSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7CisgICAg
ICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBd
OworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
Pih0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0
aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoZG90RXhwcmVzc2lvbi5maWVsZE5hbWUoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBl
eHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFy
aWFudHMgb3IgYSBSZXdyaXRlciBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAgZG90
RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3
ICgmZG90RXhwcmVzc2lvbikgQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShv
cmlnaW4pLCAqbWVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZXJyb3Ig
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgVmlzaXRvcjo6dmlzaXQoZG90RXhwcmVzc2lvbik7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5u
YW1lKCkpKQorICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVu
Y3Rpb25zKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNhbGxFeHByZXNz
aW9uLnNldENhc3REYXRhKCk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9
IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAg
ICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9lcnJvciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoY2FsbEV4cHJlc3Np
b24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9u
YW1lQ29udGV4dC5nZXRUeXBlcyhjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZS5sZWZ0KCkpKSB7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+
c2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1l
cmF0aW9uVHlwZXMpWzBdOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4odHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1l
cmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UucmlnaHQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1i
ZXIoKm1lbWJlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZXJyb3Ig
PSB0cnVlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgYWxsIHRoZSBuYW1lcyBo
YXZlIGJlZW4gcmVzb2x2ZWQuCisKKyAgICB2b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRp
b24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7Cisg
ICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOworICAgIH0KKwor
ICAgIGJvb2wgZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yOyB9CisKK3ByaXZhdGU6CisgICAgTmFt
ZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9j
dXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07CisgICAgYm9vbCBtX2Vycm9yIHsgZmFsc2UgfTsg
Ly8gRklYTUU6IE1pZ3JhdGUgdGhpcyB0byBiZSBzb21lIHNvcnQgb2YgZGVzY3JpcHRpdmUgc3Ry
aW5nLgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgdGhlIGVycm9yIGludG8gVmlzaXRv
cgorfTsKKworaW5saW5lIGJvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFt
LCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIHR5cGVEZWZp
bml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2
ZXIuVmlzaXRvcjo6dmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNv
bHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3Ig
KGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25z
KCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KCpzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNv
bHZlci5WaXNpdG9yOjp2aXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYg
KG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlw
ZURlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5WaXNpdG9yOjp2aXNpdCgq
bmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW5saW5lIGJvb2wgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwg
TmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRl
ZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1l
UmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jdGlvbkRlZmluaXRpb24u
Z2V0KCkpOworICAgICAgICBuYW1lUmVzb2x2ZXIudmlzaXQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7
CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRp
b24obnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDog
cHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNv
bHZlci5WaXNpdG9yOjp2aXNpdCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAg
IGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi4z
MzM2YjliMmVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmNwcApAQCAtMzgsNyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7
CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3Ry
aW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4g
YSBiZXR0ZXIgZXJyb3IgY29kZSBmcm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlw
dC4KK2F1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExl
eGVyKHN0cmluZ1ZpZXcpOwogICAgIG1fbW9kZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBh
dXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVE
ZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5p
dGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmlu
aXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlw
ZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1
dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
TW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0
dXJlRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgq
c3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHBy
b2dyYW0uYXBwZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJO
YW1lIEVycm9yISAlcyIsIHN0cnVjdHVyZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTc0LDcgKzgzLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQs
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIGlmIChlbnVtZXJhdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAg
ICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1l
cmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAg
ICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRp
b25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBh
dXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0
aW9uRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rp
b25EZWZpbml0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpm
dW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1l
IEVycm9yISAlcyIsIGZ1bmN0aW9uRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGVycm9yID0gZnVuY3Rpb25EZWZpbml0aW9uLmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAg
YXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3
LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAg
ICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBh
dXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2
ZVR5cGVEZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZN
b3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nl
c3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9n
QWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtNDU0LDE2ICs0NzksNTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCkgLT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGUKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodFNxdWFyZUJyYWNr
ZXQuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51
bUVsZW1lbnRzIH19OwogICAgIH0KLSAgICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBl
cyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2
aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZH0pOwotICAgIGlmICghYWRkcmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNlLmVycm9yKCkpOwotICAgIHJldHVybiB7eyAqdG9rZW4s
IHsgKmFkZHJlc3NTcGFjZSB9LCBXVEY6Om51bGxvcHQgfX07CisgICAgYXV0byBhZGRyZXNzU3Bh
Y2VUb2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExl
eGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3Vw
LCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9r
ZW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5l
cnJvcigpKTsKKyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3Bh
Y2U7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpS
ZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2Ug
PSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFk
ZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91
cDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoK
KyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6
OlRocmVhZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJp
bmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHt7ICp0b2tlbiwgeyBhZGRyZXNzU3BhY2Ug
fSwgV1RGOjpudWxsb3B0IH19OwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VU
eXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0g
ICAgYXV0byBhZGRyZXNzU3BhY2UgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6
OkNvbnN0YW50LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBl
OjpUaHJlYWRncm91cCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFk
ZHJlc3NTcGFjZSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFj
ZS5lcnJvcigpKTsKK2F1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0
byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6
Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRk
cmVzc1NwYWNlVG9rZW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNz
U3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFj
ZSBhZGRyZXNzU3BhY2U7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgewor
ICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1Nw
YWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBh
ZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6
CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpUaHJlYWRncm91cDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5
cGU6OlRocmVhZDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5
cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICBpZiAoIW5hbWUpCiAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOwpAQCAtNDcxLDEyICs1
MzIsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnIKICAgICBpZiAoIXR5cGVBcmd1bWVudHMp
CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkp
OwogCi0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNv
bnN0IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZd
KGNvbnN0IFR5cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVf
cHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2
aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3Rh
cjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+
KExleGVyOjpUb2tlbih0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2Ut
PnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91
cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NT
cGFjZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4
ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RG
TW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNx
dWFyZUJyYWNrZXQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFy
cmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdURk1v
dmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAg
ICAgZGVmYXVsdDoKQEAgLTQ4OCw3ICs1NDksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNz
U3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgog
ICAgIGF1dG8gZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQgPSBwYXJzZVR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCgpOwogICAgIGlmICghZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQpCiAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZC5lcnJv
cigpKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKCphZGRyZXNzU3BhY2UpLCBu
YW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFt
ZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAg
cmVzdWx0ID0gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3Vm
Zml4QWJicmV2aWF0ZWQsIFdURk1vdmUocmVzdWx0KSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgYXV0byB0eXBlU3VmZml4QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBl
Y3RlZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewpAQCAtNTAzLDcgKzU2
NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBh
cnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBp
ZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJv
cigpKTsKQEAgLTUxNCwxMiArNTc1LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NT
cGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICBp
ZiAoIXR5cGVBcmd1bWVudHMpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBl
QXJndW1lbnRzLmVycm9yKCkpOwogCi0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5v
bkFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3Vz
KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBl
RnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZp
YXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkg
ewogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRk
cmVzc1NwYWNlLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVy
OjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2Vu
KHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRl
ZC5hZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykp
OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwog
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRv
a2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAq
dHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoK
QEAgLTUyOCw3ICs1ODksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBl
KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gcmVzdWx0ID0gc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
VHlwZVJlZmVyZW5jZT4oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICAgYXV0byB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBl
Y3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewogICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCk7CkBAIC01NDIsMTQgKzYw
MywxNCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gewotICAgIGF1dG8gdHlwZSA9IGJhY2t0cmFja2luZ1Nj
b3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsK
K2F1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2Nv
cGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsm
XSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwog
ICAgIGlmICh0eXBlKQogICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIHR5cGUgPSBiYWNrdHJh
Y2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+Pihb
Jl0oKSB7CisgICAgdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBw
YXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKQEAgLTg0
Nyw3ICs5MDgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAt
PiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghbmFtZSkKICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB0eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiB0eXBlOwogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29s
b24pKSB7CiAgICAgICAgIGF1dG8gcGFyc2VkVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICBp
ZiAoIXBhcnNlZFR5cGUpCkBAIC04NjMsMjEgKzkyNCwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VF
bnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbgogICAgIGlmICghZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikKICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0RW51bWVyYXRpb25NZW1iZXIuZXJyb3IoKSk7CiAKLSAgICBB
U1Q6OkVudW1lcmF0aW9uTWVtYmVycyBtZW1iZXJzOwotICAgIG1lbWJlcnMuYXBwZW5kKFdURk1v
dmUoKmZpcnN0RW51bWVyYXRpb25NZW1iZXIpKTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiByZXN1bHQoV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygp
LCBXVEZNb3ZlKHR5cGUpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUo
KmZpcnN0RW51bWVyYXRpb25NZW1iZXIpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJl
dHVybiBmYWlsKFN0cmluZygiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9r
ZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIG1lbWJlciA9IHBhcnNlRW51bWVyYXRp
b25NZW1iZXIoKTsKICAgICAgICAgaWYgKCFtZW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4obWVtYmVyLmVycm9yKCkpOwotICAgICAgICBtZW1iZXJzLmFwcGVuZChX
VEZNb3ZlKCptZW1iZXIpKTsKKyAgICAgICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgq
bWVtYmVyKSk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWls
KFN0cmluZygiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7CiAgICAgfQogCiAgICAgYXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNv
bnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQpOwogICAgIGlm
ICghcmlnaHRDdXJseUJyYWNrZXQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihy
aWdodEN1cmx5QnJhY2tldC5lcnJvcigpKTsKIAotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCks
IFdURk1vdmUodHlwZSksIFdURk1vdmUobWVtYmVycykpOworICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbk1lbWJlciwgRXJyb3I+IHsKQEAgLTk4MSw3ICsxMDQ2LDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlQXR0cmlidXRlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkF0
dHJpYnV0ZUJsb2NrLCBFcnJvcj4gewogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAK
LWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVy
LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygp
OwogICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3Jp
Z2luLmVycm9yKCkpOwpAQCAtOTkyLDcgKzEwNTcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJh
bWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICBpZiAoIXR5
cGUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0g
ICAgT3B0aW9uYWw8U3RyaW5nPiBuYW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhdXRv
IHRva2VuID0gdHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpKQogICAgICAg
ICBuYW1lID0gdG9rZW4tPnN0cmluZ1ZpZXcudG9TdHJpbmcoKTsKIApAQCAtMTAwMCwxOCArMTA2
NSwxOCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBh
cmFtZXRlciwgRXJyb3I+IHsKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMo
KTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVy
KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyks
IFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIG51bGxw
dHIpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4p
LCBXVEZNb3ZlKHF1YWxpZmllcnMpLCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RG
OjpudWxsb3B0KTsKKyAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUo
Km9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5h
bWUpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJh
bWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4geworYXV0byBQYXJz
ZXI6OnBhcnNlUGFyYW1ldGVycygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnMsIEVycm9yPiB7CiAgICAgYXV0byBsZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhl
cjo6VG9rZW46OlR5cGU6OkxlZnRQYXJlbnRoZXNpcyk7CiAgICAgaWYgKCFsZWZ0UGFyZW50aGVz
aXMpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJy
b3IoKSk7CiAKLSAgICBBU1Q6OlBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2Vu
OjpUeXBlOjpSaWdodFBhcmVudGhlc2lzKSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1l
dGVycyk7CiAKQEAgLTExNDksMTAgKzEyMTQsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0
b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmEK
ICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFz
ZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5l
cnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3Zl
KCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygiT3Bl
cmF0b3IgQ2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJh
bWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92
ZSgqdHlwZSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKICAgICB9
CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiks
IHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJPcGVyYXRvciBDYXN0
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92
ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIm9w
ZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9u
RGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9y
PiB7CkBAIC0xNDQzLDcgKzE1MDgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VEb1doaWxlTG9vcCgp
IC0+IEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiB7CiAgICAgcmV0dXJuIEFTVDo6
RG9XaGlsZUxvb3AoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoKmNv
bmRpdGlvbmFsKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24o
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+IEV4cGVj
dGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHsKICAgICBhdXRvIG9yaWdpbiA9
IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTE0ODgsNyArMTU1Myw3IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uc1N0CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4odHlwZS5lcnJvcigpKTsKIAotICAgIGF1dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uID0g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+KCgqdHlw
ZSktPmNsb25lKCkpKTsKKyAgICBhdXRvIGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICBpZiAoIWZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0
VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKIApAQCAtMTQ5Niw3ICsxNTYxLDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbikpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpU
eXBlOjpDb21tYSkpIHsKLSAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+KCgqdHlwZSktPmNs
b25lKCkpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOwogICAgICAgICBpZiAoIXZhcmlhYmxlRGVj
bGFyYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFyaWFibGVE
ZWNsYXJhdGlvbi5lcnJvcigpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp2YXJp
YWJsZURlY2xhcmF0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCBkYTNlMDZiMDFlNC4uODAxMzkxNDk4MDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaApA
QCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNM
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMQXJyYXlSZWZl
cmVuY2VUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKICNpbmNsdWRlICJXSExT
TEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCkBAIC02OCw3ICs2Nyw2IEBACiAjaW5jbHVkZSAiV0hM
U0xOb2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgogI2luY2x1ZGUgIldITFNM
TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xQYXJhbWV0ZXIu
aCIKICNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFt
LmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKQEAgLTE1NCwx
MyArMTUyLDEzIEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeEFiYnJldmlhdGVk
LCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKTsKICAgICBzdHJ1Y3QgVHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkIHsKICAgICAgICAgTGV4ZXI6OlRva2VuIHRva2VuOwotICAgICAg
ICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IGFkZHJlc3NTcGFjZTsKKyAgICAgICAgT3B0aW9uYWw8
QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKICAgICAgICAg
T3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRzOwogICAgIH07CiAgICAgRXhwZWN0ZWQ8VHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHBh
cnNlQWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZVR5cGUoKTsKKyAgICBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZUFkZHJl
c3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZVR5cGUoKTsKICAg
ICBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJvcj4gcGFyc2VUeXBlRGVmaW5pdGlv
bigpOwogICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGljLCBFcnJvcj4gcGFyc2VCdWls
dEluU2VtYW50aWMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMsIEVycm9y
PiBwYXJzZVJlc291cmNlU2VtYW50aWMoKTsKQEAgLTE3NSw4ICsxNzMsOCBAQCBwcml2YXRlOgog
ICAgIEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VOYXRp
dmVUeXBlRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6Ok51bVRocmVhZHNGdW5jdGlv
bkF0dHJpYnV0ZSwgRXJyb3I+IHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKCk7CiAg
ICAgRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+IHBhcnNlQXR0cmlidXRlQmxv
Y2soKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHBhcnNlUGFyYW1ldGVy
KCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXJz
KCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VQ
YXJhbWV0ZXIoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zLCBFcnJv
cj4gcGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uLCBFcnJvcj4gcGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNsYXJhdGlvbigpOwogICAgIEV4
cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlUmVndWxhckZ1bmN0
aW9uRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24s
IEVycm9yPiBwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpOwpAQCAtMTkyLDcgKzE5
MCw3IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJvcj4gcGFyc2VG
b3JMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVycm9yPiBwYXJzZVdoaWxl
TG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiBwYXJzZURvV2hp
bGVMb29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYpOwor
ICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlVmFyaWFi
bGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJik7CiAgICAg
RXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJyb3I+IHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5kZXggMGVi
NjRkZWNkNGQuLjk0NmZiMjMxYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTI4LDEwICsyOCwxNiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMUHJlcGFyZS5oIgogCisjaW5jbHVkZSAi
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0u
aCIKKyNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hM
U0xTdGFuZGFyZExpYnJhcnkuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCisj
aW5jbHVkZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKyNpbmNsdWRl
ICJXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01MCw3ICs1NiwxOSBAQCBPcHRpb25hbDxQcmVwYXJhdGlvblJlc3VsdD4gcHJl
cGFyZShTdHJpbmdWaWV3IHNvdXJjZSkKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0pOworICAg
IE5hbWVSZXNvbHZlciBuYW1lUmVzb2x2ZXIocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBp
ZiAoIXJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWNoZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3Jh
bSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgc3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMo
cHJvZ3JhbSk7CisgICAgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgocHJvZ3JhbSk7Cisg
ICAgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhwcm9ncmFtKTsKKyAgICBpZiAoIWNoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IGlmICghcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHJldHVybiBQcmVwYXJhdGlvblJlc3Vs
dCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcm9ncmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByb2dyYW0uaAppbmRleCA1NjMwZmU2OWVlNC4uNjBlZTQ3OTAxNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCkBAIC0yOSw2
ICsyOSw4IEBACiAKICNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgogI2lu
Y2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5z
aWNzLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgogI2luY2x1ZGUgIldITFNMTmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xh
cmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCkBAIC00NCw0
NSArNDYsNjQgQEAgcHVibGljOgogICAgIFByb2dyYW0oKSA9IGRlZmF1bHQ7CiAgICAgUHJvZ3Jh
bShQcm9ncmFtJiYpID0gZGVmYXVsdDsKIAotICAgIHZvaWQgYXBwZW5kKEFTVDo6VHlwZURlZmlu
aXRpb24mJiB0eXBlRGVmaW5pdGlvbikKKyAgICBib29sIGFwcGVuZChBU1Q6OlR5cGVEZWZpbml0
aW9uJiYgdHlwZURlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX3R5cGVEZWZpbml0aW9ucy5h
cHBlbmQoV1RGTW92ZSh0eXBlRGVmaW5pdGlvbikpOworICAgICAgICBtX3R5cGVEZWZpbml0aW9u
cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVEZWZpbml0aW9uPihXVEZNb3ZlKHR5
cGVEZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fdHlw
ZURlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVuZChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQogICAgIHsKLSAg
ICAgICAgbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShzdHJ1Y3R1cmVEZWZp
bml0aW9uKSk7CisgICAgICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFr
ZV91bmlxdWU8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihXVEZNb3ZlKHN0cnVjdHVyZURlZmlu
aXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9zdHJ1Y3R1cmVE
ZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OkVudW1lcmF0
aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5k
KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogICAg
IHsKLSAgICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKGVudW1l
cmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBw
ZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KFdURk1vdmUo
ZW51bWVyYXRpb25EZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5h
ZGQoKm1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFw
cGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9uRGVmaW5pdGlvbikKKworICAg
IGJvb2wgYXBwZW5kKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9u
KQogICAgIHsKLSAgICAgICAgbV9mdW5jdGlvbkRlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKGZ1
bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBtX2Z1bmN0aW9uRGVmaW5pdGlvbnMuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KFdURk1vdmUoZnVuY3Rp
b25EZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fZnVu
Y3Rpb25EZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQorCisg
ICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbikKICAgICB7Ci0gICAgICAgIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbnMuYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAg
ICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKSkpOworICAgICAgICBtX2ludHJpbnNpY3MuYWRkKCptX25hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zLmxhc3QoKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9u
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVu
ZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKKwor
ICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKQogICAgIHsKLSAgICAgICAgbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmFwcGVu
ZChXVEZNb3ZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworICAgICAgICBtX25hdGl2ZVR5cGVE
ZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KFdURk1vdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkpOworICAgICAgICBtX2ludHJp
bnNpY3MuYWRkKCptX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMubGFzdCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMubGFzdCgpKTsK
ICAgICB9CiAKLSAgICBWZWN0b3I8QVNUOjpUeXBlRGVmaW5pdGlvbj4mIHR5cGVEZWZpbml0aW9u
cygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbj4mIHN0cnVjdHVyZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9zdHJ1Y3R1
cmVEZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlv
bnM7IH0KLSAgICBWZWN0b3I8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+JiBmdW5jdGlvbkRlZmlu
aXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlZmluaXRpb25zOyB9Ci0gICAgVmVjdG9yPEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25z
KCkgeyByZXR1cm4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsgfQotICAgIFZlY3RvcjxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSB7IHJl
dHVybiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7IH0KKyAgICBOYW1lQ29udGV4dCYgbmFtZUNv
bnRleHQoKSB7IHJldHVybiBtX25hbWVDb250ZXh0OyB9CisgICAgSW50cmluc2ljcyYgaW50cmlu
c2ljcygpIHsgcmV0dXJuIG1faW50cmluc2ljczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlRGVmaW5pdGlvbj4+JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5
cGVEZWZpbml0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uPj4mIHN0cnVjdHVyZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9zdHJ1Y3R1
cmVEZWZpbml0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+PiYgZW51bWVyYXRpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51
bWVyYXRpb25EZWZpbml0aW9uczsgfQorICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIHsgcmV0
dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQorICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPj4mIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsg
fQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uPj4mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+PiYgbmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1f
bmF0aXZlVHlwZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxBU1Q6OlR5
cGVEZWZpbml0aW9uPiBtX3R5cGVEZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uPiBtX3N0cnVjdHVyZURlZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbj4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOwotICAgIFZlY3Rv
cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4gbV9mdW5jdGlvbkRlZmluaXRpb25zOwotICAgIFZl
Y3RvcjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IG1fbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPiBtX25hdGl2
ZVR5cGVEZWNsYXJhdGlvbnM7CisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKKyAgICBJ
bnRyaW5zaWNzIG1faW50cmluc2ljczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
VHlwZURlZmluaXRpb24+PiBtX3R5cGVEZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+
IG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uPj4gbV9mdW5jdGlvbkRlZmluaXRpb25zOworICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPj4gbV9uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uPj4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZWN1cnNpdmVUeXBlQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hMGQxOGQ4Nzk3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaApAQCAt
MCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
UmVjdXJzaXZlVHlwZUNoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgflJl
Y3Vyc2l2ZVR5cGVDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5
cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV90eXBlcy5hZGQoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KSB7CisgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVEZWZpbml0aW9u
KTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZURlZmluaXRp
b24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0
aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgmc3RydWN0dXJl
RGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAg
ICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKworICAgICAgICBh
dXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZ0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3Vt
ZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCisgICAgICAgICAgICBWaXNpdG9y
Ojp2aXNpdCh0eXBlQXJndW1lbnQpOworICAgICAgICB2aXNpdE5hbWVkVHlwZSgqdHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5y
ZW1vdmUoJnR5cGVSZWZlcmVuY2UpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1
Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJikgb3Zl
cnJpZGUKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3I7
IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1fZXJyb3IgeyBmYWxzZSB9OworICAgIEhhc2hTZXQ8
QVNUOjpUeXBlKj4gbV90eXBlczsKK307CisKK2lubGluZSBib29sIGNoZWNrUmVjdXJzaXZlVHlw
ZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBSZWN1cnNpdmVUeXBlQ2hlY2tlciByZWN1cnNp
dmVUeXBlQ2hlY2tlcjsKKyAgICByZWN1cnNpdmVUeXBlQ2hlY2tlci5WaXNpdG9yOjp2aXNpdChw
cm9ncmFtKTsKKyAgICByZXR1cm4gcmVjdXJzaXZlVHlwZUNoZWNrZXIuZXJyb3IoKTsKK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgK
c2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVy
bG9hZEltcGwuaAppbmRleCBlZjYxZWQxMjYxOS4uNTAyYmE5MjQ4N2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFub255bW91c1Zhcmlh
YmxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaApAQCAtMjcsMzMgKzI3LDI2IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNM
VmFsdWUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNM
SW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1uYW1lc3BhY2UgQVNUIHsKLQotY2xhc3MgQW5v
bnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAg
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCi0gICAg
ICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgIHsKK2lubGluZSBBU1Q6Ok5hbWVk
VHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYgcG9zc2libGVUeXBlcywgQVNUOjpUeXBlQXJndW1lbnRz
JiB0eXBlQXJndW1lbnRzKQoreworICAgIEFTVDo6TmFtZWRUeXBlKiByZXN1bHQgPSBudWxscHRy
OworICAgIGZvciAoYXV0byYgcG9zc2libGVUeXBlIDogcG9zc2libGVUeXBlcykgeworICAgICAg
ICBpZiAoaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMocG9zc2libGVUeXBlLCB0eXBlQXJndW1l
bnRzKSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlw
ZSY+KHBvc3NpYmxlVHlwZSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICB2aXJ0dWFsIH5Bbm9u
eW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKCkgPSBkZWZhdWx0OwotCi0gICAgQW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbihjb25zdCBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJikgPSBk
ZWxldGU7Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbihBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKLQotICAgIExleGVyOjpUb2tlbiBvcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX29yaWdpbjsgfQotCi1wcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKLX07Ci0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9w
ZXJhdG9yTGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmFkOTEwZmZiZDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxl
bmd0aC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJX
SExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgRmluZEFycmF5VHlwZXMgOiBwdWJs
aWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBcnJheVR5cGVzKCkgPSBkZWZhdWx0Owor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgbV9hcnJheVR5cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAgICAgICBWaXNp
dG9yOjp2aXNpdChhcnJheVR5cGUpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6QXJyYXlUeXBlPj4mJiB0YWtlQXJyYXlUeXBlcygpCisgICAgeworICAg
ICAgICByZXR1cm4gV1RGTW92ZShtX2FycmF5VHlwZXMpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+IG1fYXJyYXlU
eXBlczsKK307CisKK2lubGluZSB2b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFBy
b2dyYW0mIHByb2dyYW0pCit7CisgICAgRmluZEFycmF5VHlwZXMgZmluZEFycmF5VHlwZXM7Cisg
ICAgZmluZEFycmF5VHlwZXMuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBhcnJh
eVR5cGVzID0gZmluZEFycmF5VHlwZXMudGFrZUFycmF5VHlwZXMoKTsKKworICAgIGZvciAoYXV0
byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZh
cmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQo
KS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSks
IHByb2dyYW0uaW50cmluc2ljcygpLnVpbnRUeXBlKCkpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0
aCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5iZjY3YjM2OWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oCkBA
IC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNp
dG9yLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBbGxUeXBlcyA6IHB1YmxpYyBWaXNpdG9y
IHsKK3B1YmxpYzoKKyAgICB+RmluZEFsbFR5cGVzKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2
aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChwb2ludGVyVHlwZSk7CisgICAgICAgIFZpc2l0b3I6
OnZpc2l0KHBvaW50ZXJUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICAgICAgVmlz
aXRvcjo6dmlzaXQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3Vu
bmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJy
YXlUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25h
bWVkVHlwZXMuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIFZpc2l0b3I6
OnZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOwor
ICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbik7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpVbm5hbWVkVHlwZT4+JiYgdGFrZVVubmFtZWRUeXBlcygpCisgICAgeworICAgICAgICByZXR1
cm4gV1RGTW92ZShtX3VubmFtZWRUeXBlcyk7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYmIHRha2VOYW1lZFR5cGVzKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbmFtZWRUeXBlcyk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiBt
X3VubmFtZWRUeXBlczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4+IG1fbmFtZWRUeXBlczsKK307CisKK2lubGluZSB2b2lkIHN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5
cGVzOworICAgIGZpbmRBbGxUeXBlcy5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKKyAgICBhdXRv
IG1fdW5uYW1lZFR5cGVzID0gZmluZEFsbFR5cGVzLnRha2VVbm5hbWVkVHlwZXMoKTsKKyAgICBh
dXRvIG1fbmFtZWRUeXBlcyA9IGZpbmRBbGxUeXBlcy50YWtlTmFtZWRUeXBlcygpOworCisgICAg
Zm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IG1fdW5uYW1lZFR5cGVzKSB7CisgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5h
bWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5n
ZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihMZXhlcjo6VG9rZW4odW5uYW1l
ZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVs
bG9wdCwgZmFsc2UpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1
Y3RvcikpOworCisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0
Q29uc3RydWN0b3IoTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNU
OjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25l
KCksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOworICAgIH0K
KworICAgIGZvciAoYXV0byYgbmFtZWRUeXBlIDogbV9uYW1lZFR5cGVzKSB7CisgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihu
YW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1l
ZFR5cGUuZ2V0KCkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihMZXhlcjo6VG9rZW4obmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9y
aWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgZmFsc2UpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3Rv
cikpOworCisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29u
c3RydWN0b3IoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSksIFN0
cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICBw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOworICAgIH0KK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwMzI4NzZm
ZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaApAQCAtMCwwICsxLDgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworaW5saW5lIHZvaWQg
c3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAg
Zm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVm
aW5pdGlvbnMoKSkgeworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1l
cmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUo
dmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihl
bnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLmJvb2xUeXBl
KCkpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICBw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhl
cjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRl
ZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFt
ZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCku
Y2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvci52YWx1ZSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAg
ICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikp
OworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1l
cmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24t
PnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7
CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAq
ZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwg
ZmFsc2UpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM3ZDdhOTA0OTk4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3Ry
dWN0dXJlQWNjZXNzb3JzLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK2lubGluZSB2b2lkIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmlu
aXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi0+c3RydWN0dXJlRWxl
bWVudHMoKSkgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6
IG9wZXJhdG9yLmZpZWxkCisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
IHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2lu
KCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURlZmluaXRpb24pLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgU3Ry
aW5nOjpmb3JtYXQoIm9wZXJhdG9yLiVzIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgp
LmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAg
ICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ly8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9CisgICAgICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1
cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IG51bGxwdHIpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24xKSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nOjpmb3JtYXQo
Im9wZXJhdG9yLiVzPSIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQK
KyAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24geworICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gc3RkOjptYWtlX3VuaXF1
ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCBXVEZNb3ZlKGFyZ3VtZW50VHlwZSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBT
dHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkudXRm
OCgpLmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVm
ZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFudCkpOworICAgICAgICAgICAgcHJvZ3Jh
bS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRl
dmljZSkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZl
cmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwKSk7CisgICAgICAgICAgICBwcm9n
cmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKaW5k
ZXggNTE2ODU2ZTQxZDAuLjVmMTkwM2UwYTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaApAQCAtMjgsNyArMjgsNiBAQAogI2lm
IEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKLSNpbmNsdWRlICJX
SExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTEFycmF5
UmVmZXJlbmNlVHlwZS5oIgogI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAi
V0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgpAQCAtNjgsNyArNjcsNiBAQAogI2luY2x1ZGUg
IldITFNMTm9kZS5oIgogI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKICNpbmNsdWRlICJX
SExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMUGFyYW1l
dGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgogI2luY2x1ZGUgIldITFNMUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKQEAg
LTEwMyw0MSArMTAxLDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBXSExTTCB7
CiAKIGNsYXNzIFZpc2l0b3IgewotICAgIH5WaXNpdG9yKCkgPSBkZWZhdWx0OworcHVibGljOgor
ICAgIHZpcnR1YWwgflZpc2l0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICB7CiAgICAgICAgIGZvciAoYXV0byYgdHlwZURlZmlu
aXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQodHlw
ZURlZmluaXRpb24pOworICAgICAgICAgICAgdmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKICAgICAg
ICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZp
bml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAg
ICAgICAgICB2aXNpdCgqc3RydWN0dXJlRGVmaW5pdGlvbik7CiAgICAgICAgIGZvciAoYXV0byYg
ZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkp
Ci0gICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICAgICAg
dmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CiAgICAgICAgIGZvciAoYXV0byYgZnVuY3Rp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCi0gICAgICAgICAg
ICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICAgICAgdmlzaXQoKmZ1bmN0aW9u
RGVmaW5pdGlvbik7CiAgICAgICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZp
c2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICAgICAgdmlzaXQoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKQotICAgICAgICAgICAg
dmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgIHZpc2l0KCpuYXRpdmVU
eXBlRGVjbGFyYXRpb24pOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXRUeXBlKEFTVDo6VHlwZSYg
dHlwZSkKKyAgICB2b2lkIHZpc2l0VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUpCiAgICAgewotICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSkK
LSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpOwot
ICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih0eXBlKSkKLSAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHR5cGUpKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHR5cGUpKTsKKyAgICAgICAgaWYgKGlz
PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpOworICAgICAgICBlbHNlIGlm
IChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICBlbHNlIGlm
IChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSk7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih0eXBl
KSk7Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwor
ICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAg
ICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRUeXBl
JiBuYW1lZFR5cGUpCisgICAgeworICAgICAgICBpZiAoaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4o
bmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRp
b24+KG5hbWVkVHlwZSkpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlN0cnVj
dHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSkpOworICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KG5hbWVkVHlwZSkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQogICAgIHsKLSAg
ICAgICAgdmlzaXRUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAgIHZpc2l0VW5u
YW1lZFR5cGUodHlwZURlZmluaXRpb24udHlwZSgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQpA
QCAtMTQ4LDcgKzE2MSw3IEBAIGNsYXNzIFZpc2l0b3IgewogCiAgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAg
ICAgewotICAgICAgICB2aXNpdFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7Cisg
ICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7CiAg
ICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmluaXRp
b24uZW51bWVyYXRpb25NZW1iZXJzKCkpCiAgICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1l
bWJlcik7CiAgICAgfQpAQCAtMTc0LDYgKzE4Nyw4IEBAIGNsYXNzIFZpc2l0b3IgewogICAgIHsK
ICAgICAgICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1
bWVudHMoKSkKICAgICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgICAgIGlmICh0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpICYmIGlzPEFTVDo6VHlwZURlZmluaXRpb24+KCp0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgIHZpc2l0VW5uYW1lZFR5
cGUoZG93bmNhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkpLnR5cGUoKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UG9p
bnRlclR5cGUmIHBvaW50ZXJUeXBlKQpAQCAtMTg4LDEyICsyMDMsMTIgQEAgY2xhc3MgVmlzaXRv
ciB7CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkK
ICAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShhcnJheVR5cGUudHlwZSgpKTsKKyAgICAgICAgdmlz
aXRVbm5hbWVkVHlwZShhcnJheVR5cGUudHlwZSgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQogICAgIHsK
LSAgICAgICAgdmlzaXRUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKKyAgICAgICAgdmlz
aXRVbm5hbWVkVHlwZShzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CiAgICAgICAgIGlmIChzdHJ1
Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpCiAgICAgICAgICAgICB2aXNpdCgqc3RydWN0dXJlRWxl
bWVudC5zZW1hbnRpYygpKTsKICAgICB9CkBAIC0yMDcsNyArMjIyLDcgQEAgY2xhc3MgVmlzaXRv
ciB7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVu
Y3Rpb25EZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRp
b24uYXR0cmlidXRlQmxvY2soKSk7Ci0gICAgICAgIHZpc2l0VHlwZShmdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSk7CisgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoZnVuY3Rpb25EZWNsYXJhdGlv
bi50eXBlKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpKQogICAgICAgICAgICAgdmlzaXQocGFyYW1ldGVyKTsKICAgICAg
ICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKQEAgLTIyNSw3ICsyNDAsNyBA
QCBjbGFzcyBWaXNpdG9yIHsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5j
ZVR5cGUmIHJlZmVyZW5jZVR5cGUpCiAgICAgewotICAgICAgICB2aXNpdFR5cGUocmVmZXJlbmNl
VHlwZS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgdmlzaXRVbm5hbWVkVHlwZShyZWZlcmVuY2VU
eXBlLmVsZW1lbnRUeXBlKCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlNlbWFudGljJiBzZW1hbnRpYykKQEAgLTI2NCwxMyArMjc5LDYgQEAgY2xhc3MgVmlzaXRvciB7
CiAgICAgICAgICAgICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7CiAgICAgfQogCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6UGFyYW1ldGVyJiBwYXJhbWV0ZXIpCi0gICAgewotICAgICAg
ICB2aXNpdFR5cGUocGFyYW1ldGVyLnR5cGUoKSk7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXIuc2Vt
YW50aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpwYXJhbWV0ZXIuc2VtYW50aWMoKSk7Ci0gICAg
fQotCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJikKICAgICB7
CiAgICAgfQpAQCAtNDAyLDggKzQxMCwxMCBAQCBjbGFzcyBWaXNpdG9yIHsKICAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSk7
CiAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKQogICAg
ICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwot
ICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRvdEV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEb3RF
eHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6SW5kZXhF
eHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
SW5kZXhFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCiAgICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsK
ICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
CkBAIC00MTYsNiArNDI2LDIyIEBAIGNsYXNzIFZpc2l0b3IgewogICAgICAgICB9CiAgICAgfQog
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lv
bikKKyAgICB7CisgICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJj4oZG90RXhwcmVzc2lvbikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQorICAgIHsKKyAgICAg
ICAgdmlzaXQoaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICAgICAgdmlz
aXQoc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJl
c3Npb24pKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mIGV4cHJlc3Npb24pCisgICAgeworICAgICAgICB2aXNpdChleHByZXNz
aW9uLmJhc2UoKSk7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKICAg
ICB7CiAgICAgICAgIHZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVs
RXhwcmVzc2lvbigpKTsKQEAgLTQ4NSw3ICs1MTEsNyBAQCBjbGFzcyBWaXNpdG9yIHsKIAogICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVj
bGFyYXRpb24pCiAgICAgewotICAgICAgICB2aXNpdFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50
eXBlKCkpOworICAgICAgICB2aXNpdFVubmFtZWRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpKTsKICAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKICAgICAg
ICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpOwogICAgICAgICBp
ZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQpAQCAtNTM2LDExICs1NjIsNiBA
QCBjbGFzcyBWaXNpdG9yIHsKICAgICAgICAgdmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAg
IHZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgIH0KLQogICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24pCiAgICAgewogICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmxWYWx1ZSgpKTsKQEAgLTU2MCwxMCArNTgxLDYgQEAgY2xhc3MgVmlzaXRvciB7
CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKQogICAgIHsK
ICAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uJikKLSAgICB7Ci0gICAgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAzYzBl
MzY0NzA1NC4uMTQ2NGViMzdiN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMDYsNyArMzA2LDcgQEAg
TW9kdWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAotTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lUmVzb2x2ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNp
Y3MuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVBZGFwdGVyLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDA3YzE2ZWYxNzc1Li4zYzEzYTg2N2ZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQwMyw5ICs2NDAzLDIwIEBA
CiAJCTFDMjRFRUE3MUM3MkE3QjQwMDgwRjhGQyAvKiBKU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTRm9udEZhY2VTZXQuaDsgcGF0aCA9IERlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQkxQzI2NDk3OTBEN0UyNDhBMDBCRDEwRjIgLyogRG9jdW1lbnRMb2FkZXJN
YWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2Fk
ZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzMyNDkxMDFDNkQ2QTNC
MDA3RURCMzIgLyogRm9udFZhcmlhbnRCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvbnRWYXJpYW50QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMzMyNzZDMjFDRURBNDIwMDBEQzlGMiAvKiBXSExTTEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2RTIxQ0VGRjc0MDAw
REM5RjIgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMz
Mjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMSW5mZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3
MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xOYW1lZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzIyMUNG
MEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xV
bm5hbWVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NDIxRDVB
NzA2MDAwREM5RjIgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDMzMyNzc1MjFENUIwRjgwMDBEQzlGMiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzYyMUQ1QzA3RTAwMERDOUYyIC8qIFdI
TFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5
bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUMzMzI3NzcyMUQ1Q0E4MzAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9u
RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc4MjFENUNFRDQw
MDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUMzOTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNv
cmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEUxQzZF
N0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvbnRGYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2
NjI2MEYxQzZFN0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRGYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
N0NDMjFEMjFDREUxOTgwMEMxRkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMTmFtZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4
MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5
NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMjE0LDYgKzEzMjI1LDkgQEAKIAkJQzExQTlFQ0QyMTQwM0E1QzAwQ0ZCMjBB
IC8qIFN3aXRjaGluZ0dQVUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzExQTlFRDIyMTQwNTc4QjAwQ0ZC
MjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTd2l0Y2hp
bmdHUFVDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMUUxRDIzNTIw
M0RGMTU0MDA1ODQ2NjUgLyogU2NyZWVuUHJvcGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jl
ZW5Qcm9wZXJ0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ0MjFE
QUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJ
bnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ2MjFEQUVF
NkUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hM
U0xJbnRyaW5zaWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDcy
MURCNDM2MzAwQjYwQzI3IC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzIwMTVDMDkxQkU2RkUyQzAwODIyMzg5IC8qIEZvbnRWYXJpYW50QnVpbGRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250VmFyaWFudEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTEyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyMTBFOTEyMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
MjQ1LDcgKzEzMjU5LDYgQEAKIAkJQzIxQkY3MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEQyMUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJl
bmNlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlZmVyZW5jZVR5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEUyMUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3Rh
Z2VJbk91dFNlbWFudGljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGlj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMUJGNzBGMjFDRDg5Q0YwMDIyNzk3
OSAvKiBXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyMUJGNzEwMjFDRDg5RDAwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFy
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzExMjFDRDg5RDEwMDIyNzk3OSAvKiBXSExT
TFR5cGVBcmd1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFR5cGVBcmd1bWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxMjIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hM
U0xTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTdGF0ZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUzLDcgKzEzMjY2LDYgQEAKIAkJQzIxQkY3MTQyMUNE
ODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxNTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xM
b2dpY2FsTm90RXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTExvZ2ljYWxOb3RFeHBy
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzE2MjFDRDg5RDUw
MDIyNzk3OSAvKiBXSExTTENhbGxFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2Fs
bEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIxQkY3MTcyMUNE
ODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1ldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFy
YW1ldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzE4MjFDRDg5RDcw
MDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xEb3RF
eHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzE5MjFDRDg5
RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTd2l0
Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzFBMjFDRDg5RDgw
MDIyNzk3OSAvKiBXSExTTEJyZWFrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQnJlYWsuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzAyLDcgKzEzMzE0LDYgQEAKIAkJQzI4OEM3
MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MjkyMUM4Q0E1
MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFBy
ZXBhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQTIxQzhDQTUw
MDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJlcGFyZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0Eg
LyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVz
b2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQzIxQzhDQ0My
MDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1l
UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkQyMUM5OTFE
QTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMVHlwZUFyZ3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBQjBB
RjQxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udFNlbGVjdGlvbkFsZ29yaXRobS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTMzMiwxMSArMjUzNDMsMjEgQEAKIAkJ
CQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuY3BwICovLAogCQkJCUMy
MUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5oICovLAogCQkJCUMyMUJGNzNB
MjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywKLSAJCQkJQzI4OEM3MjcyMUM4
QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovLAotIAkJCQlDMjg4QzcyOTIxQzhDQTUw
MDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmNwcCAqLywKLSAJCQkJQzI4OEM3MkEyMUM4Q0E1MDAw
MkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovLAotIAkJCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1
Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAotIAkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAy
REY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQlDMjg4QzcyNzIxQzhDNkVGMDAy
REY1Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8sCisJCQkJQzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNB
IC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCisJCQkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8q
IFdITFNMUHJlcGFyZS5oICovLAorCQkJCUMyODhDNzJDMjFDOENDQzIwMDJERjVDQSAvKiBXSExT
TE5hbWVSZXNvbHZlci5oICovLAorCQkJCTFDN0NDMjFEMjFDREUxOTgwMEMxRkEyQyAvKiBXSExT
TE5hbWVDb250ZXh0LmggKi8sCisJCQkJMUMzMzI3NkUyMUNFRkY3NDAwMERDOUYyIC8qIFdITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5oICovLAorCQkJCTFDMzMyNzZGMjFDRjAxMzEwMDBEQzlGMiAv
KiBXSExTTEluZmVyVHlwZXMuaCAqLywKKwkJCQkxQzMzMjc3NDIxRDVBNzA2MDAwREM5RjIgLyog
V0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oICovLAorCQkJCTFDMzMyNzc1MjFENUIwRjgwMDBE
QzlGMiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8sCisJCQkJMUMzMzI3NzYy
MUQ1QzA3RTAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICov
LAorCQkJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5oICovLAorCQkJCTFDMzMyNzc4MjFENUNFRDQwMDBEQzlGMiAvKiBXSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggKi8sCisJCQkJQzIwMTMzNDQyMURBQzA5
NTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5oICovLAorCQkJCUMyMDEzMzQ2MjFEQUVFNkUw
MEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuY3BwICovLAorCQkJCUMyMDEzMzQ3MjFEQjQzNjMw
MEI2MEMyNyAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCAqLywKIAkJCSk7CiAJCQlw
YXRoID0gV0hMU0w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjUzNDQsNyArMjUz
NjUsNiBAQAogCQlDMjFCRjZGMTIxQ0Q4OThEMDAyMjc5NzkgLyogQVNUICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlDMjFCRjcwRjIxQ0Q4OUNGMDAyMjc5
NzkgLyogV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8sCiAJCQkJQzIxQkY3
MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmggKi8sCiAJCQkJ
QzIxQkY3MDkyMUNEODlDQTAwMjI3OTc5IC8qIFdITFNMQXJyYXlUeXBlLmggKi8sCiAJCQkJQzIx
QkY3MzAyMUNEODlFRDAwMjI3OTc5IC8qIFdITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCAqLywK
QEAgLTI1Mzg0LDcgKzI1NDA0LDYgQEAKIAkJCQlDMjFCRjcyNDIxQ0Q4OUUxMDAyMjc5NzkgLyog
V0hMU0xOb2RlLmggKi8sCiAJCQkJQzIxQkY3MDcyMUNEODlDODAwMjI3OTc5IC8qIFdITFNMTnVs
bExpdGVyYWwuaCAqLywKIAkJCQlDMjFCRjcyMTIxQ0Q4OURFMDAyMjc5NzkgLyogV0hMU0xOdW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFCRjcxNzIxQ0Q4OUQ2MDAyMjc5
NzkgLyogV0hMU0xQYXJhbWV0ZXIuaCAqLywKIAkJCQlDMjFCRjcyRjIxQ0Q4OUVDMDAyMjc5Nzkg
LyogV0hMU0xQb2ludGVyVHlwZS5oICovLAogCQkJCUMyMUJGNzJFMjFDRDg5RUEwMDIyNzk3OSAv
KiBXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oICovLAogCQkJCUMyMUJGNzBCMjFDRDg5
Q0MwMDIyNzk3OSAvKiBXSExTTFF1YWxpZmllci5oICovLApAQCAtMjU0MTIsNyArMjU0MzEsMTAg
QEAKIAkJCQlDMjFCRjcxNDIxQ0Q4OUQzMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudC5oICovLAogCQkJCUMyMUJGNzEzMjFDRDg5RDIwMDIyNzk3OSAvKiBXSExT
TFZhcmlhYmxlUmVmZXJlbmNlLmggKi8sCiAJCQkJQzIxQkY3MDQyMUNEODlDNjAwMjI3OTc5IC8q
IFdITFNMV2hpbGVMb29wLmggKi8sCi0gCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBX
SExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJQzI4OEM3MkQyMUM5OTFEQTAwMkRGNUNBIC8q
IFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJCQkxQzMzMjc2QzIxQ0VEQTQyMDAwREM5RjIg
LyogV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLywKKwkJCQkxQzMzMjc3MTIxQ0Yw
QkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLywKKwkJCQkxQzMzMjc3MjIxQ0YwRDJF
MDAwREM5RjIgLyogV0hMU0xVbm5hbWVkVHlwZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBBU1Q7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358169</attachid>
            <date>2019-01-01 00:41:14 -0800</date>
            <delta_ts>2019-01-11 00:24:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>238680</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYTI4NzE0MDRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOSBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAg
IGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7
IH0KKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVu
dHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVy
OjpUb2tlbihtX29yaWdpbiksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRU
eXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7CiB9OwogCkBA
IC03NSw2ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfVU5OQU1FRF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDYWxsRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAppbmRleCA2NGFmNzEzMjk5Yy4uOGIyYmRhZjRiZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENhbGxFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTU0LDkgKzU1LDMxIEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVybiBtX2FyZ3Vt
ZW50czsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB2
b2lkIHNldENhc3REYXRhKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cworICAgIH0KKworICAgIGJvb2wgaGFzT3ZlcmxvYWRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9vdmVybG9hZHMpOyB9CisgICAgdm9pZCBzZXRPdmVybG9hZHMoY29uc3Qg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBv
dmVybG9hZHMpCisgICAgeworICAgICAgICBhc3NlcnQoIWhhc092ZXJsb2FkcygpKTsKKyAgICAg
ICAgbV9vdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorCisgICAgdm9pZCBzZXRGdW5jdGlv
bihGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0KCFtX2Z1bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlvbiA9ICZmdW5jdGlvbkRl
Y2xhcmF0aW9uOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+IG1fYXJndW1lbnRzOworICAgIE9wdGlv
bmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
Pj4gbV9vdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9mdW5jdGlvbiB7IG51
bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXgg
YTM4YjBkNWIzYTEuLmYwNDIwNTMyNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaApAQCAtNzYsMTEgKzc2LDY5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgSW50
ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpOworICAgIH0KKwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpCiAgICAgewogICAgICAgICBX
VEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkgY29uc3QKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoZXMo
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIE9w
dGlvbmFsPGJvb2w+IHJlc3VsdDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICB2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHZhbHVlID0gZmxvYXRMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8TnVsbExpdGVyYWw+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJCb29sZWFuTGl0ZXJhbCA9IFdU
Rjo6Z2V0PEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPT0gb3RoZXJCb29sZWFuTGl0ZXJhbC52
YWx1ZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UpIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3ZhcmlhbnQpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJNZW1iZXJSZWZlcmVuY2UgPSBXVEY6Omdl
dDxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92
YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmY29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSAmb3RoZXJNZW1i
ZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0OworCisgICAgICAgIG90aGVyLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gaW50ZWdlckxpdGVyYWwudmFs
dWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0
ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSBmbG9h
dExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJikgewor
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBCb29sZWFu
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSkpOworCisgICAgICAgIEFTU0VS
VChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgVmFyaWFudDwKICAgICAgICAgSW50ZWdlckxpdGVyYWwsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAppbmRleCAyYzI0YTk4YjJjYS4uMjEwMGQ3Y2E0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UuaApAQCAtMzYsMTAgKzM2LDEyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5h
bWVzcGFjZSBBU1QgewogCi1jbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworCitj
bGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGxlZnQsIFN0
cmluZyYmIHJpZ2h0KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2xlZnQoV1RGTW92
ZShsZWZ0KSkKICAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQogICAgIHsKQEAgLTUw
LDEwICs1MiwzMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlZmF1bHQ7CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgY29uc3QgU3RyaW5nJiBsZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgY29uc3QgU3RyaW5nJiByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHQ7IH0KKworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsK
KyAgICAgICAgcmV0dXJuICptX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIGNvbnN0
IEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsKKyAgICAgICAgcmV0dXJuICpt
X2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1i
ZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAg
ICAgICBtX2VudW1lcmF0aW9uTWVtYmVyID0gJmVudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKwog
cHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbGVmdDsK
ICAgICBTdHJpbmcgbV9yaWdodDsKKyAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiBtX2VudW1l
cmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5o
CmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4cHJlc3Npb24oY29uc3QgRG90
RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Npb24oRG90RXhwcmVzc2lvbiYm
KSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4l
cyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgbV9maWVsZE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nJiBmaWVsZE5hbWUoKSB7IHJl
dHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpZWxkTmFtZTsK
IH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlzRG90RXhwcmVzc2lvbigpKQor
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXggNzk3
MGI1OWU1NGEuLjI0YThkNTlkYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaApAQCAtMjksOCArMjksMTEgQEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25N
ZW1iZXIuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBl
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwxMyArNDIsMTEgQEAgbmFtZXNw
YWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIEVudW1lcmF0aW9uRGVmaW5p
dGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1Ymxp
YyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5
cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJlcnMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RG
TW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgIEVudW1l
cmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0
ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgICAgICA6IE5hbWVkVHlwZShX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUo
dHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdURk1vdmUobWVtYmVycykpCiAgICAgewogICAg
IH0KIApAQCAtNTQsMTQgKzU1LDM1IEBAIHB1YmxpYzoKICAgICBFbnVtZXJhdGlvbkRlZmluaXRp
b24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRp
b25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBU
eXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIEVudW1lcmF0aW9uTWVtYmVycyYg
ZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJzOyB9CisgICAgYm9vbCBpc0Vu
dW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorCisgICAgYm9vbCBh
ZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIpCisgICAgeworICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUoKSwgc3RkOjptYWtlX3VuaXF1ZTxFbnVtZXJh
dGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7CisgICAgICAgIHJldHVybiAhcmVzdWx0Lmlz
TmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXIqIG1lbWJlckJ5TmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9tZW1i
ZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX21lbWJlcnMuZW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxF
bnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9uTWVtYmVycygpCisgICAgeworICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IHJlc3VsdDsK
KyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9tZW1iZXJzKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiBw
cml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Ci0gICAgRW51bWVyYXRpb25NZW1iZXJz
IG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEVudW1lcmF0aW9uTWVtYmVyPj4gbV9t
ZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShFbnVtZXJhdGlvbkRlZmluaXRpb24s
IGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0
aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2UuLjRmMzg1MTk1NTA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIEVudW1l
cmF0aW9uTWVtYmVyKGNvbnN0IEVudW1lcmF0aW9uTWVtYmVyJikgPSBkZWxldGU7CiAgICAgRW51
bWVyYXRpb25NZW1iZXIoRW51bWVyYXRpb25NZW1iZXImJikgPSBkZWZhdWx0OwogCisgICAgU3Ry
aW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8Q29uc3RhbnRFeHBy
ZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5jOWU5NjI5Mzk4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgi
CisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lv
biB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQorICAgICAgICA6
IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fZW51bWVyYXRpb25NZW1i
ZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSA9IGRlZmF1
bHQ7CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXIm
IGVudW1lcmF0aW9uTWVtYmVyKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbk1lbWJlcjsgfQorCitw
cml2YXRlOgorICAgIEVudW1lcmF0aW9uTWVtYmVyJiBtX2VudW1lcmF0aW9uTWVtYmVyOworfTsK
KworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9O
KEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSkK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggZTM2ODM4MzY0NmQuLmE3ODg2ZmJhNmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQ29tbWFFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNEZXJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0TGl0ZXJhbCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5kZXhFeHByZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNhbEV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xvZ2lj
YWxOb3RFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY3LDYgKzY5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Rlcm5hcnlFeHByZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVnZXJMaXRl
cmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJs
ZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJp
dmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRl
Y2xhcmF0aW9uLmgKaW5kZXggN2E3ZTBhMDY1NmMuLjgyMzU2NjZkOTQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xh
cmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRl
ICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1ZGUgIldI
TFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVu
bmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5
LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBDb21wdXRlCiAgICAgfTsKIAotICAgIEZ1bmN0
aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0
dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgUGFyYW1ldGVy
cyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMpCisgICAg
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2Nr
JiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlw
ZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFt
ZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFu
dGljPiYmIHNlbWFudGljKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAg
ICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQogICAgICAg
ICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBAIC02NSwyNiArNjUsMzQgQEAg
cHVibGljOgogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgRnVuY3Rpb25EZWNsYXJhdGlv
biYpID0gZGVsZXRlOwogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlv
biYmKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgQXR0cmlidXRl
QmxvY2smIGF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsgfQotICAg
IEFTVDo6VHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBQYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgQVNUOjpVbm5h
bWVkVHlwZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBBU1Q6OlVubmFt
ZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIGJvb2wgaXNDYXN0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lID09ICJv
cGVyYXRvciBjYXN0IjsgfQorICAgIGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb25zJiBwYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgVmFyaWFibGVEZWNsYXJh
dGlvbnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICBPcHRpb25h
bDxBU1Q6OlNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAKICAg
ICBMZXhlcjo6VG9rZW4mJiB0YWtlT3JpZ2luKCkgeyByZXR1cm4gV1RGTW92ZShtX29yaWdpbik7
IH0KICAgICBBdHRyaWJ1dGVCbG9jayYmIHRha2VBdHRyaWJ1dGVCbG9jaygpIHsgcmV0dXJuIFdU
Rk1vdmUobV9hdHRyaWJ1dGVCbG9jayk7IH0KICAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4m
JiB0YWtlRW50cnlQb2ludFR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2ludFR5cGUp
OyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0YWtlVHlwZSgpIHsgcmV0dXJu
IFdURk1vdmUobV90eXBlKTsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZShtX3R5cGUpOyB9CiAgICAgU3RyaW5nJiYg
dGFrZU5hbWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmFtZSk7IH0KLSAgICBQYXJhbWV0ZXJzJiYg
dGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1ldGVycyk7IH0KKyAgICBW
YXJpYWJsZURlY2xhcmF0aW9ucyYmIHRha2VQYXJhbWV0ZXJzKCkgeyByZXR1cm4gV1RGTW92ZSht
X3BhcmFtZXRlcnMpOyB9CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiB0YWtlU2VtYW50
aWMoKSB7IHJldHVybiBXVEZNb3ZlKG1fc2VtYW50aWMpOyB9CiAKIHByaXZhdGU6CiAgICAgTGV4
ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7
CiAgICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IG1fZW50cnlQb2ludFR5cGU7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5h
bWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMgbV9wYXJhbWV0ZXJzOwogICAgIE9w
dGlvbmFsPEFTVDo6U2VtYW50aWM+IG1fc2VtYW50aWM7CiB9OwogCkBAIC05NCw0ICsxMDIsOSBA
QCBwcml2YXRlOgogCiB9CiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9G
VU5DVElPTl9ERUNMQVJBVElPTihUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpUb1ZhbHVlVHlwZU5h
bWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6OkFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rp
b25EZWZpbml0aW9uLmgKaW5kZXggYTQ5MDdiMGQyOTguLmI2YjdiYTA3N2QzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRl
ZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaApAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAg
RnVuY3Rpb25EZWZpbml0aW9uKGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpID0gZGVsZXRlOwog
ICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihGdW5jdGlvbkRlZmluaXRpb24mJikgPSBkZWZhdWx0Owog
CisgICAgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKwogICAgIEJsb2NrJiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICBi
b29sIHJlc3RyaWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3RyaWN0ZWQ7IH0KIApAQCAtNjQs
NCArNjYsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
RlVOQ1RJT05fREVDTEFSQVRJT04oRnVuY3Rpb25EZWZpbml0aW9uLCBpc0Z1bmN0aW9uRGVmaW5p
dGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKaW5kZXggNmJiNmEw
ZjBkYWIuLjQzZTYwYTEwNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaApAQCAtNDks
NiArNDksMjUgQEAgcHVibGljOgogICAgIEluZGV4RXhwcmVzc2lvbihjb25zdCBJbmRleEV4cHJl
c3Npb24mKSA9IGRlbGV0ZTsKICAgICBJbmRleEV4cHJlc3Npb24oSW5kZXhFeHByZXNzaW9uJiYp
ID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1lKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9yW10iLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc2V0RnVuY3Rp
b25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9w
ZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQorCisgICAg
U3RyaW5nIGFuZEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gU3RyaW5nKCJvcGVyYXRvcltdPSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgIH0KKworICAgIEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbigpIHsgcmV0dXJuICpt
X2luZGV4OyB9CisKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1f
aW5kZXg7CiB9OwpAQCAtNTksNCArNzgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihJbmRleEV4cHJlc3Npb24sIGlzSW5kZXhFeHBy
ZXNzaW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaApzaW1pbGFyaXR5IGluZGV4IDYxJQpy
ZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQ
YXJhbWV0ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMTmFtZWRUeXBlLmgKaW5kZXggOTI1ODZmODY5MWYuLjI0NDdlYzc0ZWUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJh
bWV0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOYW1lZFR5cGUuaApAQCAtMjgsMTEgKzI4LDggQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAj
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCi0jaW5j
bHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMTm9kZS5oIgogI2luY2x1ZGUg
IldITFNMVHlwZS5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQxLDM5ICszOCw0NiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
QVNUIHsKIAotY2xhc3MgUGFyYW1ldGVyIDogcHVibGljIFZhbHVlIHsKK2NsYXNzIE5hbWVkVHlw
ZSA6IHB1YmxpYyBUeXBlIHsKIHB1YmxpYzoKLSAgICBQYXJhbWV0ZXIoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlw
ZT4mJiB0eXBlLCBPcHRpb25hbDxTdHJpbmc+JiYgbmFtZSwgT3B0aW9uYWw8QVNUOjpTZW1hbnRp
Yz4mJiBzZW1hbnRpYykKKyAgICBOYW1lZFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJp
bmcmJiBuYW1lKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAg
LCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKLSAgICAgICAgLCBtX3R5cGUoV1RG
TW92ZSh0eXBlKSkKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBt
X3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFs
IH5QYXJhbWV0ZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+TmFtZWRUeXBlKCkgPSBkZWZh
dWx0OwogCi0gICAgUGFyYW1ldGVyKGNvbnN0IFBhcmFtZXRlciYpID0gZGVsZXRlOwotICAgIFBh
cmFtZXRlcihQYXJhbWV0ZXImJikgPSBkZWZhdWx0OworICAgIE5hbWVkVHlwZShjb25zdCBOYW1l
ZFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOYW1lZFR5cGUoTmFtZWRUeXBlJiYpID0gZGVmYXVsdDsK
IAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9Ci0gICAgT3B0aW9uYWw8QVNU
OjpTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQorICAgIExleGVy
OjpUb2tlbiYgb3JpZ2luKCkgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcmIG5hbWUo
KSB7IHJldHVybiBtX25hbWU7IH0KKworICAgIGJvb2wgaXNOYW1lZFR5cGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzVHlwZURlZmluaXRpb24o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1N0cnVjdHVyZURl
ZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Vu
dW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzTmF0aXZlVHlwZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KworICAgIHZpcnR1YWwgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3QgeyByZXR1cm4gKnRo
aXM7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgUXVhbGlm
aWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBl
OwotICAgIE9wdGlvbmFsPFN0cmluZz4gbV9uYW1lOwotICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50
aWM+IG1fc2VtYW50aWM7CisgICAgU3RyaW5nIG1fbmFtZTsKIH07CiAKLXR5cGVkZWYgVmVjdG9y
PFBhcmFtZXRlcj4gUGFyYW1ldGVyczsKLQogfQogCiB9CiAKIH0KIAorI2RlZmluZSBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNh
dGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6
VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OldITFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0g
XAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1dITFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlwZSgpKQorCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCAwMTBlNmViYTcwMC4u
MjQ0ZTg0MTAxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiBwdWJsaWM6
Ci0gICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0
dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBl
bnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcm
JiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4m
JiBzZW1hbnRpYywgYm9vbCByZXN0cmljdGVkKQorICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2Nr
LCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxlRGVjbGFy
YXRpb25zJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYywg
Ym9vbCByZXN0cmljdGVkKQogICAgICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZShv
cmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50VHlwZSks
IFdURk1vdmUodHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1v
dmUoc2VtYW50aWMpKQogICAgICAgICAsIG1fcmVzdHJpY3RlZChyZXN0cmljdGVkKQogICAgIHsK
QEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
Y29uc3QgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7
CiAKKyAgICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzdHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAtNjAsNCArNjIsNiBAQCBwcml2YXRlOgog
CiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04o
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkp
CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAppbmRleCAz
MjBhYmMzYzQ3NS4uNmVkOThlYzc0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDExICszOCwxMCBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDog
cHVibGljIFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIE5hbWVk
VHlwZSB7CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCi0g
ICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZN
b3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUo
bmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3VtZW50cykp
CiAgICAgewogICAgIH0KQEAgLTUyLDE2ICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlVHlw
ZURlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAg
IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0
OwogCi0gICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1fdHlwZUFy
Z3VtZW50czsgfQorICAgIGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUo
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25h
bWU7IH0KKyAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBl
QXJndW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAg
IFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CiB9OwpA
QCAtNzIsNCArNjgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfTkFNRURfVFlQRShOYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlzTmF0aXZlVHlwZURlY2xh
cmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKaW5kZXggMTUyOTQyNmEyZWQu
LjYzYzIwOTNjNTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKQEAgLTM5LDggKzM5LDggQEAgbmFt
ZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFBvaW50ZXJUeXBlIDogcHVibGljIFJlZmVyZW5jZVR5cGUg
ewogcHVibGljOgotICAgIFBvaW50ZXJUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5n
JiYgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gZWxlbWVudFR5cGUpCi0gICAg
ICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYWRkcmVzc1NwYWNl
KSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IGVsZW1lbnRUeXBlKQorICAgICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmln
aW4pLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAK
QEAgLTQ5LDExICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgUG9pbnRlclR5cGUoY29uc3QgUG9pbnRl
clR5cGUmKSA9IGRlbGV0ZTsKICAgICBQb2ludGVyVHlwZShQb2ludGVyVHlwZSYmKSA9IGRlZmF1
bHQ7CiAKLSAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4o
TGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKGFkZHJlc3NTcGFjZSgpKSwgZWxlbWVudFR5
cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UG9pbnRlclR5
cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgp
LmNsb25lKCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTY1LDYgKzY1LDYgQEAgcHJpdmF0ZToK
IAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoUG9pbnRlclR5cGUsIGlz
UG9pbnRlclR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBF
KFBvaW50ZXJUeXBlLCBpc1BvaW50ZXJUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAppbmRleCBiYTM4YTVjMDFlYS4uZDA1YTcyYzFm
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC01
MSwxMCArNTEsMzAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Byb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1YWwgU3Ry
aW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgYW5kRnVuY3Rpb25O
YW1lKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29uc3QgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVy
bG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3ZlcmxvYWRz
OworICAgIH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRz
KQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAg
ICB9CisKICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gKm1fYmFzZTsgfQogCiBwcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2Jhc2U7CisgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2li
bGVHZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVTZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVB
bmRPdmVybG9hZHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmgKaW5kZXggYTRjMTRjZTFjZjMuLmNkNTU2MzIwZGIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCkBAIC0yNyw3ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1
ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgog
ICAgIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBzdGQ6
OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuKG9yaWdpbikpCiAgICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQot
ICAgICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAgICwgbV9u
ZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9r
ZW4ob3JpZ2luKSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBudWxscHRyKQorICAgICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pLCBRdWFsaWZp
ZXJzKCksIG51bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpCiAgICAgewog
ICAgIH0KIApAQCAtODcsMTUgKzg3LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAg
IEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuICptX2xWYWx1ZTsgfQotICAgIEFub255bW91
c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQot
ICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9u
ZXdWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4g
bV9vbGRWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1
cm4gbV9uZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24mIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsg
cmV0dXJuICptX25ld1ZhbHVlRXhwcmVzc2lvbjsgfQogICAgIEV4cHJlc3Npb24mIHJlc3VsdEV4
cHJlc3Npb24oKSB7IHJldHVybiAqbV9yZXN1bHRFeHByZXNzaW9uOyB9CiAKIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uIG1fbmV3VmFsdWU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX29sZFZhbHVlOwor
ICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXhwcmVzc2lvbj4gbV9uZXdWYWx1ZUV4cHJlc3Npb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
cHJlc3Npb24+IG1fcmVzdWx0RXhwcmVzc2lvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgK
aW5kZXggMjI1N2Y5YmUyNDAuLjRlNjlmNzliOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5o
CkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM3LDExICszNywxOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
QVNUIHsKIAotY2xhc3MgUmVmZXJlbmNlVHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFJlZmVy
ZW5jZVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIFJlZmVyZW5jZVR5
cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUo
b3JpZ2luKSkKLSAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShXVEZNb3ZlKGFkZHJlc3NTcGFjZSkp
CisgICAgZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UgeworICAgICAgICBDb25zdGFudCwKKyAgICAg
ICAgRGV2aWNlLAorICAgICAgICBUaHJlYWRncm91cCwKKyAgICAgICAgVGhyZWFkCisgICAgfTsK
KworICAgIFJlZmVyZW5jZVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBZGRyZXNzU3BhY2Ug
YWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgZWxlbWVudFR5cGUp
CisgICAgICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fYWRk
cmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUo
ZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CkBAIC01MCwxOCArNTcsMTYgQEAgcHVibGljOgog
CiAgICAgUmVmZXJlbmNlVHlwZShjb25zdCBSZWZlcmVuY2VUeXBlJikgPSBkZWxldGU7CiAgICAg
UmVmZXJlbmNlVHlwZShSZWZlcmVuY2VUeXBlJiYpID0gZGVmYXVsdDsKLSAgICAKLSAgICBUeXBl
JiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CiAKLXByb3RlY3RlZDoK
LSAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
OyB9Ci0gICAgY29uc3QgU3RyaW5nJiBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2Fk
ZHJlc3NTcGFjZTsgfQotICAgIGNvbnN0IFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1
cm4gKm1fZWxlbWVudFR5cGU7IH0KKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKyAgICBjb25zdCBVbm5hbWVkVHlw
ZSYgZWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAgIFVu
bmFtZWRUeXBlJiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CiAKIHBy
aXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX2FkZHJlc3NT
cGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBBZGRy
ZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBl
PiBtX2VsZW1lbnRUeXBlOwogfTsKIAogfQpAQCAtNzAsNCArNzUsNiBAQCBwcml2YXRlOgogCiB9
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBFKFJlZmVyZW5jZVR5
cGUsIGlzUmVmZXJlbmNlVHlwZSgpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzViZmM5ZTQy
ODYuLmFjOTMyM2QyNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTEgQEAgcHVibGljOgog
CiAgICAgRXhwcmVzc2lvbiogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAKKyAg
ICB2b2lkIHNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9u
KSB7IG1fZnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAgICBGdW5j
dGlvbkRlZmluaXRpb24qIG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1
cmVEZWZpbml0aW9uLmgKaW5kZXggODdjYzYyZjIzNTYuLmE4Yzk4ZTk5YjRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVE
ZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM5
LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xh
c3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFN0cnVjdHVyZURl
ZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVEZWZp
bml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgU3RydWN0dXJlRWxl
bWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9y
aWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgIDogTmFtZWRU
eXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3N0cnVjdHVy
ZUVsZW1lbnRzKFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMpKQogICAgIHsKICAgICB9CkBAIC01
MywxNyArNTIsMTEgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24oY29uc3QgU3Ry
dWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZURlZmluaXRpb24oU3Ry
dWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJ1Y3R1cmVFbGVtZW50cyYg
c3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CisgICAg
Ym9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KKyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7
IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRv
a2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RydWN0dXJlRWxlbWVudHMg
bV9zdHJ1Y3R1cmVFbGVtZW50czsKIH07CiAKQEAgLTczLDQgKzY2LDYgQEAgcHJpdmF0ZToKIAog
fQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoU3RydWN0dXJlRGVm
aW5pdGlvbiwgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRWxlbWVudC5oCmluZGV4IDE0YmU0MWM3Mjk4Li5hOGNiZjk4ZGY1NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJl
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFN0cnVjdHVyZUVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgQVNUIHsK
IAogY2xhc3MgU3RydWN0dXJlRWxlbWVudCA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKLSAgICBT
dHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxp
ZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIE9wdGlv
bmFsPFNlbWFudGljPiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tl
biYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxVbm5h
bWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4gc2VtYW50
aWMpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVh
bGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5
cGUpKQpAQCAtNTUsMTMgKzU1LDE1IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVFbGVtZW50KGNv
bnN0IFN0cnVjdHVyZUVsZW1lbnQmKSA9IGRlbGV0ZTsKICAgICBTdHJ1Y3R1cmVFbGVtZW50KFN0
cnVjdHVyZUVsZW1lbnQmJikgPSBkZWZhdWx0OwogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJu
ICptX3R5cGU7IH0KKyAgICBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIHsgcmV0dXJuIG1fb3JpZ2lu
OyB9CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50
aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogcHJpdmF0ZToKICAgICBM
ZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPFNlbWFudGlj
PiBtX3NlbWFudGljOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGUuaAppbmRleCBjZjRjYmM4ODc5MC4uNTczYThiYjY4YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5
cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xU
eXBlLmgKQEAgLTQ1LDEyICs0NSw4IEBAIHB1YmxpYzoKICAgICBUeXBlKGNvbnN0IFR5cGUmKSA9
IGRlbGV0ZTsKICAgICBUeXBlKFR5cGUmJikgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBib29s
IGlzVHlwZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAg
IHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzVW5uYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2
YXRlOgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCmluZGV4IDdlNTgwMWUzYjU2Li4xYjhh
ZjQxYzI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCkBAIC0yOCw5ICsyOCwxMSBAQAog
I2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXSExT
TExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAppbmRleCBmNzM2
MjllMjliMS4uNjlhYTIzYTFmYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaApAQCAtMjks
NyArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMTm9k
ZS5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMSArMzksMTAgQEAgbmFtZXNw
YWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFR5cGVEZWZpbml0aW9uIDog
cHVibGljIFR5cGUgeworY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsK
IHB1YmxpYzoKLSAgICBUeXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmlu
ZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkKLSAgICAgICAgOiBt
X29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkp
CisgICAgVHlwZURlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1l
LCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgICAgICA6IE5h
bWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBl
KFdURk1vdmUodHlwZSkpCiAgICAgewogICAgIH0KQEAgLTUyLDE4ICs1MiwxOCBAQCBwdWJsaWM6
CiAgICAgVHlwZURlZmluaXRpb24oY29uc3QgVHlwZURlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAg
ICBUeXBlRGVmaW5pdGlvbihUeXBlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBBU1Q6
OlR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgYm9vbCBpc1R5cGVEZWZpbml0
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBBU1Q6OlVubmFtZWRUeXBlJiB0
eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSk7CisgICAgICAgIHJl
dHVybiBtX3R5cGUtPnVuaWZ5Tm9kZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6
VG9rZW4gbV9vcmlnaW47Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IG1fdHlwZTsKIH07CiAKIH0KQEAgLTcyLDQgKzcyLDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVHlwZURlZmluaXRpb24sIGlzVHlw
ZURlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKaW5kZXggNDk0
NDFkOGI1YzcuLjkyOTNhYTI2NGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCkBAIC0yOCw4
ICsyOCw5IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
LSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xV
bm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zOCwxMCArMzksMTAgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFt
ZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgVHlwZSB7CitjbGFz
cyBUeXBlUmVmZXJlbmNlIDogcHVibGljIFVubmFtZWRUeXBlIHsKIHB1YmxpYzoKICAgICBUeXBl
UmVmZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3Vt
ZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQorICAgICAgICA6IFVubmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX25h
bWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGVBcmd1bWVudHMoV1RGTW92ZSh0eXBl
QXJndW1lbnRzKSkKICAgICB7CkBAIC01MiwyNCArNTMsNDcgQEAgcHVibGljOgogICAgIFR5cGVS
ZWZlcmVuY2UoY29uc3QgVHlwZVJlZmVyZW5jZSYpID0gZGVsZXRlOwogICAgIFR5cGVSZWZlcmVu
Y2UoVHlwZVJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFR5cGVSZWZlcmVuY2U+IHdyYXAoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBOYW1lZFR5cGUm
IHJlc29sdmVkVHlwZSkKKyAgICB7CisgICAgICAgIFR5cGVBcmd1bWVudHMgdHlwZUFyZ3VtZW50
czsKKyAgICAgICAgaWYgKGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBlKSkK
KyAgICAgICAgICAgIHR5cGVBcmd1bWVudHMgPSBBU1Q6OmNsb25lKGRvd25jYXN0PE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBlKS50eXBlQXJndW1lbnRzKCkpOworICAgICAgICBh
dXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmln
aW4pLCBTdHJpbmcocmVzb2x2ZWRUeXBlLm5hbWUoKSksIFdURk1vdmUodHlwZUFyZ3VtZW50cykp
OworICAgICAgICByZXN1bHQtPnNldFJlc29sdmVkVHlwZShyZXNvbHZlZFR5cGUpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1
cm4gbV9uYW1lOyB9CiAgICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJu
IG1fdHlwZUFyZ3VtZW50czsgfQorICAgIE5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkgeyByZXR1
cm4gbV9yZXNvbHZlZFR5cGU7IH0KKworICAgIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9yZXNvbHZlZFR5cGUpOworICAgICAg
ICByZXR1cm4gbV9yZXNvbHZlZFR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldFJlc29sdmVkVHlwZShOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSkKKyAgICB7CisgICAg
ICAgIG1fcmVzb2x2ZWRUeXBlID0gJnJlc29sdmVkVHlwZTsKKyAgICB9CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gY2xvbmVUeXBlUmVmZXJlbmNlKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KExleGVyOjpU
b2tlbihtX29yaWdpbiksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50
cykpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihMZXhl
cjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcobV9uYW1lKSwgQVNUOjpjbG9uZShtX3R5cGVBcmd1
bWVudHMpKTsKICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25z
dCBvdmVycmlkZQorICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25z
dCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNsb25lVHlwZVJlZmVyZW5jZSgpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5n
IG1fbmFtZTsKICAgICBUeXBlQXJndW1lbnRzIG1fdHlwZUFyZ3VtZW50czsKKyAgICBOYW1lZFR5
cGUqIG1fcmVzb2x2ZWRUeXBlIHsgbnVsbHB0ciB9OwogfTsKIAogfQpAQCAtNzgsNiArMTAyLDYg
QEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoVHlw
ZVJlZmVyZW5jZSwgaXNUeXBlUmVmZXJlbmNlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1VOTkFNRURfVFlQRShUeXBlUmVmZXJlbmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xVbm5hbWVkVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVW5uYW1lZFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNzNhOGYwYTBjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCkBAIC0wLDAgKzEsODMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IFVubmFtZWRUeXBlIDogcHVibGljIFR5cGUgeworcHVibGljOgorICAgIFVubmFtZWRUeXBlKExl
eGVyOjpUb2tlbiYmIG9yaWdpbikKKyAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflVubmFtZWRUeXBlKCkgPSBkZWZhdWx0Owor
CisgICAgVW5uYW1lZFR5cGUoY29uc3QgVW5uYW1lZFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBVbm5h
bWVkVHlwZShVbm5hbWVkVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzVW5uYW1lZFR5
cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlz
VHlwZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IHZpcnR1YWwgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0K
KworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0
ID0gMDsKKworICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW47IH0KKworcHJpdmF0ZToKKyAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Cit9Owor
Cit9CisKK30KKworfQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5O
QU1FRF9UWVBFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6QVNUOjpVbm5hbWVkVHlw
ZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoVW5uYW1lZFR5
cGUsIGlzVW5uYW1lZFR5cGUoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uLmgKaW5kZXggZmYwMzY4MTkzYmQuLjg1MjBjYWRjYzM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBBU1Qgewog
CiBjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uIDogcHVibGljIFZhbHVlIHsKIHB1YmxpYzoKLSAg
ICBWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYm
IHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgU3RyaW5nJiYg
bmFtZSwgT3B0aW9uYWw8U2VtYW50aWM+JiYgc2VtYW50aWMsIHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPiYmIGluaXRpYWxpemVyKQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2VtYW50aWM+
JiYgc2VtYW50aWMsIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGluaXRpYWxpemVyKQog
ICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX3F1YWxpZmll
cnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkK
QEAgLTYwLDIwICs2MCwyMyBAQCBwdWJsaWM6CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbihWYXJp
YWJsZURlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKIAogICAgIExleGVyOjpUb2tlbiBvcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJu
IG1fbmFtZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBV
bm5hbWVkVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KICAgICBPcHRpb25hbDxTZW1h
bnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQogICAgIEV4cHJlc3Npb24q
IGluaXRpYWxpemVyKCkgeyByZXR1cm4gbV9pbml0aWFsaXplci5nZXQoKTsgfQogCiBwcml2YXRl
OgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBRdWFsaWZpZXJzIG1fcXVhbGlmaWVy
czsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAg
IE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPiBtX2luaXRpYWxpemVyOwogfTsKIAordHlwZWRlZiBWZWN0b3I8VmFyaWFibGVEZWNs
YXJhdGlvbj4gVmFyaWFibGVEZWNsYXJhdGlvbnM7CisKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVu
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlh
YmxlUmVmZXJlbmNlLmgKaW5kZXggMmFlODI4ZDUyOTUuLmUzOWVjZjVjNTlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJl
ZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTEV4
cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJp
YWJsZURlY2xhcmF0aW9uLmgiCkBAIC01NSwxOSArNTUsMjEgQEAgcHVibGljOgogICAgIHN0YXRp
YyBWYXJpYWJsZVJlZmVyZW5jZSB3cmFwKFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVj
bGFyYXRpb24pCiAgICAgewogICAgICAgICBWYXJpYWJsZVJlZmVyZW5jZSByZXN1bHQoTGV4ZXI6
OlRva2VuKHZhcmlhYmxlRGVjbGFyYXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1f
dmFyaWFibGUgPSB7ICZ2YXJpYWJsZURlY2xhcmF0aW9uIH07CisgICAgICAgIHJlc3VsdC5tX3Zh
cmlhYmxlID0gJnZhcmlhYmxlRGVjbGFyYXRpb247CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCi0gICAgc3RhdGljIFZhcmlhYmxlUmVmZXJlbmNlIHdyYXAoQW5vbnltb3VzVmFyaWFi
bGVEZWNsYXJhdGlvbiYgYW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICBib29sIGlz
VmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KKworICAgIFZhcmlhYmxlRGVjbGFy
YXRpb24qIHZhcmlhYmxlKCkgeyByZXR1cm4gbV92YXJpYWJsZTsgfQorCisgICAgdm9pZCBzZXRW
YXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgIHsK
LSAgICAgICAgVmFyaWFibGVSZWZlcmVuY2UgcmVzdWx0KExleGVyOjpUb2tlbihhbm9ueW1vdXNW
YXJpYWJsZURlY2xhcmF0aW9uLm9yaWdpbigpKSk7Ci0gICAgICAgIHJlc3VsdC5tX3ZhcmlhYmxl
ID0geyAmYW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiB9OwotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICBtX3ZhcmlhYmxlID0gJnZhcmlhYmxlRGVjbGFyYXRpb247CiAgICAgfQog
Ci0gICAgYm9vbCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQotCiBwcml2YXRlOgogICAgIFZhcmlhYmxlUmVmZXJlbmNlKExleGVyOjpUb2tlbiYm
IG9yaWdpbikKICAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKQEAgLTc1LDcg
Kzc3LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIE9wdGlv
bmFsPFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJhdGlvbiosIEFub255bW91c1ZhcmlhYmxlRGVjbGFy
YXRpb24qPj4gbV92YXJpYWJsZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uKiBtX3ZhcmlhYmxl
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmQ1ZWYzNzU2NzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVw
bGljYXRlRnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xDaGVj
a0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5
cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJU
eXBlcy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlv
bnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+PiBmdW5jdGlvbnM7CisgICAgZm9yIChh
dXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkK
KyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZCgqZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICBmb3Ig
KGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKCkpCisgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pOworCisgICAgc3RkOjpzb3J0KGZ1bmN0aW9ucy5iZWdpbigpLCBmdW5jdGlv
bnMuZW5kKCksIFtdKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgYSwgY29uc3QgQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBiKSAtPiBib29sIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0ZDo6bWluKGEubmFtZSgpLmxlbmd0aCgpLCBiLm5hbWUoKS5sZW5ndGgo
KSk7ICsraSkgeworICAgICAgICAgICAgaWYgKGEubmFtZSgpW2ldIDwgYi5uYW1lKClbaV0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAoYS5uYW1lKClbaV0g
PiBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGEubmFtZSgpLmxlbmd0aCgpIDwgYi5uYW1lKCkubGVuZ3RoKCk7Cisg
ICAgfSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgZnVuY3Rpb25zLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSAhPSBmdW5j
dGlvbnNbal0uZ2V0KCkubmFtZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKGlzPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oZnVuY3Rpb25zW2ldLmdl
dCgpKSAmJiBpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9uc1tqXS5n
ZXQoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZnVuY3Rp
b25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gZnVuY3Rpb25zW2pdLmdldCgpLnBh
cmFtZXRlcnMoKS5zaXplKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLmlzQ2FzdCgpKSB7CisgICAgICAgICAgICAgICAgYm9v
bCBzYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25zW2ld
LmdldCgpLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgpLnR5cGUoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNo
ZXMoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCksIGZ1bmN0aW9uc1tq
XS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2FtZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBi
b29sIHNhbWUgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwg
ZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtr
XS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZ1bmN0
aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIiAmJiBmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAgICAgICAmJiBpczxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
KSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlID0gZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRl
cnMoKVsxXS50eXBlKCk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih0
eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVkVHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
biA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJ1aW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3Iu
bGVuZ3RoIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAxCisg
ICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKQorICAgICAgICAgICAgfHwgaXM8QVNUOjpBcnJh
eVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQo
KS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCisgICAgICAgICAgICAmJiBmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVy
ZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKQorICAg
ICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFy
YW1ldGVycygpWzFdLnR5cGUoKSkKKyAgICAgICAgICAgICYmIG1hdGNoZXMoZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClbMV0udHlwZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2Vj
ZWU3ODJjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1
ZGUgIldITFNMUHJvZ3JhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYpOwor
Cit9CisKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5jZjQwNzMwY2M2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTAsMCArMSw2MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNp
bmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitjbGFzcyBDaGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgor
ICAgIH5DaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgYm9vbCBlcnJvcigpIHsgcmV0dXJuIG1f
ZXJyb3I7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1fZXJyb3IgeyBmYWxzZSB9OyAvLyBGSVhN
RTogTWlncmF0ZSB0aGlzIHRvIGJlIHNvbWUgc29ydCBvZiBkZXNjcmlwdGl2ZSBzdHJpbmcuCisg
ICAgLy8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgZXJyb3IgaW50byBWaXNpdG9yCit9Owor
Citib29sIGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQ2hlY2tlciBjaGVja2VyOwor
ICAgIGNoZWNrZXIudmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuICFjaGVja2VyLmVycm9yKCk7
Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmVkMjY4ZDczNDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitib29s
IGNoZWNrKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4MTk1MTU2MjI3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5
cGVzLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworYm9vbCBtYXRjaGVz
KGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJiBvdGhlcikKK3sKKyAgICBhdXRvJiB1bmlmeVRoaXMgPSB1bm5hbWVkVHlwZS51bmlmeU5v
ZGUoKTsKKyAgICBhdXRvJiB1bmlmeU90aGVyID0gb3RoZXIudW5pZnlOb2RlKCk7CisKKyAgICBp
ZiAoJnVuaWZ5VGhpcyA9PSAmdW5pZnlPdGhlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcykgJiYgaXM8QVNUOjpOYW1lZFR5cGU+
KHVuaWZ5T3RoZXIpKSB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBhdXRvJiBuYW1l
ZFRoaXMgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlUaGlzKTsKKyAgICAgICAgYXV0
byYgbmFtZWRPdGhlciA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU90aGVyKTsKKyAg
ICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFRoaXMpICYmICFpczxB
U1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZE90aGVyKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKSAm
JiBpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU90aGVyKSkgeworICAgICAgICBhdXRvJiB1bm5h
bWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAg
IGF1dG8mIHVubmFtZWRPdGhlciA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3Ro
ZXIpOworICAgICAgICBBU1NFUlQoIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFRoaXMp
ICYmICFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRPdGhlcikpOworICAgICAgICBpZiAo
aXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIHBvaW50ZXJUaGlzID0gZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFRoaXMpOworICAgICAgICAgICAgYXV0byYgcG9p
bnRlck90aGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZE90aGVyKTsKKyAg
ICAgICAgICAgIGlmIChwb2ludGVyVGhpcy5hZGRyZXNzU3BhY2UoKSAhPSBwb2ludGVyT3RoZXIu
YWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoZXMocG9pbnRlclRoaXMuZWxlbWVudFR5cGUoKSwgcG9pbnRlck90aGVy
LmVsZW1lbnRUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1
bm5hbWVkT3RoZXIpKXsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlVGhpcyA9IGRv
d25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAg
ICBhdXRvJiBhcnJheVJlZmVyZW5jZU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAgICBpZiAoYXJyYXlSZWZlcmVuY2VUaGlz
LmFkZHJlc3NTcGFjZSgpICE9IGFycmF5UmVmZXJlbmNlT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMo
YXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1lbnRUeXBlKCksIGFycmF5UmVmZXJlbmNlT3RoZXIuZWxl
bWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAg
ICAgICAgIGF1dG8mIGFycmF5VGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVk
VGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAgICBpZiAoYXJyYXlUaGlzLm51bUVsZW1l
bnRzKCkgIT0gYXJyYXlPdGhlci5udW1FbGVtZW50cygpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGFycmF5VGhpcy50eXBlKCksIGFy
cmF5T3RoZXIudHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50
cyhBU1Q6Ok5hbWVkVHlwZSYgcG9zc2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVB
cmd1bWVudHMpCit7CisgICAgaWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KHBvc3NpYmxlVHlw
ZSkKKyAgICAgICAgfHwgaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUp
CisgICAgICAgIHx8IGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihwb3NzaWJsZVR5cGUp
KSB7CisgICAgICAgIHJldHVybiB0eXBlQXJndW1lbnRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAg
ICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSkpOwor
ICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPihwb3NzaWJsZVR5cGUpOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpLnNpemUoKSAhPSB0eXBlQXJndW1lbnRzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbiogdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAg
ICAgIEFTVDo6VHlwZVJlZmVyZW5jZSogdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxw
dHI7CisgICAgICAgIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiBuYXRpdmVUeXBlQXJndW1lbnRF
eHByZXNzaW9uID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiBuYXRpdmVU
eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlID0gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGFzc2ln
biA9IFsmXShBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50LCBBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbiomIGV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZSomIHR5cGVSZWZlcmVuY2Up
IHsKKyAgICAgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25z
dGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIGV4
cHJlc3Npb24gPSAmY29uc3RhbnRFeHByZXNzaW9uOworICAgICAgICAgICAgfSwgWyZdKHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0aGVUeXBlUmVmZXJlbmNlKSB7CisgICAg
ICAgICAgICAgICAgdHlwZVJlZmVyZW5jZSA9IHRoZVR5cGVSZWZlcmVuY2UuZ2V0KCk7CisgICAg
ICAgICAgICB9KSwgdHlwZUFyZ3VtZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBhc3NpZ24o
dHlwZUFyZ3VtZW50c1tpXSwgdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiwgdHlwZUFyZ3VtZW50VHlw
ZVJlZmVyZW5jZSk7CisgICAgICAgIGFzc2lnbihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFy
Z3VtZW50cygpW2ldLCBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uLCBuYXRpdmVUeXBlQXJn
dW1lbnRUeXBlUmVmZXJlbmNlKTsKKworICAgICAgICBpZiAodHlwZUFyZ3VtZW50RXhwcmVzc2lv
biAmJiBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoIXR5
cGVBcmd1bWVudEV4cHJlc3Npb24tPm1hdGNoZXMoKm5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Np
b24pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICh0
eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlICYmIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVu
Y2UpIHsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlcygqdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5j
ZSwgKm5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaApzaW1pbGFyaXR5
IGluZGV4IDczJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgKcmVuYW1lIHRvIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCmluZGV4IGVm
NjFlZDEyNjE5Li4wZjdkNDQxZmRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5o
CkBAIC0yNyw4ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVB
cmd1bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDI2ICszNSwxNCBAQCBu
YW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgQW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgQW5vbnltb3Vz
VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCi0gICAgICAgIDogbV9v
cmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5Bbm9u
eW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKCkgPSBkZWZhdWx0OwotCi0gICAgQW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbihjb25zdCBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJikgPSBk
ZWxldGU7Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbihBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKLQotICAgIExleGVyOjpUb2tlbiBvcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX29yaWdpbjsgfQotCi1wcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKLX07CitjbGFzcyBVbm5hbWVkVHlwZTsKK2NsYXNzIE5hbWVkVHlwZTsKIAogfQog
Citib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmKTsKK2Jvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUm
IHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKTsKKwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEludHJpbnNpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbnRyaW5zaWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MGM0NDIyZDUxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXSExTTEludHJpbnNpY3MuaCIKKworI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVS
ZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitJbnRyaW5zaWNzOjpJbnRyaW5zaWNzKCkKKyAgICA6IG1fdGV4dHVyZVR5cGVOYW1lcyB7IFN0
cmluZygiVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAg
ICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
CisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUxREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEQXJyYXkiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTJE
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJX
VGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBT
dHJpbmcoIlRleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisg
ICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEQXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTNEIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTNEIiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmVD
dWJlIiwgIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIG1fdGV4dHVyZUlu
bmVyVHlwZU5hbWVzIHsgU3RyaW5nKCJ1Y2hhciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICAgICAgU3RyaW5nKCJ1c2hvcnQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidWludCIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJjaGFyIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInNob3J0IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImludCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJoYWxmIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQorICAgICwgbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzIHsg
U3RyaW5nKCJoYWxmIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAg
ICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQoreworICAg
IEFTU0VSVChtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpID09IDExKTsgLy8gZnVsbFRleHR1cmVz
IGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNTRVJUKG1fdGV4dHVy
ZUlubmVyVHlwZU5hbWVzLnNpemUoKSA9PSA4KTsgLy8gZnVsbFRleHR1cmVzIGhhcmRjb2RlcyB0
aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNTRVJUKG1fZGVwdGhUZXh0dXJlSW5uZXJU
eXBlcy5zaXplKCkgPT0gMik7IC8vIHRleHR1cmVEZXB0aDJEICYgZnJpZW5kcyBoYXJkY29kZXMg
dGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorfQorCit2b2lkIEludHJpbnNpY3M6OmFkZChBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKQoreworICAgIC8vIEZJWE1FOiBQb3B1bGF0ZSB0
aGlzLgorfQorCitib29sIEludHJpbnNpY3M6OmFkZFByaW1pdGl2ZShBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSAhPSAwKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidm9pZCIp
CisgICAgICAgIG1fdm9pZFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICBtX2Jv
b2xUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAgIG1fdWNoYXJUeXBlID0gJm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpID09ICJ1c2hvcnQiKQorICAgICAgICBtX3VzaG9ydFR5cGUgPSAmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InVpbnQiKQorICAgICAgICBtX3VpbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAg
ICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJjaGFyIikKKyAgICAg
ICAgbV9jaGFyVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKQorICAgICAgICBtX3Nob3J0VHlw
ZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgbV9pbnRUeXBlID0gJm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJoYWxmIikKKyAgICAgICAgbV9oYWxmVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247Cisg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxvYXQiKQorICAg
ICAgICBtX2Zsb2F0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX2ludCIpCisgICAgICAgIG1f
YXRvbWljSW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX3VpbnQiKQorICAgICAgICBtX2F0
b21pY1VpbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJzYW1wbGVyIikKKyAgICAgICAgbV9zYW1wbGVy
VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjph
ZGRWZWN0b3IoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAidmVjdG9yIikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQb2ludGVyID0gV1RG
OjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8mIGxlbmd0aEV4cHJlc3Npb24g
PSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgQVNTRVJUKGlubmVyVHlwZVBvaW50ZXIpOworICAg
IGF1dG8mIGlubmVyVHlwZSA9ICppbm5lclR5cGVQb2ludGVyOworICAgIEFTU0VSVChpbm5lclR5
cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAwKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbioqIGFycmF5OworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJib29sIikKKyAg
ICAgICAgYXJyYXkgPSBtX3ZlY3RvckJvb2w7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUo
KSA9PSAidWNoYXIiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVWNoYXI7CisgICAgZWxzZSBp
ZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3Rv
clVzaG9ydDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1aW50IikKKyAgICAg
ICAgYXJyYXkgPSBtX3ZlY3RvclVpbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9
PSAiY2hhciIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JDaGFyOworICAgIGVsc2UgaWYgKGlu
bmVyVHlwZS5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclNob3J0
OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImludCIpCisgICAgICAgIGFycmF5
ID0gbV92ZWN0b3JJbnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiaGFsZiIp
CisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JIYWxmOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5u
YW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckZsb2F0OworICAgIGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaW50IGxlbmd0aCA9IGxlbmd0
aEV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChsZW5ndGgg
Pj0gMiAmJiBsZW5ndGggPD0gNCk7CisgICAgYXJyYXlbbGVuZ3RoIC0gMl0gPSAmbmF0aXZlVHlw
ZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFk
ZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
KQoreworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJtYXRyaXgiKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMyk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVsxXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzJdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9IFdURjo6Z2V0PHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvJiByb3dFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNU
OjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KClbMV0pOworICAgIGF1dG8mIGNvbHVtbkV4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSk7
CisgICAgQVNTRVJUKGlubmVyVHlwZVBvaW50ZXIpOworICAgIGF1dG8mIGlubmVyVHlwZSA9ICpp
bm5lclR5cGVQb2ludGVyOworICAgIEFTU0VSVChpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNp
emUoKSA9PSAwKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogKCphcnJheSlbM107
CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICBhcnJheSA9IG1f
bWF0cml4SGFsZjsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQorICAgICAg
ICBhcnJheSA9IG1fbWF0cml4RmxvYXQ7CisgICAgaW50IHJvdyA9IHJvd0V4cHJlc3Npb24uaW50
ZWdlckxpdGVyYWwoKS52YWx1ZSgpOworICAgIEFTU0VSVChyb3cgPj0gMiAmJiByb3cgPD0gNCk7
CisgICAgaW50IGNvbHVtbiA9IGNvbHVtbkV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKS52YWx1
ZSgpOworICAgIEFTU0VSVChjb2x1bW4gPj0gMiAmJiBjb2x1bW4gPD0gNCk7CisgICAgYXJyYXlb
cm93IC0gMl1bY29sdW1uIC0gMl0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZEZ1bGxUZXh0dXJlKEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24sIEFTVDo6VHlwZVJlZmVyZW5j
ZSYgaW5uZXJUeXBlKQoreworICAgIHVuc2lnbmVkIHRleHR1cmVUeXBlSW5kZXggPSBtX3RleHR1
cmVUeXBlTmFtZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHR1
cmVUeXBlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gbV90ZXh0dXJlVHlwZU5hbWVzW2ldKQorICAgICAgICAgICAgdGV4dHVy
ZVR5cGVJbmRleCA9IGk7CisgICAgfQorICAgIGlmICh0ZXh0dXJlVHlwZUluZGV4ID09IG1fdGV4
dHVyZVR5cGVOYW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2ln
bmVkIGlubmVyVHlwZUluZGV4ID0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpOworICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90
ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlubmVyVHlw
ZS5uYW1lKCkuc3RhcnRzV2l0aChtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXSkpIHsKKyAgICAg
ICAgICAgIHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgICAgICAgICAgaWYgKGlubmVyVHlwZS5u
YW1lKCkgPT0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pCisgICAgICAgICAgICAgICAgdmVj
dG9yTGVuZ3RoID0gMTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VS
VChpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ld
Lmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlubmVyVHlwZS5uYW1lKClb
aW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICcyJworICAgICAgICAgICAgICAgICAg
ICB8fCBpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAn
MycKKyAgICAgICAgICAgICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFt
ZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzQnKTsKKyAgICAgICAgICAgICAgICB2ZWN0b3JMZW5ndGgg
PSBpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSAtICcwJzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoaW5uZXJUeXBlSW5k
ZXggIT0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpKTsKKyAgICBtX2Z1bGxUZXh0dXJl
c1t0ZXh0dXJlVHlwZUluZGV4XVtpbm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3RoIC0gMV0gPSAm
bmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEludHJp
bnNpY3M6OmFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9
IG1fdGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiUldUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVy
ZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
VGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aDJE
QXJyYXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldU
ZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJlRGVwdGgy
REFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRl
eHR1cmVEZXB0aEN1YmUiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGhDdWJlOwor
ICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWduZWQgaW5u
ZXJUeXBlSW5kZXggPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gbV9kZXB0aFRleHR1cmVJbm5lclR5
cGVzW2ldKQorICAgICAgICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBBU1NF
UlQoaW5uZXJUeXBlSW5kZXggIT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSk7Cisg
ICAgdGV4dHVyZVtpbm5lclR5cGVJbmRleF0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworfQor
Cit2b2lkIEludHJpbnNpY3M6OmFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQ
b2ludGVyID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIEFTU0VSVChpbm5l
clR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9pbnRlcjsK
KyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7CisgICAg
aWYgKGFkZEZ1bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5uZXJUeXBlKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGFkZERlcHRoVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24s
IGlubmVyVHlwZSk7Cit9CisKK3ZvaWQgSW50cmluc2ljczo6YWRkKEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGFkZFByaW1pdGl2
ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGFkZFZl
Y3RvcihuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGFk
ZE1hdHJpeChuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAgYWRk
VGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJp
bnNpY3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmlu
c2ljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kN2I0ZTM4NzIx
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMSW50cmluc2ljcy5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgSW50cmlu
c2ljcyB7CitwdWJsaWM6CisgICAgSW50cmluc2ljcygpOworCisgICAgdm9pZCBhZGQoQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBhZGQoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mKTsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBib29sVHlw
ZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9ib29sVHlwZSk7CisgICAgICAgIHJldHVybiAq
bV9ib29sVHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgdWlu
dFR5cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdWludFR5cGUpOworICAgICAgICByZXR1
cm4gKm1fdWludFR5cGU7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYWRkUHJpbWl0aXZl
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRWZWN0b3IoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkRnVsbFRleHR1cmUoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGFkZERlcHRoVGV4
dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5jZSYpOwor
ICAgIHZvaWQgYWRkVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworCisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdm9pZFR5cGU7CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qIG1fYm9vbFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24qIG1fdWNoYXJUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VzaG9y
dFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdWludFR5cGU7CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fY2hhclR5cGU7CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qIG1fc2hvcnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX2ludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1faGFsZlR5
cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fZmxvYXRUeXBlOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0b21pY0ludFR5cGU7CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1fYXRvbWljVWludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1fc2FtcGxlclR5cGU7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogbV92ZWN0b3JCb29sWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3ZlY3RvclVjaGFyWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3Rv
clVzaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVaW50
WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckNoYXJbM107Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yU2hvcnRbM107CisgICAgQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9ySW50WzNdOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckhhbGZbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fdmVjdG9yRmxvYXRbM107CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogbV9tYXRyaXhIYWxmWzNdWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiBtX21hdHJpeEZsb2F0WzNdWzNdOworCisgICAgVmVjdG9yPFN0cmluZz4gbV90ZXh0dXJlVHlw
ZU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzOworCisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fZnVsbFRleHR1cmVzWzExXVs4XVs0XTsK
KworICAgIFZlY3RvcjxTdHJpbmc+IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlczsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1RleHR1cmVEZXB0aDJEWzJdOworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aDJEQXJyYXlbMl07CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0dXJlRGVwdGgyREFycmF5WzJdOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aEN1YmVbMl07Cit9OworCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5lZDllZmU3YTMwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEs
MTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworTmFtZUNvbnRleHQ6Ok5hbWVDb250ZXh0KE5hbWVD
b250ZXh0KiBwYXJlbnQpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCit7Cit9CisKK2Jvb2wgTmFt
ZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAg
ICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHR5cGVEZWZpbml0aW9uLm5hbWUoKSwg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodHlwZURlZmluaXRpb24pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
JiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoc3RydWN0dXJlRGVmaW5p
dGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBt
X3R5cGVzLmFkZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRp
b25EZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoZW51bWVyYXRpb25EZWZpbml0aW9uLm5h
bWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMu
YWRkKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
aW9uKQoreworICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkg
IT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQoZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6
YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV9mdW5jdGlvbnMuZmluZChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAg
ICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1f
dmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQg
PSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0
aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
dmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpLCAmdmFyaWFi
bGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdC5pc05ld0VudHJ5OworfQorCitWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBOYW1lQ29udGV4
dDo6Z2V0VHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3R5cGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fdHlwZXMuZW5kKCkpIHsK
KyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRU
eXBlcyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAm
aXRlcmF0b3ItPnZhbHVlOworfQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogTmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyhjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25zLmZpbmQo
bmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7CisgICAgICAg
IGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25z
KG5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICZpdGVy
YXRvci0+dmFsdWU7Cit9CisKK0FTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFtZUNvbnRleHQ6
OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV92YXJpYWJsZXMu
ZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFy
ZW50LT5nZXRWYXJpYWJsZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmV4aXN0
cyhTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1fdHlwZXMuZmluZChuYW1lKSAhPSBtX3R5
cGVzLmVuZCgpCisgICAgICAgIHx8IG1fZnVuY3Rpb25zLmZpbmQobmFtZSkgIT0gbV9mdW5jdGlv
bnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYW1lKSAhPSBtX3ZhcmlhYmxl
cy5lbmQoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kM2RmODAwMTRhZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3Bh
Y2UgQVNUIHsKKworY2xhc3MgTmFtZWRUeXBlOworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsK
K2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbjsKK2NsYXNz
IEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2NsYXNz
IE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247
CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uOworCit9CisKK2NsYXNzIE5hbWVDb250ZXh0IHsK
K3B1YmxpYzoKKyAgICBOYW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7
CisKKyAgICBib29sIGFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAg
IGJvb2wgYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRk
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uJik7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
Ok5hbWVkVHlwZT4sIDE+KiBnZXRUeXBlcyhjb25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogZ2V0RnVu
Y3Rpb25zKGNvbnN0IFN0cmluZyYpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogZ2V0
VmFyaWFibGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBleGlzdHMoU3Ry
aW5nJik7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+
IG1fZnVuY3Rpb25zOworICAgIEhhc2hNYXA8U3RyaW5nLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24qPiBtX3ZhcmlhYmxlczsKKyAgICBOYW1lQ29udGV4dCogbV9wYXJlbnQ7Cit9OworCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKaW5kZXggNzgwZDVjNTQyNWEuLjUyZmMwMmNi
YTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0yOCwxOSArMjgsMjg3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKIAotI2luY2x1ZGUgIldI
TFNMVmlzaXRvci5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5o
IgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9v
cC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNs
dWRlICJXSExTTFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xF
bnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFt
ZXNwYWNlIFdITFNMIHsKIAotY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3Igewot
ICAgIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7Ci19OworTmFtZVJlc29sdmVyOjpOYW1lUmVz
b2x2ZXIoTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQorICAgIDogbV9uYW1lQ29udGV4dChuYW1l
Q29udGV4dCkKK3sKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVy
ZW5jZSYgdHlwZVJlZmVyZW5jZSkKK3sKKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgVmlzaXRvcjo6dmlzaXQodHlwZVJlZmVyZW5jZSk7CisgICAgaWYgKHR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGNhbmRp
ZGF0ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKKyAg
ICBpZiAoY2FuZGlkYXRlcyA9PSBudWxscHRyKSB7CisgICAgICAgIG1fZXJyb3IgPSB0cnVlOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBl
T3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkp
CisgICAgICAgIHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRUeXBlKCpyZXN1bHQpOworICAgIGVs
c2UgeworICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30K
Kwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE5hbWVDb250ZXh0IG5ld05hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1l
UmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5ld05hbWVDb250ZXh0KTsKKyAgICB2aXNpdFVubmFt
ZWRUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1l
dGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBuZXdOYW1l
UmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQocGFyYW1ldGVyKTsKKyAgICAgICAgYXV0byBzdWNjZXNz
ID0gbmV3TmFtZUNvbnRleHQuYWRkKHBhcmFtZXRlcik7CisgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisgICAgbmV3TmFtZVJlc29sdmVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlv
bi5ibG9jaygpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJs
b2NrKQoreworICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1cm47CisKKyAgICBOYW1lQ29u
dGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KS5WaXNpdG9yOjp2aXNpdChibG9jayk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2
aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBpZiAobV9lcnJvcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmlzaXRvcjo6dmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0
aW9uYWwoKSk7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwor
ICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQoaWZTdGF0ZW1lbnQu
Ym9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgeworICAgICAgICBOYW1l
Q29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAgIE5hbWVSZXNvbHZl
cihuYW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOwor
ICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGls
ZUxvb3ApCit7CisgICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybjsKKworICAgIFZpc2l0
b3I6OnZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1l
Q29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5W
aXNpdG9yOjp2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6
OnZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBpZiAobV9lcnJvcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNv
bnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQod2hp
bGVMb29wLmJvZHkoKSk7CisgICAgVmlzaXRvcjo6dmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFs
KCkpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29w
KQoreworICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1cm47CisKKyAgICBOYW1lQ29udGV4
dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250
ZXh0KS5WaXNpdG9yOjp2aXNpdChmb3JMb29wKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAg
ICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uYW1lQ29udGV4dC5hZGQo
dmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgVmlzaXRvcjo6dmlzaXQodmFyaWFibGVEZWNsYXJh
dGlvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKK3sKKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChhdXRvKiB2YXJpYWJsZSA9IG1fbmFtZUNvbnRleHQuZ2V0VmFyaWFi
bGUodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKSkKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Uu
c2V0VmFyaWFibGUoKnZhcmlhYmxlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9lcnJvciA9IHRy
dWU7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OlJldHVybiYgcmV0dXJuTm9kZSkKK3sKKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICByZXR1cm5Ob2Rl
LnNldEZ1bmN0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBWaXNpdG9yOjp2aXNpdChyZXR1
cm5Ob2RlKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7CisgICAgaWYgKG1fZXJy
b3IpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiBnZXRGdW5jdGlvbnMgPSBtX25h
bWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0RnVuY3Rp
b25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVH
ZXRPdmVybG9hZHMoKmdldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8qIHNldEZ1bmN0aW9ucyA9
IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRG
dW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3Nz
aWJsZVNldE92ZXJsb2Fkcygqc2V0RnVuY3Rpb25zKTsKKyAgICBpZiAoYXV0byogYW5kRnVuY3Rp
b25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmFuZEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNl
dFBvc3NpYmxlQW5kT3ZlcmxvYWRzKCphbmRGdW5jdGlvbnMpOworICAgIFZpc2l0b3I6OnZpc2l0
KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CiAKLXZvaWQgcmVzb2x2ZU5hbWVzSW5UeXBl
cyhQcm9ncmFtJikKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCiB7CisgICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybjsKIAor
ICAgIGlmIChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkp
IHsKKyAgICAgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0
VHlwZXMoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNl
KCkpLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5zaXpl
KCkgPT0gMSk7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRp
b25UeXBlcylbMF07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24+KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPih0eXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRp
b25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKSkgewor
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbCkgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVz
c2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWxz
IHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgICAgICAgICAg
TGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIGRvIHRoaXMgd2l0aCB2YXJpYW50cyBvciBhIFJl
d3JpdGVyIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikgQVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShvcmlnaW4pLCAqbWVtYmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgVmlzaXRvcjo6dmlzaXQoZG90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBp
ZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFjYWxsRXhwcmVzc2lvbi5o
YXNPdmVybG9hZHMoKSkgeworICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29u
dGV4dC5nZXRGdW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgIGNh
bGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0RGF0YSgpOworICAgICAgICAgICAgaWYg
KGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNz
aW9uLm5hbWUoKSkpCisgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRz
KCpmdW5jdGlvbnMpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9lcnJv
ciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KGNhbGxFeHByZXNzaW9uKTsKK30KKwordm9p
ZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlKQoreworICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0
byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5sZWZ0KCkpKSB7CisgICAgICAgIEFTU0VS
VChlbnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7CisgICAgICAgIEFTVDo6TmFtZWRUeXBl
JiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgaWYgKGlzPEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uPih0eXBlKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBl
bnVtZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGNvbnN0YW50RXhwcmVzc2lvbkVudW1l
cmF0aW9uTWVtYmVyUmVmZXJlbmNlLnJpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgY29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1i
ZXIoKm1lbWJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIG1fZXJyb3IgPSB0cnVlOworfQorCisvLyBGSVhNRTog
TWFrZSBzdXJlIGFsbCB0aGUgbmFtZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorCitib29sIHJlc29s
dmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2
ZXIpCit7CisgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmlu
aXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KCp0eXBlRGVm
aW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9u
IDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZl
ci5WaXNpdG9yOjp2aXNpdCgqc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1l
UmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Zm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVm
aW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKmVudW1l
cmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkgeworICAgICAg
ICBuYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cisg
ICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5GdW5j
dGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7Cisg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5p
dGlvbihmdW5jdGlvbkRlZmluaXRpb24uZ2V0KCkpOworICAgICAgICBuYW1lUmVzb2x2ZXIudmlz
aXQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3Io
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbmFtZVJlc29sdmVyLnNl
dEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
cygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5WaXNpdG9yOjp2aXNpdCgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJl
c29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVS
ZXNvbHZlci5oCmluZGV4IDQ3ZDRkNmE1NzkzLi5lNzVjNzQ2YTkwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5o
CkBAIC0yNywxMyArMjcsNTMgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJX
SExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSAi
V0hMU0xWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNM
IHsKIAotdm9pZCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0pOworY2xhc3Mg
UHJvZ3JhbTsKKworY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGlj
OgorICAgIE5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYpOworCisgICAgdmlydHVhbCB+TmFtZVJl
c29sdmVyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Q3VycmVu
dEZ1bmN0aW9uRGVmaW5pdGlvbihBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZp
bml0aW9uKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50RnVuY3Rpb24gPSBmdW5jdGlvbkRlZmlu
aXRpb247CisgICAgfQorCisgICAgYm9vbCBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3I7IH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5j
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlOworICAgIHZvaWQgdmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJl
bmNlKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5Ob2RlKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpE
b3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSBvdmVycmlkZTsKKwor
ICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CisgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24qIG1fY3VycmVudEZ1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV9lcnJvciB7IGZh
bHNlIH07IC8vIEZJWE1FOiBNaWdyYXRlIHRoaXMgdG8gYmUgc29tZSBzb3J0IG9mIGRlc2NyaXB0
aXZlIHN0cmluZy4KKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgbW92aW5nIHRoZSBlcnJvciBpbnRv
IFZpc2l0b3IKK307CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJl
c29sdmVyJik7Citib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVz
b2x2ZXImKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAKaW5kZXggYmM2ZTczZTZhMWYuLjMzMzZiOWIyZWE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIu
Y3BwCkBAIC0zOCw3ICszOCw4IEBAIFBhcnNlcjo6UGFyc2VyKCkKIHsKIH0KIAotYXV0byBQYXJz
ZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1v
ZGUpIC0+IE9wdGlvbmFsPEVycm9yPgorLy8gRklYTUU6IFJldHVybiBhIGJldHRlciBlcnJvciBj
b2RlIGZyb20gdGhpcywgYW5kIHJlcG9ydCBpdCB0byBKYXZhU2NyaXB0LgorYXV0byBQYXJzZXI6
OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2Rl
KSAtPiBPcHRpb25hbDxFcnJvcj4KIHsKICAgICBtX2xleGVyID0gTGV4ZXIoc3RyaW5nVmlldyk7
CiAgICAgbV9tb2RlID0gbW9kZTsKQEAgLTU0LDcgKzU1LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZURlZmluaXRpb24oKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKHR5cGVEZWZpbml0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOworICAgICAg
ICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnR5cGVEZWZp
bml0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCB0eXBlRGVmaW5pdGlvbi0+bmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtNjQsNyArNjksMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNl
KFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9w
dGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9uKCk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVEZWZpbml0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVEZWZpbml0
aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwg
c3RydWN0dXJlRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzQsNyArODMs
MTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJp
bmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFy
c2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
aWYgKGVudW1lcmF0aW9uRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0
byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9u
KSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg1LDcgKzk4LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKCk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24pIHsK
LSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlv
bikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1v
dmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZnVu
Y3Rpb25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJyb3IgPSBmdW5jdGlv
bkRlZmluaXRpb24uZXJyb3IoKTsKQEAgLTk2LDcgKzExMywxMSBAQCBhdXRvIFBhcnNlcjo6cGFy
c2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3Mg
PSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxv
Z0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLT5uYW1l
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xMDYsNyArMTI3LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9u
KCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJy
b3IhICVzIiwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC00NTQsMTYgKzQ3OSw1MiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZQogICAgICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0U3F1YXJlQnJhY2tldC5lcnJvcigpKTsKICAg
ICAgICAgcmV0dXJuIHt7ICp0b2tlbiwgV1RGOjpudWxsb3B0LCAqbnVtRWxlbWVudHMgfX07CiAg
ICAgfQotICAgIGF1dG8gYWRkcmVzc1NwYWNlID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpUb2tl
bjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7Ci0gICAg
aWYgKCFhZGRyZXNzU3BhY2UpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRy
ZXNzU3BhY2UuZXJyb3IoKSk7Ci0gICAgcmV0dXJuIHt7ICp0b2tlbiwgeyAqYWRkcmVzc1NwYWNl
IH0sIFdURjo6bnVsbG9wdCB9fTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0gY29uc3Vt
ZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBl
OjpEZXZpY2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6
VHlwZTo6VGhyZWFkfSk7CisgICAgaWYgKCFhZGRyZXNzU3BhY2VUb2tlbikKKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2VuLmVycm9yKCkpOworICAgIEFT
VDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKKyAgICBzd2l0Y2gg
KGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6
OkNvbnN0YW50OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpEZXZpY2U6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNl
VHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNU
OjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkOgorICAgICAgICBhZGRyZXNz
U3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygiU29tZXRoaW5nIHJl
YWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpOworICAg
IH0KKyAgICByZXR1cm4ge3sgKnRva2VuLCB7IGFkZHJlc3NTcGFjZSB9LCBXVEY6Om51bGxvcHQg
fX07CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHsKLSAgICBhdXRvIGFkZHJlc3NT
cGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVy
OjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBM
ZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOwotICAgIGlmICghYWRkcmVzc1NwYWNlKQotICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNlLmVycm9yKCkpOworYXV0
byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRv
a2VuID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6
OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExl
eGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7CisgICAgaWYgKCFhZGRyZXNzU3BhY2VUb2tlbikK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2VuLmVycm9y
KCkpOworICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsK
KyAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6
VG9rZW46OlR5cGU6OkNvbnN0YW50OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVy
ZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2U6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFT
VDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cDoKKyAgICAgICAgYWRkcmVz
c1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkOgorICAg
ICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygi
U29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSkpOworICAgIH0KICAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46
OlR5cGU6OklkZW50aWZpZXIpOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CkBAIC00NzEsMTIgKzUzMiwxMiBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4sIEVycgogICAgIGlmICghdHlwZUFyZ3VtZW50cykKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGNv
bnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeEFi
YnJldmlhdGVkJiB0eXBlU3VmZml4QWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHsKKyAgICBhdXRv
IGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZp
eEFiYnJldmlhdGVkJiB0eXBlU3VmZml4QWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4gewogICAgICAgICBzd2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50eXBl
KSB7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50b1N0
cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlh
dGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNh
c2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFpcjoKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9r
ZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLT5zdHJpbmdWaWV3
LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1
ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7
CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldDoKICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlUeXBlPihMZXhlcjo6
VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgV1RGTW92ZShwcmV2aW91cyksICp0
eXBlU3VmZml4QWJicmV2aWF0ZWQubnVtRWxlbWVudHMpOwogICAgICAgICBkZWZhdWx0OgpAQCAt
NDg4LDcgKzU0OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAgICAgYXV0byBmaXJzdFR5
cGVTdWZmaXhBYmJyZXZpYXRlZCA9IHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7CiAgICAg
aWYgKCFmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGZpcnN0VHlwZVN1ZmZpeEFiYnJldmlhdGVkLmVycm9yKCkpOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBl
UmVmZXJlbmNlPihMZXhlcjo6VG9rZW4oKmFkZHJlc3NTcGFjZSksIG5hbWUtPnN0cmluZ1ZpZXcu
dG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJl
ZmVyZW5jZT4oV1RGTW92ZSgqYWRkcmVzc1NwYWNlVG9rZW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRv
U3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKICAgICByZXN1bHQgPSBjb25zdHJ1
Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkKCpmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwg
V1RGTW92ZShyZXN1bHQpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIHR5cGVT
dWZmaXhBYmJyZXZpYXRlZCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFR5cGVTdWZmaXhB
YmJyZXZpYXRlZCwgRXJyb3I+PihbJl0oKSB7CkBAIC01MDMsNyArNTY0LDcgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGU+LCBFcnIKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1hdXRvIFBh
cnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3Bh
Y2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBF
cnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQogICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtNTE0LDEy
ICs1NzUsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LAogICAgIGlmICghdHlwZUFyZ3VtZW50
cykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMuZXJyb3Io
KSk7CiAKLSAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0ZWQgPSBb
Jl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+IHsKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJi
cmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4
Tm9uQWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZp
b3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICBzd2l0
Y2ggKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZp
YXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVz
c1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpTcXVhcmVCcmFja2V0UGFpcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLnRva2VuKSwgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZS0+
c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRv
a2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldDoKICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5v
bkFiYnJldmlhdGVkLnRva2VuKSwgV1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQubnVtRWxlbWVudHMpOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTI4LDcgKzU4OSw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlw
ZVJlZmVyZW5jZT4oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygp
LCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJlbmNlPihX
VEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5
cGVBcmd1bWVudHMpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIHR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFR5cGVTdWZmaXhO
b25BYmJyZXZpYXRlZCwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VU
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKTsKQEAgLTU0MiwxNCArNjAzLDE0IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlPiwKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1hdXRvIFBh
cnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4s
IEVycm9yPiB7Ci0gICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPj4oWyZdKCkgeworYXV0byBQYXJzZXI6OnBh
cnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwg
RXJyb3I+IHsKKyAgICBhdXRvIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPj4oWyZdKCkgewogICAgICAgICBy
ZXR1cm4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7CiAgICAgfSk7CiAgICAgaWYgKHR5cGUpCiAg
ICAgICAgIHJldHVybiB0eXBlOwogCi0gICAgdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKKyAgICB0eXBl
ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlTm9uQWRkcmVzc1Nw
YWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0eXBlKQpAQCAtODQ3LDcgKzkwOCw3IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uCiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+IHR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHR5cGU7
CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbikpIHsKICAgICAgICAg
YXV0byBwYXJzZWRUeXBlID0gcGFyc2VUeXBlKCk7CiAgICAgICAgIGlmICghcGFyc2VkVHlwZSkK
QEAgLTg2MywyMSArOTI0LDI1IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5p
dGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiAgICAgaWYgKCFm
aXJzdEVudW1lcmF0aW9uTWVtYmVyKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
Zmlyc3RFbnVtZXJhdGlvbk1lbWJlci5lcnJvcigpKTsKIAotICAgIEFTVDo6RW51bWVyYXRpb25N
ZW1iZXJzIG1lbWJlcnM7Ci0gICAgbWVtYmVycy5hcHBlbmQoV1RGTW92ZSgqZmlyc3RFbnVtZXJh
dGlvbk1lbWJlcikpOworICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uIHJlc3VsdChXVEZN
b3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSkp
OworICAgIGF1dG8gc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqZmlyc3RFbnVtZXJhdGlv
bk1lbWJlcikpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhaWwoU3RyaW5n
KCJDYW5ub3QgYWRkIGVudW1lcmF0aW9uIG1lbWJlciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEp
KSB7CiAgICAgICAgIGF1dG8gbWVtYmVyID0gcGFyc2VFbnVtZXJhdGlvbk1lbWJlcigpOwogICAg
ICAgICBpZiAoIW1lbWJlcikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPiht
ZW1iZXIuZXJyb3IoKSk7Ci0gICAgICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKm1lbWJlcikp
OworICAgICAgICBzdWNjZXNzID0gcmVzdWx0LmFkZChXVEZNb3ZlKCptZW1iZXIpKTsKKyAgICAg
ICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhaWwoU3RyaW5nKCJDYW5ub3Qg
YWRkIGVudW1lcmF0aW9uIG1lbWJlciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
ICAgICB9CiAKICAgICBhdXRvIHJpZ2h0Q3VybHlCcmFja2V0ID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpSaWdodEN1cmx5QnJhY2tldCk7CiAgICAgaWYgKCFyaWdodEN1cmx5QnJh
Y2tldCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0Q3VybHlCcmFja2V0
LmVycm9yKCkpOwogCi0gICAgcmV0dXJuIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uKFdURk1v
dmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSh0eXBlKSwg
V1RGTW92ZShtZW1iZXJzKSk7CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogYXV0
byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25NZW1iZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyLCBFcnJvcj4gewpAQCAtOTgxLDcgKzEwNDYsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VBdHRyaWJ1dGVCbG9jaygpIC0+IEV4cGVjdGVkPEFTVDo6QXR0cmlidXRlQmxvY2ssIEVy
cm9yPiB7CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6OnBh
cnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXIsIEVycm9yPiB7CithdXRv
IFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24sIEVycm9yPiB7CiAgICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmln
aW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBA
IC05OTIsNyArMTA1Nyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVj
dGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4gewogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBPcHRpb25hbDxTdHJp
bmc+IG5hbWU7CisgICAgU3RyaW5nIG5hbWU7CiAgICAgaWYgKGF1dG8gdG9rZW4gPSB0cnlUeXBl
KExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcikpCiAgICAgICAgIG5hbWUgPSB0b2tlbi0+
c3RyaW5nVmlldy50b1N0cmluZygpOwogCkBAIC0xMDAwLDE4ICsxMDY1LDE4IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4g
ewogICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1hbnRpYygpOwogICAgICAgICBpZiAo
IXNlbWFudGljKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWFudGlj
LmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpQYXJhbWV0ZXIoV1RGTW92ZSgqb3JpZ2lu
KSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUoKnNlbWFudGljKSk7CisgICAgICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSks
IFdURk1vdmUobmFtZSksIFdURk1vdmUoKnNlbWFudGljKSwgbnVsbHB0cik7CiAgICAgfQogCi0g
ICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlm
aWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQpOworICAg
IHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92
ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSksIFdURjo6bnVsbG9w
dCwgbnVsbHB0cik7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBl
Y3RlZDxBU1Q6OlBhcmFtZXRlcnMsIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0
ZXJzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywgRXJyb3I+IHsKICAg
ICBhdXRvIGxlZnRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6
TGVmdFBhcmVudGhlc2lzKTsKICAgICBpZiAoIWxlZnRQYXJlbnRoZXNpcykKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsKIAotICAgIEFT
VDo6UGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0UGFy
ZW50aGVzaXMpKQogICAgICAgICByZXR1cm4gV1RGTW92ZShwYXJhbWV0ZXJzKTsKIApAQCAtMTE0
OSwxMCArMTIxNCwxMCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFy
YXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYQogICAgICAgICBhdXRvIHNl
bWFudGljID0gcGFyc2VTZW1hbnRpYygpOwogICAgICAgICBpZiAoIXNlbWFudGljKQogICAgICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWFudGljLmVycm9yKCkpOwotICAgICAg
ICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwg
V1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJPcGVyYXRvciBDYXN0IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3Zl
KCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdU
Rk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5n
KCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
KnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOwogICAgIH0KIAotICAgIHJldHVybiBB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxv
cHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIk9wZXJhdG9yIENhc3QiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCk7Cisg
ICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0s
IFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0KTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+
IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHsKQEAgLTE0NDMsNyAr
MTUwOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZURvV2hpbGVMb29wKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpEb1doaWxlTG9vcCwgRXJyb3I+IHsKICAgICByZXR1cm4gQVNUOjpEb1doaWxlTG9vcChXVEZN
b3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpib2R5KSwgV1RGTW92ZSgqY29uZGl0aW9uYWwpKTsKIH0K
IAotYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiYmIHR5cGUpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwg
RXJyb3I+IHsKK2F1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlm
ICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9y
KCkpOwpAQCAtMTQ4OCw3ICsxNTUzLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNs
YXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICBp
ZiAoIXR5cGUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkp
OwogCi0gICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4oKCp0eXBlKS0+Y2xvbmUoKSkpOwor
ICAgIGF1dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9uKCgqdHlwZSktPmNsb25lKCkpOwogICAgIGlmICghZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9u
KQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RWYXJpYWJsZURlY2xhcmF0
aW9uLmVycm9yKCkpOwogCkBAIC0xNDk2LDcgKzE1NjEsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnNTdAogICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9u
KSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewot
ICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4oKCp0eXBlKS0+Y2xvbmUoKSkpOworICAgICAg
ICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0
eXBlKS0+Y2xvbmUoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YXJpYWJsZURlY2xhcmF0aW9uLmVycm9y
KCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5oCmluZGV4IGRhM2UwNmIwMWU0Li44MDEzOTE0OTgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCkBAIC0yNyw3ICsyNyw2IEBA
CiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKICNp
bmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJl
c3Npb24uaCIKQEAgLTY4LDcgKzY3LDYgQEAKICNpbmNsdWRlICJXSExTTE5vZGUuaCIKICNpbmNs
dWRlICJXSExTTE51bGxMaXRlcmFsLmgiCiAjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1ZGUgIldI
TFNMUG9pbnRlclR5cGUuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKICNpbmNsdWRlICJX
SExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgpAQCAtMTU0LDEzICsxNTIsMTMgQEAgcHJp
dmF0ZToKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPiBwYXJzZVR5
cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAgIHN0cnVjdCBUeXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQgewogICAgICAgICBMZXhlcjo6VG9rZW4gdG9rZW47Ci0gICAgICAgIE9wdGlvbmFsPExleGVy
OjpUb2tlbj4gYWRkcmVzc1NwYWNlOworICAgICAgICBPcHRpb25hbDxBU1Q6OlJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwogICAgICAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gbnVtRWxlbWVudHM7CiAgICAgfTsKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQsIEVycm9yPiBwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpOwotICAgIEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VU
eXBlKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBw
YXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiwgRXJyb3I+IHBhcnNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwor
ICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBh
cnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlVHlwZSgpOwogICAgIEV4cGVjdGVkPEFTVDo6
VHlwZURlZmluaXRpb24sIEVycm9yPiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgRXhwZWN0
ZWQ8QVNUOjpCdWlsdEluU2VtYW50aWMsIEVycm9yPiBwYXJzZUJ1aWx0SW5TZW1hbnRpYygpOwog
ICAgIEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VTZW1hbnRpYywgRXJyb3I+IHBhcnNlUmVzb3VyY2VT
ZW1hbnRpYygpOwpAQCAtMTc1LDggKzE3Myw4IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlv
bigpOwogICAgIEV4cGVjdGVkPEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLCBFcnJv
cj4gcGFyc2VOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUoKTsKICAgICBFeHBlY3RlZDxBU1Q6
OkF0dHJpYnV0ZUJsb2NrLCBFcnJvcj4gcGFyc2VBdHRyaWJ1dGVCbG9jaygpOwotICAgIEV4cGVj
dGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXIoKTsKLSAgICBFeHBlY3Rl
ZDxBU1Q6OlBhcmFtZXRlcnMsIEVycm9yPiBwYXJzZVBhcmFtZXRlcnMoKTsKKyAgICBFeHBlY3Rl
ZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVBhcmFtZXRlcigpOworICAg
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiBwYXJzZVBhcmFtZXRl
cnMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJz
ZUVudHJ5UG9pbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigp
OwogICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlT3Bl
cmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CkBAIC0xOTIsNyArMTkwLDcgQEAgcHJpdmF0ZToK
ICAgICBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiBwYXJzZUZvckxvb3AoKTsKICAgICBF
eHBlY3RlZDxBU1Q6OldoaWxlTG9vcCwgRXJyb3I+IHBhcnNlV2hpbGVMb29wKCk7CiAgICAgRXhw
ZWN0ZWQ8QVNUOjpEb1doaWxlTG9vcCwgRXJyb3I+IHBhcnNlRG9XaGlsZUxvb3AoKTsKLSAgICBF
eHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJik7CisgICAgRXhwZWN0ZWQ8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmKTsKICAgICBFeHBlY3RlZDxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9ucygpOwogICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0YXRlbWVudD4sIEVy
cm9yPiBwYXJzZVN0YXRlbWVudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAppbmRleCAwZWI2NGRlY2Q0ZC4uNDYwZTk0
NmZkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcApAQCAtMjgsMTAgKzI4LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCiAKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hM
U0xOYW1lUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXSExTTFBhcnNlci5oIgogI2luY2x1ZGUgIldI
TFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKICNp
bmNsdWRlICJXSExTTFN0YW5kYXJkTGlicmFyeS5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGguaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1
Y3RvcnMuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5o
IgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDggKzU3LDIzIEBAIE9wdGlvbmFsPFByZXBhcmF0aW9u
UmVzdWx0PiBwcmVwYXJlKFN0cmluZ1ZpZXcgc291cmNlKQogICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJlc29sdmVOYW1lc0luVHlwZXMocHJv
Z3JhbSk7CisgICAgTmFtZVJlc29sdmVyIG5hbWVSZXNvbHZlcihwcm9ncmFtLm5hbWVDb250ZXh0
KCkpOworICAgIGlmICghcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghY2hlY2tSZWN1cnNpdmVU
eXBlcyhwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBzeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChw
cm9ncmFtKTsKKyAgICBzeW50aGVzaXplQ29uc3RydWN0b3JzKHByb2dyYW0pOworICAgIGlmICgh
Y2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgaWYgKCFyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVz
b2x2ZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAKKyAgICBpZiAoY2hlY2so
cHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIFByZXBh
cmF0aW9uUmVzdWx0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKaW5kZXggNTYzMGZlNjllZTQuLjYwZWU0NzkwMTVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dy
YW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dy
YW0uaApAQCAtMjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUg
IldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKICNpbmNs
dWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlv
bi5oIgpAQCAtNDQsNDUgKzQ2LDY0IEBAIHB1YmxpYzoKICAgICBQcm9ncmFtKCkgPSBkZWZhdWx0
OwogICAgIFByb2dyYW0oUHJvZ3JhbSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIGFwcGVuZChB
U1Q6OlR5cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24pCisgICAgYm9vbCBhcHBlbmQoQVNU
OjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV90eXBl
RGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUodHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgbV90
eXBlRGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlRGVmaW5pdGlv
bj4oV1RGTW92ZSh0eXBlRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRl
eHQuYWRkKCptX3R5cGVEZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVu
ZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorCisgICAg
Ym9vbCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlv
bikKICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUo
c3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFw
cGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4oV1RGTW92ZShz
dHJ1Y3R1cmVEZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQo
Km1fc3RydWN0dXJlRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQo
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCisKKyAg
ICBib29sIGFwcGVuZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVm
aW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQo
V1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkRl
ZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPihXVEZNb3ZlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1f
bmFtZUNvbnRleHQuYWRkKCptX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9
Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmlu
aXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0
aW9uRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBl
bmQoV1RGTW92ZShmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlZmlu
aXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihX
VEZNb3ZlKGZ1bmN0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRl
eHQuYWRkKCptX2Z1bmN0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBh
cHBlbmQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBtX25hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbikpKTsKKyAgICAgICAgbV9pbnRyaW5zaWNzLmFkZCgqbV9uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29u
dGV4dC5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKTsKICAgICB9Ci0g
ICAgdm9pZCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYm
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKICAgICB7Ci0gICAgICAgIG1fbmF0aXZlVHlwZURlY2xh
cmF0aW9ucy5hcHBlbmQoV1RGTW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
bV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpKTsKKyAg
ICAgICAgbV9pbnRyaW5zaWNzLmFkZCgqbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7
CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9uYXRpdmVUeXBlRGVjbGFyYXRp
b25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+JiB0
eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5cGVEZWZpbml0aW9uczsgfQotICAgIFZlY3Rv
cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0
dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24+JiBlbnVtZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJh
dGlvbkRlZmluaXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPiYg
ZnVuY3Rpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQot
ICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+JiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0K
LSAgICBWZWN0b3I8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+JiBuYXRpdmVUeXBlRGVjbGFy
YXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOyB9CisgICAgTmFtZUNv
bnRleHQmIG5hbWVDb250ZXh0KCkgeyByZXR1cm4gbV9uYW1lQ29udGV4dDsgfQorICAgIEludHJp
bnNpY3MmIGludHJpbnNpY3MoKSB7IHJldHVybiBtX2ludHJpbnNpY3M7IH0KKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZURlZmluaXRpb24+PiYgdHlwZURlZmluaXRpb25zKCkg
eyByZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0
dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7
IHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPj4mIGZ1bmN0aW9uRGVmaW5p
dGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBjb25zdCBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+JiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbj4+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJu
IG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPj4mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMo
KSB7IHJldHVybiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKLSAgICBW
ZWN0b3I8QVNUOjpUeXBlRGVmaW5pdGlvbj4gbV90eXBlRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9y
PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKLSAgICBW
ZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+IG1fZW51bWVyYXRpb25EZWZpbml0aW9u
czsKLSAgICBWZWN0b3I8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+IG1fZnVuY3Rpb25EZWZpbml0
aW9uczsKLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiBtX25hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOwotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOworICAgIE5hbWVDb250ZXh0IG1fbmFtZUNv
bnRleHQ7CisgICAgSW50cmluc2ljcyBtX2ludHJpbnNpY3M7CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90eXBlRGVmaW5pdGlvbnM7CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiBtX3N0cnVjdHVy
ZURlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24+PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+IG1fZnVuY3Rpb25EZWZpbml0aW9u
czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4+IG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+IG1fbmF0aXZlVHlwZURlY2xhcmF0
aW9uczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiM2QwYzI3NDNlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVU
eXBlQ2hlY2tlci5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUmVjdXJzaXZl
VHlwZUNoZWNrZXIuaCIKKworI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworY2xhc3MgUmVjdXJzaXZlVHlwZUNoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6
CisgICAgflJlY3Vyc2l2ZVR5cGVDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNp
dChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVE
ZWZpbml0aW9uKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlw
ZURlZmluaXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1
cmVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3IpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgm
c3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkg
eworICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKwor
ICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmc3RydWN0dXJlRGVmaW5pdGlv
bik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZ0eXBlUmVmZXJlbmNlKTsKKyAgICAg
ICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBtX2Vycm9yID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYg
dHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCisgICAgICAgICAg
ICBWaXNpdG9yOjp2aXNpdCh0eXBlQXJndW1lbnQpOworICAgICAgICB2aXNpdE5hbWVkVHlwZSgq
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0g
bV90eXBlcy5yZW1vdmUoJnR5cGVSZWZlcmVuY2UpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VU
eXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBlcnJvcigpIHsgcmV0dXJu
IG1fZXJyb3I7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1fZXJyb3IgeyBmYWxzZSB9OworICAg
IEhhc2hTZXQ8QVNUOjpUeXBlKj4gbV90eXBlczsKK307CisKK2Jvb2wgY2hlY2tSZWN1cnNpdmVU
eXBlcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFJlY3Vyc2l2ZVR5cGVDaGVja2VyIHJlY3Vy
c2l2ZVR5cGVDaGVja2VyOworICAgIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLlZpc2l0b3I6OnZpc2l0
KHByb2dyYW0pOworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hlY2tlci5lcnJvcigpOworfQor
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlhM2ExOWRjZTIwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVU
eXBlQ2hlY2tlci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitib29sIGNoZWNrUmVjdXJzaXZlVHlwZXMo
UHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTIyODM1ZjFlNjQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldI
TFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworQVNUOjpOYW1l
ZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mIHBvc3NpYmxlVHlwZXMsIEFTVDo6VHlwZUFyZ3VtZW50
cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAgICBBU1Q6Ok5hbWVkVHlwZSogcmVzdWx0ID0gbnVsbHB0
cjsKKyAgICBmb3IgKGF1dG8mIHBvc3NpYmxlVHlwZSA6IHBvc3NpYmxlVHlwZXMpIHsKKyAgICAg
ICAgaWYgKGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKHBvc3NpYmxlVHlwZSwgdHlwZUFyZ3Vt
ZW50cykpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICByZXN1bHQgPSAmc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5
cGUmPihwb3NzaWJsZVR5cGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzNmNjBlYTlkNjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmVPdmVybG9hZEltcGwuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQu
aCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgTmFtZWRUeXBlOworCit9CisKK0FTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92
ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4s
IDE+JiwgQVNUOjpUeXBlQXJndW1lbnRzJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiNGJkNTAwODZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBcnJheVR5cGVzIDogcHVibGljIFZpc2l0b3Igewor
cHVibGljOgorICAgIH5GaW5kQXJyYXlUeXBlcygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlz
aXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
YXJyYXlUeXBlcy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJy
YXlUeXBlKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5VHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdU
Rk1vdmUobV9hcnJheVR5cGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+PiBtX2FycmF5VHlwZXM7Cit9OworCit2
b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCit7Cisg
ICAgRmluZEFycmF5VHlwZXMgZmluZEFycmF5VHlwZXM7CisgICAgZmluZEFycmF5VHlwZXMuVmlz
aXRvcjo6dmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBhcnJheVR5cGVzID0gZmluZEFycmF5VHlw
ZXMudGFrZUFycmF5VHlwZXMoKTsKKworICAgIGZvciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlU
eXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBu
dWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwor
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygp
LnVpbnRUeXBlKCkpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsK
KyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSk7CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmU5YTlhMTE0ZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xh
c3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFt
Jik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MWY5ZGMwNGFlYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBbGxUeXBlcyA6IHB1YmxpYyBWaXNpdG9y
IHsKK3B1YmxpYzoKKyAgICB+RmluZEFsbFR5cGVzKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2
aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChwb2ludGVyVHlwZSk7CisgICAgICAgIFZpc2l0b3I6
OnZpc2l0KHBvaW50ZXJUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICAgICAgVmlz
aXRvcjo6dmlzaXQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3Vu
bmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJy
YXlUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25h
bWVkVHlwZXMuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIFZpc2l0b3I6
OnZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOwor
ICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbik7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpVbm5hbWVkVHlwZT4+JiYgdGFrZVVubmFtZWRUeXBlcygpCisgICAgeworICAgICAgICByZXR1
cm4gV1RGTW92ZShtX3VubmFtZWRUeXBlcyk7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYmIHRha2VOYW1lZFR5cGVzKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbmFtZWRUeXBlcyk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiBt
X3VubmFtZWRUeXBlczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4+IG1fbmFtZWRUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9y
cyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIEZpbmRBbGxUeXBlcyBmaW5kQWxsVHlwZXM7Cisg
ICAgZmluZEFsbFR5cGVzLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOworICAgIGF1dG8gbV91bm5h
bWVkVHlwZXMgPSBmaW5kQWxsVHlwZXMudGFrZVVubmFtZWRUeXBlcygpOworICAgIGF1dG8gbV9u
YW1lZFR5cGVzID0gZmluZEFsbFR5cGVzLnRha2VOYW1lZFR5cGVzKCk7CisKKyAgICBmb3IgKGF1
dG8mIHVubmFtZWRUeXBlIDogbV91bm5hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBl
LmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmdldCgpLmNs
b25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5n
ZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5h
bWVkVHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBm
YWxzZSk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7
CisKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1
Y3RvcihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3Ry
aW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgIHBy
b2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAgfQorCisgICAg
Zm9yIChhdXRvJiBuYW1lZFR5cGUgOiBtX25hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlw
ZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5n
ZXQoKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0
KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxz
ZSk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisK
KyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3Rv
cihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJv
cGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgIHByb2dyYW0u
YXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAgfQorfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MDAyMGRkN2M3MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0
cnVjdG9ycy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplQ29uc3RydWN0b3JzKFBy
b2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4zYjIzMDdmMzMzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNw
cApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1
bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K3ZvaWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCit7
CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0
aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
KmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRp
b24yKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLmJv
b2xUeXBlKCkpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJh
dGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50
eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvci52YWx1ZSIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsK
KyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
KmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBm
YWxzZSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51
bGxwdHIpOworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJz
OworICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVs
bG9wdCwgZmFsc2UpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYzEwNzg3MmVmOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRo
ZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYTIzMDI3ODdkYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xT
eW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgiCisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVu
Y2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0m
IHByb2dyYW0pCit7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3Jh
bS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJl
RWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVs
ZAorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZzo6Zm9ybWF0KCJv
cGVyYXRvci4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6
IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3RydWN0dXJlRGVmaW5pdGlvbiks
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVt
ZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAg
ICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
MSkpOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVE
ZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2lu
KCkpLCAqc3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0i
LCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBl
bmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAgICBh
dXRvIGNyZWF0ZUFuZGVyID0gWyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVy
VHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3Bh
Y2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVu
dC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1
bWVudFR5cGUpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NT
cGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nOjpmb3JtYXQo
Im9wZXJhdG9yJi4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZTo6Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0
ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKTsKKyAgICAg
ICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRk
cmVzc1NwYWNlOjpUaHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3Jl
YXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpOworICAg
ICAgICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi40ZTliOWZmNzBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xh
c3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0m
KTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmIzODAzNWRjOWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtMCwwICsxLDU4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJy
YXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNlU2Vt
YW50aWMuaCIKKyNpbmNsdWRlICJXSExTTEJsb2NrLmgiCisjaW5jbHVkZSAiV0hMU0xCb29sZWFu
TGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKKyNpbmNsdWRlICJXSExTTEJ1aWx0
SW5TZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKKyNpbmNsdWRlICJXSExT
TERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIK
KyNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5p
dGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRlICJX
SExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCisjaW5jbHVk
ZSAiV0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNs
dWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNs
dWRlICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dp
Y2FsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5o
IgorI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVk
ZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKKyNpbmNsdWRlICJXSExTTFJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUu
aCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFJl
dHVybi5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFNwZWNp
YWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNl
bWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFN0
cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRl
bWVudC5oIgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTFRyYXAuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVB
cmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWwuaCIKKyNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExT
TFdoaWxlTG9vcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBmb3IgKGF1
dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAg
dmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRp
b24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpCisgICAgICAgIHZpc2l0KCpzdHJ1
Y3R1cmVEZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKQorICAgICAgICB2aXNpdCgqZW51bWVy
YXRpb25EZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICB2aXNpdCgqZnVuY3Rpb25EZWZp
bml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9n
cmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgIHZpc2l0KCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
biA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKQorICAgICAgICB2aXNpdCgqbmF0
aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdFVubmFtZWRUeXBl
KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIGlmIChpczxBU1Q6OlR5cGVS
ZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBl
UmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBpZiAoaXM8QVNU
OjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7
CisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1l
ZFR5cGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUeXBlRGVmaW5p
dGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgdmlzaXRVbm5hbWVkVHlwZSh0eXBlRGVmaW5p
dGlvbi50eXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVy
ZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCisgICAg
ICAgIHZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAg
dmlzaXRVbm5hbWVkVHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3Ig
KGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0
aW9uTWVtYmVycygpKQorICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJlcik7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5p
dGlvbikKK3sKKyAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24m
PihmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxv
Y2soKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIHZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDog
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAgdmlzaXQodHlw
ZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2Um
IHR5cGVSZWZlcmVuY2UpCit7CisgICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVm
ZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAgdmlzaXQodHlwZUFyZ3VtZW50KTsKKyAg
ICBpZiAodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSAmJiBpczxBU1Q6OlR5cGVEZWZpbml0
aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgIHZpc2l0VW5uYW1l
ZFR5cGUoZG93bmNhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2
ZWRUeXBlKCkpLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpQb2ludGVy
VHlwZSYgcG9pbnRlclR5cGUpCit7CisgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVu
Y2VUeXBlJj4ocG9pbnRlclR5cGUpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQoreworICAgIHZpc2l0KHN0YXRp
Y19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KGFycmF5UmVmZXJlbmNlVHlwZSkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgdmlz
aXRVbm5hbWVkVHlwZShhcnJheVR5cGUudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7CisgICAgdmlzaXRV
bm5hbWVkVHlwZShzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVs
ZW1lbnQuc2VtYW50aWMoKSkKKyAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50
aWMoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYg
ZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkp
CisgICAgICAgIHZpc2l0KCplbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRp
b24pCit7CisgICAgdmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsK
KyAgICB2aXNpdFVubmFtZWRUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBm
b3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpKQor
ICAgICAgICB2aXNpdChwYXJhbWV0ZXIpOworICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLnNl
bWFudGljKCkpCisgICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkp
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1l
bnQpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7CisgICAgICAgIHZpc2l0KGNvbnN0YW50
RXhwcmVzc2lvbik7CisgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVu
Y2U+JiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAgIHZpc2l0KCp0eXBlUmVmZXJlbmNlKTsKKyAg
ICB9KSwgdHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlZmVy
ZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7CisgICAgdmlzaXRVbm5hbWVkVHlwZShyZWZlcmVu
Y2VUeXBlLmVsZW1lbnRUeXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U2Vt
YW50aWMmIHNlbWFudGljKQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
QVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykgeworICAgICAgICB2aXNpdChi
dWlsdEluU2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291
cmNlU2VtYW50aWMpIHsKKyAgICAgICAgdmlzaXQocmVzb3VyY2VTZW1hbnRpYyk7CisgICAgfSwg
WyZdKEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiBzcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWMpIHsKKyAgICAgICAgdmlzaXQoc3BlY2lhbGl6YXRpb25Db25zdGFudFNl
bWFudGljKTsKKyAgICB9LCBbJl0oQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmIHN0YWdlSW5PdXRT
ZW1hbnRpYykgeworICAgICAgICB2aXNpdChzdGFnZUluT3V0U2VtYW50aWMpOworICAgIH0pLCBz
ZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Np
b24mIGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwp
IHsKKyAgICAgICAgdmlzaXQoaW50ZWdlckxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgdmlz
aXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFs
JiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgdmlzaXQoZmxvYXRMaXRlcmFsKTsKKyAgICB9LCBb
Jl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKKyAgICAgICAgdmlzaXQobnVsbExp
dGVyYWwpOworICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkg
eworICAgICAgICB2aXNpdChib29sZWFuTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgIHZpc2l0KGNvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKKyAgICB9KSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCit7Cisg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAg
ICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpCdWlsdEluU2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVz
b3VyY2VTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTcGVjaWFs
aXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6U3RhZ2VJbk91dFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkludGVnZXJMaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Rmxv
YXRMaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFs
JikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJikKK3sK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZ1
bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAgICBXVEY6OnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpIHsKKyAgICAgICAgdmlzaXQobnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlKTsKKyAgICB9KSwgZnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJikKK3sKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykKK3sKKyAgICBmb3IgKGF1dG8m
IHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKKyAgICAgICAgdmlzaXQoKnN0YXRlbWVu
dCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkK
K3sKKyAgICBpZiAoaXM8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpCcmVh
az4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCcmVhaz4oc3RhdGVt
ZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSkKKyAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBp
ZiAoaXM8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpF
ZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwor
ICAgIGVsc2UgaWYgKGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpCisgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6Rm9yTG9vcD4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpGb3JMb29wPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OklmU3RhdGVtZW50
PihzdGF0ZW1lbnQpKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OklmU3RhdGVtZW50Pihz
dGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSkKKyAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkpOworICAgIGVsc2Ug
aWYgKGlzPEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlN3
aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpT
d2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6VHJhcD4o
c3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQp
KTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Pihz
dGF0ZW1lbnQpKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlz
PEFTVDo6V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OkJyZWFrJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnRpbnVl
JikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxl
TG9vcCkKK3sKKyAgICB2aXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOworICAgIHZpc2l0KGRvV2hp
bGVMb29wLmNvbmRpdGlvbmFsKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RXhw
cmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBpZiAoaXM8QVNUOjpBc3NpZ25tZW50RXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkJvb2xlYW5M
aXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCb29sZWFu
TGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNhbGxFeHByZXNz
aW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDb21tYUV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNvbW1hRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0TGl0
ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RmxvYXRMaXRl
cmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4o
ZXhwcmVzc2lvbikpCisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWw+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihl
eHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkxvZ2ljYWxOb3RF
eHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAo
aXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQor
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNz
aW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
PihleHByZXNzaW9uKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIHZpc2l0
KHN0YXRpY19jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJj4oZG90RXhwcmVzc2lv
bikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRl
eEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lv
bigpKTsKKyAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biY+KGluZGV4RXhwcmVzc2lvbikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIHZpc2l0KGV4cHJlc3Np
b24uYmFzZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJl
c3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCit7CisgICAgdmlz
aXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQoreworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQm
IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgIHZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6
RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgdmlzaXQoKmV4cHJlc3Npb24pOwor
ICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgIGlmIChmb3JMb29wLmNvbmRp
dGlvbigpKQorICAgICAgICB2aXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgaWYgKGZv
ckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsK
KyAgICB2aXNpdChmb3JMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAgdmlzaXQoaWZTdGF0ZW1lbnQuY29u
ZGl0aW9uYWwoKSk7CisgICAgdmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZT
dGF0ZW1lbnQuZWxzZUJvZHkoKSkKKyAgICAgICAgdmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5
KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1l
bnQpCit7CisgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKQorICAgICAgICB2aXNpdCgq
cmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKQor
ICAgICAgICB2aXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKKyAgICB2aXNpdChzd2l0Y2hDYXNl
LmJsb2NrKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50
JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgdmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkp
OworICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNl
cygpKQorICAgICAgICB2aXNpdChzd2l0Y2hDYXNlKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlRyYXAmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQorewor
ICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3
aGlsZUxvb3ApCit7CisgICAgdmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIHZp
c2l0KHdoaWxlTG9vcC5ib2R5KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICB2aXNpdFVubmFt
ZWRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNs
YXJhdGlvbi5zZW1hbnRpYygpKQorICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5z
ZW1hbnRpYygpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQor
ICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50
RXhwcmVzc2lvbikKK3sKKyAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwor
ICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIGZv
ciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKKyAgICAgICAg
dmlzaXQoKmFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbW1hRXhw
cmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQoreworICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6
IGNvbW1hRXhwcmVzc2lvbi5saXN0KCkpCisgICAgICAgIHZpc2l0KCpleHByZXNzaW9uKTsKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZl
cmVuY2VFeHByZXNzaW9uKQoreworICAgIHZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2lu
dGVyKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24m
IGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQo
KSk7CisgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Np
b24pCit7CisgICAgdmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgdmlzaXQobWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpN
YWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKK3sKKyAgICB2aXNp
dChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbikKK3sKKyAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsK
KyAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOworICAgIHZp
c2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7CisgICAgdmlzaXQocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7CisgICAgdmlzaXQo
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9u
KQoreworICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICB2aXNp
dCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICB2aXNpdCh0ZXJuYXJ5
RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikKK3sKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAppbmRl
eCA1MTY4NTZlNDFkMC4uZDAyMmFkY2I5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCkBAIC0yNyw1NDMgKzI3LDE0OSBAQAog
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgotI2luY2x1
ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNM
QXJyYXlSZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKLSNpbmNs
dWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xCYXNlRnVu
Y3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgotI2luY2x1
ZGUgIldITFNMQmxvY2suaCIKLSNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgiCi0jaW5j
bHVkZSAiV0hMU0xCcmVhay5oIgotI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGljLmgiCi0j
aW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29tbWFFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgiCi0j
aW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgotI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgotI2luY2x1ZGUgIldITFNM
RG90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudC5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgotI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5o
IgotI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKLSNpbmNsdWRlICJXSExTTEZsb2F0TGl0
ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rp
b25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMSWZTdGF0
ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldI
TFNMSW50ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTWFrZVBvaW50
ZXJFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJX
SExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hM
U0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRl
ci5oIgotI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCi0jaW5j
bHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xS
ZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCi0jaW5j
bHVkZSAiV0hMU0xSZXR1cm4uaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0jaW5jbHVk
ZSAiV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExT
TFN0YWdlSW5PdXRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCi0jaW5j
bHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1
cmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCi0jaW5jbHVkZSAiV0hM
U0xTd2l0Y2hTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xUcmFwLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVk
ZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xVbnNpZ25l
ZEludGVnZXJMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgotI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCi0j
aW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKLQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5h
bWVzcGFjZSBXSExTTCB7CiAKLWNsYXNzIFZpc2l0b3IgewotICAgIH5WaXNpdG9yKCkgPSBkZWZh
dWx0OwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KFByb2dyYW0mIHByb2dyYW0pCi0gICAgewot
ICAgICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlv
bnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVEZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygp
KQotICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgICAgIGZvciAo
YXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRp
b25zKCkpCi0gICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOwotICAgICAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0
aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJv
Z3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVU
eXBlRGVjbGFyYXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgdmlzaXRUeXBlKEFTVDo6VHlwZSYg
dHlwZSkKLSAgICB7Ci0gICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHR5cGUpKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odHlwZSkpOwotICAgICAgICBlbHNlIGlm
IChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odHlwZSkpCi0gICAgICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odHlwZSkpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHR5cGUpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVm
aW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZSh0eXBlRGVmaW5pdGlvbi50eXBlKCkp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mIHN0cnVjdHVyZURlZmluaXRpb24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHN0cnVj
dHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCi0g
ICAgICAgICAgICB2aXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24udHlw
ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9u
RGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkKLSAgICAgICAgICAgIHZpc2l0KGVudW1l
cmF0aW9uTWVtYmVyKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0
KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlv
bikpOwotICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYg
dHlwZUFyZ3VtZW50IDogbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkKLSAg
ICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICAg
IGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkp
Ci0gICAgICAgICAgICB2aXNpdCh0eXBlQXJndW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKLSAgICB7Ci0gICAgICAg
IHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBh
cnJheVJlZmVyZW5jZVR5cGUpCi0gICAgewotICAgICAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6
OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKLSAgICB7Ci0gICAgICAg
IHZpc2l0VHlwZShhcnJheVR5cGUudHlwZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQotICAgIHsKLSAg
ICAgICAgdmlzaXRUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKLSAgICAgICAgaWYgKHN0
cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpzdHJ1Y3R1cmVF
bGVtZW50LnNlbWFudGljKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKLSAgICB7Ci0gICAgICAgIGlm
IChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKQotICAgICAgICAgICAgdmlzaXQoKmVudW1lcmF0
aW9uTWVtYmVyLnZhbHVlKCkpOwotICAgIH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQotICAgIHsKLSAg
ICAgICAgdmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsKLSAgICAg
ICAgdmlzaXRUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgZm9yIChh
dXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKSkKLSAgICAg
ICAgICAgIHZpc2l0KHBhcmFtZXRlcik7Ci0gICAgICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9u
LnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgqZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1h
bnRpYygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlQXJndW1l
bnQmIHR5cGVBcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgewot
ICAgICAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKLSAgICAgICAgfSwgWyZdKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSB7Ci0gICAg
ICAgICAgICB2aXNpdCgqdHlwZVJlZmVyZW5jZSk7Ci0gICAgICAgIH0pLCB0eXBlQXJndW1lbnQp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJl
ZmVyZW5jZVR5cGUpCi0gICAgewotICAgICAgICB2aXNpdFR5cGUocmVmZXJlbmNlVHlwZS5lbGVt
ZW50VHlwZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRp
YyYgc2VtYW50aWMpCi0gICAgewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpIHsKLSAgICAgICAgICAg
IHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlJlc291cmNlU2Vt
YW50aWMmIHJlc291cmNlU2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0KHJlc291cmNlU2Vt
YW50aWMpOwotICAgICAgICB9LCBbJl0oQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50
aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQo
c3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6U3Rh
Z2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0
KHN0YWdlSW5PdXRTZW1hbnRpYyk7Ci0gICAgICAgIH0pLCBzZW1hbnRpYyk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4
cHJlc3Npb24pCi0gICAgewotICAgICAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKLSAg
ICAgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6VW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgewotICAgICAgICAg
ICAgdmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkZs
b2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdChmbG9hdExpdGVy
YWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKLSAg
ICAgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVh
bkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdChib29sZWFuTGl0
ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSkgewotICAgICAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UpOwotICAgICAgICB9KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKQotICAgIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQotICAgICAg
ICAgICAgdmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlBhcmFtZXRlciYgcGFyYW1ldGVyKQotICAgIHsKLSAgICAgICAgdmlzaXRU
eXBlKHBhcmFtZXRlci50eXBlKCkpOwotICAgICAgICBpZiAocGFyYW1ldGVyLnNlbWFudGljKCkp
Ci0gICAgICAgICAgICB2aXNpdCgqcGFyYW1ldGVyLnNlbWFudGljKCkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpTdGFnZUluT3V0U2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpCi0gICAgewotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJikKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKQotICAgIHsKLSAgICB9CitjbGFzcyBQcm9ncmFt
OworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVHlwZURlZmluaXRpb247CitjbGFzcyBTdHJ1
Y3R1cmVEZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRnVu
Y3Rpb25EZWZpbml0aW9uOworY2xhc3MgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNz
IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKK2NsYXNzIFR5cGVSZWZlcmVuY2U7CitjbGFzcyBQb2lu
dGVyVHlwZTsKK2NsYXNzIEFycmF5UmVmZXJlbmNlVHlwZTsKK2NsYXNzIEFycmF5VHlwZTsKK2Ns
YXNzIFN0cnVjdHVyZUVsZW1lbnQ7CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKK2NsYXNzIEZ1
bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBSZWZlcmVuY2VUeXBlOworY2xhc3MgQ29uc3RhbnRF
eHByZXNzaW9uOworY2xhc3MgQnVpbHRJblNlbWFudGljOworY2xhc3MgUmVzb3VyY2VTZW1hbnRp
YzsKK2NsYXNzIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYzsKK2NsYXNzIFN0YWdlSW5P
dXRTZW1hbnRpYzsKK2NsYXNzIEludGVnZXJMaXRlcmFsOworY2xhc3MgVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbDsKK2NsYXNzIEZsb2F0TGl0ZXJhbDsKK2NsYXNzIE51bGxMaXRlcmFsOworY2xhc3Mg
Qm9vbGVhbkxpdGVyYWw7CitjbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZTsKK2NsYXNzIE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZTsKK2NsYXNzIEJs
b2NrOworY2xhc3MgU3RhdGVtZW50OworY2xhc3MgQnJlYWs7CitjbGFzcyBDb250aW51ZTsKK2Ns
YXNzIERvV2hpbGVMb29wOworY2xhc3MgRXhwcmVzc2lvbjsKK2NsYXNzIERvdEV4cHJlc3Npb247
CitjbGFzcyBJbmRleEV4cHJlc3Npb247CitjbGFzcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb247
CitjbGFzcyBFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50OworY2xhc3MgRmFsbHRocm91Z2g7
CitjbGFzcyBGb3JMb29wOworY2xhc3MgSWZTdGF0ZW1lbnQ7CitjbGFzcyBSZXR1cm47CitjbGFz
cyBTd2l0Y2hDYXNlOworY2xhc3MgU3dpdGNoU3RhdGVtZW50OworY2xhc3MgVHJhcDsKK2NsYXNz
IFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50OworY2xhc3MgV2hpbGVMb29wOworY2xhc3Mg
VmFyaWFibGVEZWNsYXJhdGlvbjsKK2NsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uOworY2xhc3Mg
Q2FsbEV4cHJlc3Npb247CitjbGFzcyBDb21tYUV4cHJlc3Npb247CitjbGFzcyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb247CitjbGFzcyBMb2dpY2FsRXhwcmVzc2lvbjsKK2NsYXNzIExvZ2ljYWxOb3RF
eHByZXNzaW9uOworY2xhc3MgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjsKK2NsYXNzIE1h
a2VQb2ludGVyRXhwcmVzc2lvbjsKK2NsYXNzIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb247Citj
bGFzcyBUZXJuYXJ5RXhwcmVzc2lvbjsKK2NsYXNzIFZhcmlhYmxlUmVmZXJlbmNlOworY2xhc3Mg
VW5uYW1lZFR5cGU7CitjbGFzcyBOYW1lZFR5cGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCi0gICAgewotICAgICAg
ICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlJiBudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIHZp
c2l0KG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgICAgIH0pLCBmdW5jdGlvbkF0
dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFk
c0Z1bmN0aW9uQXR0cmlidXRlJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6QmxvY2smIGJsb2NrKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1l
bnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdCgqc3RhdGVtZW50KTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVu
dCkKLSAgICB7Ci0gICAgICAgIGlmIChpczxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKQotICAgICAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzPEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpD
b250aW51ZT4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Q29u
dGludWU+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRvV2hpbGVMb29w
PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEb1doaWxlTG9v
cD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RWZmZWN0ZnVsRXhwcmVz
c2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJ
ZlN0YXRlbWVudD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJldHVy
bj4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmV0dXJuPihz
dGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1l
bnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1l
bnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVu
dCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3Rh
dGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6VHJhcD4oc3RhdGVtZW50KSkKLSAg
ICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHJhcD4oc3RhdGVtZW50KSk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVu
dCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXM8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb250aW51ZSYpCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKLSAgICB7Ci0g
ICAgICAgIHZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgIHZpc2l0KGRvV2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBpZiAoaXM8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6Qm9vbGVhbkxpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBl
bHNlIGlmIChpczxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAg
ICAgZWxzZSBpZiAoaXM8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+
KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVy
YWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJh
bD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkludGVnZXJM
aXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbEV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpM
b2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXM8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlm
IChpczxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAo
aXM8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Np
b24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
PihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lv
bikpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlPihleHByZXNzaW9uKSk7Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBl
ZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgdmlzaXQoZWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKLSAgICB7Ci0g
ICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKLSAgICAg
ICAgICAgIHZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKLSAgICAgICAgfSwg
WyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7Ci0gICAg
ICAgICAgICB2aXNpdCgqZXhwcmVzc2lvbik7Ci0gICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxp
emF0aW9uKCkpOwotICAgICAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkKLSAgICAgICAgICAg
IHZpc2l0KCpmb3JMb29wLmNvbmRpdGlvbigpKTsKLSAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVt
ZW50KCkpCi0gICAgICAgICAgICB2aXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7Ci0gICAgICAg
IHZpc2l0KGZvckxvb3AuYm9keSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChpZlN0
YXRlbWVudC5jb25kaXRpb25hbCgpKTsKLSAgICAgICAgdmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgp
KTsKLSAgICAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpCi0gICAgICAgICAgICB2aXNp
dCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCi0gICAgewotICAgICAgICBpZiAocmV0
dXJuU3RhdGVtZW50LnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqcmV0dXJuU3RhdGVtZW50
LnZhbHVlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENh
c2UmIHN3aXRjaENhc2UpCi0gICAgewotICAgICAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKQot
ICAgICAgICAgICAgdmlzaXQoKnN3aXRjaENhc2UudmFsdWUoKSk7Ci0gICAgICAgIHZpc2l0KHN3
aXRjaENhc2UuYmxvY2soKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChz
d2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6
IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQotICAgICAgICAgICAgdmlzaXQoc3dpdGNo
Q2FzZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKLSAgICB7Ci0gICAg
ICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdCh2YXJp
YWJsZURlY2xhcmF0aW9uKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpX
aGlsZUxvb3AmIHdoaWxlTG9vcCkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHdoaWxlTG9vcC5jb25k
aXRpb25hbCgpKTsKLSAgICAgICAgdmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVE
ZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9u
LnR5cGUoKSk7Ci0gICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCi0g
ICAgICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKLSAgICAg
ICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKLSAgICAgICAgICAgIHZp
c2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhw
cmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQo
KSk7Ci0gICAgICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVz
c2lvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lv
bi5hcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KCphcmd1bWVudCk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Np
b24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJlc3Np
b24ubGlzdCgpKQotICAgICAgICAgICAgdmlzaXQoKmV4cHJlc3Npb24pOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVu
Y2VFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9u
LnBvaW50ZXIoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNh
bEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQobG9n
aWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICAgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24u
cmlnaHQoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5v
dEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQo
bG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCi0gICAgewot
ICAgICAgICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmJhc2UoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikK
LSAgICB7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkp
OwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOwot
ICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOwotICAg
ICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigp
KTsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNz
aW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHBy
ZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlF
eHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24u
Ym9keUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VF
eHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlJikKLSAgICB7Ci0gICAgfQorfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpCi0gICAgewotICAgIH0KK2NsYXNz
IFZpc2l0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwgflZpc2l0b3IoKSA9IGRlZmF1bHQ7CisK
KyAgICB2b2lkIHZpc2l0VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUp
OworICAgIHZvaWQgdmlzaXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVu
Y2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlN0cnVjdHVyZUVsZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJh
dGlvbk1lbWJlciYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpD
b25zdGFudEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBdHRyaWJ1
dGVCbG9jayYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpO
dWxsTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFs
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bVRocmVhZHNG
dW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6QnJlYWsmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb250
aW51ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJ
bmRleEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxF
eHByZXNzaW9uU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmFsbHRo
cm91Z2gmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpSZXR1cm4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNl
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6V2hpbGVMb29wJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRF
eHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjMGUz
NjQ3MDU0Li42YThiYTFkMmE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwNiw4ICszMDYsMjAgQEAg
TW9kdWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbnRyaW5zaWNzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVDb250ZXh0LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBl
Q2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVB
Y2Nlc3NvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVDb25zdHJ1Y3RvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3Bw
CiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCitNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCiBNb2R1bGVzL3dlYmdw
dS9XZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVBZGFwdGVyLmNwcAogTW9kdWxlcy93
ZWJncHUvV2ViR1BVQmluZEdyb3VwTGF5b3V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDA3YzE2ZWYxNzc1Li4wZTEyMWU4
ZTRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNjQwMyw5ICs2NDAzLDIwIEBACiAJCTFDMjRFRUE3MUM3MkE3QjQwMDgwRjhG
QyAvKiBKU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
Rm9udEZhY2VTZXQuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZVNl
dC5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQzI2NDk3OTBEN0Uy
NDhBMDBCRDEwRjIgLyogRG9jdW1lbnRMb2FkZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2FkZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzMyNDkxMDFDNkQ2QTNCMDA3RURCMzIgLyogRm9udFZhcmlhbnRCdWls
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRWYXJpYW50
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzZDMjFDRURB
NDIwMDBEQzlGMiAvKiBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzMzMjc2RTIxQ0VGRjc0MDAwREM5RjIgLyogV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hM
U0xJbmZlclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xO
YW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lZFR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1l
ZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzMzMjc3NDIxRDVBNzA2MDAwREM5RjIgLyogV0hMU0xSZWN1cnNp
dmVUeXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc1MjFENUIwRjgwMDBEQzlG
MiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMzMzI3NzYyMUQ1QzA3RTAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzcyMUQ1Q0E4MzAwMERDOUYy
IC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMzMyNzc4MjFENUNFRDQwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMzOTY5Q0Yx
Qjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEUxQzZFN0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYWNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEYxQzZFN0NBNjAwQUI1MjdDIC8qIEZv
bnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRGYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDN0NDMjFEMjFDREUxOTgwMEMxRkEyQyAvKiBX
SExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1
NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3Bl
Y3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjE0LDYgKzEzMjI1LDkg
QEAKIAkJQzExQTlFQ0QyMTQwM0E1QzAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzExQTlFRDIyMTQwNTc4QjAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMUUxRDIzNTIwM0RGMTU0MDA1ODQ2NjUgLyogU2NyZWVuUHJv
cGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JlZW5Qcm9wZXJ0aWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJp
bnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMDEzMzQ2MjFEQUVFNkUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3IC8qIFdITFNMU3lu
dGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwMTVDMDkxQkU2RkUy
QzAwODIyMzg5IC8qIEZvbnRWYXJpYW50QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250VmFy
aWFudEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTEyMUI0
QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xM
ZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTBFOTEyMjFCNEJEMTAw
MEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTGV4ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjQ1LDcgKzEzMjU5LDYgQEAKIAkJQzIxQkY3
MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEQy
MUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTFJlZmVyZW5jZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3
MEUyMUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUMyMUJGNzBGMjFDRDg5Q0YwMDIyNzk3OSAvKiBXSExTTEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzEwMjFDRDg5RDAw
MDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MUJGNzExMjFDRDg5RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFR5cGVBcmd1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxMjIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUz
LDcgKzEzMjY2LDYgQEAKIAkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFC
RjcxNTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHByZXNz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2FsbEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1l
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFyYW1ldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Np
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xEb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRjaENh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzFBMjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJyZWFrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMQnJlYWsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEzMjk5LDE1ICsxMzMxMSwyNyBAQAogCQlDMjgwODMzRDFDNkRDMjJDMDAxNDUxQjYgLyogSlNG
b250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0ZvbnRG
YWNlLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5jcHA7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyODA4MzNFMUM2REMyMkMwMDE0
NTFCNiAvKiBKU0ZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
Rm9udEZhY2UuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5oOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwQjNGRDFFRjQ2MDg5MDBE
MzUxMzUgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyODZFRDlFMjFEQjVBQkEwMDcxM0M0MCAvKiBX
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3
MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MjkyMUM4Q0E1
MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFBy
ZXBhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQTIxQzhDQTUw
MDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJlcGFyZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0Eg
LyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVz
b2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQzIxQzhDQ0My
MDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1l
UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkQyMUM5OTFE
QTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMVHlwZUFyZ3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBQjBB
RjQxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udFNlbGVjdGlvbkFsZ29yaXRobS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQUY1MUU2QjNDNkMwMDEzNDhDNSAv
KiBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzJBQjBCMDMxRTZERTkyQzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVj
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTcxMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyQjU1MTczMjFEQjRCQkQwMDRCRTI2RSAvKiBXSExTTE5hbWVSZXNvbHZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc0MjFEQjUxMEYwMDRCRTI2RSAvKiBXSExTTE5hbWVD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NTIxREI1MjY2MDA0QkUyNkUgLyogV0hM
U0xJbmZlclR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc2MjFEQjUzOTQwMDRCRTI2RSAv
KiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzgyMURCNTU3NTAwNEJFMjZFIC8q
IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMkI1NTE3OTIxREI1NThGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0IyMURC
NTVBRjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMkI1NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyQzJDRjU1MUVGMzc2MUEwMDQyODFBOCAvKiBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbk51bGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZh
bWlseVNwZWNpZmljYXRpb25OdWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
RTM4RUZCMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NGb250U3R5bGVWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250U3R5bGVWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRTM4RUZDMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NG
b250U3R5bGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250
U3R5bGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzMzIsMTEgKzI1
MzU2LDM0IEBACiAJCQkJQzIxQkY3MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmNw
cCAqLywKIAkJCQlDMjFCRjczODIxQ0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAqLywK
IAkJCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCi0gCQkJ
CUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKLSAJCQkJQzI4
OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCi0gCQkJCUMyODhD
NzJBMjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKLSAJCQkJQzI4OEM3MkIy
MUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKLSAJCQkJQzI4OEM3
MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzI4OEM3
MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovLAorCQkJCUMyQjU1MTdDMjFE
QjU3RUQwMDRCRTI2RSAvKiBXSExTTFZpc2l0b3IuY3BwICovLAorCQkJCUMyODhDNzI5MjFDOENB
NTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAorCQkJCUMyODhDNzJBMjFDOENBNTAw
MDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKKwkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1
Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQlDMkI1NTE3MzIxREI0QkJEMDA0QkUy
NkUgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAorCQkJCTFDN0NDMjFEMjFDREUxOTgwMEMx
RkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8sCisJCQkJQzJCNTUxNzQyMURCNTEwRjAwNEJF
MjZFIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovLAorCQkJCTFDMzMyNzZFMjFDRUZGNzQwMDBE
QzlGMiAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLywKKwkJCQlDMjg2RUQ5RTIxREI1
QUJBMDA3MTNDNDAgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLywKKwkJCQkxQzMz
Mjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8sCisJCQkJQzJCNTUx
NzUyMURCNTI2NjAwNEJFMjZFIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCisJCQkJMUMzMzI3
NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLywKKwkJ
CQlDMkI1NTE3NjIxREI1Mzk0MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5j
cHAgKi8sCisJCQkJMUMzMzI3NzUyMUQ1QjBGODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuaCAqLywKKwkJCQlDMkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3NzYyMUQ1QzA3RTAwMERD
OUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovLAorCQkJCUMyQjU1
MTc4MjFEQjU1NzUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
Y3BwICovLAorCQkJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovLAorCQkJCUMyQjU1MTc5MjFEQjU1OEYwMDRCRTI2RSAv
KiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3
NzgyMUQ1Q0VENDAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgu
aCAqLywKKwkJCQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJy
YXlPcGVyYXRvckxlbmd0aC5jcHAgKi8sCisJCQkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3IC8q
IFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovLAorCQkJCUMyQjU1MTdCMjFEQjU1QUYw
MDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCUMyMDEz
MzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLywKKwkJCQlDMjAxMzM0
NjIxREFFRTZFMDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLywKKwkJCQlDMkI1NTE3
MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKKwkJCQlDMkI1NTE3MTIx
REI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdI
TFNMOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1MzQ0LDcgKzI1MzkxLDYgQEAK
IAkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzIxQkY3MEYyMUNEODlDRjAwMjI3OTc5IC8qIFdI
TFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oICovLAogCQkJCUMyMUJGNzI1MjFDRDg5
RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oICovLAogCQkJCUMyMUJGNzA5
MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5oICovLAogCQkJCUMyMUJGNzMwMjFD
RDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmggKi8sCkBAIC0yNTM4
NCw3ICsyNTQzMCw2IEBACiAJCQkJQzIxQkY3MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTm9k
ZS5oICovLAogCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIyNzk3OSAvKiBXSExTTE51bGxMaXRlcmFs
LmggKi8sCiAJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdI
TFNMUGFyYW1ldGVyLmggKi8sCiAJCQkJQzIxQkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNM
UG9pbnRlclR5cGUuaCAqLywKIAkJCQlDMjFCRjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKIAkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5
NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKQEAgLTI1NDEyLDcgKzI1NDU3LDEwIEBACiAJCQkJ
QzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaCAqLywKIAkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJs
ZVJlZmVyZW5jZS5oICovLAogCQkJCUMyMUJGNzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdo
aWxlTG9vcC5oICovLAotIAkJCQlDMjg4QzcyRDIxQzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBl
QXJndW1lbnQuY3BwICovLAorCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5
cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJMUMzMzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNM
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8sCisJCQkJMUMzMzI3NzEyMUNGMEJFMTAwMERD
OUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCisJCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYy
IC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQVNUOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358883</attachid>
            <date>2019-01-11 00:24:05 -0800</date>
            <delta_ts>2019-01-11 10:41:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193007-20190111002404.patch</filename>
            <type>text/plain</type>
            <size>33474</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZiNjI3NjkwMzNkMTIx
NTNhNTc2NTI5YWIyMzMyMTQxOGE0OWI0NC4uM2ZlYTQxYTE3ZTdhYmEzNGE5MjAxNWI0N2QzYWRi
YmIzYzk1Y2U5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIE5hbWVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMu
Y3BwOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6TmFtZUNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpnZXRUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpOYW1lQ29udGV4dDo6ZXhpc3RzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAu
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2ZXI6Ok5hbWVSZXNvbHZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjp2aXNpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZU5hbWVzSW5UeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6cmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjpzZXRD
dXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByb2dyYW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9ncmFtOjphcHBl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlByb2dyYW06Om5hbWVDb250ZXh0KToKKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMTktMDEtMTAgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV0hMU0xdIEluY2x1ZGUgdGhlIHN0YW5kYXJkIGxpYnJhcnkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMu
Y3BwCmluZGV4IGQ3ZjRkZTcxMzFlNWVhMWM4N2QxNmFhMmMyZmVmYWFiZTYxN2E3OGYuLjQyMWM3
OTNjOTIyYmJmNjQ5MDE5YWEzOTA3NTllNTMzYWI0MDY4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcApAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURl
Y2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQ4YjExYzUxMjc5ZjE4YzA1
YzIxMjgyZDhlNzMzY2JjNDE1MTBlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisKKyNpbmNsdWRlICJXSExTTEVudW1l
cmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURl
ZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworTmFtZUNvbnRleHQ6Ok5hbWVDb250ZXh0KE5hbWVDb250ZXh0KiBw
YXJlbnQpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCit7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6
OmFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhp
c3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHR5cGVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQodHlwZURlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1
cmVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1l
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFk
ZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
c3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNv
bnRleHQ6OmFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0
aW9uKQoreworICAgIGlmIChleGlzdHMoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGVudW1l
cmF0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRl
eHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorewor
ICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV90eXBl
cy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5u
YW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSwg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwg
MT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZnVuY3Rpb25EZWZpbml0
aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sK
KyAgICBpZiAobV90eXBlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAh
PSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAgICB8fCBtX3Zh
cmlhYmxlcy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVz
LmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVz
LmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pCit7CisgICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdmFyaWFibGVz
LmFkZChTdHJpbmcodmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpLCAmdmFyaWFibGVEZWNsYXJh
dGlvbik7CisgICAgcmV0dXJuIHJlc3VsdC5pc05ld0VudHJ5OworfQorCitWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBOYW1lQ29udGV4dDo6Z2V0VHlw
ZXMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzLmZp
bmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fdHlwZXMuZW5kKCkpIHsKKyAgICAgICAg
aWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRUeXBlcyhuYW1l
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAmaXRlcmF0b3It
PnZhbHVlOworfQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24+LCAxPiogTmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25zLmZpbmQobmFtZSk7Cisg
ICAgaWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3Bh
cmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25zKG5hbWUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFs
dWU7Cit9CisKK0FTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlh
YmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJs
ZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV92YXJpYWJsZXMuZW5kKCkpIHsK
KyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRW
YXJpYWJsZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVy
biBpdGVyYXRvci0+dmFsdWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmV4aXN0cyhTdHJpbmcm
IG5hbWUpCit7CisgICAgcmV0dXJuIG1fdHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgp
CisgICAgICAgIHx8IG1fZnVuY3Rpb25zLmZpbmQobmFtZSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkK
KyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYW1lKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKTsK
K30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwNDg3OGFlN2U5
ZjFkODNlNWQ1OTJjMmZkNzUyYmVkYzkwZmE5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTAsMCAr
MSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7
CisKK2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBU
eXBlRGVmaW5pdGlvbjsKK2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb247CitjbGFzcyBFbnVtZXJh
dGlvbkRlZmluaXRpb247CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CitjbGFzcyBOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3Mg
VmFyaWFibGVEZWNsYXJhdGlvbjsKKworfQorCitjbGFzcyBOYW1lQ29udGV4dCB7CitwdWJsaWM6
CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOworCisgICAg
Ym9vbCBhZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
Jik7CisgICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAgICBib29sIGFk
ZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiYpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJik7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhj
b25zdCBTdHJpbmcmKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGdldFZhcmlhYmxl
KGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJvb2wgZXhpc3RzKFN0cmluZyYpOwor
CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+PiBtX2Z1bmN0
aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKj4gbV92
YXJpYWJsZXM7CisgICAgTmFtZUNvbnRleHQqIG1fcGFyZW50OworfTsKKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lUmVzb2x2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhNzYwMjZhNjMxOWQyMTkwNzc0NjFm
N2QyYWI2MjFhNmNiOTc2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTAsMCArMSwyODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCisKKyNpbmNsdWRlICJXSExTTENhbGxFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNM
RG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJX
SExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2lu
Y2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0Lmgi
CisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKyNp
bmNsdWRlICJXSExTTFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgor
I2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFy
aWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK05hbWVSZXNvbHZlcjo6TmFtZVJl
c29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAgICA6IG1fbmFtZUNvbnRleHQobmFt
ZUNvbnRleHQpCit7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlR5cGVSZWZl
cmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZl
cmVuY2UpOworICAgIGlmICh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvKiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0
eXBlUmVmZXJlbmNlLm5hbWUoKSk7CisgICAgaWYgKGNhbmRpZGF0ZXMgPT0gbnVsbHB0cikgewor
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhdXRv
IHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJl
bmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgICAgIHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRU
eXBlKCpyZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBOYW1lQ29udGV4dCBuZXdO
YW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNv
bHZlcihuZXdOYW1lQ29udGV4dCk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVm
aW5pdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZp
bml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJv
ckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG5ld05hbWVDb250
ZXh0LmFkZChwYXJhbWV0ZXIpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
bmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxv
Y2soKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykK
K3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFt
ZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoYmxvY2spOworfQorCit2
b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAg
IE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2
ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOwor
ICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgIE5hbWVDb250ZXh0IG5h
bWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250
ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpTdGF0ZW1lbnQmPigqaWZT
dGF0ZW1lbnQuZWxzZUJvZHkoKSkpOworICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgm
bV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9y
QW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OkRvV2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNv
bnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hl
Y2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQo
Jm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJv
ckFuZFZpc2l0KGZvckxvb3ApOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIG1fbmFtZUNv
bnRleHQuYWRkKHZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2
YXJpYWJsZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6
VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQoreworICAgIGlmICh2YXJpYWJs
ZVJlZmVyZW5jZS52YXJpYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byog
dmFyaWFibGUgPSBtX25hbWVDb250ZXh0LmdldFZhcmlhYmxlKHZhcmlhYmxlUmVmZXJlbmNlLm5h
bWUoKSkpCisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNldFZhcmlhYmxlKCp2YXJpYWJsZSk7
CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVt
ZW50KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgcmV0dXJuU3RhdGVt
ZW50LnNldEZ1bmN0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQocmV0dXJuU3RhdGVtZW50KTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7Cisg
ICAgaWYgKGF1dG8qIGdldEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5nZXRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUdldE92ZXJsb2FkcygqZ2V0RnVuY3Rpb25z
KTsKKyAgICBpZiAoYXV0byogc2V0RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlv
bnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAg
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKCpzZXRGdW5j
dGlvbnMpOworICAgIGlmIChhdXRvKiBhbmRGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1
bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kRnVuY3Rpb25OYW1lKCkpKQorICAg
ICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVBbmRPdmVybG9hZHMoKmFu
ZEZ1bmN0aW9ucyk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCit7CisgICAgaWYgKGlzPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRv
dEV4cHJlc3Npb24uYmFzZSgpKSkgeworICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVz
ID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
Pihkb3RFeHByZXNzaW9uLmJhc2UoKSkubmFtZSgpKSkgeworICAgICAgICAgICAgQVNTRVJUKGVu
dW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBl
JiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpOworICAgICAgICAgICAgICAgIGlmIChhdXRv
KiBtZW1iZXIgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGRvdEV4cHJlc3Np
b24uZmllbGROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHBy
ZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOwor
ICAgICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5v
cmlnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgZG8gdGhpcyB3
aXRoIHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAg
ZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICBuZXcg
KCZkb3RFeHByZXNzaW9uKSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChXVEZNb3ZlKG9y
aWdpbiksICptZW1iZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNU
OjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFjYWxsRXhwcmVz
c2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9u
YW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAg
ICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpZiAoYXV0byogdHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVz
KGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZXMtPnNp
emUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxF
eHByZXNzaW9uLnNldENhc3REYXRhKCgqdHlwZXMpWzBdLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7Cisg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGNhbGxFeHByZXNzaW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0
KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKQoreworICAgIGlmIChhdXRv
IGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGNvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmxlZnQoKSkpIHsKKyAgICAgICAgQVNTRVJU
KGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgQVNUOjpOYW1lZFR5cGUm
IHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOworICAgICAgICBpZiAoaXM8QVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpKSB7CisgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+KHR5cGUpOworICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoY29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UucmlnaHQoKSkpIHsKKyAgICAgICAgICAgICAgICBjb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5zZXRFbnVtZXJhdGlvbk1lbWJl
cihlbnVtZXJhdGlvbkRlZmluaXRpb24sICptZW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzZXRFcnJvcigp
OworfQorCisvLyBGSVhNRTogTWFrZSBzdXJlIGFsbCB0aGUgbmFtZXMgaGF2ZSBiZWVuIHJlc29s
dmVkLgorCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJl
c29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6
IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNr
RXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uJj4odHlwZURlZmlu
aXRpb24pKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24g
OiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVy
LmNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24m
PihzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3Io
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBlbnVt
ZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgewor
ICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJj4oZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAg
IGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uKSk7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
cmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBu
YW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9n
cmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3Vy
cmVudEZ1bmN0aW9uRGVmaW5pdGlvbigmc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mPihmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJy
b3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiY+KGZ1bmN0aW9u
RGVmaW5pdGlvbikpOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVu
Y3Rpb25EZWZpbml0aW9uKG51bGxwdHIpOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgeworICAg
ICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
aWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzcyZTA4ZTA2MjEwNjdkYmUxOTBjYTA0MDY4YTllOWE3MGJmZGNmMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TmFtZVJlc29sdmVyLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIK
KyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitjbGFzcyBOYW1lUmVzb2x2ZXIgOiBw
dWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0Jik7
CisKKyAgICB2aXJ0dWFsIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEN1
cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9u
RGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25E
ZWZpbml0aW9uOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJl
ZmVyZW5jZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpXaGlsZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9X
aGlsZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OlJldHVybiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVz
c2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIG92ZXJyaWRlOworCisgICAgTmFtZUNvbnRleHQg
bV9uYW1lQ29udGV4dDsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVu
Y3Rpb24geyBudWxscHRyIH07Cit9OworCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3Jh
bSYsIE5hbWVSZXNvbHZlciYpOworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFt
JiwgTmFtZVJlc29sdmVyJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKaW5kZXggYTY5ZTg0M2Mx
MGZkN2NjYTMxOTU1Mzc1MDIyN2FhYmVjY2ZkYTc5Yi4uOGJjZWE2YjA0Nzg5N2E2Mjk3MjBiZWY5
NDNiODg5ZDRjMTA0NzUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTQ3LDM5ICs0Nyw0MCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsK
ICAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBl
RGVmaW5pdGlvbj4oV1RGTW92ZSh0eXBlRGVmaW5pdGlvbikpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxBU1Q6OlR5
cGVEZWZpbml0aW9uJj4obV90eXBlRGVmaW5pdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCiAgICAg
Ym9vbCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlv
bikKICAgICB7CiAgICAgICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKG1ha2VVbmlx
dWVSZWY8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRp
b24pKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4
dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJj4obV9zdHJ1Y3R1cmVE
ZWZpbml0aW9ucy5sYXN0KCkpKTsKICAgICB9CiAKICAgICBib29sIGFwcGVuZChBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAg
IG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24pKSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGlj
X2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihtX2VudW1lcmF0aW9uRGVmaW5pdGlv
bnMubGFzdCgpKSk7CiAgICAgfQogCiAgICAgYm9vbCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCiAgICAgewogICAgICAgICBtX2Z1bmN0aW9uRGVm
aW5pdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KFdU
Rk1vdmUoZnVuY3Rpb25EZWZpbml0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJj4obV9mdW5jdGlvbkRlZmluaXRpb25zLmxhc3QoKSkpOwogICAgIH0KIAogICAgIGJv
b2wgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25z
LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oV1RG
TW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgp
KSk7CiAgICAgfQogCiAgICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBtX25hdGl2ZVR5cGVEZWNs
YXJhdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KFdURk1vdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJj4obV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSkpOwogICAg
IH0KIAorICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCgpIHsgcmV0dXJuIG1fbmFtZUNvbnRl
eHQ7IH0KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VHlwZURlZmluaXRpb24+PiYgdHlwZURl
ZmluaXRpb25zKCkgeyByZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KICAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygp
IHsgcmV0dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7IH0KICAgICBWZWN0b3I8VW5pcXVlUmVm
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7
IHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7IH0KQEAgLTkwLDYgKzkxLDcgQEAgcHVi
bGljOgogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+PiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9u
czsgfQogCiBwcml2YXRlOgorICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CiAgICAgVmVj
dG9yPFVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90eXBlRGVmaW5pdGlvbnM7CiAg
ICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiBtX3N0cnVjdHVy
ZURlZmluaXRpb25zOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDEyYTky
NDRjNzhmNWE1NTc1ZTIxYjAzNGU1ZDIxMzc3NDQwYWNmODAuLjA2ZDAyNjk5MjhmMDhkYTVjZDc2
MjYxMTJlMTIwNzU3YWMyNDQ0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMDgsNiArMzA4LDggQEAg
TW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAog
TW9kdWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAorTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VHlwZUFyZ3VtZW50LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNl
bWFudGljLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRp
Yy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA5MTVkNTQ0MWE1MGI0N2YwYjBlM2JhOGQxMzk5OThlYzk0YmY1ZTIzLi4wMDAy
OTIzZWRmOTJlOGU2YTk1NmFmNWY1ODdiYTMwMjc5NWU4YzgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzMxOCw2ICsxMzMx
OCwxMCBAQAogCQlDMjFCRjc0NTIxQ0Q5Njk4MDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExpYnJh
cnkudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFdITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzIxREYyRTcxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25W
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250VmFy
aWF0aW9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFERjJFODFE
OUU0RTk5MDBGNUIyNEMgLyogQ1NTRm9udFZhcmlhdGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjM0QTk4QTIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVz
b2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk4QzIxRTg4ODNFMDAzQzk4NEQgLyogV0hM
U0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OEQyMUU4ODg4NDAwM0M5ODREIC8qIFdI
TFNMTmFtZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOThFMjFFODg4ODUwMDNDOTg0
RCAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0NThFNjExRkU4OTc5RTAwNTk0NzU5
IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0ExMUM3MkRDOTkwMEY3NEEx
NiAvKiBDU1NGb250RmFjZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDU1NGb250RmFjZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
NjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTk2NjksNyArMTk2NzMsNiBAQAogCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYx
RDcgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQlDMjFCRjc0MjIxQ0Q5NjNCMDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExp
YnJhcnkuaCAqLywKIAkJCQk1MzhFQzdFQTFGOTZBOTVCMDA0RDIyQTggLyogdW5pZmllZC1zb3Vy
Y2VzICovLAogCQkJCTk5MDhCMEYzMUJDQUNGRkUwMEVEMEY2NSAvKiBCeXRlTGVuZ3RoUXVldWlu
Z1N0cmF0ZWd5QnVpbHRpbnMuY3BwICovLAogCQkJCTk5MDhCMEY1MUJDQUQwN0QwMEVEMEY2NSAv
KiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMuaCAqLywKQEAgLTE5NzU5LDYgKzE5
NzYyLDcgQEAKIAkJCQk2NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVT
aGVldHNEYXRhLmNwcCAqLywKIAkJCQkxQTE0MTRCMzEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0
Rm9udEZhbWlseU5hbWVzLmNwcCAqLywKIAkJCQkxQTE0MTRCNDEzQTBGMDUwMDAxOTk5NkMgLyog
V2ViS2l0Rm9udEZhbWlseU5hbWVzLmggKi8sCisJCQkJQzIxQkY3NDIyMUNEOTYzQjAwMjI3OTc5
IC8qIFdITFNMU3RhbmRhcmRMaWJyYXJ5LmggKi8sCiAJCQkJNTE3NDhGQTIxQ0M2RUVFQjAwNzI4
RDg0IC8qIFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCAqLywKIAkJCQk5OTA4QjBG
OTFCQ0FEMDdEMDBFRDBGNzUgLyogV3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8sCiAJCQkJ
OUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEU4IC8qIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLywK
QEAgLTI1Mzc1LDEzICsyNTM3OSwxNyBAQAogCQlDMjEwRTkwRDIxQjRCQ0E0MDBCN0Y4M0QgLyog
V0hMU0wgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUMy
MUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQgKi8sCiAJ
CQkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLywKIAkJCQlDMjEwRTkxMTIxQjRC
RDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8sCiAJCQkJQzIxMEU5MTIyMUI0QkQxMDAw
QjdGODNEIC8qIFdITFNMTGV4ZXIuaCAqLywKKwkJCQlDMjM0QTk4RDIxRTg4ODg0MDAzQzk4NEQg
LyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8sCisJCQkJQzIzNEE5OEUyMUU4ODg4NTAwM0M5ODRE
IC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLywKKwkJCQlDMjM0QTk4QTIxRTg4ODNFMDAzQzk4NEQg
LyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAorCQkJCUMyMzRBOThDMjFFODg4M0UwMDNDOTg0
RCAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAogCQkJCUMyMUJGNzM3MjFDRDhBMDIwMDIyNzk3
OSAvKiBXSExTTFBhcnNlci5jcHAgKi8sCiAJCQkJQzIxQkY3MzgyMUNEOEEwMzAwMjI3OTc5IC8q
IFdITFNMUGFyc2VyLmggKi8sCiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5IC8qIFdITFNM
UHJvZ3JhbS5oICovLAorCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExTTFN0YW5k
YXJkTGlicmFyeS50eHQgKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdITFNMOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358908</attachid>
            <date>2019-01-11 10:41:09 -0800</date>
            <delta_ts>2019-01-11 11:50:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193007-20190111104108.patch</filename>
            <type>text/plain</type>
            <size>71324</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGE4MzdlNzY0MzY0YTgz
NjdkZDE4MGE4YTQ1NmRhYTA1OTQ2NjM2YS4uOGYxN2MwMzRhNGZjY2E0Y2ZjNDg3NzNlNzc5YWZh
MWZhOWMyODNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIE5hbWVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDA3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgYmFzZSBpbXBs
ZW1lbnRhdGlvbiBmb3IgV0hMU0wncyBuYW1lIHJlc29sdmVyLiBUaGUgbmFtZSByZXNvbHZlciBt
YXRjaGVzIHRocmVlIGtpbmRzIG9mIHRoaW5nczoKKyAgICAgICAgMS4gSXQgbWF0Y2hlcyBWYXJp
YWJsZVJlZnMgdG8gVmFyaWFibGVEZWNscworICAgICAgICAyLiBJdCBtYXRjaGVzIFR5cGVSZWZz
IHRvIE5hbWVkVHlwZXMKKyAgICAgICAgMy4gSXQgbWF0Y2hlcyBDYWxsRXhwcmVzc2lvbnMgdG8g
RnVuY3Rpb25EZWNsYXJhdGlvbnMKKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBpdCBp
c24ndCBob29rZWQgdXAgeWV0LiBOb3QgZW5vdWdoIG9mIHRoZSBjb21waWxlciBleGlzdHMgdG8g
aGF2ZSBhbnkgbWVhbmluZ2Z1bCBzb3J0CisgICAgICAgIG9mIHRlc3QuIFdoZW4gZW5vdWdoIG9m
IHRoZSBjb21waWxlciBpcyBwcmVzZW50LCBJJ2xsIHBvcnQgdGhlIHJlZmVyZW5jZSBpbXBsZW1l
bnRhdGlvbidzIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcDogTm93IHRoYXQgSW5mZXJUeXBlcy5oIGV4aXN0
cywgd2UgY2FuIGltcGxlbWVudCB0aGVzZQorICAgICAgICBmdW5jdGlvbnMuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpGbG9hdExpdGVyYWxUeXBlOjpjYW5SZXNvbHZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU6OmNvbnZlcnNp
b25Db3N0IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU6OnZhbHVlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwOiBOb3cgdGhhdCBJbmZlclR5cGVzLmggZXhpc3RzLCB3ZSBjYW4gaW1wbGVt
ZW50IHRoZXNlCisgICAgICAgIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0IGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuaDogUmVtb3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVyYWxUeXBlOjp2YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljLmNwcDogTW9kaWZ5aW5nIFNvdXJjZXMudHh0IGNhdXNlZCB0aGUgc291cmNl
cworICAgICAgICB0byBnZXQgc2h1ZmZsZWQgYXJvdW5kLCBzbyB0aGUgI2luY2x1ZGVzIG5lZWQg
dG8gYmUgZml4ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOiBOb3cgdGhhdCBJbmZlclR5cGVzLmggZXhpc3Rz
LCB3ZSBjYW4gaW1wbGVtZW50CisgICAgICAgIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaDogUmVtb3ZlIHVu
bmVjZXNzYXJ5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OnZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwOiBBZGRlZC4gVGhpcyBpcyB0
aGUgcmVwbGFjZW1lbnQgZm9yIFVuaWZpY2F0aW9uQ29udGV4dCBpbiB0aGUKKyAgICAgICAgcmVm
ZXJlbmNlIGNvbXBpbGVyLiBJdCdzIG11Y2ggc2ltcGxlciAoYW5kIHdlIHNob3VsZCByZW1vdmUg
VW5pZmljYXRpb25Db250ZXh0IGluIHRoZSByZWZlcmVuY2UgY29tcGlsZXIgaW4KKyAgICAgICAg
ZmF2b3Igb2YgdGhpcyBkZXNpZ24pLiBJdCBoYXMgdGhyZWUgc2V0cyBvZiBmdW5jdGlvbnM6IFRl
bGwgaWYgdHdvIHR5cGVzIGFyZSB0aGUgc2FtZSwgdGVsbCBpZiB0d28gdHlwZXMgYXJlCisgICAg
ICAgIHRoZSBzYW1lIGFuZCBjb21taXQgdGhlIHJlc29sdmFibGUgdHlwZSwgYW5kIHJ1biB0aGUg
YWJvdmUgZnVuY3Rpb25zIG9uIHR5cGUgcmVmZXJlbmNlcyBvciBmdW5jdGlvbiBhcmd1bWVudHMu
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6bWF0Y2hBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNvbW1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxsKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNw
cDogQWRkZWQuIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIE5hbWVk
VHlwZXMsCisgICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25zLCBhbmQgVmFyaWFibGVEZWNsYXJh
dGlvbnMgc28gTmFtZVJlc29sdmVyIGNhbiB3b3JrLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok5hbWVDb250ZXh0OjpOYW1lQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFt
ZUNvbnRleHQ6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6Omdl
dFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0RnVuY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0VmFyaWFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpleGlzdHMpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
VHlwZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmNwcDogQWRkZWQuIFVzZSB0aGUgTmFtZUNvbnRleHQgdG8gbWF0Y2ggdXAgdGhlIHRocmVlIHR5
cGVzIG9mIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6TmFt
ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2ZXI6OnZpc2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFtZXNJblR5cGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlw
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6c2V0Q3VycmVudEZ1
bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cm9ncmFtLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvZ3JhbTo6YXBwZW5kKTogVGhl
IHBhcnNlciBuZWVkcyB0byBhZGQgYWxsIGdsb2JhbCBkZWNsYXJhdGlvbnMgdG8gdGhlIG5hbWUg
Y29udGV4dCBzbyB0aGUKKyAgICAgICAgbmFtZSByZXNvbHZlciBpcyByZWFkeSB0byBnbyBhcyBz
b29uIGFzIHBhcnNpbmcgaXMgZmluaXNoZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJv
Z3JhbTo6bmFtZUNvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA6IEFkZGVkLiBQaWNrIHRoZSBhcHByb3ByaWF0ZSBGdW5j
dGlvbkRlY2xhcmF0aW9uIG9yCisgICAgICAgIE5hbWVkVHlwZSBmb3IgYSBwYXJ0aWN1bGFyIENh
bGxFeHByZXNzaW9uIG9yIFR5cGVSZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
Y29udmVyc2lvbkNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVGdW5jdGlv
bk92ZXJsb2FkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVR5cGVPdmVy
bG9hZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5jcHAuIFRoaXMgZGVzY3JpYmVzIHRoZSB0d28gc3RhdGVzIHRoYXQgYSB0eXBlIGluIHRo
ZSB0eXBlIHJlc29sdmVyIGNhbiBiZSBpbjogZWl0aGVyIGFuIG93bmVkCisgICAgICAgIFVubmFt
ZWRUeXBlLCBvciBhIHJlZmVyZW5jZSB0byBhIFJlc29sdmFibGVUeXBlLiBUaGlzIGlzIGJlY2F1
c2UgZXZlcnkgZXhwcmVzc2lvbiBuZWVkcyB0byBoYXZlIGEgdHlwZQorICAgICAgICBhc3NvY2lh
dGVkIHdpdGggaXQsIGJ1dCB0aG9zZSB0eXBlcyBtaWdodCBiZSB0aGUgdHlwZSBvZiBhIGxpdGVy
YWwgKGFrYSBhIFJlc29sdmFibGVUeXBlKS4gTXVsdGlwbGUKKyAgICAgICAgZXhwcmVzc2lvbnMg
bWlnaHQgbmVlZCB0byByZWZlcmVuY2UgdGhlIHNhbWUgUmVzb2x2YWJsZVR5cGUgc28gd2hlbiBp
dCBnZXRzIHJlc29sdmVkLCBhbGwgdGhlIGV4cHJlc3Npb25zCisgICAgICAgIGdldCB0aGUgcmVz
dWx0LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNlOjpS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U6OnJlc29sdmFibGVUeXBlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTkt
MDEtMTEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtC
RkNdW01hcmdpbkNvbGxhcHNpbmddIEFkanVzdCB2ZXJ0aWNhbCBwb3NpdGlvbiB3aGVuIGJveCBt
YXJnaW4gY29sbGFwc2VzIHRocm91Z2guCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3Bw
CmluZGV4IDQ2ODA5MzJmNjU5OWNmZGZkZDBjNjQxM2MzMTE0NTc3YWI1YjcwYTMuLmZkYTI1ZTlm
MzZlY2Q0MWZhMzE0YTM1MjZmODM0ZGJjM2FjYmY0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0
ZXJhbFR5cGUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisj
aW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDE2ICs0NSwyNiBAQCBGbG9hdExpdGVy
YWxUeXBlOjpGbG9hdExpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgZmxvYXQgdmFs
dWUpCiAKIEZsb2F0TGl0ZXJhbFR5cGU6On5GbG9hdExpdGVyYWxUeXBlKCkgPSBkZWZhdWx0Owog
Ci1ib29sIEZsb2F0TGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0Citi
b29sIEZsb2F0TGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICBpZiAoIWlzPE5hbWVkVHlwZT4o
dHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxOYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9u
PihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUp
OworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzRmxvYXRpbmcoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmNhblJlcHJlc2Vu
dEZsb2F0KCkobV92YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdW5zaWduZWQgRmxvYXRMaXRlcmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3Qg
VW5uYW1lZFR5cGUmKSBjb25zdAordW5zaWduZWQgRmxvYXRMaXRlcmFsVHlwZTo6Y29udmVyc2lv
bkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBjb25zdAogewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcwotICAgIHJldHVybiAwOworICAgIGlmIChtYXRjaGVzKHVubmFt
ZWRUeXBlLCBzdGF0aWNfY2FzdDxjb25zdCBUeXBlUmVmZXJlbmNlJj4obV9wcmVmZXJyZWRUeXBl
KSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAxOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaAppbmRleCBmM2E0NDMyNjgzOGQ1MDk4
NDMzYjRkZTA4NDRkM2ViYzNmNTZkZmU5Li5jZGY0MTc5MGNhNWMxOGNmYTgyYjkxM2JlMmI5ZDJj
NDYyNjNlZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCkBAIC01OCw4ICs1OCw2
IEBAIHB1YmxpYzoKICAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBmbG9hdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KLQogcHJpdmF0ZToKICAgICBmbG9hdCBtX3ZhbHVlOwogICAgIC8vIFRoaXMgaXMgYSB1bmlx
dWVfcHRyIHRvIHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJM
aXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCmluZGV4IDViNDUxZWVmNWJkZDFjMWZiZGI2ZDBi
MTcxMGYyOGQyYzUxYmI4NmYuLjE2Y2RjNDY0YTA4Y2ZkNDJkMjBkNjUyOTg5YjA2YjI3NmFjMTU1
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcApAQCAtMjgsNiArMjgs
MTEgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMu
aCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKQEAgLTQyLDE2ICs0NywyNiBA
QCBJbnRlZ2VyTGl0ZXJhbFR5cGU6OkludGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIGludCB2YWx1ZSkKIAogSW50ZWdlckxpdGVyYWxUeXBlOjp+SW50ZWdlckxpdGVyYWxU
eXBlKCkgPSBkZWZhdWx0OwogCi1ib29sIEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShj
b25zdCBUeXBlJikgY29uc3QKK2Jvb2wgSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNv
bnN0IFR5cGUmIHR5cGUpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisg
ICAgaWYgKCFpczxOYW1lZFR5cGU+KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBpZiAoIWlz
PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5p
c051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVj
bGFyYXRpb24uY2FuUmVwcmVzZW50SW50ZWdlcigpKG1fdmFsdWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXVuc2lnbmVkIEludGVnZXJMaXRlcmFsVHlw
ZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdAordW5zaWduZWQgSW50
ZWdlckxpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi0gICAgcmV0dXJu
IDA7CisgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHN0YXRpY19jYXN0PGNvbnN0IFR5cGVS
ZWZlcmVuY2UmPihtX3ByZWZlcnJlZFR5cGUpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIDE7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuaAppbmRleCA0ZTdkMGVjNTg3NDE1ZDI1NDIzZmVkODkwZmJlYWMxYmI4MWFmMDhjLi5m
MTg2NzlhNzgxNjRlZDUxMGY1MWRjOWMyMTAyN2UyY2Y2ZTE3OGE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5
cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJ
bnRlZ2VyTGl0ZXJhbFR5cGUuaApAQCAtNTgsOCArNTgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBj
YW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlkZTsKICAgICB1bnNpZ25lZCBjb252
ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW50
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCiBwcml2YXRlOgogICAgIGludCBt
X3ZhbHVlOwogICAgIC8vIFRoaXMgaXMgYSB1bmlxdWVfcHRyIHRvIHJlc29sdmUgYSBjaXJjdWxh
ciBkZXBlbmRlbmN5IGJldHdlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCmluZGV4IGQ3ZjRkZTcxMzFlNWVhMWM4N2QxNmFhMmMy
ZmVmYWFiZTYxN2E3OGYuLjQyMWM3OTNjOTIyYmJmNjQ5MDE5YWEzOTA3NTllNTMzYWI0MDY4Y2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1
ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxU
eXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAppbmRleCBlZWRhY2Y2YTZiODY0ZjEzNWFmYjhi
NmM1ZGYzZTYzOTM5Y2Y4MjM4Li5hYjIxYjliZmEwNzIyNTA4YWQ1N2VjY2FiNzY1N2UxNmJhODgx
OGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUu
Y3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUg
IldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVS
ZWZlcmVuY2UuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ0LDE2ICs0OCwyOCBAQCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6VW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCB1bgogCiBVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZTo6flVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgPSBk
ZWZhdWx0OwogCi1ib29sIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNv
bnN0IFR5cGUmKSBjb25zdAorYm9vbCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVz
b2x2ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlwZT4odHlwZSk7CisgICAg
aWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFy
YXRpb24uaXNJbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmlzU2lnbmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoKShtX3Zh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCi11bnNp
Z25lZCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5u
YW1lZFR5cGUmKSBjb25zdAordW5zaWduZWQgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNv
bnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgY29uc3QKIHsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gMDsKKyAgICBpZiAobWF0Y2hl
cyh1bm5hbWVkVHlwZSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHlwZVJlZmVyZW5jZSY+KG1fcHJlZmVy
cmVkVHlwZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUuaAppbmRleCA1MmEzYjc3N2E0NWY4YmNkNWIxODc4N2NhZDE3Y2Q2NmVkZGJlYThhLi5lNTgz
N2U2NTFkMThmMjZiMzQxMmQ1NzAzM2Y3N2I4YjRjYjFhNTVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgKQEAgLTU4LDggKzU4LDYgQEAgcHVibGlj
OgogICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHVuc2lnbmVkIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCiBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fdmFsdWU7CiAgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9w
dHIgdG8gcmVzb2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjBlMGVmMDllNDE0MTUyNTFlMDg0YTgyZGViNTVlMWYxZmNlMjllMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW5mZXJUeXBlcy5jcHAKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xO
YW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmFibGVUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3N0YXRpYyBib29sIG1h
dGNoZXMoY29uc3QgQVNUOjpUeXBlJiB1bmlmeVRoaXMsIGNvbnN0IEFTVDo6VHlwZSYgdW5pZnlP
dGhlcikKK3sKKyAgICBpZiAoJnVuaWZ5VGhpcyA9PSAmdW5pZnlPdGhlcikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcykgJiYgaXM8
QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
ICAgICBhdXRvJiBuYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlUaGlz
KTsKKyAgICAgICAgYXV0byYgbmFtZWRPdGhlciA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1
bmlmeU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1l
ZFRoaXMpICYmICFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZE90aGVyKSk7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlw
ZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU90aGVyKSkgeworICAg
ICAgICBhdXRvJiB1bm5hbWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5
VGhpcyk7CisgICAgICAgIGF1dG8mIHVubmFtZWRPdGhlciA9IGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQoIWlzPEFTVDo6VHlwZVJlZmVyZW5j
ZT4odW5uYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRPdGhlcikp
OworICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFT
VDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIHBvaW50
ZXJUaGlzID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFRoaXMpOworICAgICAg
ICAgICAgYXV0byYgcG9pbnRlck90aGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5u
YW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChwb2ludGVyVGhpcy5hZGRyZXNzU3BhY2UoKSAh
PSBwb2ludGVyT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocG9pbnRlclRoaXMuZWxlbWVudFR5cGUo
KSwgcG9pbnRlck90aGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChp
czxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJl
ZmVyZW5jZVRoaXMgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRo
aXMpOworICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VPdGhlciA9IGRvd25jYXN0PEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFy
cmF5UmVmZXJlbmNlVGhpcy5hZGRyZXNzU3BhY2UoKSAhPSBhcnJheVJlZmVyZW5jZU90aGVyLmFk
ZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBtYXRjaGVzKGFycmF5UmVmZXJlbmNlVGhpcy5lbGVtZW50VHlwZSgpLCBhcnJheVJl
ZmVyZW5jZU90aGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVk
T3RoZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBhcnJheVRoaXMgPSBkb3duY2FzdDxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFRoaXMpOworICAgICAgICAgICAgYXV0byYgYXJyYXlPdGhlciA9IGRv
d25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFy
cmF5VGhpcy5udW1FbGVtZW50cygpICE9IGFycmF5T3RoZXIubnVtRWxlbWVudHMoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhhcnJh
eVRoaXMudHlwZSgpLCBhcnJheU90aGVyLnR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgbWF0Y2hlcyhj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgQVNUOjpVbm5hbWVkVHlw
ZSYgb3RoZXIpCit7CisgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUudW5pZnlOb2RlKCks
IG90aGVyLnVuaWZ5Tm9kZSgpKTsKK30KKworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6TmFtZWRU
eXBlJiBuYW1lZFR5cGUsIGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1
cm4gbWF0Y2hlcyhuYW1lZFR5cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKK30K
KworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25z
dCBBU1Q6Ok5hbWVkVHlwZSYgb3RoZXIpCit7CisgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5
cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKK30KKworc3RhdGljIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpUeXBlJiB1
bmlmeU5vZGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIEFT
U0VSVCghcmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmICghcmVzb2x2YWJs
ZVR5cGUuY2FuUmVzb2x2ZSh1bmlmeU5vZGUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgeworICAgICAgICBhdXRv
JiBuYW1lZFVuaWZ5Tm9kZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4obmFtZWRVbmlmeU5vZGUub3JpZ2luKCkpLCBuYW1lZFVuaWZ5Tm9kZSk7CisgICAgICAgIHJl
c29sdmFibGVUeXBlLnJlc29sdmUocmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHsg
V1RGTW92ZShyZXN1bHQpIH07CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBkb3duY2FzdDxB
U1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpLmNsb25lKCk7CisgICAgcmVzb2x2YWJsZVR5cGUu
cmVzb2x2ZShyZXN1bHQtPmNsb25lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBl
KQoreworICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCh1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSwg
cmVzb2x2YWJsZVR5cGUpOworfQorCitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIEFTVDo6UmVzb2x2
YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChu
YW1lZFR5cGUudW5pZnlOb2RlKCksIHJlc29sdmFibGVUeXBlKTsKK30KKworT3B0aW9uYWw8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVU
eXBlJiByZXNvbHZhYmxlVHlwZTEsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBl
MikKK3sKKyAgICBBU1NFUlQoIXJlc29sdmFibGVUeXBlMS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
QVNTRVJUKCFyZXNvbHZhYmxlVHlwZTIucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmIChpczxBU1Q6
OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpGbG9hdExpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlMS5yZXNv
bHZlKGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVm
ZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJlc29sdmFibGVUeXBlMi5yZXNvbHZlKGRv
d25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRU
eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJh
bFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQor
ICAgIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBp
czxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICBy
ZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4o
cmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJlc29s
dmFibGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNv
bHZhYmxlVHlwZTIpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJl
ZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlMS5y
ZXNvbHZlKGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFi
bGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXNvbHZhYmxlVHlw
ZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNv
bHZhYmxlVHlwZTIpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSku
cHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6Ok51bGxMaXRl
cmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVz
b2x2YWJsZVR5cGUyKSkgeworICAgICAgICAvLyBGSVhNRTogVHJ5aW5nIHRvIG1hdGNoIG51bGxw
dHIgYW5kIG51bGxwdHIgZmFpbHMuCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
fQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4gY29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBl
KQoreworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGlm
IChpczxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKSkgeworICAgICAgICBy
ZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVz
b2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5
cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+
KHJlc29sdmFibGVUeXBlKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGRvd25j
YXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlw
ZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJh
bFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9Cisg
ICAgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBl
KSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGRvd25jYXN0PEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xv
bmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQor
ICAgIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWlscy4K
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KKworYm9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhBU1Q6Ok5hbWVkVHlw
ZSYgcG9zc2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7Cisg
ICAgaWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAgICAgICAgfHwg
aXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8IGlz
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpKSB7CisgICAgICAgIHJl
dHVybiB0eXBlQXJndW1lbnRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaXM8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSkpOworICAgIGF1dG8mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihw
b3NzaWJsZVR5cGUpOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpLnNpemUoKSAhPSB0eXBlQXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBBU1Q6OkNvbnN0YW50RXhwcmVzc2lv
biogdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6VHlwZVJl
ZmVyZW5jZSogdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxwdHI7CisgICAgICAgIEFT
VDo6Q29uc3RhbnRFeHByZXNzaW9uKiBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uID0gbnVs
bHB0cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiBuYXRpdmVUeXBlQXJndW1lbnRUeXBl
UmVmZXJlbmNlID0gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGFzc2lnbiA9IFsmXShBU1Q6OlR5
cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50LCBBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiomIGV4cHJl
c3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZSomIHR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAg
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24m
IGNvbnN0YW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAmY29u
c3RhbnRFeHByZXNzaW9uOworICAgICAgICAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OlR5cGVS
ZWZlcmVuY2U+JiB0aGVUeXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgdHlwZVJlZmVy
ZW5jZSA9ICZzdGF0aWNfY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2UmPih0aGVUeXBlUmVmZXJlbmNl
KTsKKyAgICAgICAgICAgIH0pLCB0eXBlQXJndW1lbnQpOworICAgICAgICB9OworCisgICAgICAg
IGFzc2lnbih0eXBlQXJndW1lbnRzW2ldLCB0eXBlQXJndW1lbnRFeHByZXNzaW9uLCB0eXBlQXJn
dW1lbnRUeXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXNzaWduKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbaV0sIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24sIG5hdGl2
ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOworCisgICAgICAgIGlmICh0eXBlQXJndW1lbnRF
eHByZXNzaW9uICYmIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAg
IGlmICghdHlwZUFyZ3VtZW50RXhwcmVzc2lvbi0+bWF0Y2hlcygqbmF0aXZlVHlwZUFyZ3VtZW50
RXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVs
c2UgaWYgKHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgJiYgbmF0aXZlVHlwZUFyZ3VtZW50VHlw
ZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCp0eXBlQXJndW1lbnRUeXBl
UmVmZXJlbmNlLCAqbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBw
b3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4mIGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpCit7CisgICAgaWYgKHBvc3NpYmxlRnVuY3Rp
b24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBhcmd1bWVudFR5cGVzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zc2libGVGdW5jdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCpwb3Nz
aWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCksIHN0YXRpY19jYXN0PEFTVDo6VW5u
YW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAg
ICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNh
blJlc29sdmUoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSk7CisgICAg
ICAgIH0pLCBhcmd1bWVudFR5cGVzW2ldLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoY2FzdFJldHVyblR5cGUg
JiYgIW1hdGNoZXMoY2FzdFJldHVyblR5cGUtPmdldCgpLCBwb3NzaWJsZUZ1bmN0aW9uLnR5cGUo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbmZlclR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEluZmVyVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZmQ0YjU0ZTk2MjQ2N2Y3OWQwNGEyODIw
NWY4ZWJmNjg3ZWJlNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMUmVzb2x2aW5nVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5j
bHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3Mg
TmFtZWRUeXBlOworY2xhc3MgUmVzb2x2YWJsZVR5cGU7CitjbGFzcyBVbm5hbWVkVHlwZTsKKwor
fQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6VW5u
YW1lZFR5cGUmKTsKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlwZSYsIGNvbnN0IEFT
VDo6TmFtZWRUeXBlJik7Citib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNv
bnN0IEFTVDo6TmFtZWRUeXBlJik7CisvLyBGSVhNRTogSXMgYW55b25lIGFjdHVhbGx5IHVzaW5n
IHRoZSByZXR1cm4gdHlwZSBoZXJlPworT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlVubmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlw
ZSYpOworT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1p
dChBU1Q6Ok5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK09wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlw
ZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK09wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4gY29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK2Jvb2wgaW5mZXJUeXBlc0Zv
clR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJn
dW1lbnRzJik7Citib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biYgcG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6TmFtZWRUeXBlPj4mIGNhc3RSZXR1cm5UeXBlKTsKKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTMxMzA2ODE4MWY0NWFhN2RlY2RiMTYzOTk1YmIw
Mzg0YzNjMGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgor
I2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxl
RGVjbGFyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCitOYW1lQ29udGV4dDo6TmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCkKKyAgICA6
IG1fcGFyZW50KHBhcmVudCkKK3sKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6VHlw
ZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHModHlwZURlZmlu
aXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0g
bV90eXBlcy5hZGQodHlwZURlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZCh0eXBlRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNv
bnRleHQ6OmFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24p
Cit7CisgICAgaWYgKGV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHN0cnVjdHVyZURl
ZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVk
VHlwZT4sIDE+KCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAg
aWYgKGV4aXN0cyhlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoZW51bWVyYXRpb25EZWZpbml0
aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+
LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZW51bWVyYXRpb25EZWZpbml0
aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKG1fdHlw
ZXMuZmluZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAg
ICAgIHx8IG1fdmFyaWFibGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV92
YXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fZnVuY3Rpb25zLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24pOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGlmIChtX3R5
cGVzLmZpbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdHlwZXMuZW5k
KCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNv
bnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0
aW9uKQoreworICAgIGlmIChtX2Z1bmN0aW9ucy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkpICE9IG1fZnVuY3Rpb25zLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0
aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29u
dGV4dDo6YWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikK
K3sKKyAgICBpZiAoZXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV92YXJpYWJsZXMuYWRkKFN0cmluZyh2
YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSksICZ2YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICBy
ZXR1cm4gcmVzdWx0LmlzTmV3RW50cnk7Cit9CisKK1ZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXMuZmluZChuYW1lKTsKKyAg
ICBpZiAoaXRlcmF0b3IgPT0gbV90eXBlcy5lbmQoKSkgeworICAgICAgICBpZiAobV9wYXJlbnQp
CisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFR5cGVzKG5hbWUpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisK
K1ZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+KiBOYW1lQ29udGV4dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0
b3IgPT0gbV9mdW5jdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAg
ICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMobmFtZSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKworQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKiBOYW1lQ29udGV4dDo6Z2V0VmFyaWFibGUoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUp
OworICAgIGlmIChpdGVyYXRvciA9PSBtX3ZhcmlhYmxlcy5lbmQoKSkgeworICAgICAgICBpZiAo
bV9wYXJlbnQpCisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFZhcmlhYmxlKG5hbWUp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGl0ZXJhdG9yLT52
YWx1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6ZXhpc3RzKFN0cmluZyYgbmFtZSkKK3sKKyAg
ICByZXR1cm4gbV90eXBlcy5maW5kKG5hbWUpICE9IG1fdHlwZXMuZW5kKCkKKyAgICAgICAgfHwg
bV9mdW5jdGlvbnMuZmluZChuYW1lKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAgICB8fCBt
X3ZhcmlhYmxlcy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVuZCgpOworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTA0ODc4YWU3ZTlmMWQ4M2U1ZDU5MmMy
ZmQ3NTJiZWRjOTBmYTljYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApAQCAtMCwwICsxLDgyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgTmFt
ZWRUeXBlOworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIFR5cGVEZWZpbml0aW9u
OworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlv
bjsKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb247CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247CitjbGFzcyBWYXJpYWJsZURlY2xh
cmF0aW9uOworCit9CisKK2NsYXNzIE5hbWVDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBOYW1lQ29u
dGV4dChOYW1lQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7CisKKyAgICBib29sIGFkZChBU1Q6
OlR5cGVEZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
Jik7CisgICAgYm9vbCBhZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICBib29s
IGFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CisKKyAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBnZXRU
eXBlcyhjb25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogZ2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYp
OworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogZ2V0VmFyaWFibGUoY29uc3QgU3RyaW5n
Jik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBleGlzdHMoU3RyaW5nJik7CisKKyAgICBIYXNoTWFw
PFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAx
Pj4gbV90eXBlczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+IG1fZnVuY3Rpb25zOworICAgIEhh
c2hNYXA8U3RyaW5nLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qPiBtX3ZhcmlhYmxlczsKKyAg
ICBOYW1lQ29udGV4dCogbV9wYXJlbnQ7Cit9OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNv
bHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJmMThlNjlhZmM1YzhmZTUwZDc0NWU1NGQ5NjI2ZGRjMGQ1
MGUwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApAQCAtMCwwICsxLDI4MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5o
IgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJ
ZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
SExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNM
UmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIFdITFNMIHsKKworTmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZUNv
bnRleHQmIG5hbWVDb250ZXh0KQorICAgIDogbV9uYW1lQ29udGV4dChuYW1lQ29udGV4dCkKK3sK
K30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJl
ZmVyZW5jZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZVJlZmVyZW5jZSk7CisgICAg
aWYgKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8qIGNhbmRpZGF0ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKHR5cGVSZWZlcmVuY2Uu
bmFtZSgpKTsKKyAgICBpZiAoY2FuZGlkYXRlcyA9PSBudWxscHRyKSB7CisgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVz
b2x2ZVR5cGVPdmVybG9hZEltcGwoKmNhbmRpZGF0ZXMsIHR5cGVSZWZlcmVuY2UudHlwZUFyZ3Vt
ZW50cygpKSkKKyAgICAgICAgdHlwZVJlZmVyZW5jZS5zZXRSZXNvbHZlZFR5cGUoKnJlc3VsdCk7
CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIE5hbWVDb250ZXh0IG5ld05hbWVDb250ZXh0KCZt
X25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5ld05hbWVD
b250ZXh0KTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUo
KSk7CisgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpKSB7CisgICAgICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQocGFy
YW1ldGVyKTsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbmV3TmFtZUNvbnRleHQuYWRkKHBhcmFt
ZXRlcik7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBuZXdOYW1lUmVzb2x2
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKK30KKwor
dm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIE5hbWVD
b250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFt
ZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChibG9jayk7Cit9CisKK3ZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgTmFtZUNvbnRleHQg
bmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4
dCkuY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3Rh
dGVtZW50LmVsc2VCb2R5KCkpIHsKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1f
bmFtZUNvbnRleHQpOworICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJy
b3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlN0YXRlbWVudCY+KCppZlN0YXRlbWVudC5lbHNl
Qm9keSgpKSk7CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpXaGls
ZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNv
bmRpdGlvbmFsKCkpOworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0
KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdCh3aGls
ZUxvb3AuYm9keSgpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG9XaGls
ZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1l
Q29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlz
aXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5j
b25kaXRpb25hbCgpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Rm9yTG9v
cCYgZm9yTG9vcCkKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4
dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoZm9y
TG9vcCk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgbV9uYW1lQ29udGV4dC5hZGQodmFy
aWFibGVEZWNsYXJhdGlvbik7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFy
YXRpb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCit7CisgICAgaWYgKHZhcmlhYmxlUmVmZXJlbmNlLnZh
cmlhYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiB2YXJpYWJsZSA9IG1f
bmFtZUNvbnRleHQuZ2V0VmFyaWFibGUodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKSkKKyAgICAg
ICAgdmFyaWFibGVSZWZlcmVuY2Uuc2V0VmFyaWFibGUoKnZhcmlhYmxlKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBO
YW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCit7CisgICAg
QVNTRVJUKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICByZXR1cm5TdGF0ZW1lbnQuc2V0RnVuY3Rp
b24obV9jdXJyZW50RnVuY3Rpb24pOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZXR1cm5TdGF0
ZW1lbnQpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoYXV0byog
Z2V0RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmdldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLnNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKCpnZXRGdW5jdGlvbnMpOworICAgIGlmIChh
dXRvKiBzZXRGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24uc2V0RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uc2V0UG9zc2libGVTZXRPdmVybG9hZHMoKnNldEZ1bmN0aW9ucyk7CisgICAg
aWYgKGF1dG8qIGFuZEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUFuZE92ZXJsb2FkcygqYW5kRnVuY3Rpb25zKTsK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKTsKK30KKwor
dm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lv
bikKK3sKKyAgICBpZiAoaXM8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5i
YXNlKCkpKSB7CisgICAgICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250
ZXh0LmdldFR5cGVzKGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Np
b24uYmFzZSgpKS5uYW1lKCkpKSB7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBl
cy0+c2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVu
dW1lcmF0aW9uVHlwZXMpWzBdOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4odHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoZG90RXhwcmVzc2lvbi5maWVsZE5hbWUo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwpIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90
IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgRW51bWVyYXRpb25NZW1iZXJM
aXRlcmFscyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgICAgICAgICAg
ICAgICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdpbigpOworICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFyaWFudHMg
b3IgYSBSZXdyaXRlciBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICBkb3RFeHByZXNzaW9u
Ln5Eb3RFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIG5ldyAoJmRvdEV4cHJlc3Np
b24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUob3JpZ2luKSwgKm1lbWJl
cik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG90RXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJs
b2FkcygpKSB7CisgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0Lmdl
dEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKQorICAgICAgICAgICAgY2FsbEV4cHJl
c3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiB0eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Np
b24ubmFtZSgpKSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBlcy0+c2l6ZSgpID09IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQu
Z2V0RnVuY3Rpb25zKFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0
Q2FzdERhdGEoKCp0eXBlcylbMF0uZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoY2Fs
bEV4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpCit7CisgICAgaWYgKGF1dG8gZW51bWVyYXRpb25U
eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UubGVmdCgpKSkgeworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25U
eXBlcy0+c2l6ZSgpID09IDEpOworICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51
bWVyYXRpb25UeXBlcylbMF07CisgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
bj4odHlwZSk7CisgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRpb25EZWZp
bml0aW9uLm1lbWJlckJ5TmFtZShjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZS5yaWdodCgpKSkgeworICAgICAgICAgICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLnNldEVudW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0aW9u
RGVmaW5pdGlvbiwgKm1lbWJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNldEVycm9yKCk7Cit9CisKKy8vIEZJ
WE1FOiBNYWtlIHN1cmUgYWxsIHRoZSBuYW1lcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCisKK2Jvb2wg
cmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVS
ZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBl
RGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0
KHN0YXRpY19jYXN0PEFTVDo6VHlwZURlZmluaXRpb24mPih0eXBlRGVmaW5pdGlvbikpOworICAg
ICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3Ry
dWN0dXJlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiY+KHN0cnVjdHVyZURl
ZmluaXRpb24pKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVS
ZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mPihlbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgaWYgKG5hbWVSZXNv
bHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3Ig
KGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0
aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mPihuYXRpdmVUeXBlRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCByZXNvbHZlTmFtZXNJ
bkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikK
K3sKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25E
ZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25E
ZWZpbml0aW9uKCZzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiY+KGZ1bmN0aW9u
RGVmaW5pdGlvbikpOworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9uKSk7
CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRp
b24obnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDog
cHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNv
bHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJj4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICBpZiAobmFtZVJlc29s
dmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NzJlMDhlMDYyMTA2N2RiZTE5MGNhMDQwNjhhOWU5YTcwYmZkY2YxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
aApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldI
TFNMVmlzaXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK2NsYXNzIFByb2dyYW07CisKK2NsYXNzIE5hbWVSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9y
IHsKK3B1YmxpYzoKKyAgICBOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmKTsKKworICAgIHZpcnR1
YWwgfk5hbWVSZXNvbHZlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Q3VycmVudEZ1bmN0aW9u
RGVmaW5pdGlvbihBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9uKQor
ICAgIHsKKyAgICAgICAgbV9jdXJyZW50RnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OklmU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Oldo
aWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6UmV0dXJuJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9u
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0
OworICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBtX2N1cnJlbnRGdW5jdGlvbiB7IG51bGxw
dHIgfTsKK307CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29s
dmVyJik7Citib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2
ZXImKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAppbmRleCBhNjllODQzYzEwZmQ3Y2NhMzE5NTUz
NzUwMjI3YWFiZWNjZmRhNzliLi44YmNlYTZiMDQ3ODk3YTYyOTcyMGJlZjk0M2I4ODlkNGMxMDQ3
NTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByb2dyYW0uaApAQCAtNDcsMzkgKzQ3LDQwIEBAIHB1YmxpYzoKICAgICBib29sIGFwcGVuZChB
U1Q6OlR5cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24pCiAgICAgewogICAgICAgICBtX3R5
cGVEZWZpbml0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9uPihX
VEZNb3ZlKHR5cGVEZWZpbml0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6VHlwZURlZmluaXRpb24m
PihtX3R5cGVEZWZpbml0aW9ucy5sYXN0KCkpKTsKICAgICB9CiAKICAgICBib29sIGFwcGVuZChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQogICAgIHsKICAg
ICAgICAgbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24+KFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlvbikpKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNf
Y2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mPihtX3N0cnVjdHVyZURlZmluaXRpb25zLmxh
c3QoKSkpOwogICAgIH0KIAogICAgIGJvb2wgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogICAgIHsKICAgICAgICAgbV9lbnVtZXJhdGlv
bkRlZmluaXRpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPihXVEZNb3ZlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbiY+KG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5sYXN0KCkpKTsK
ICAgICB9CiAKICAgICBib29sIGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0
aW9uRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBl
bmQobWFrZVVuaXF1ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlv
bkRlZmluaXRpb24pKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9u
YW1lQ29udGV4dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mPihtX2Z1
bmN0aW9uRGVmaW5pdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCiAgICAgYm9vbCBhcHBlbmQoQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikK
ICAgICB7CiAgICAgICAgIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKG1ha2VV
bmlxdWVSZWY8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJj4obV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0KCkpKTsKICAgICB9CiAK
ICAgICBib29sIGFwcGVuZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5hcHBl
bmQobWFrZVVuaXF1ZVJlZjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oV1RGTW92ZShuYXRp
dmVUeXBlRGVjbGFyYXRpb24pKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mPihtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCisgICAgTmFt
ZUNvbnRleHQmIG5hbWVDb250ZXh0KCkgeyByZXR1cm4gbV9uYW1lQ29udGV4dDsgfQogICAgIFZl
Y3RvcjxVbmlxdWVSZWY8QVNUOjpUeXBlRGVmaW5pdGlvbj4+JiB0eXBlRGVmaW5pdGlvbnMoKSB7
IHJldHVybiBtX3R5cGVEZWZpbml0aW9uczsgfQogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uPj4mIHN0cnVjdHVyZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9z
dHJ1Y3R1cmVEZWZpbml0aW9uczsgfQogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+PiYgZW51bWVyYXRpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51
bWVyYXRpb25EZWZpbml0aW9uczsgfQpAQCAtOTAsNiArOTEsNyBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPFVuaXF1ZVJlZjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+JiBuYXRpdmVUeXBlRGVj
bGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZh
dGU6CisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKICAgICBWZWN0b3I8VW5pcXVlUmVm
PEFTVDo6VHlwZURlZmluaXRpb24+PiBtX3R5cGVEZWZpbml0aW9uczsKICAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7
CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+IG1fZW51
bWVyYXRpb25EZWZpbml0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVhMTgzM2Q4ZDlhY2E0YWUzY2EwZTljZDcwMjgzY2YzOWMyNDQzNmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmVPdmVybG9hZEltcGwuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJ
bmZlclR5cGVzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK3N0YXRpYyB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGNhbmRpZGF0ZSwgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzKQoreworICAgIHVuc2ln
bmVkIGNvbnZlcnNpb25Db3N0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbmRp
ZGF0ZS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29udmVyc2lvbkNvc3Qg
Kz0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mKSAtPiB1bnNpZ25lZCB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwg
WyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KSAtPiB1bnNpZ25lZCB7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVyc2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJz
KClbaV0udHlwZSgpKTsKKyAgICAgICAgfSksIGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkpOworICAg
IH0KKyAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5ldmVyIGJlIGEgbGl0ZXJhbCB0eXBlLCBz
byBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAwLgorICAgIHJldHVybiBjb252ZXJzaW9u
Q29zdDsKK30KKworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpCit7CisgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4g
Y2FuZGlkYXRlczsKKyAgICBmb3IgKGF1dG8mIHBvc3NpYmxlRnVuY3Rpb24gOiBwb3NzaWJsZUZ1
bmN0aW9ucykgeworICAgICAgICBpZiAocG9zc2libGVGdW5jdGlvbi5nZXQoKS5lbnRyeVBvaW50
VHlwZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmZlclR5cGVzRm9y
Q2FsbChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlw
ZSkpCisgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChwb3NzaWJsZUZ1bmN0aW9uLmdldCgp
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtQ29udmVyc2lvbkNvc3QgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUg
OiBjYW5kaWRhdGVzKQorICAgICAgICBtaW5pbXVtQ29udmVyc2lvbkNvc3QgPSBzdGQ6Om1pbiht
aW5pbXVtQ29udmVyc2lvbkNvc3QsIGNvbnZlcnNpb25Db3N0KGNhbmRpZGF0ZS5nZXQoKSwgYXJn
dW1lbnRUeXBlcykpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbWluaW11bUNvc3RDYW5kaWRhdGVzOworICAgIGZvciAo
YXV0byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykgeworICAgICAgICBpZiAoY29udmVyc2lvbkNv
c3QoY2FuZGlkYXRlLmdldCgpLCBhcmd1bWVudFR5cGVzKSA9PSBtaW5pbXVtQ29udmVyc2lvbkNv
c3QpCisgICAgICAgICAgICBtaW5pbXVtQ29zdENhbmRpZGF0ZXMuYXBwZW5kKGNhbmRpZGF0ZSk7
CisgICAgfQorCisgICAgYm9vbCByZXN0cmljdGVkQ2FuZGlkYXRlRXhpc3RzID0gZmFsc2U7Cisg
ICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBtaW5pbXVtQ29zdENhbmRpZGF0ZXMpIHsKKyAgICAg
ICAgaWYgKGlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpICYmIGRv
d25jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpLnJlc3RyaWN0
ZWQoKSkgeworICAgICAgICAgICAgcmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cyA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbmRpZGF0ZXMuY2xl
YXIoKTsKKyAgICBpZiAocmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cykgeworICAgICAgICBmb3Ig
KGF1dG8mIGNhbmRpZGF0ZSA6IG1pbmltdW1Db3N0Q2FuZGlkYXRlcykgeworICAgICAgICAgICAg
aWYgKGlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpICYmIGRvd25j
YXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpLnJlc3RyaWN0ZWQo
KSkKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjYW5kaWRhdGUuZ2V0KCkpOwor
ICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNhbmRpZGF0ZXMgPSBtaW5pbXVtQ29zdENh
bmRpZGF0ZXM7CisKKyAgICBpZiAoY2FuZGlkYXRlcy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0
dXJuICZjYW5kaWRhdGVzWzBdLmdldCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitBU1Q6
Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYgcG9zc2libGVUeXBlcywgQVNUOjpUeXBlQXJn
dW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAgIEFTVDo6TmFtZWRUeXBlKiByZXN1bHQgPSBu
dWxscHRyOworICAgIGZvciAoYXV0byYgcG9zc2libGVUeXBlIDogcG9zc2libGVUeXBlcykgewor
ICAgICAgICBpZiAoaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMocG9zc2libGVUeXBlLCB0eXBl
QXJndW1lbnRzKSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdGF0aWNfY2FzdDxBU1Q6Ok5h
bWVkVHlwZSY+KHBvc3NpYmxlVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhkOTM0NmZmODc3NmNlOTMxNGZmMTA2NjZiODNjYmZmNTg1NmM4MDEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFJlc29sdmVPdmVybG9hZEltcGwuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZp
bmdUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlIDxmdW5j
dGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRnVuY3Rpb25E
ZWNsYXJhdGlvbjsKK2NsYXNzIE5hbWVkVHlwZTsKKworfQorCitBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMs
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRU
eXBlcywgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBj
YXN0UmV0dXJuVHlwZSk7CitBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwo
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYsIEFTVDo6
VHlwZUFyZ3VtZW50cyYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk3YzBlYmFlODFmODJjNDBlZmNjOWVmNTNmNmYxNjM5NzljODJjYjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmluZ1R5cGUuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBSZXNvbHZhYmxl
VHlwZTsKK2NsYXNzIFVubmFtZWRUeXBlOworCit9CisKK2NsYXNzIFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IHsKK3B1
YmxpYzoKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShBU1Q6OlJlc29sdmFibGVUeXBlJiBy
ZXNvbHZhYmxlVHlwZSkKKyAgICAgICAgOiBtX3Jlc29sdmFibGVUeXBlKCZyZXNvbHZhYmxlVHlw
ZSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoY29uc3QgUmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYmKSA9IGRlbGV0ZTsKKworICAgIEFTVDo6UmVz
b2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKCkgeyByZXR1cm4gKm1fcmVzb2x2YWJsZVR5cGU7
IH0KKworcHJpdmF0ZToKKyAgICBBU1Q6OlJlc29sdmFibGVUeXBlKiBtX3Jlc29sdmFibGVUeXBl
OworfTsKKwordXNpbmcgUmVzb2x2aW5nVHlwZSA9IFZhcmlhbnQ8VW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+LCBSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+PjsKKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCAxMmE5MjQ0Yzc4ZjVhNTU3NWUyMWIwMzRlNWQyMTM3NzQ0
MGFjZjgwLi42NjViNTgwYzJmMmQ0MDE1N2UyNjIwYmZmYzRhZTM5ZjkwYzc0ZmQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dApAQCAtMzA2LDggKzMwNiwxMiBAQCBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
SGFuZHNoYWtlLmNwcAogTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmNwcAogCiBNb2R1bGVzL3dlYmdwdS9ET01XaW5kb3dXZWJHUFUuY3BwCitNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExleGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCitN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcAorTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJl
c29sdmVPdmVybG9hZEltcGwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
QXJndW1lbnQuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50
aWMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDkxNWQ1NDQxYTUwYjQ3ZjBiMGUzYmE4ZDEzOTk5OGVjOTRiZjVlMjMuLjBjOGU5ZTFh
NzYzNDRhMTVlNjYzNTllNTBmZTkyOGQ1OWRkMzc2MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzE4LDYgKzEzMzE4LDE1
IEBACiAJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFyeS50
eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjFERjJFNzFEOUU0RTk5MDBGNUIyNEMgLyogQ1NTRm9udFZhcmlhdGlvblZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRWYXJpYXRp
b25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMURGMkU4MUQ5RTRF
OTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTRm9udFZhcmlhdGlvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMzRBOThBMjFFODg4M0UwMDNDOTg0RCAvKiBXSExTTE5hbWVSZXNvbHZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOThDMjFFODg4M0UwMDNDOTg0RCAvKiBXSExTTE5h
bWVSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk4RDIxRTg4ODg0MDAzQzk4NEQgLyogV0hMU0xO
YW1lQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OEUyMUU4ODg4NTAwM0M5ODREIC8q
IFdITFNMTmFtZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk5NzIxRTkwRjI4MDAzQzk4NEQgLyog
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk5OTIxRTkw
RjI5MDAzQzk4NEQgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMzRBOTlBMjFFOTBGNTYwMDNDOTg0RCAvKiBXSExTTEluZmVyVHlwZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbmZlclR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OUIyMUU5MEY1NzAwM0M5ODREIC8qIFdITFNMSW5mZXJUeXBl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEluZmVyVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIzNEE5OUQyMUU5MTBCRDAwM0M5ODREIC8qIFdITFNMUmVzb2x2aW5nVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmluZ1R5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzI0NThFNjExRkU4OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVU
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyNjAxN0ExMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNl
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250RmFjZVNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0EyMUM3MkRDOTkwMEY3
NEExNiAvKiBDU1NGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDU1NGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk2Njks
NyArMTk2NzgsNiBAQAogCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3Vy
Y2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlDMjFC
Rjc0MjIxQ0Q5NjNCMDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExpYnJhcnkuaCAqLywKIAkJCQk1
MzhFQzdFQTFGOTZBOTVCMDA0RDIyQTggLyogdW5pZmllZC1zb3VyY2VzICovLAogCQkJCTk5MDhC
MEYzMUJDQUNGRkUwMEVEMEY2NSAvKiBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5QnVpbHRpbnMu
Y3BwICovLAogCQkJCTk5MDhCMEY1MUJDQUQwN0QwMEVEMEY2NSAvKiBCeXRlTGVuZ3RoUXVldWlu
Z1N0cmF0ZWd5QnVpbHRpbnMuaCAqLywKQEAgLTE5NzU5LDYgKzE5NzY3LDcgQEAKIAkJCQk2NTY1
ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLywK
IAkJCQkxQTE0MTRCMzEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNw
cCAqLywKIAkJCQkxQTE0MTRCNDEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5h
bWVzLmggKi8sCisJCQkJQzIxQkY3NDIyMUNEOTYzQjAwMjI3OTc5IC8qIFdITFNMU3RhbmRhcmRM
aWJyYXJ5LmggKi8sCiAJCQkJNTE3NDhGQTIxQ0M2RUVFQjAwNzI4RDg0IC8qIFdvcmtlckdsb2Jh
bFNjb3BlQ29uc3RydWN0b3JzLmlkbCAqLywKIAkJCQk5OTA4QjBGOTFCQ0FEMDdEMDBFRDBGNzUg
LyogV3JpdGFibGVTdHJlYW1CdWlsdGlucy5jcHAgKi8sCiAJCQkJOUIwM0Q4MDYxQkIzMTEwRDAw
Qjc2NEU4IC8qIFdyaXRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLywKQEAgLTI1Mzc1LDEzICsyNTM4
NCwyMyBAQAogCQlDMjEwRTkwRDIxQjRCQ0E0MDBCN0Y4M0QgLyogV0hMU0wgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIy
Nzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQgKi8sCiAJCQkJQzIxQkY2RjEyMUNEODk4
RDAwMjI3OTc5IC8qIEFTVCAqLywKKwkJCQlDMjM0QTk5QTIxRTkwRjU2MDAzQzk4NEQgLyogV0hM
U0xJbmZlclR5cGVzLmNwcCAqLywKKwkJCQlDMjM0QTk5QjIxRTkwRjU3MDAzQzk4NEQgLyogV0hM
U0xJbmZlclR5cGVzLmggKi8sCiAJCQkJQzIxMEU5MTEyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNM
TGV4ZXIuY3BwICovLAogCQkJCUMyMTBFOTEyMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVy
LmggKi8sCisJCQkJQzIzNEE5OEQyMUU4ODg4NDAwM0M5ODREIC8qIFdITFNMTmFtZUNvbnRleHQu
Y3BwICovLAorCQkJCUMyMzRBOThFMjFFODg4ODUwMDNDOTg0RCAvKiBXSExTTE5hbWVDb250ZXh0
LmggKi8sCisJCQkJQzIzNEE5OEEyMUU4ODgzRTAwM0M5ODREIC8qIFdITFNMTmFtZVJlc29sdmVy
LmNwcCAqLywKKwkJCQlDMjM0QTk4QzIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2
ZXIuaCAqLywKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuY3Bw
ICovLAogCQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5oICovLAog
CQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywKKwkJCQlD
MjM0QTk5OTIxRTkwRjI5MDAzQzk4NEQgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAq
LywKKwkJCQlDMjM0QTk5NzIxRTkwRjI4MDAzQzk4NEQgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJ
bXBsLmggKi8sCisJCQkJQzIzNEE5OUQyMUU5MTBCRDAwM0M5ODREIC8qIFdITFNMUmVzb2x2aW5n
VHlwZS5oICovLAorCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExTTFN0YW5kYXJk
TGlicmFyeS50eHQgKi8sCisJCQkJQzIxQkY3NDUyMUNEOTY5ODAwMjI3OTc5IC8qIFdITFNMU3Rh
bmRhcmRMaWJyYXJ5LnR4dCAqLywKIAkJCSk7CiAJCQlwYXRoID0gV0hMU0w7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358922</attachid>
            <date>2019-01-11 11:50:27 -0800</date>
            <delta_ts>2019-01-11 12:33:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193007-20190111115027.patch</filename>
            <type>text/plain</type>
            <size>70279</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGUyYzg5ZWVmNDBlZGE4
NmJhNTg0Mjg5ZWMzMTU3NGE0NDFmMjY2NC4uZDM1MGUwMTNmZGIzMzFmNDNiMjE3YmVlMmI5YjE5
YWRhYjBhMGMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIE5hbWVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDA3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgYmFzZSBpbXBs
ZW1lbnRhdGlvbiBmb3IgV0hMU0wncyBuYW1lIHJlc29sdmVyLiBUaGUgbmFtZSByZXNvbHZlciBt
YXRjaGVzIHRocmVlIGtpbmRzIG9mIHRoaW5nczoKKyAgICAgICAgMS4gSXQgbWF0Y2hlcyBWYXJp
YWJsZVJlZnMgdG8gVmFyaWFibGVEZWNscworICAgICAgICAyLiBJdCBtYXRjaGVzIFR5cGVSZWZz
IHRvIE5hbWVkVHlwZXMKKyAgICAgICAgMy4gSXQgbWF0Y2hlcyBDYWxsRXhwcmVzc2lvbnMgdG8g
RnVuY3Rpb25EZWNsYXJhdGlvbnMKKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBpdCBp
c24ndCBob29rZWQgdXAgeWV0LiBOb3QgZW5vdWdoIG9mIHRoZSBjb21waWxlciBleGlzdHMgdG8g
aGF2ZSBhbnkgbWVhbmluZ2Z1bCBzb3J0CisgICAgICAgIG9mIHRlc3QuIFdoZW4gZW5vdWdoIG9m
IHRoZSBjb21waWxlciBpcyBwcmVzZW50LCBJJ2xsIHBvcnQgdGhlIHJlZmVyZW5jZSBpbXBsZW1l
bnRhdGlvbidzIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcDogTm93IHRoYXQgSW5mZXJUeXBlcy5oIGV4aXN0
cywgd2UgY2FuIGltcGxlbWVudCB0aGVzZQorICAgICAgICBmdW5jdGlvbnMuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpGbG9hdExpdGVyYWxUeXBlOjpjYW5SZXNvbHZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU6OmNvbnZlcnNp
b25Db3N0IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU6OnZhbHVlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwOiBOb3cgdGhhdCBJbmZlclR5cGVzLmggZXhpc3RzLCB3ZSBjYW4gaW1wbGVt
ZW50IHRoZXNlCisgICAgICAgIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0IGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuaDogUmVtb3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVyYWxUeXBlOjp2YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljLmNwcDogTW9kaWZ5aW5nIFNvdXJjZXMudHh0IGNhdXNlZCB0aGUgc291cmNl
cworICAgICAgICB0byBnZXQgc2h1ZmZsZWQgYXJvdW5kLCBzbyB0aGUgI2luY2x1ZGVzIG5lZWQg
dG8gYmUgZml4ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOiBOb3cgdGhhdCBJbmZlclR5cGVzLmggZXhpc3Rz
LCB3ZSBjYW4gaW1wbGVtZW50CisgICAgICAgIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaDogUmVtb3ZlIHVu
bmVjZXNzYXJ5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OnZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwOiBBZGRlZC4gVGhpcyBpcyB0
aGUgcmVwbGFjZW1lbnQgZm9yIFVuaWZpY2F0aW9uQ29udGV4dCBpbiB0aGUKKyAgICAgICAgcmVm
ZXJlbmNlIGNvbXBpbGVyLiBJdCdzIG11Y2ggc2ltcGxlciAoYW5kIHdlIHNob3VsZCByZW1vdmUg
VW5pZmljYXRpb25Db250ZXh0IGluIHRoZSByZWZlcmVuY2UgY29tcGlsZXIgaW4KKyAgICAgICAg
ZmF2b3Igb2YgdGhpcyBkZXNpZ24pLiBJdCBoYXMgdGhyZWUgc2V0cyBvZiBmdW5jdGlvbnM6IFRl
bGwgaWYgdHdvIHR5cGVzIGFyZSB0aGUgc2FtZSwgdGVsbCBpZiB0d28gdHlwZXMgYXJlCisgICAg
ICAgIHRoZSBzYW1lIGFuZCBjb21taXQgdGhlIHJlc29sdmFibGUgdHlwZSwgYW5kIHJ1biB0aGUg
YWJvdmUgZnVuY3Rpb25zIG9uIHR5cGUgcmVmZXJlbmNlcyBvciBmdW5jdGlvbiBhcmd1bWVudHMu
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6bWF0Y2hBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNvbW1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxsKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNw
cDogQWRkZWQuIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIE5hbWVk
VHlwZXMsCisgICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25zLCBhbmQgVmFyaWFibGVEZWNsYXJh
dGlvbnMgc28gTmFtZVJlc29sdmVyIGNhbiB3b3JrLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok5hbWVDb250ZXh0OjpOYW1lQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFt
ZUNvbnRleHQ6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6Omdl
dFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0RnVuY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0VmFyaWFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpleGlzdHMpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
VHlwZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmNwcDogQWRkZWQuIFVzZSB0aGUgTmFtZUNvbnRleHQgdG8gbWF0Y2ggdXAgdGhlIHRocmVlIHR5
cGVzIG9mIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6TmFt
ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2ZXI6OnZpc2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFtZXNJblR5cGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlw
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6c2V0Q3VycmVudEZ1
bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cm9ncmFtLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvZ3JhbTo6YXBwZW5kKTogVGhl
IHBhcnNlciBuZWVkcyB0byBhZGQgYWxsIGdsb2JhbCBkZWNsYXJhdGlvbnMgdG8gdGhlIG5hbWUg
Y29udGV4dCBzbyB0aGUKKyAgICAgICAgbmFtZSByZXNvbHZlciBpcyByZWFkeSB0byBnbyBhcyBz
b29uIGFzIHBhcnNpbmcgaXMgZmluaXNoZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJv
Z3JhbTo6bmFtZUNvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA6IEFkZGVkLiBQaWNrIHRoZSBhcHByb3ByaWF0ZSBGdW5j
dGlvbkRlY2xhcmF0aW9uIG9yCisgICAgICAgIE5hbWVkVHlwZSBmb3IgYSBwYXJ0aWN1bGFyIENh
bGxFeHByZXNzaW9uIG9yIFR5cGVSZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
Y29udmVyc2lvbkNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVGdW5jdGlv
bk92ZXJsb2FkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVR5cGVPdmVy
bG9hZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5jcHAuIFRoaXMgZGVzY3JpYmVzIHRoZSB0d28gc3RhdGVzIHRoYXQgYSB0eXBlIGluIHRo
ZSB0eXBlIHJlc29sdmVyIGNhbiBiZSBpbjogZWl0aGVyIGFuIG93bmVkCisgICAgICAgIFVubmFt
ZWRUeXBlLCBvciBhIHJlZmVyZW5jZSB0byBhIFJlc29sdmFibGVUeXBlLiBUaGlzIGlzIGJlY2F1
c2UgZXZlcnkgZXhwcmVzc2lvbiBuZWVkcyB0byBoYXZlIGEgdHlwZQorICAgICAgICBhc3NvY2lh
dGVkIHdpdGggaXQsIGJ1dCB0aG9zZSB0eXBlcyBtaWdodCBiZSB0aGUgdHlwZSBvZiBhIGxpdGVy
YWwgKGFrYSBhIFJlc29sdmFibGVUeXBlKS4gTXVsdGlwbGUKKyAgICAgICAgZXhwcmVzc2lvbnMg
bWlnaHQgbmVlZCB0byByZWZlcmVuY2UgdGhlIHNhbWUgUmVzb2x2YWJsZVR5cGUgc28gd2hlbiBp
dCBnZXRzIHJlc29sdmVkLCBhbGwgdGhlIGV4cHJlc3Npb25zCisgICAgICAgIGdldCB0aGUgcmVz
dWx0LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNlOjpS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U6OnJlc29sdmFibGVUeXBlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTkt
MDEtMTEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
SW50cm9kdWNlIElETCBmaWxlcyBmb3IgcnVudGltZS1lbmFibGVkIFVuZG9NYW5hZ2VyIGFuZCBV
bmRvSXRlbSBKYXZhU2NyaXB0IEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcApp
bmRleCA0NjgwOTMyZjY1OTljZmRmZGQwYzY0MTNjMzExNDU3N2FiNWI3MGEzLi5mZGEyNWU5ZjM2
ZWNkNDFmYTMxNGEzNTI2ZjgzNGRiYzNhY2JmNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVy
YWxUeXBlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2lu
Y2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgogI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCwxNiArNDUsMjYgQEAgRmxvYXRMaXRlcmFs
VHlwZTo6RmxvYXRMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGZsb2F0IHZhbHVl
KQogCiBGbG9hdExpdGVyYWxUeXBlOjp+RmxvYXRMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKIAot
Ym9vbCBGbG9hdExpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdAorYm9v
bCBGbG9hdExpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0IFR5cGUmIHR5cGUpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAgaWYgKCFpczxOYW1lZFR5cGU+KHR5
cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNh
c3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBpZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
bmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsK
KyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0Zsb2F0aW5nKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jYW5SZXByZXNlbnRG
bG9hdCgpKG1fdmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXVuc2lnbmVkIEZsb2F0TGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0KGNvbnN0IFVu
bmFtZWRUeXBlJikgY29uc3QKK3Vuc2lnbmVkIEZsb2F0TGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25D
b3N0KGNvbnN0IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gMDsKKyAgICBpZiAobWF0Y2hlcyh1bm5hbWVk
VHlwZSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHlwZVJlZmVyZW5jZSY+KG1fcHJlZmVycmVkVHlwZSkp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
QVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGbG9hdExpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKaW5kZXggZjNhNDQzMjY4MzhkNTA5ODQz
M2I0ZGUwODQ0ZDNlYmMzZjU2ZGZlOS4uY2RmNDE3OTBjYTVjMThjZmE4MmI5MTNiZTJiOWQyYzQ2
MjYzZWYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaApAQCAtNTgsOCArNTgsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlk
ZTsKICAgICB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9
Ci0KIHByaXZhdGU6CiAgICAgZmxvYXQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVl
X3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcAppbmRleCA1YjQ1MWVlZjViZGQxYzFmYmRiNmQwYjE3
MTBmMjhkMmM1MWJiODZmLi4xNmNkYzQ2NGEwOGNmZDQyZDIwZDY1Mjk4OWIwNmIyNzZhYzE1NTgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAKQEAgLTI4LDYgKzI4LDEx
IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CkBAIC00MiwxNiArNDcsMjYgQEAg
SW50ZWdlckxpdGVyYWxUeXBlOjpJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBpbnQgdmFsdWUpCiAKIEludGVnZXJMaXRlcmFsVHlwZTo6fkludGVnZXJMaXRlcmFsVHlw
ZSgpID0gZGVmYXVsdDsKIAotYm9vbCBJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29u
c3QgVHlwZSYpIGNvbnN0Citib29sIEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25z
dCBUeXBlJiB0eXBlKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworICAg
IGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNO
dW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0aXZlVHlwZURlY2xh
cmF0aW9uLmNhblJlcHJlc2VudEludGVnZXIoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCi11bnNpZ25lZCBJbnRlZ2VyTGl0ZXJhbFR5cGU6
OmNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3QKK3Vuc2lnbmVkIEludGVn
ZXJMaXRlcmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotICAgIHJldHVybiAw
OworICAgIGlmIChtYXRjaGVzKHVubmFtZWRUeXBlLCBzdGF0aWNfY2FzdDxjb25zdCBUeXBlUmVm
ZXJlbmNlJj4obV9wcmVmZXJyZWRUeXBlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biAxOwogfQogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxU
eXBlLmgKaW5kZXggNGU3ZDBlYzU4NzQxNWQyNTQyM2ZlZDg5MGZiZWFjMWJiODFhZjA4Yy4uZjE4
Njc5YTc4MTY0ZWQ1MTBmNTFkYzljMjEwMjdlMmNmNmUxNzhhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50
ZWdlckxpdGVyYWxUeXBlLmgKQEAgLTU4LDggKzU4LDYgQEAgcHVibGljOgogICAgIGJvb2wgY2Fu
UmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdW5zaWduZWQgY29udmVy
c2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQogcHJpdmF0ZToKICAgICBpbnQgbV92
YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIg
ZGVwZW5kZW5jeSBiZXR3ZWVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLmNwcAppbmRleCBkN2Y0ZGU3MTMxZTVlYTFjODdkMTZhYTJjMmZl
ZmFhYmU2MTdhNzhmLi40MjFjNzkzYzkyMmJiZjY0OTAxOWFhMzkwNzU5ZTUzM2FiNDA2OGNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
Yy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRl
ICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAKaW5kZXggZWVkYWNmNmE2Yjg2NGYxMzVhZmI4YjZj
NWRmM2U2MzkzOWNmODIzOC4uYWIyMWI5YmZhMDcyMjUwOGFkNTdlY2NhYjc2NTdlMTZiYTg4MThh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNw
cApAQCAtMjgsNiArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJX
SExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00NCwxNiArNDgsMjggQEAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW4KIAogVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6On5VbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpID0gZGVm
YXVsdDsKIAotYm9vbCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25z
dCBUeXBlJikgY29uc3QKK2Jvb2wgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNhblJlc29s
dmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMKKyAgICBpZiAoIWlzPE5hbWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOworICAgIGlm
ICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZl
VHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmlzSW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5pc1NpZ25lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFu
YXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKCkobV92YWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdW5zaWdu
ZWQgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFt
ZWRUeXBlJikgY29uc3QKK3Vuc2lnbmVkIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjb252
ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKG1hdGNoZXMo
dW5uYW1lZFR5cGUsIHN0YXRpY19jYXN0PGNvbnN0IFR5cGVSZWZlcmVuY2UmPihtX3ByZWZlcnJl
ZFR5cGUpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
LmgKaW5kZXggNTJhM2I3NzdhNDVmOGJjZDViMTg3ODdjYWQxN2NkNjZlZGRiZWE4YS4uZTU4Mzdl
NjUxZDE4ZjI2YjM0MTJkNTcwMzNmNzdiOGI0Y2IxYTU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oCkBAIC01OCw4ICs1OCw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVu
c2lnbmVkIGNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB1bnNpZ25lZCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQogcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX3ZhbHVlOwogICAgIC8vIFRoaXMgaXMgYSB1bmlxdWVfcHRy
IHRvIHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIwZTBlZjA5ZTQxNDE1MjUxZTA4NGE4MmRlYjU1ZTFmMWZjZTI5ZTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
ZmVyVHlwZXMuY3BwCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgor
I2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmFt
ZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNs
dWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5o
IgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
VHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgYm9vbCBtYXRj
aGVzKGNvbnN0IEFTVDo6VHlwZSYgdW5pZnlUaGlzLCBjb25zdCBBU1Q6OlR5cGUmIHVuaWZ5T3Ro
ZXIpCit7CisgICAgaWYgKCZ1bmlmeVRoaXMgPT0gJnVuaWZ5T3RoZXIpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpICYmIGlzPEFT
VDo6TmFtZWRUeXBlPih1bmlmeU90aGVyKSkgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAg
ICAgYXV0byYgbmFtZWRUaGlzID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcyk7
CisgICAgICAgIGF1dG8mIG5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlPdGhlcik7CisgICAgICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRU
aGlzKSAmJiAhaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRPdGhlcikpOworI2VuZGlmCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+
KHVuaWZ5VGhpcykgJiYgaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcikpIHsKKyAgICAg
ICAgYXV0byYgdW5uYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRo
aXMpOworICAgICAgICBhdXRvJiB1bm5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRU
eXBlPih1bmlmeU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+
KHVubmFtZWRUaGlzKSAmJiAhaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkT3RoZXIpKTsK
KyAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6
OlBvaW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBwb2ludGVy
VGhpcyA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAg
ICAgIGF1dG8mIHBvaW50ZXJPdGhlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFt
ZWRPdGhlcik7CisgICAgICAgICAgICBpZiAocG9pbnRlclRoaXMuYWRkcmVzc1NwYWNlKCkgIT0g
cG9pbnRlck90aGVyLmFkZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKHBvaW50ZXJUaGlzLmVsZW1lbnRUeXBlKCks
IHBvaW50ZXJPdGhlci5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZE90aGVyKSkgeworICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZl
cmVuY2VUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlz
KTsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlT3RoZXIgPSBkb3duY2FzdDxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJh
eVJlZmVyZW5jZVRoaXMuYWRkcmVzc1NwYWNlKCkgIT0gYXJyYXlSZWZlcmVuY2VPdGhlci5hZGRy
ZXNzU3BhY2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2hlcyhhcnJheVJlZmVyZW5jZVRoaXMuZWxlbWVudFR5cGUoKSwgYXJyYXlSZWZl
cmVuY2VPdGhlci5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90
aGVyKSkgeworICAgICAgICAgICAgYXV0byYgYXJyYXlUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5T3RoZXIgPSBkb3du
Y2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJh
eVRoaXMubnVtRWxlbWVudHMoKSAhPSBhcnJheU90aGVyLm51bUVsZW1lbnRzKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlU
aGlzLnR5cGUoKSwgYXJyYXlPdGhlci50eXBlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIG1hdGNoZXMoY29u
c3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUm
IG90aGVyKQoreworICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCBv
dGhlci51bmlmeU5vZGUoKSk7Cit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlw
ZSYgbmFtZWRUeXBlLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYgb3RoZXIpCit7CisgICAgcmV0dXJu
IG1hdGNoZXMobmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCBvdGhlci51bmlmeU5vZGUoKSk7Cit9CisK
K2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3Qg
QVNUOjpOYW1lZFR5cGUmIG90aGVyKQoreworICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBl
LnVuaWZ5Tm9kZSgpLCBvdGhlci51bmlmeU5vZGUoKSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VHlwZSYgdW5p
ZnlOb2RlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICBBU1NF
UlQoIXJlc29sdmFibGVUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoIXJlc29sdmFibGVU
eXBlLmNhblJlc29sdmUodW5pZnlOb2RlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0byYg
bmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2Vu
KG5hbWVkVW5pZnlOb2RlLm9yaWdpbigpKSwgbmFtZWRVbmlmeU5vZGUpOworICAgICAgICByZXNv
bHZhYmxlVHlwZS5yZXNvbHZlKHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiB7IFdU
Rk1vdmUocmVzdWx0KSB9OworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gZG93bmNhc3Q8QVNU
OjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKS5jbG9uZSgpOworICAgIHJlc29sdmFibGVUeXBlLnJl
c29sdmUocmVzdWx0LT5jbG9uZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VW5uYW1l
ZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkK
K3sKKyAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIHJl
c29sdmFibGVUeXBlKTsKK30KKworT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiBtYXRjaEFuZENvbW1pdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFi
bGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFt
ZWRUeXBlLnVuaWZ5Tm9kZSgpLCByZXNvbHZhYmxlVHlwZSk7Cit9CisKK09wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlw
ZSYgcmVzb2x2YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIp
Cit7CisgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZTEucmVzb2x2ZWRUeXBlKCkpOworICAgIEFT
U0VSVCghcmVzb2x2YWJsZVR5cGUyLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoaXM8QVNUOjpG
bG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6RmxvYXRMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2
ZShkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVy
cmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIucmVzb2x2ZShkb3du
Y2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVkVHlw
ZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAg
ICBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8
QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAgICAgICAgcmVz
b2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJl
c29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXNvbHZh
YmxlVHlwZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRU
eXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVz
b2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUy
LnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnBy
ZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpOdWxsTGl0ZXJh
bFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29s
dmFibGVUeXBlMikpIHsKKyAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBtYXRjaCBudWxscHRy
IGFuZCBudWxscHRyIGZhaWxzLgorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0K
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkK
K3sKKyAgICBBU1NFUlQoIXJlc29sdmFibGVUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAo
aXM8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKKyAgICAgICAgcmVz
b2x2YWJsZVR5cGUucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29s
dmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBl
KCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihy
ZXNvbHZhYmxlVHlwZSkpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShkb3duY2Fz
dDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUo
KS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQorICAg
IGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkp
IHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25l
KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAg
ICBpZiAoaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKSkgeworICAgICAg
ICAvLyBGSVhNRTogVHJ5aW5nIHRvIG1hdGNoIG51bGxwdHIgYW5kIG51bGxwdHIgZmFpbHMuCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Cit9CisKK2Jvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUm
IHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAg
IGlmIChpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8IGlz
PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBpczxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKSkgeworICAgICAgICByZXR1
cm4gdHlwZUFyZ3VtZW50cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgQVNTRVJUKGlzPEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uPihwb3NzaWJsZVR5cGUpKTsKKyAgICBhdXRvJiBuYXRpdmVU
eXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocG9z
c2libGVUeXBlKTsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KS5zaXplKCkgIT0gdHlwZUFyZ3VtZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4cHJlc3Npb24q
IHR5cGVBcmd1bWVudEV4cHJlc3Npb24gPSBudWxscHRyOworICAgICAgICBBU1Q6OlR5cGVSZWZl
cmVuY2UqIHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgPSBudWxscHRyOworICAgICAgICBBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbiogbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxw
dHI7CisgICAgICAgIEFTVDo6VHlwZVJlZmVyZW5jZSogbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJl
ZmVyZW5jZSA9IG51bGxwdHI7CisKKyAgICAgICAgYXV0byBhc3NpZ24gPSBbJl0oQVNUOjpUeXBl
QXJndW1lbnQmIHR5cGVBcmd1bWVudCwgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qJiBleHByZXNz
aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UqJiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBX
VEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBj
b25zdGFudEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gJmNvbnN0
YW50RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpUeXBlUmVm
ZXJlbmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIHR5cGVSZWZlcmVu
Y2UgPSAmc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4odGhlVHlwZVJlZmVyZW5jZSk7
CisgICAgICAgICAgICB9KSwgdHlwZUFyZ3VtZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBh
c3NpZ24odHlwZUFyZ3VtZW50c1tpXSwgdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiwgdHlwZUFyZ3Vt
ZW50VHlwZVJlZmVyZW5jZSk7CisgICAgICAgIGFzc2lnbihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpW2ldLCBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uLCBuYXRpdmVU
eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKTsKKworICAgICAgICBpZiAodHlwZUFyZ3VtZW50RXhw
cmVzc2lvbiAmJiBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICBp
ZiAoIXR5cGVBcmd1bWVudEV4cHJlc3Npb24tPm1hdGNoZXMoKm5hdGl2ZVR5cGVBcmd1bWVudEV4
cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNl
IGlmICh0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlICYmIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVS
ZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlcygqdHlwZUFyZ3VtZW50VHlwZVJl
ZmVyZW5jZSwgKm5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgcG9z
c2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlw
ZT4+JiBhcmd1bWVudFR5cGVzLCBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
TmFtZWRUeXBlPj4mIGNhc3RSZXR1cm5UeXBlKQoreworICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9u
LnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gYXJndW1lbnRUeXBlcy5zaXplKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc3NpYmxlRnVuY3Rpb24u
cGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1
bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2li
bGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLCBzdGF0aWNfY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlJj4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAg
ICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5S
ZXNvbHZlKCpwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpOworICAgICAg
ICB9KSwgYXJndW1lbnRUeXBlc1tpXS5nZXQoKSk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGNhc3RSZXR1cm5UeXBlICYm
ICFtYXRjaGVzKGNhc3RSZXR1cm5UeXBlLT5nZXQoKSwgcG9zc2libGVGdW5jdGlvbi50eXBlKCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMSW5mZXJUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbmZlclR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZkNGI1NGU5NjI0NjdmNzlkMDRhMjgyMDVm
OGViZjY4N2ViZTY1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExT
TFJlc29sdmluZ1R5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1
ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5h
bWVkVHlwZTsKK2NsYXNzIFJlc29sdmFibGVUeXBlOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30K
KworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6OlVubmFt
ZWRUeXBlJik7Citib29sIG1hdGNoZXMoY29uc3QgQVNUOjpOYW1lZFR5cGUmLCBjb25zdCBBU1Q6
Ok5hbWVkVHlwZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25z
dCBBU1Q6Ok5hbWVkVHlwZSYpOworLy8gRklYTUU6IElzIGFueW9uZSBhY3R1YWxseSB1c2luZyB0
aGUgcmV0dXJuIHR5cGUgaGVyZT8KK09wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUm
KTsKK09wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQo
QVNUOjpOYW1lZFR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7CitPcHRpb25hbDxVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUm
LCBBU1Q6OlJlc29sdmFibGVUeXBlJik7CitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IGNvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJik7Citib29sIGluZmVyVHlwZXNGb3JU
eXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3Vt
ZW50cyYpOworYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24m
IHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmlu
Z1R5cGU+PiYgYXJndW1lbnRUeXBlcywgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6Ok5hbWVkVHlwZT4+JiBjYXN0UmV0dXJuVHlwZSk7CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
Q29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2EzMTMwNjgxODFmNDVhYTdkZWNkYjE2Mzk5NWJiMDM4
NGMzYzBkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBl
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworTmFtZUNvbnRleHQ6Ok5hbWVDb250ZXh0KE5hbWVDb250ZXh0KiBwYXJlbnQpCisgICAgOiBt
X3BhcmVudChwYXJlbnQpCit7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0
aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
dHlwZXMuYWRkKHR5cGVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBl
bmQodHlwZURlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250
ZXh0OjphZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQor
eworICAgIGlmIChleGlzdHMoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChzdHJ1Y3R1cmVEZWZp
bml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5p
dGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGlm
IChleGlzdHMoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwg
MT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlv
bik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGlmIChtX3R5cGVz
LmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAg
ICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFy
aWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBt
X2Z1bmN0aW9ucy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV90eXBl
cy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgp
CisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250
ZXh0OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bikKK3sKKyAgICBpZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRl
eHQ6OmFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7
CisgICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdmFyaWFibGVzLmFkZChTdHJpbmcodmFy
aWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpLCAmdmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgcmV0
dXJuIHJlc3VsdC5pc05ld0VudHJ5OworfQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBOYW1lQ29udGV4dDo6Z2V0VHlwZXMoY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzLmZpbmQobmFtZSk7CisgICAg
aWYgKGl0ZXJhdG9yID09IG1fdHlwZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQor
ICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRUeXBlcyhuYW1lKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworfQorCitW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiogTmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
YXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25zLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9y
ID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAg
ICAgIHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25zKG5hbWUpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKK0FTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsK
KyAgICBpZiAoaXRlcmF0b3IgPT0gbV92YXJpYWJsZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1f
cGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRWYXJpYWJsZShuYW1lKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBpdGVyYXRvci0+dmFs
dWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmV4aXN0cyhTdHJpbmcmIG5hbWUpCit7CisgICAg
cmV0dXJuIG1fdHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1f
ZnVuY3Rpb25zLmZpbmQobmFtZSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAgfHwgbV92
YXJpYWJsZXMuZmluZChuYW1lKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKTsKK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwNDg3OGFlN2U5ZjFkODNlNWQ1OTJjMmZk
NzUyYmVkYzkwZmE5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPGZ1
bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hbWVk
VHlwZTsKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBUeXBlRGVmaW5pdGlvbjsK
K2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247
CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CitjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uOworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgVmFyaWFibGVEZWNsYXJh
dGlvbjsKKworfQorCitjbGFzcyBOYW1lQ29udGV4dCB7CitwdWJsaWM6CisgICAgTmFtZUNvbnRl
eHQoTmFtZUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOworCisgICAgYm9vbCBhZGQoQVNUOjpU
eXBlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYp
OworICAgIGJvb2wgYWRkKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJik7CisgICAgYm9vbCBh
ZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOworCisgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlw
ZXMoY29uc3QgU3RyaW5nJik7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsK
KyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYp
OworCitwcml2YXRlOgorICAgIGJvb2wgZXhpc3RzKFN0cmluZyYpOworCisgICAgSGFzaE1hcDxT
dHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+
IG1fdHlwZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+PiBtX2Z1bmN0aW9uczsKKyAgICBIYXNo
TWFwPFN0cmluZywgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKj4gbV92YXJpYWJsZXM7CisgICAg
TmFtZUNvbnRleHQqIG1fcGFyZW50OworfTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZiZjE4ZTY5YWZjNWM4ZmU1MGQ3NDVlNTRkOTYyNmRkYzBkNTBl
MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIK
KyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZT
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSAiV0hM
U0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFJl
dHVybi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK05hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVDb250
ZXh0JiBuYW1lQ29udGV4dCkKKyAgICA6IG1fbmFtZUNvbnRleHQobmFtZUNvbnRleHQpCit7Cit9
CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZl
cmVuY2UpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgIGlm
ICh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvKiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5h
bWUoKSk7CisgICAgaWYgKGNhbmRpZGF0ZXMgPT0gbnVsbHB0cikgeworICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29s
dmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVu
dHMoKSkpCisgICAgICAgIHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRUeXBlKCpyZXN1bHQpOwor
ICAgIGVsc2UgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBOYW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9u
YW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29u
dGV4dCk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkp
OworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKSkgeworICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFt
ZXRlcik7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG5ld05hbWVDb250ZXh0LmFkZChwYXJhbWV0
ZXIpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgbmV3TmFtZVJlc29sdmVy
LmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Cit9CisKK3Zv
aWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykKK3sKKyAgICBOYW1lQ29u
dGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoYmxvY2spOworfQorCit2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgIE5hbWVDb250ZXh0IG5h
bWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQp
LmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgIGlmIChpZlN0YXRl
bWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25h
bWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9y
QW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpTdGF0ZW1lbnQmPigqaWZTdGF0ZW1lbnQuZWxzZUJv
ZHkoKSkpOworICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6V2hpbGVM
b29wJiB3aGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25k
aXRpb25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7
CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQod2hpbGVM
b29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVM
b29wJiB3aGlsZUxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNv
bnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0
KHdoaWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29u
ZGl0aW9uYWwoKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZvckxvb3Am
IGZvckxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQp
OworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGZvckxv
b3ApOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIG1fbmFtZUNvbnRleHQuYWRkKHZhcmlh
YmxlRGVjbGFyYXRpb24pOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0
aW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2UmIHZhcmlhYmxlUmVmZXJlbmNlKQoreworICAgIGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJp
YWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogdmFyaWFibGUgPSBtX25h
bWVDb250ZXh0LmdldFZhcmlhYmxlKHZhcmlhYmxlUmVmZXJlbmNlLm5hbWUoKSkpCisgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlLnNldFZhcmlhYmxlKCp2YXJpYWJsZSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFt
ZVJlc29sdmVyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIEFT
U0VSVChtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgcmV0dXJuU3RhdGVtZW50LnNldEZ1bmN0aW9u
KG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmV0dXJuU3RhdGVt
ZW50KTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7CisgICAgaWYgKGF1dG8qIGdl
dEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5nZXRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5zZXRQb3NzaWJsZUdldE92ZXJsb2FkcygqZ2V0RnVuY3Rpb25zKTsKKyAgICBpZiAoYXV0
byogc2V0RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLnNldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLnNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKCpzZXRGdW5jdGlvbnMpOworICAgIGlm
IChhdXRvKiBhbmRGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uYW5kRnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVBbmRPdmVybG9hZHMoKmFuZEZ1bmN0aW9ucyk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisKK3Zv
aWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24p
Cit7CisgICAgaWYgKGlzPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24uYmFz
ZSgpKSkgeworICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4
dC5nZXRUeXBlcyhkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9u
LmJhc2UoKSkubmFtZSgpKSkgeworICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMt
PnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gKCplbnVt
ZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24+KHR5cGUpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVt
ZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGRvdEV4cHJlc3Npb24uZmllbGROYW1lKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBl
eHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgICAg
ICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRoIHZhcmlhbnRzIG9y
IGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+
RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICBuZXcgKCZkb3RFeHByZXNzaW9u
KSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChXVEZNb3ZlKG9yaWdpbiksICptZW1iZXIp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvdEV4cHJl
c3Npb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lv
biYgY2FsbEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFjYWxsRXhwcmVzc2lvbi5oYXNPdmVybG9h
ZHMoKSkgeworICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRG
dW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgIGNhbGxFeHByZXNz
aW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpZiAoYXV0byogdHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGNhbGxFeHByZXNzaW9u
Lm5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZXMtPnNpemUoKSA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0Lmdl
dEZ1bmN0aW9ucyhTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldENh
c3REYXRhKCgqdHlwZXMpWzBdLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxF
eHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7CisgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNhbGxF
eHByZXNzaW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKQoreworICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlw
ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlLmxlZnQoKSkpIHsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlw
ZXMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1l
cmF0aW9uVHlwZXMpWzBdOworICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24+KHR5cGUpKSB7CisgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51
bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+
KHR5cGUpOworICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5p
dGlvbi5tZW1iZXJCeU5hbWUoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UucmlnaHQoKSkpIHsKKyAgICAgICAgICAgICAgICBjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5zZXRFbnVtZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlvbkRl
ZmluaXRpb24sICptZW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzZXRFcnJvcigpOworfQorCisvLyBGSVhN
RTogTWFrZSBzdXJlIGFsbCB0aGUgbmFtZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorCitib29sIHJl
c29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVz
b2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURl
ZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChz
dGF0aWNfY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uJj4odHlwZURlZmluaXRpb24pKTsKKyAgICAg
ICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVj
dHVyZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mPihzdHJ1Y3R1cmVEZWZp
bml0aW9uKSk7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRp
b24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVz
b2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uJj4oZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgIGlmIChuYW1lUmVzb2x2
ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChh
dXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJj4obmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7
CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5G
dW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7
CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVm
aW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVm
aW5pdGlvbigmc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mPihmdW5jdGlvbkRl
ZmluaXRpb24pKTsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChzdGF0
aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOwor
ICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9u
KG51bGxwdHIpOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHBy
b2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZl
ci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcy
ZTA4ZTA2MjEwNjdkYmUxOTBjYTA0MDY4YTllOWE3MGJmZGNmMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXSExT
TFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitjbGFzcyBQcm9ncmFtOworCitjbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7
CitwdWJsaWM6CisgICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0Jik7CisKKyAgICB2aXJ0dWFs
IH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRl
ZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAg
ICB7CisgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlz
aXQoQVNUOjpJZlN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGls
ZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OlJldHVybiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYpIG92ZXJyaWRlOworCisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsK
KyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRy
IH07Cit9OworCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZl
ciYpOworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29sdmVy
Jik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKaW5kZXggYTY5ZTg0M2MxMGZkN2NjYTMxOTU1Mzc1
MDIyN2FhYmVjY2ZkYTc5Yi4uOGJjZWE2YjA0Nzg5N2E2Mjk3MjBiZWY5NDNiODg5ZDRjMTA0NzUy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cm9ncmFtLmgKQEAgLTQ3LDM5ICs0Nyw0MCBAQCBwdWJsaWM6CiAgICAgYm9vbCBhcHBlbmQoQVNU
OjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsKICAgICAgICAgbV90eXBl
RGVmaW5pdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlRGVmaW5pdGlvbj4oV1RG
TW92ZSh0eXBlRGVmaW5pdGlvbikpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uJj4o
bV90eXBlRGVmaW5pdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCiAgICAgYm9vbCBhcHBlbmQoQVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKICAgICB7CiAgICAg
ICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRpb24pKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGljX2Nh
c3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJj4obV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5sYXN0
KCkpKTsKICAgICB9CiAKICAgICBib29sIGFwcGVuZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
biYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fZW51bWVyYXRpb25E
ZWZpbml0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
bj4oV1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24pKSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mPihtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMubGFzdCgpKSk7CiAg
ICAgfQogCiAgICAgYm9vbCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlv
bkRlZmluaXRpb24pCiAgICAgewogICAgICAgICBtX2Z1bmN0aW9uRGVmaW5pdGlvbnMuYXBwZW5k
KG1ha2VVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KFdURk1vdmUoZnVuY3Rpb25E
ZWZpbml0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fbmFt
ZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJj4obV9mdW5j
dGlvbkRlZmluaXRpb25zLmxhc3QoKSkpOwogICAgIH0KIAogICAgIGJvb2wgYXBwZW5kKEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAg
ICAgewogICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChtYWtlVW5p
cXVlUmVmPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oV1RGTW92ZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiY+KG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCiAg
ICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCiAgICAgewogICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5k
KG1ha2VVbmlxdWVSZWY8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZl
VHlwZURlY2xhcmF0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
Jj4obV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSkpOwogICAgIH0KIAorICAgIE5hbWVD
b250ZXh0JiBuYW1lQ29udGV4dCgpIHsgcmV0dXJuIG1fbmFtZUNvbnRleHQ7IH0KICAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6VHlwZURlZmluaXRpb24+PiYgdHlwZURlZmluaXRpb25zKCkgeyBy
ZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbj4+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3Ry
dWN0dXJlRGVmaW5pdGlvbnM7IH0KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uPj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2VudW1l
cmF0aW9uRGVmaW5pdGlvbnM7IH0KQEAgLTkwLDYgKzkxLDcgQEAgcHVibGljOgogICAgIFZlY3Rv
cjxVbmlxdWVSZWY8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+PiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsgfQogCiBwcml2YXRl
OgorICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90eXBlRGVmaW5pdGlvbnM7CiAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiBtX3N0cnVjdHVyZURlZmluaXRpb25zOwog
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+PiBtX2VudW1l
cmF0aW9uRGVmaW5pdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lYTE4MzNkOGQ5YWNhNGFlM2NhMGU5Y2Q3MDI4M2NmMzljMjQ0MzZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZl
T3ZlcmxvYWRJbXBsLmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSW5m
ZXJUeXBlcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUsIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcykKK3sKKyAgICB1bnNpZ25l
ZCBjb252ZXJzaW9uQ29zdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYW5kaWRh
dGUucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnZlcnNpb25Db3N0ICs9
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JikgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0sIFsm
XShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkg
LT4gdW5zaWduZWQgeworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVycygp
W2ldLnR5cGUoKSk7CisgICAgICAgIH0pLCBhcmd1bWVudFR5cGVzW2ldLmdldCgpKTsKKyAgICB9
CisgICAgLy8gVGhlIHJldHVybiB0eXBlIGNhbiBuZXZlciBiZSBhIGxpdGVyYWwgdHlwZSwgc28g
aXRzIGNvbnZlcnNpb24gY29zdCBpcyBhbHdheXMgMC4KKyAgICByZXR1cm4gY29udmVyc2lvbkNv
c3Q7Cit9CisKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3Zlcmxv
YWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBPcHRpb25hbDxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mIGNhc3RSZXR1cm5UeXBlKQoreworICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IGNh
bmRpZGF0ZXM7CisgICAgZm9yIChhdXRvJiBwb3NzaWJsZUZ1bmN0aW9uIDogcG9zc2libGVGdW5j
dGlvbnMpIHsKKyAgICAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkuZW50cnlQb2ludFR5
cGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoaW5mZXJUeXBlc0ZvckNh
bGwocG9zc2libGVGdW5jdGlvbi5nZXQoKSwgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUp
KQorICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQocG9zc2libGVGdW5jdGlvbi5nZXQoKSk7
CisgICAgfQorCisgICAgdW5zaWduZWQgbWluaW11bUNvbnZlcnNpb25Db3N0ID0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDog
Y2FuZGlkYXRlcykKKyAgICAgICAgbWluaW11bUNvbnZlcnNpb25Db3N0ID0gc3RkOjptaW4obWlu
aW11bUNvbnZlcnNpb25Db3N0LCBjb252ZXJzaW9uQ29zdChjYW5kaWRhdGUuZ2V0KCksIGFyZ3Vt
ZW50VHlwZXMpKTsKKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1pbmltdW1Db3N0Q2FuZGlkYXRlczsKKyAgICBmb3IgKGF1
dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgaWYgKGNvbnZlcnNpb25Db3N0
KGNhbmRpZGF0ZS5nZXQoKSwgYXJndW1lbnRUeXBlcykgPT0gbWluaW11bUNvbnZlcnNpb25Db3N0
KQorICAgICAgICAgICAgbWluaW11bUNvc3RDYW5kaWRhdGVzLmFwcGVuZChjYW5kaWRhdGUpOwor
ICAgIH0KKworICAgIGJvb2wgcmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cyA9IGZhbHNlOworICAg
IGZvciAoYXV0byYgY2FuZGlkYXRlIDogbWluaW11bUNvc3RDYW5kaWRhdGVzKSB7CisgICAgICAg
IGlmIChpczxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oY2FuZGlkYXRlLmdldCgpKSAmJiBkb3du
Y2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oY2FuZGlkYXRlLmdldCgpKS5yZXN0cmljdGVk
KCkpIHsKKyAgICAgICAgICAgIHJlc3RyaWN0ZWRDYW5kaWRhdGVFeGlzdHMgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYW5kaWRhdGVzLmNsZWFy
KCk7CisgICAgaWYgKHJlc3RyaWN0ZWRDYW5kaWRhdGVFeGlzdHMpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBjYW5kaWRhdGUgOiBtaW5pbXVtQ29zdENhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIGlm
IChpczxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oY2FuZGlkYXRlLmdldCgpKSAmJiBkb3duY2Fz
dDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oY2FuZGlkYXRlLmdldCgpKS5yZXN0cmljdGVkKCkp
CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoY2FuZGlkYXRlLmdldCgpKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBjYW5kaWRhdGVzID0gbWluaW11bUNvc3RDYW5k
aWRhdGVzOworCisgICAgaWYgKGNhbmRpZGF0ZXMuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVy
biAmY2FuZGlkYXRlc1swXS5nZXQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQVNUOjpO
YW1lZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mIHBvc3NpYmxlVHlwZXMsIEFTVDo6VHlwZUFyZ3Vt
ZW50cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAgICBBU1Q6Ok5hbWVkVHlwZSogcmVzdWx0ID0gbnVs
bHB0cjsKKyAgICBmb3IgKGF1dG8mIHBvc3NpYmxlVHlwZSA6IHBvc3NpYmxlVHlwZXMpIHsKKyAg
ICAgICAgaWYgKGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKHBvc3NpYmxlVHlwZSwgdHlwZUFy
Z3VtZW50cykpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXN1bHQgPSAmc3RhdGljX2Nhc3Q8QVNUOjpOYW1l
ZFR5cGUmPihwb3NzaWJsZVR5cGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44ZDkzNDZmZjg3NzZjZTkzMTRmZjEwNjY2YjgzY2JmZjU4NTZjODAxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2aW5n
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVj
bGFyYXRpb247CitjbGFzcyBOYW1lZFR5cGU7CisKK30KKworQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlw
ZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2Fz
dFJldHVyblR5cGUpOworQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mLCBBU1Q6OlR5
cGVBcmd1bWVudHMmKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45N2MwZWJhZTgxZjgyYzQwZWZjYzllZjUzZjZmMTYzOTc5YzgyY2IwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZp
bmdUeXBlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgUmVzb2x2YWJsZVR5
cGU7CitjbGFzcyBVbm5hbWVkVHlwZTsKKworfQorCitjbGFzcyBSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiB7CitwdWJs
aWM6CisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVz
b2x2YWJsZVR5cGUpCisgICAgICAgIDogbV9yZXNvbHZhYmxlVHlwZSgmcmVzb2x2YWJsZVR5cGUp
CisgICAgeworICAgIH0KKworICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKGNvbnN0IFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UoUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmJikgPSBkZWxldGU7CisKKyAgICBBU1Q6OlJlc29s
dmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSgpIHsgcmV0dXJuICptX3Jlc29sdmFibGVUeXBlOyB9
CisKK3ByaXZhdGU6CisgICAgQVNUOjpSZXNvbHZhYmxlVHlwZSogbV9yZXNvbHZhYmxlVHlwZTsK
K307CisKK3VzaW5nIFJlc29sdmluZ1R5cGUgPSBWYXJpYW50PFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiwgUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj47CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggNDkxNDgyYWFjNWFhNWE5M2U4ZTcyOGRmZjFhNjVmZWNiOWRl
MzA2Ni4uMmY3MjRjMzJkYmY2MzZmMTI1ZjdlNjc1ZmY4MDQ5YjJmMzc3MDRiNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTMwNiw4ICszMDYsMTIgQEAgTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhh
bmRzaGFrZS5jcHAKIE1vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbC5jcHAKIAogTW9kdWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAorTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAorTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFy
Z3VtZW50LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGlj
LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBmZjM1YTg4NmUxNTNiZjRmMWUxN2M1Y2M2ZDYzZmE3NmQ1M2QxMzY2Li41NzkyNmY0ZGIy
OTUzMWZjOThmYjkyNjY0Y2Q5ZTNkNTZjOTc3NDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzMyNSw2ICsxMzMyNSwxNSBA
QAogCQlDMjFCRjc0NTIxQ0Q5Njk4MDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzIxREYyRTcxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250VmFyaWF0aW9u
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFERjJFODFEOUU0RTk5
MDBGNUIyNEMgLyogQ1NTRm9udFZhcmlhdGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjM0QTk4QTIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk4QzIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1l
UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OEQyMUU4ODg4NDAwM0M5ODREIC8qIFdITFNMTmFt
ZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOThFMjFFODg4ODUwMDNDOTg0RCAvKiBX
SExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OTcyMUU5MEYyODAwM0M5ODREIC8qIFdI
TFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmVPdmVy
bG9hZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OTkyMUU5MEYy
OTAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDMjM0QTk5QTIxRTkwRjU2MDAzQzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMzRBOTlCMjFFOTBGNTcwMDNDOTg0RCAvKiBXSExTTEluZmVyVHlwZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbmZlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMzRBOTlEMjFFOTEwQkQwMDNDOTg0RCAvKiBXSExTTFJlc29sdmluZ1R5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZXNvbHZpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyNDU4RTYxMUZFODk3OUUwMDU5NDc1OSAvKiBGb250Q2FjaGVDb3JlVGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FjaGVDb3JlVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMjYwMTdBMTFDNzJEQzk5MDBGNzRBMTYgLyogQ1NTRm9udEZhY2VTZXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udEZhY2VTZXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjYwMTdBMjFDNzJEQzk5MDBGNzRB
MTYgLyogQ1NTRm9udEZhY2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTRm9udEZhY2VTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1Mzg4LDEx
ICsyNTM5NywyMCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlD
MjFCRjZGMTIxQ0Q4OThEMDAyMjc5NzkgLyogQVNUICovLAorCQkJCUMyMzRBOTlBMjFFOTBGNTYw
MDNDOTg0RCAvKiBXSExTTEluZmVyVHlwZXMuY3BwICovLAorCQkJCUMyMzRBOTlCMjFFOTBGNTcw
MDNDOTg0RCAvKiBXSExTTEluZmVyVHlwZXMuaCAqLywKIAkJCQlDMjEwRTkxMTIxQjRCRDEwMDBC
N0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8sCiAJCQkJQzIxMEU5MTIyMUI0QkQxMDAwQjdGODNE
IC8qIFdITFNMTGV4ZXIuaCAqLywKKwkJCQlDMjM0QTk4RDIxRTg4ODg0MDAzQzk4NEQgLyogV0hM
U0xOYW1lQ29udGV4dC5jcHAgKi8sCisJCQkJQzIzNEE5OEUyMUU4ODg4NTAwM0M5ODREIC8qIFdI
TFNMTmFtZUNvbnRleHQuaCAqLywKKwkJCQlDMjM0QTk4QTIxRTg4ODNFMDAzQzk4NEQgLyogV0hM
U0xOYW1lUmVzb2x2ZXIuY3BwICovLAorCQkJCUMyMzRBOThDMjFFODg4M0UwMDNDOTg0RCAvKiBX
SExTTE5hbWVSZXNvbHZlci5oICovLAogCQkJCUMyMUJGNzM3MjFDRDhBMDIwMDIyNzk3OSAvKiBX
SExTTFBhcnNlci5jcHAgKi8sCiAJCQkJQzIxQkY3MzgyMUNEOEEwMzAwMjI3OTc5IC8qIFdITFNM
UGFyc2VyLmggKi8sCiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5IC8qIFdITFNMUHJvZ3Jh
bS5oICovLAorCQkJCUMyMzRBOTk5MjFFOTBGMjkwMDNDOTg0RCAvKiBXSExTTFJlc29sdmVPdmVy
bG9hZEltcGwuY3BwICovLAorCQkJCUMyMzRBOTk3MjFFOTBGMjgwMDNDOTg0RCAvKiBXSExTTFJl
c29sdmVPdmVybG9hZEltcGwuaCAqLywKKwkJCQlDMjM0QTk5RDIxRTkxMEJEMDAzQzk4NEQgLyog
V0hMU0xSZXNvbHZpbmdUeXBlLmggKi8sCiAJCQkJQzIxQkY3NDUyMUNEOTY5ODAwMjI3OTc5IC8q
IFdITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dCAqLywKIAkJCSk7CiAJCQlwYXRoID0gV0hMU0w7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358928</attachid>
            <date>2019-01-11 12:33:23 -0800</date>
            <delta_ts>2019-01-11 17:15:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193007-20190111123322.patch</filename>
            <type>text/plain</type>
            <size>70532</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDY1ZTJhN2FiYmY1MjZi
NWQyMDcwMTExMDY5MTIxMjI5NDYwMzE5NS4uMmNjZGJlZWFhOTQzN2I5ZWI1MzMwYWM3ZjkzNjJi
YTY1MzdkMjcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIE5hbWVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDA3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgYmFzZSBpbXBs
ZW1lbnRhdGlvbiBmb3IgV0hMU0wncyBuYW1lIHJlc29sdmVyLiBUaGUgbmFtZSByZXNvbHZlciBt
YXRjaGVzIHRocmVlIGtpbmRzIG9mIHRoaW5nczoKKyAgICAgICAgMS4gSXQgbWF0Y2hlcyBWYXJp
YWJsZVJlZnMgdG8gVmFyaWFibGVEZWNscworICAgICAgICAyLiBJdCBtYXRjaGVzIFR5cGVSZWZz
IHRvIE5hbWVkVHlwZXMKKyAgICAgICAgMy4gSXQgbWF0Y2hlcyBDYWxsRXhwcmVzc2lvbnMgdG8g
RnVuY3Rpb25EZWNsYXJhdGlvbnMKKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBpdCBp
c24ndCBob29rZWQgdXAgeWV0LiBOb3QgZW5vdWdoIG9mIHRoZSBjb21waWxlciBleGlzdHMgdG8g
aGF2ZSBhbnkgbWVhbmluZ2Z1bCBzb3J0CisgICAgICAgIG9mIHRlc3QuIFdoZW4gZW5vdWdoIG9m
IHRoZSBjb21waWxlciBpcyBwcmVzZW50LCBJJ2xsIHBvcnQgdGhlIHJlZmVyZW5jZSBpbXBsZW1l
bnRhdGlvbidzIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcDogTm93IHRoYXQgSW5mZXJUeXBlcy5oIGV4aXN0
cywgd2UgY2FuIGltcGxlbWVudCB0aGVzZQorICAgICAgICBmdW5jdGlvbnMuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpGbG9hdExpdGVyYWxUeXBlOjpjYW5SZXNvbHZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU6OmNvbnZlcnNp
b25Db3N0IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU6OnZhbHVlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwOiBOb3cgdGhhdCBJbmZlclR5cGVzLmggZXhpc3RzLCB3ZSBjYW4gaW1wbGVt
ZW50IHRoZXNlCisgICAgICAgIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0IGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuaDogUmVtb3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVyYWxUeXBlOjp2YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljLmNwcDogTW9kaWZ5aW5nIFNvdXJjZXMudHh0IGNhdXNlZCB0aGUgc291cmNl
cworICAgICAgICB0byBnZXQgc2h1ZmZsZWQgYXJvdW5kLCBzbyB0aGUgI2luY2x1ZGVzIG5lZWQg
dG8gYmUgZml4ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOiBOb3cgdGhhdCBJbmZlclR5cGVzLmggZXhpc3Rz
LCB3ZSBjYW4gaW1wbGVtZW50CisgICAgICAgIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaDogUmVtb3ZlIHVu
bmVjZXNzYXJ5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OnZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwOiBBZGRlZC4gVGhpcyBpcyB0
aGUgcmVwbGFjZW1lbnQgZm9yIFVuaWZpY2F0aW9uQ29udGV4dCBpbiB0aGUKKyAgICAgICAgcmVm
ZXJlbmNlIGNvbXBpbGVyLiBJdCdzIG11Y2ggc2ltcGxlciAoYW5kIHdlIHNob3VsZCByZW1vdmUg
VW5pZmljYXRpb25Db250ZXh0IGluIHRoZSByZWZlcmVuY2UgY29tcGlsZXIgaW4KKyAgICAgICAg
ZmF2b3Igb2YgdGhpcyBkZXNpZ24pLiBJdCBoYXMgdGhyZWUgc2V0cyBvZiBmdW5jdGlvbnM6IFRl
bGwgaWYgdHdvIHR5cGVzIGFyZSB0aGUgc2FtZSwgdGVsbCBpZiB0d28gdHlwZXMgYXJlCisgICAg
ICAgIHRoZSBzYW1lIGFuZCBjb21taXQgdGhlIHJlc29sdmFibGUgdHlwZSwgYW5kIHJ1biB0aGUg
YWJvdmUgZnVuY3Rpb25zIG9uIHR5cGUgcmVmZXJlbmNlcyBvciBmdW5jdGlvbiBhcmd1bWVudHMu
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6bWF0Y2hBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNvbW1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxsKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNw
cDogQWRkZWQuIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIE5hbWVk
VHlwZXMsCisgICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25zLCBhbmQgVmFyaWFibGVEZWNsYXJh
dGlvbnMgc28gTmFtZVJlc29sdmVyIGNhbiB3b3JrLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok5hbWVDb250ZXh0OjpOYW1lQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFt
ZUNvbnRleHQ6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6Omdl
dFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0RnVuY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0VmFyaWFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpleGlzdHMpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
VHlwZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmNwcDogQWRkZWQuIFVzZSB0aGUgTmFtZUNvbnRleHQgdG8gbWF0Y2ggdXAgdGhlIHRocmVlIHR5
cGVzIG9mIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6TmFt
ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2ZXI6OnZpc2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFtZXNJblR5cGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlw
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6c2V0Q3VycmVudEZ1
bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cm9ncmFtLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvZ3JhbTo6YXBwZW5kKTogVGhl
IHBhcnNlciBuZWVkcyB0byBhZGQgYWxsIGdsb2JhbCBkZWNsYXJhdGlvbnMgdG8gdGhlIG5hbWUg
Y29udGV4dCBzbyB0aGUKKyAgICAgICAgbmFtZSByZXNvbHZlciBpcyByZWFkeSB0byBnbyBhcyBz
b29uIGFzIHBhcnNpbmcgaXMgZmluaXNoZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJv
Z3JhbTo6bmFtZUNvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA6IEFkZGVkLiBQaWNrIHRoZSBhcHByb3ByaWF0ZSBGdW5j
dGlvbkRlY2xhcmF0aW9uIG9yCisgICAgICAgIE5hbWVkVHlwZSBmb3IgYSBwYXJ0aWN1bGFyIENh
bGxFeHByZXNzaW9uIG9yIFR5cGVSZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
Y29udmVyc2lvbkNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVGdW5jdGlv
bk92ZXJsb2FkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVR5cGVPdmVy
bG9hZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5jcHAuIFRoaXMgZGVzY3JpYmVzIHRoZSB0d28gc3RhdGVzIHRoYXQgYSB0eXBlIGluIHRo
ZSB0eXBlIHJlc29sdmVyIGNhbiBiZSBpbjogZWl0aGVyIGFuIG93bmVkCisgICAgICAgIFVubmFt
ZWRUeXBlLCBvciBhIHJlZmVyZW5jZSB0byBhIFJlc29sdmFibGVUeXBlLiBUaGlzIGlzIGJlY2F1
c2UgZXZlcnkgZXhwcmVzc2lvbiBuZWVkcyB0byBoYXZlIGEgdHlwZQorICAgICAgICBhc3NvY2lh
dGVkIHdpdGggaXQsIGJ1dCB0aG9zZSB0eXBlcyBtaWdodCBiZSB0aGUgdHlwZSBvZiBhIGxpdGVy
YWwgKGFrYSBhIFJlc29sdmFibGVUeXBlKS4gTXVsdGlwbGUKKyAgICAgICAgZXhwcmVzc2lvbnMg
bWlnaHQgbmVlZCB0byByZWZlcmVuY2UgdGhlIHNhbWUgUmVzb2x2YWJsZVR5cGUgc28gd2hlbiBp
dCBnZXRzIHJlc29sdmVkLCBhbGwgdGhlIGV4cHJlc3Npb25zCisgICAgICAgIGdldCB0aGUgcmVz
dWx0LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNlOjpS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U6OnJlc29sdmFibGVUeXBlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTkt
MDEtMTEgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgSW5kZXhl
ZERCOiBsZWFrIElEQlRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbk9wZXJhdGlvbiBhbmQgSURCUmVx
dWVzdCBpbiBsYXlvdXQgdGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAKaW5k
ZXggNDY4MDkzMmY2NTk5Y2ZkZmRkMGM2NDEzYzMxMTQ1NzdhYjViNzBhMy4uZmRhMjVlOWYzNmVj
ZDQxZmEzMTRhMzUyNmY4MzRkYmMzYWNiZjQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
VHlwZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNs
dWRlICJXSExTTEluZmVyVHlwZXMuaCIKICNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsMTYgKzQ1LDI2IEBAIEZsb2F0TGl0ZXJhbFR5
cGU6OkZsb2F0TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9hdCB2YWx1ZSkK
IAogRmxvYXRMaXRlcmFsVHlwZTo6fkZsb2F0TGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CiAKLWJv
b2wgRmxvYXRMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3QKK2Jvb2wg
RmxvYXRMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0
PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7Cisg
ICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNGbG9hdGluZygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50Rmxv
YXQoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwog
fQogCi11bnNpZ25lZCBGbG9hdExpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5h
bWVkVHlwZSYpIGNvbnN0Cit1bnNpZ25lZCBGbG9hdExpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29z
dChjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5
cGUsIHN0YXRpY19jYXN0PGNvbnN0IFR5cGVSZWZlcmVuY2UmPihtX3ByZWZlcnJlZFR5cGUpKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEFT
VApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRmxvYXRMaXRlcmFsVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCmluZGV4IGYzYTQ0MzI2ODM4ZDUwOTg0MzNi
NGRlMDg0NGQzZWJjM2Y1NmRmZTkuLmNkZjQxNzkwY2E1YzE4Y2ZhODJiOTEzYmUyYjlkMmM0NjI2
M2VmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKQEAgLTU4LDggKzU4LDYgQEAg
cHVibGljOgogICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIGZsb2F0IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQot
CiBwcml2YXRlOgogICAgIGZsb2F0IG1fdmFsdWU7CiAgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9w
dHIgdG8gcmVzb2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWxUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEludGVnZXJMaXRlcmFsVHlwZS5jcHAKaW5kZXggNWI0NTFlZWY1YmRkMWMxZmJkYjZkMGIxNzEw
ZjI4ZDJjNTFiYjg2Zi4uMTZjZGM0NjRhMDhjZmQ0MmQyMGQ2NTI5ODliMDZiMjc2YWMxNTU4MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW50ZWdlckxpdGVyYWxUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCkBAIC0yOCw2ICsyOCwxMSBA
QAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgor
I2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xU
eXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewpAQCAtNDIsMTYgKzQ3LDI2IEBAIElu
dGVnZXJMaXRlcmFsVHlwZTo6SW50ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdp
biwgaW50IHZhbHVlKQogCiBJbnRlZ2VyTGl0ZXJhbFR5cGU6On5JbnRlZ2VyTGl0ZXJhbFR5cGUo
KSA9IGRlZmF1bHQ7CiAKLWJvb2wgSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0
IFR5cGUmKSBjb25zdAorYm9vbCBJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3Qg
VHlwZSYgdHlwZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICBp
ZiAoIWlzPE5hbWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRv
JiBuYW1lZFR5cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihuYW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTnVt
YmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5jYW5SZXByZXNlbnRJbnRlZ2VyKCkobV92YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdW5zaWduZWQgSW50ZWdlckxpdGVyYWxUeXBlOjpj
b252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0Cit1bnNpZ25lZCBJbnRlZ2Vy
TGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlw
ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gMDsK
KyAgICBpZiAobWF0Y2hlcyh1bm5hbWVkVHlwZSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHlwZVJlZmVy
ZW5jZSY+KG1fcHJlZmVycmVkVHlwZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
MTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlw
ZS5oCmluZGV4IDRlN2QwZWM1ODc0MTVkMjU0MjNmZWQ4OTBmYmVhYzFiYjgxYWYwOGMuLmYxODY3
OWE3ODE2NGVkNTEwZjUxZGM5YzIxMDI3ZTJjZjZlMTc4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVn
ZXJMaXRlcmFsVHlwZS5oCkBAIC01OCw4ICs1OCw2IEBAIHB1YmxpYzoKICAgICBib29sIGNhblJl
c29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVuc2lnbmVkIGNvbnZlcnNp
b25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KIHByaXZhdGU6CiAgICAgaW50IG1fdmFs
dWU7CiAgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIgdG8gcmVzb2x2ZSBhIGNpcmN1bGFyIGRl
cGVuZGVuY3kgYmV0d2VlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9u
Q29uc3RhbnRTZW1hbnRpYy5jcHAKaW5kZXggZDdmNGRlNzEzMWU1ZWExYzg3ZDE2YWEyYzJmZWZh
YWJlNjE3YTc4Zi4uNDIxYzc5M2M5MjJiYmY2NDkwMTlhYTM5MDc1OWU1MzNhYjQwNjhjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Bl
Y2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMu
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAi
V0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVu
Y2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCmluZGV4IGVlZGFjZjZhNmI4NjRmMTM1YWZiOGI2YzVk
ZjNlNjM5MzljZjgyMzguLmFiMjFiOWJmYTA3MjI1MDhhZDU3ZWNjYWI3NjU3ZTE2YmE4ODE4YTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAK
QEAgLTI4LDYgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hM
U0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDQsMTYgKzQ4LDI4IEBAIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHVuCiAKIFVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlOjp+VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKSA9IGRlZmF1
bHQ7CiAKLWJvb2wgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3Qg
VHlwZSYpIGNvbnN0Citib29sIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZl
KGNvbnN0IFR5cGUmIHR5cGUpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
CisgICAgaWYgKCFpczxOYW1lZFR5cGU+KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBpZiAo
IWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5pc0ludCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVj
bGFyYXRpb24uaXNTaWduZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0
aXZlVHlwZURlY2xhcmF0aW9uLmNhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcigpKG1fdmFsdWUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXVuc2lnbmVk
IFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVk
VHlwZSYpIGNvbnN0Cit1bnNpZ25lZCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y29udmVy
c2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBjb25zdAogewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotICAgIHJldHVybiAwOworICAgIGlmIChtYXRjaGVzKHVu
bmFtZWRUeXBlLCBzdGF0aWNfY2FzdDxjb25zdCBUeXBlUmVmZXJlbmNlJj4obV9wcmVmZXJyZWRU
eXBlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAxOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5o
CmluZGV4IDUyYTNiNzc3YTQ1ZjhiY2Q1YjE4Nzg3Y2FkMTdjZDY2ZWRkYmVhOGEuLmU1ODM3ZTY1
MWQxOGYyNmIzNDEyZDU3MDMzZjc3YjhiNGNiMWE1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxU
eXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaApAQCAtNTgsOCArNTgsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlkZTsKICAgICB1bnNp
Z25lZCBjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdW5zaWduZWQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0
byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yMGUwZWYwOWU0MTQxNTI1MWUwODRhODJkZWI1NWUxZjFmY2UyOWUyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZl
clR5cGVzLmNwcApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
QXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVk
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RhdGljIGJvb2wgbWF0Y2hl
cyhjb25zdCBBU1Q6OlR5cGUmIHVuaWZ5VGhpcywgY29uc3QgQVNUOjpUeXBlJiB1bmlmeU90aGVy
KQoreworICAgIGlmICgmdW5pZnlUaGlzID09ICZ1bmlmeU90aGVyKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlPdGhlcikpIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAg
IGF1dG8mIG5hbWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpOwor
ICAgICAgICBhdXRvJiBuYW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5
T3RoZXIpOworICAgICAgICBBU1NFUlQoIWlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVGhp
cykgJiYgIWlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkT3RoZXIpKTsKKyNlbmRpZgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1
bmlmeVRoaXMpICYmIGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisgICAgICAg
IGF1dG8mIHVubmFtZWRUaGlzID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlz
KTsKKyAgICAgICAgYXV0byYgdW5uYW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlw
ZT4odW5pZnlPdGhlcik7CisgICAgICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1
bm5hbWVkVGhpcykgJiYgIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZE90aGVyKSk7Cisg
ICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZE90aGVyKSkgeworICAgICAgICAgICAgYXV0byYgcG9pbnRlclRo
aXMgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAg
ICBhdXRvJiBwb2ludGVyT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
T3RoZXIpOworICAgICAgICAgICAgaWYgKHBvaW50ZXJUaGlzLmFkZHJlc3NTcGFjZSgpICE9IHBv
aW50ZXJPdGhlci5hZGRyZXNzU3BhY2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhwb2ludGVyVGhpcy5lbGVtZW50VHlwZSgpLCBw
b2ludGVyT3RoZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5UmVmZXJl
bmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVGhpcyk7
CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZU90aGVyID0gZG93bmNhc3Q8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAgICBpZiAoYXJyYXlS
ZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFycmF5UmVmZXJlbmNlT3RoZXIuYWRkcmVz
c1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1lbnRUeXBlKCksIGFycmF5UmVmZXJl
bmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhl
cikpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5VGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheU90aGVyID0gZG93bmNh
c3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAgICBpZiAoYXJyYXlU
aGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5udW1FbGVtZW50cygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGFycmF5VGhp
cy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBtYXRjaGVzKGNvbnN0
IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiBv
dGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3Ro
ZXIudW5pZnlOb2RlKCkpOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpOYW1lZFR5cGUm
IG5hbWVkVHlwZSwgY29uc3QgQVNUOjpOYW1lZFR5cGUmIG90aGVyKQoreworICAgIHJldHVybiBt
YXRjaGVzKG5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCiti
b29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEFT
VDo6TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZS51
bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlR5cGUmIHVuaWZ5
Tm9kZSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7CisgICAgQVNTRVJU
KCFyZXNvbHZhYmxlVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKCFyZXNvbHZhYmxlVHlw
ZS5jYW5SZXNvbHZlKHVuaWZ5Tm9kZSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgIGF1dG8mIG5h
bWVkVW5pZnlOb2RlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihu
YW1lZFVuaWZ5Tm9kZS5vcmlnaW4oKSksIG5hbWVkVW5pZnlOb2RlKTsKKyAgICAgICAgcmVzb2x2
YWJsZVR5cGUucmVzb2x2ZShyZXN1bHQtPmNsb25lKCkpOworICAgICAgICByZXR1cm4geyBXVEZN
b3ZlKHJlc3VsdCkgfTsKKyAgICB9CisKKyAgICBhdXRvIHJlc3VsdCA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkuY2xvbmUoKTsKKyAgICByZXNvbHZhYmxlVHlwZS5yZXNv
bHZlKHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7
CisgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCByZXNv
bHZhYmxlVHlwZSk7Cit9CisKK09wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4g
bWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgQVNUOjpSZXNvbHZhYmxl
VHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7CisgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KG5hbWVk
VHlwZS51bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOworfQorCitPcHRpb25hbDxVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUm
IHJlc29sdmFibGVUeXBlMSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUyKQor
eworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUxLnJlc29sdmVkVHlwZSgpKTsKKyAgICBBU1NF
UlQoIXJlc29sdmFibGVUeXBlMi5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKGlzPEFTVDo6Rmxv
YXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6OkZsb2F0TGl0ZXJhbFR5
cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUo
ZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJl
ZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNh
c3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpLnByZWZlcnJlZFR5cGUo
KS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAg
aWYgKGlzPEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFT
VDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAgICAgIHJlc29s
dmFibGVUeXBlMS5yZXNvbHZlKGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNv
bHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJs
ZVR5cGUyLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFi
bGVUeXBlMikucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlw
ZSgpLmNsb25lKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29s
dmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5
cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJlc29sdmFibGVUeXBlMi5y
ZXNvbHZlKGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFi
bGVUeXBlMikucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVm
ZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZh
YmxlVHlwZTIpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0Y2ggbnVsbHB0ciBh
bmQgbnVsbHB0ciBmYWlscy4KKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9Cisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+PiBjb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7
CisgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKGlz
PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CisgICAgICAgIHJlc29s
dmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZh
YmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgp
LmNsb25lKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVz
b2x2YWJsZVR5cGUpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8
QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCku
Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBp
ZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7
CisgICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgp
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAg
aWYgKGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFRyeWluZyB0byBtYXRjaCBudWxscHRyIGFuZCBudWxscHRyIGZhaWxzLgorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworfQorCitib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBw
b3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAgICBp
ZiAoaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBpczxB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAgICAgICAgfHwgaXM8QVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkpIHsKKyAgICAgICAgcmV0dXJu
IHR5cGVBcmd1bWVudHMuaXNFbXB0eSgpOworICAgIH0KKworICAgIEFTU0VSVChpczxBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4ocG9zc2libGVUeXBlKSk7CisgICAgYXV0byYgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3Np
YmxlVHlwZSk7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCku
c2l6ZSgpICE9IHR5cGVBcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiB0
eXBlQXJndW1lbnRFeHByZXNzaW9uID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJl
bmNlKiB0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpD
b25zdGFudEV4cHJlc3Npb24qIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24gPSBudWxscHRy
OworICAgICAgICBBU1Q6OlR5cGVSZWZlcmVuY2UqIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZl
cmVuY2UgPSBudWxscHRyOworCisgICAgICAgIGF1dG8gYXNzaWduID0gWyZdKEFTVDo6VHlwZUFy
Z3VtZW50JiB0eXBlQXJndW1lbnQsIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiYgZXhwcmVzc2lv
biwgQVNUOjpUeXBlUmVmZXJlbmNlKiYgdHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29u
c3RhbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICZjb25zdGFu
dEV4cHJlc3Npb247CisgICAgICAgICAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVy
ZW5jZT4mIHRoZVR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICB0eXBlUmVmZXJlbmNl
ID0gJnN0YXRpY19jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZSY+KHRoZVR5cGVSZWZlcmVuY2UpOwor
ICAgICAgICAgICAgfSksIHR5cGVBcmd1bWVudCk7CisgICAgICAgIH07CisKKyAgICAgICAgYXNz
aWduKHR5cGVBcmd1bWVudHNbaV0sIHR5cGVBcmd1bWVudEV4cHJlc3Npb24sIHR5cGVBcmd1bWVu
dFR5cGVSZWZlcmVuY2UpOworICAgICAgICBhc3NpZ24obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5
cGVBcmd1bWVudHMoKVtpXSwgbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbiwgbmF0aXZlVHlw
ZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSk7CisKKyAgICAgICAgaWYgKHR5cGVBcmd1bWVudEV4cHJl
c3Npb24gJiYgbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgaWYg
KCF0eXBlQXJndW1lbnRFeHByZXNzaW9uLT5tYXRjaGVzKCpuYXRpdmVUeXBlQXJndW1lbnRFeHBy
ZXNzaW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBp
ZiAodHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSAmJiBuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVm
ZXJlbmNlKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKnR5cGVBcmd1bWVudFR5cGVSZWZl
cmVuY2UsICpuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3Np
YmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+
PiYgYXJndW1lbnRUeXBlcywgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4+JiBjYXN0UmV0dXJuVHlwZSkKK3sKKyAgICBpZiAocG9zc2libGVGdW5jdGlvbi5w
YXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGFyZ3VtZW50VHlwZXMuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3NzaWJsZUZ1bmN0aW9uLnBh
cmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5u
YW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnBvc3NpYmxl
RnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSwgc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVk
VHlwZSY+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAg
ICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVz
b2x2ZSgqcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAg
fSksIGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChjYXN0UmV0dXJuVHlwZSAmJiAh
bWF0Y2hlcyhjYXN0UmV0dXJuVHlwZS0+Z2V0KCksIHBvc3NpYmxlRnVuY3Rpb24udHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEluZmVyVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW5mZXJUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZDRiNTRlOTYyNDY3Zjc5ZDA0YTI4MjA1Zjhl
YmY2ODdlYmU2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xS
ZXNvbHZpbmdUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRl
IDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYW1l
ZFR5cGU7CitjbGFzcyBSZXNvbHZhYmxlVHlwZTsKK2NsYXNzIFVubmFtZWRUeXBlOworCit9CisK
K2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpVbm5hbWVk
VHlwZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6TmFtZWRUeXBlJiwgY29uc3QgQVNUOjpO
YW1lZFR5cGUmKTsKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3Qg
QVNUOjpOYW1lZFR5cGUmKTsKKy8vIEZJWE1FOiBJcyBhbnlvbmUgYWN0dWFsbHkgdXNpbmcgdGhl
IHJldHVybiB0eXBlIGhlcmU/CitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+
IG1hdGNoQW5kQ29tbWl0KEFTVDo6VW5uYW1lZFR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7
CitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFT
VDo6TmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiwg
QVNUOjpSZXNvbHZhYmxlVHlwZSYpOworT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+PiBjb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworYm9vbCBpbmZlclR5cGVzRm9yVHlw
ZUFyZ3VtZW50cyhBU1Q6Ok5hbWVkVHlwZSYgcG9zc2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1bWVu
dHMmKTsKK2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBw
b3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4mIGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpOworCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNv
bnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhMzEzMDY4MTgxZjQ1YWE3ZGVjZGIxNjM5OTViYjAzODRj
M2MwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNs
YXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K05hbWVDb250ZXh0OjpOYW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50KQorICAgIDogbV9w
YXJlbnQocGFyZW50KQoreworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpUeXBlRGVm
aW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgaWYgKGV4aXN0cyh0eXBlRGVmaW5pdGlv
bi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5
cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KHR5cGVEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4
dDo6YWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sK
KyAgICBpZiAoZXhpc3RzKHN0cnVjdHVyZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoc3RydWN0dXJlRGVmaW5p
dGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
PiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRp
b24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAo
ZXhpc3RzKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24u
bmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+
KCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24p
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5m
aW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdHlwZXMuZW5kKCkKKyAgICAgICAg
fHwgbV92YXJpYWJsZXMuZmluZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3Zhcmlh
Ymxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9m
dW5jdGlvbnMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1fdHlwZXMu
ZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQor
ICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4
dDo6YWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24p
Cit7CisgICAgaWYgKG1fZnVuY3Rpb25zLmZpbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+LCAxPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVU
eXBlRGVjbGFyYXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0
OjphZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQorewor
ICAgIGlmIChleGlzdHModmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3ZhcmlhYmxlcy5hZGQoU3RyaW5nKHZhcmlh
YmxlRGVjbGFyYXRpb24ubmFtZSgpKSwgJnZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgIHJldHVy
biByZXN1bHQuaXNOZXdFbnRyeTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+LCAxPiogTmFtZUNvbnRleHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlcy5maW5kKG5hbWUpOworICAgIGlm
IChpdGVyYXRvciA9PSBtX3R5cGVzLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAg
ICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKworVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4q
IE5hbWVDb250ZXh0OjpnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9ucy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciA9
PSBtX2Z1bmN0aW9ucy5lbmQoKSkgeworICAgICAgICBpZiAobV9wYXJlbnQpCisgICAgICAgICAg
ICByZXR1cm4gbV9wYXJlbnQtPmdldEZ1bmN0aW9ucyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworfQorCitBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24qIE5hbWVDb250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fdmFyaWFibGVzLmZpbmQobmFtZSk7Cisg
ICAgaWYgKGl0ZXJhdG9yID09IG1fdmFyaWFibGVzLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3Bh
cmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VmFyaWFibGUobmFtZSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVl
OworfQorCitib29sIE5hbWVDb250ZXh0OjpleGlzdHMoU3RyaW5nJiBuYW1lKQoreworICAgIHJl
dHVybiBtX3R5cGVzLmZpbmQobmFtZSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX2Z1
bmN0aW9ucy5maW5kKG5hbWUpICE9IG1fZnVuY3Rpb25zLmVuZCgpCisgICAgICAgIHx8IG1fdmFy
aWFibGVzLmZpbmQobmFtZSkgIT0gbV92YXJpYWJsZXMuZW5kKCk7Cit9CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZUNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDQ4NzhhZTdlOWYxZDgzZTVkNTkyYzJmZDc1
MmJlZGM5MGZhOWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlIDxmdW5j
dGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBOYW1lZFR5
cGU7CitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgVHlwZURlZmluaXRpb247Citj
bGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOwor
Y2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bjsKK2NsYXNzIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRp
b247CisKK30KKworY2xhc3MgTmFtZUNvbnRleHQgeworcHVibGljOgorICAgIE5hbWVDb250ZXh0
KE5hbWVDb250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKKworICAgIGJvb2wgYWRkKEFTVDo6VHlw
ZURlZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsK
KyAgICBib29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRk
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mKTsKKyAgICBib29sIGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKworICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4qIGdldFR5cGVz
KGNvbnN0IFN0cmluZyYpOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KiBnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJik7Cisg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmKTsK
KworcHJpdmF0ZToKKyAgICBib29sIGV4aXN0cyhTdHJpbmcmKTsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+PiBt
X3R5cGVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPj4gbV9mdW5jdGlvbnM7CisgICAgSGFzaE1h
cDxTdHJpbmcsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbio+IG1fdmFyaWFibGVzOworICAgIE5h
bWVDb250ZXh0KiBtX3BhcmVudDsKK307CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42YmYxOGU2OWFmYzVjOGZlNTBkNzQ1ZTU0ZDk2MjZkZGMwZDUwZTBm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisj
aW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTElmU3Rh
dGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNM
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1
cm4uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZh
cmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgi
CisjaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCitOYW1lUmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4
dCYgbmFtZUNvbnRleHQpCisgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQoreworfQor
Cit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJl
bmNlKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICBpZiAo
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byogY2FuZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1l
KCkpOworICAgIGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIpIHsKKyAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXNvbHZl
VHlwZU92ZXJsb2FkSW1wbCgqY2FuZGlkYXRlcywgdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRz
KCkpKQorICAgICAgICB0eXBlUmVmZXJlbmNlLnNldFJlc29sdmVkVHlwZSgqcmVzdWx0KTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30K
Kwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24pCit7CisgICAgTmFtZUNvbnRleHQgbmV3TmFtZUNvbnRleHQoJm1fbmFt
ZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmV3TmFtZUNvbnRl
eHQpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsK
KyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkpIHsKKyAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0
ZXIpOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBuZXdOYW1lQ29udGV4dC5hZGQocGFyYW1ldGVy
KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG5ld05hbWVSZXNvbHZlci5j
aGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7CisgICAgTmFtZUNvbnRl
eHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29u
dGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGJsb2NrKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6
OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1l
Q29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5j
aGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1l
bnQuZWxzZUJvZHkoKSkgeworICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1l
Q29udGV4dCk7CisgICAgICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6U3RhdGVtZW50Jj4oKmlmU3RhdGVtZW50LmVsc2VCb2R5
KCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OldoaWxlTG9v
cCYgd2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0
aW9uYWwoKSk7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwor
ICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9v
cC5ib2R5KCkpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9v
cCYgd2hpbGVMb29wKQoreworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250
ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdCh3
aGlsZUxvb3AuYm9keSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRp
dGlvbmFsKCkpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBm
b3JMb29wKQoreworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsK
KyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29w
KTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICBtX25hbWVDb250ZXh0LmFkZCh2YXJpYWJs
ZURlY2xhcmF0aW9uKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlv
bik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
JiB2YXJpYWJsZVJlZmVyZW5jZSkKK3sKKyAgICBpZiAodmFyaWFibGVSZWZlcmVuY2UudmFyaWFi
bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHZhcmlhYmxlID0gbV9uYW1l
Q29udGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCkpKQorICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS5zZXRWYXJpYWJsZSgqdmFyaWFibGUpOworICAgIGVsc2UgeworICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIE5hbWVS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBBU1NF
UlQobV9jdXJyZW50RnVuY3Rpb24pOworICAgIHJldHVyblN0YXRlbWVudC5zZXRGdW5jdGlvbiht
X2N1cnJlbnRGdW5jdGlvbik7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJldHVyblN0YXRlbWVu
dCk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQoreworICAgIGlmIChhdXRvKiBnZXRG
dW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uZ2V0RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uc2V0UG9zc2libGVHZXRPdmVybG9hZHMoKmdldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8q
IHNldEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5zZXRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5zZXRQb3NzaWJsZVNldE92ZXJsb2Fkcygqc2V0RnVuY3Rpb25zKTsKKyAgICBpZiAo
YXV0byogYW5kRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmFuZEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLnNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKCphbmRGdW5jdGlvbnMpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOworfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQor
eworICAgIGlmIChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2Uo
KSkpIHsKKyAgICAgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQu
Z2V0VHlwZXMoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5i
YXNlKCkpLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5z
aXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVy
YXRpb25UeXBlcylbMF07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uPih0eXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVy
YXRpb25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKSkg
eworICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbCkgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhw
cmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWxzIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgICAgICAg
ICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIGRvIHRoaXMgd2l0aCB2YXJpYW50cyBvciBh
IFJld3JpdGVyIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRv
dEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikg
QVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShvcmlnaW4pLCAqbWVtYmVyKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3RFeHByZXNz
aW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24m
IGNhbGxFeHByZXNzaW9uKQoreworICAgIGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRz
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVu
Y3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAgICAgICAgICBjYWxsRXhwcmVzc2lv
bi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWYgKGF1dG8qIHR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjYWxsRXhwcmVzc2lvbi5u
YW1lKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVzLT5zaXplKCkgPT0gMSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRG
dW5jdGlvbnMoU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0
RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhw
cmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKCFjYWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjYWxsRXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVz
ID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZS5sZWZ0KCkpKSB7CisgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVz
LT5zaXplKCkgPT0gMSk7CisgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gKCplbnVtZXJh
dGlvblR5cGVzKVswXTsKKyAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
Pih0eXBlKSkgeworICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1l
cmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0
eXBlKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVtZXJhdGlvbkRlZmluaXRp
b24ubWVtYmVyQnlOYW1lKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlLnJpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgY29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25EZWZp
bml0aW9uLCAqbWVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2V0RXJyb3IoKTsKK30KKworLy8gRklYTUU6
IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhhdmUgYmVlbiByZXNvbHZlZC4KKworYm9vbCByZXNv
bHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29s
dmVyKQoreworICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZp
bml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3Rh
dGljX2Nhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbiY+KHR5cGVEZWZpbml0aW9uKSk7CisgICAgICAg
IGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1
cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlz
aXQoc3RhdGljX2Nhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJj4oc3RydWN0dXJlRGVmaW5p
dGlvbikpOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9u
IDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29s
dmVyLmNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiY+KGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBpZiAobmFtZVJlc29sdmVy
LmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoYXV0
byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25z
KCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2Fz
dDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiY+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOwor
ICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIHJlc29sdmVOYW1lc0luRnVu
Y3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQorewor
ICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmlu
aXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmlu
aXRpb24oJnN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJj4oZnVuY3Rpb25EZWZp
bml0aW9uKSk7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mPihmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAg
ICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihu
dWxscHRyKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9n
cmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVy
LmNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24m
PihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIu
ZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MmUw
OGUwNjIxMDY3ZGJlMTkwY2EwNDA2OGE5ZTlhNzBiZmRjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSAiV0hMU0xW
aXNpdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
Y2xhc3MgUHJvZ3JhbTsKKworY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3Igewor
cHVibGljOgorICAgIE5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYpOworCisgICAgdmlydHVhbCB+
TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRDdXJyZW50RnVuY3Rpb25EZWZp
bml0aW9uKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRpb24pCisgICAg
eworICAgICAgICBtX2N1cnJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QmxvY2smKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6SWZTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVM
b29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpS
ZXR1cm4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UmKSBvdmVycmlkZTsKKworICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7Cisg
ICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIG1fY3VycmVudEZ1bmN0aW9uIHsgbnVsbHB0ciB9
OworfTsKKworYm9vbCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXIm
KTsKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYp
OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCmluZGV4IGE2OWU4NDNjMTBmZDdjY2EzMTk1NTM3NTAy
MjdhYWJlY2NmZGE3OWIuLjBkY2YzZjViODkzM2ViNGVkYWE3M2ExYTVmMWE4MjQwNTdlOGE3OTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJv
Z3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJv
Z3JhbS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVm
aW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xOYW1lQ29udGV4dC5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCkBAIC00NywzOSArNDgsNDAgQEAgcHVi
bGljOgogICAgIGJvb2wgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRpb24mJiB0eXBlRGVmaW5pdGlv
bikKICAgICB7CiAgICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVm
PEFTVDo6VHlwZURlZmluaXRpb24+KFdURk1vdmUodHlwZURlZmluaXRpb24pKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGljX2Nh
c3Q8QVNUOjpUeXBlRGVmaW5pdGlvbiY+KG1fdHlwZURlZmluaXRpb25zLmxhc3QoKSkpOwogICAg
IH0KIAogICAgIGJvb2wgYXBwZW5kKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVy
ZURlZmluaXRpb24pCiAgICAgewogICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVu
ZChtYWtlVW5pcXVlUmVmPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1Y3R1
cmVEZWZpbml0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1f
bmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiY+KG1f
c3RydWN0dXJlRGVmaW5pdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCiAgICAgYm9vbCBhcHBlbmQo
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAg
ewogICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KFdURk1vdmUoZW51bWVyYXRpb25EZWZpbml0aW9u
KSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQu
YWRkKHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJj4obV9lbnVtZXJhdGlv
bkRlZmluaXRpb25zLmxhc3QoKSkpOwogICAgIH0KIAogICAgIGJvb2wgYXBwZW5kKEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9uKQogICAgIHsKICAgICAgICAgbV9m
dW5jdGlvbkRlZmluaXRpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uPihXVEZNb3ZlKGZ1bmN0aW9uRGVmaW5pdGlvbikpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiY+KG1fZnVuY3Rpb25EZWZpbml0aW9ucy5sYXN0KCkpKTsKICAgICB9
CiAKICAgICBib29sIGFwcGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKQogICAgIHsKICAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mPihtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zLmxhc3QoKSkpOwogICAgIH0KIAogICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQogICAgIHsKICAgICAgICAgbV9uYXRp
dmVUeXBlRGVjbGFyYXRpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiY+KG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0
KCkpKTsKICAgICB9CiAKKyAgICBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQoKSB7IHJldHVybiBt
X25hbWVDb250ZXh0OyB9CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9u
Pj4mIHR5cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRpb25zOyB9CiAgICAg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiYgc3RydWN0dXJlRGVm
aW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9CiAgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+JiBlbnVtZXJhdGlvbkRlZmlu
aXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9CkBAIC05MCw2ICs5
Miw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPj4mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZVR5cGVE
ZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0
OwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpUeXBlRGVmaW5pdGlvbj4+IG1fdHlwZURlZmlu
aXRpb25zOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4g
bV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uPj4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWExODMzZDhkOWFjYTRhZTNjYTBlOWNkNzAy
ODNjZjM5YzI0NDM2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKQEAgLTAsMCArMSwxMTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRp
b24uaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RhdGljIHVuc2ln
bmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgY2FuZGlkYXRlLCBj
b25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3Vt
ZW50VHlwZXMpCit7CisgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QgPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY2FuZGlkYXRlLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb252ZXJzaW9uQ29zdCArPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYg
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAgICAgIHJldHVy
biByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJzaW9uQ29z
dCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpOworICAgICAgICB9KSwgYXJndW1l
bnRUeXBlc1tpXS5nZXQoKSk7CisgICAgfQorICAgIC8vIFRoZSByZXR1cm4gdHlwZSBjYW4gbmV2
ZXIgYmUgYSBsaXRlcmFsIHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3QgaXMgYWx3YXlzIDAu
CisgICAgcmV0dXJuIGNvbnZlcnNpb25Db3N0OworfQorCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBl
cywgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBjYXN0
UmV0dXJuVHlwZSkKK3sKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBjYW5kaWRhdGVzOworICAgIGZvciAoYXV0byYgcG9zc2li
bGVGdW5jdGlvbiA6IHBvc3NpYmxlRnVuY3Rpb25zKSB7CisgICAgICAgIGlmIChwb3NzaWJsZUZ1
bmN0aW9uLmdldCgpLmVudHJ5UG9pbnRUeXBlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKGluZmVyVHlwZXNGb3JDYWxsKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCksIGFyZ3Vt
ZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5k
KHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIG1pbmltdW1D
b252ZXJzaW9uQ29zdCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAg
ICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpCisgICAgICAgIG1pbmltdW1Db252
ZXJzaW9uQ29zdCA9IHN0ZDo6bWluKG1pbmltdW1Db252ZXJzaW9uQ29zdCwgY29udmVyc2lvbkNv
c3QoY2FuZGlkYXRlLmdldCgpLCBhcmd1bWVudFR5cGVzKSk7CisKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtaW5pbXVtQ29z
dENhbmRpZGF0ZXM7CisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7Cisg
ICAgICAgIGlmIChjb252ZXJzaW9uQ29zdChjYW5kaWRhdGUuZ2V0KCksIGFyZ3VtZW50VHlwZXMp
ID09IG1pbmltdW1Db252ZXJzaW9uQ29zdCkKKyAgICAgICAgICAgIG1pbmltdW1Db3N0Q2FuZGlk
YXRlcy5hcHBlbmQoY2FuZGlkYXRlKTsKKyAgICB9CisKKyAgICBib29sIHJlc3RyaWN0ZWRDYW5k
aWRhdGVFeGlzdHMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IG1pbmltdW1D
b3N0Q2FuZGlkYXRlcykgeworICAgICAgICBpZiAoaXM8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+
KGNhbmRpZGF0ZS5nZXQoKSkgJiYgZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGNh
bmRpZGF0ZS5nZXQoKSkucmVzdHJpY3RlZCgpKSB7CisgICAgICAgICAgICByZXN0cmljdGVkQ2Fu
ZGlkYXRlRXhpc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgY2FuZGlkYXRlcy5jbGVhcigpOworICAgIGlmIChyZXN0cmljdGVkQ2FuZGlkYXRl
RXhpc3RzKSB7CisgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbWluaW11bUNvc3RDYW5k
aWRhdGVzKSB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGNh
bmRpZGF0ZS5nZXQoKSkgJiYgZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGNhbmRp
ZGF0ZS5nZXQoKSkucmVzdHJpY3RlZCgpKQorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBw
ZW5kKGNhbmRpZGF0ZS5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgY2Fu
ZGlkYXRlcyA9IG1pbmltdW1Db3N0Q2FuZGlkYXRlczsKKworICAgIGlmIChjYW5kaWRhdGVzLnNp
emUoKSA9PSAxKQorICAgICAgICByZXR1cm4gJmNhbmRpZGF0ZXNbMF0uZ2V0KCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK0FTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1w
bChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBwb3Nz
aWJsZVR5cGVzLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAgQVNU
OjpOYW1lZFR5cGUqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBwb3NzaWJsZVR5
cGUgOiBwb3NzaWJsZVR5cGVzKSB7CisgICAgICAgIGlmIChpbmZlclR5cGVzRm9yVHlwZUFyZ3Vt
ZW50cyhwb3NzaWJsZVR5cGUsIHR5cGVBcmd1bWVudHMpKSB7CisgICAgICAgICAgICBpZiAocmVz
dWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmVzdWx0
ID0gJnN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4ocG9zc2libGVUeXBlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQ5MzQ2ZmY4Nzc2Y2U5MzE0ZmYx
MDY2NmI4M2NiZmY1ODU2YzgwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJXSExTTFJlc29sdmluZ1R5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1
bWVudC5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmFtZWRUeXBlOworCit9
CisKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVz
b2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPj4mIGNhc3RSZXR1cm5UeXBlKTsKK0FTVDo6TmFtZWRUeXBlKiBy
ZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
Ok5hbWVkVHlwZT4sIDE+JiwgQVNUOjpUeXBlQXJndW1lbnRzJik7CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2aW5nVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xSZXNvbHZpbmdUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdjMGViYWU4MWY4MmM0MGVmY2M5ZWY1M2Y2
ZjE2Mzk3OWM4MmNiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlIDxt
ZW1vcnk+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFT
VCB7CisKK2NsYXNzIFJlc29sdmFibGVUeXBlOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30KKwor
Y2xhc3MgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4geworcHVibGljOgorICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQorICAgICAgICA6IG1fcmVzb2x2
YWJsZVR5cGUoJnJlc29sdmFibGVUeXBlKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZShjb25zdCBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYpID0gZGVsZXRlOwor
ICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKFJlc29sdmFibGVUeXBlUmVmZXJlbmNlJiYpID0g
ZGVsZXRlOworCisgICAgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUoKSB7IHJl
dHVybiAqbV9yZXNvbHZhYmxlVHlwZTsgfQorCitwcml2YXRlOgorICAgIEFTVDo6UmVzb2x2YWJs
ZVR5cGUqIG1fcmVzb2x2YWJsZVR5cGU7Cit9OworCit1c2luZyBSZXNvbHZpbmdUeXBlID0gVmFy
aWFudDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4+OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQ5MTQ4MmFhYzVh
YTVhOTNlOGU3MjhkZmYxYTY1ZmVjYjlkZTMwNjYuLjJmNzI0YzMyZGJmNjM2ZjEyNWY3ZTY3NWZm
ODA0OWIyZjM3NzA0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMDYsOCArMzA2LDEyIEBAIE1vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCiBNb2R1bGVzL3dlYnNvY2tldHMv
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCiAKIE1vZHVsZXMvd2ViZ3B1L0RP
TVdpbmRvd1dlYkdQVS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5j
cHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRl
eHQuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKK01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFJlc291cmNlU2VtYW50aWMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmYzNWE4ODZlMTUzYmY0ZjFlMTdjNWNjNmQ2
M2ZhNzZkNTNkMTM2Ni4uNTc5MjZmNGRiMjk1MzFmYzk4ZmI5MjY2NGNkOWUzZDU2Yzk3NzQ5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTMzMjUsNiArMTMzMjUsMTUgQEAKIAkJQzIxQkY3NDUyMUNEOTY5ODAwMjI3OTc5IC8q
IFdITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQ7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMURGMkU3MUQ5RTRFOTkwMEY1QjI0QyAv
KiBDU1NGb250VmFyaWF0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTRm9udFZhcmlhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzIxREYyRTgxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25WYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250VmFyaWF0aW9uVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OEEyMUU4ODgzRTAwM0M5
ODREIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFt
ZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OEMyMUU4
ODgzRTAwM0M5ODREIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
TmFtZVJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOThEMjFF
ODg4ODQwMDNDOTg0RCAvKiBXSExTTE5hbWVDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMTmFtZUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0
QTk4RTIxRTg4ODg1MDAzQzk4NEQgLyogV0hMU0xOYW1lQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTE5hbWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRB
OTk3MjFFOTBGMjgwMDNDOTg0RCAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMzRBOTk5MjFFOTBGMjkwMDNDOTg0RCAvKiBXSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OUEyMUU5MEY1NjAwM0M5ODRE
IC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEluZmVyVHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk5QjIxRTkwRjU3MDAz
Qzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW5mZXJUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk5RDIxRTkxMEJEMDAzQzk4
NEQgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2aW5n
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjQ1OEU2MTFGRTg5NzlFMDA1
OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udENhY2hlQ29y
ZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI2MDE3QTExQzcyREM5OTAw
Rjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU0ZvbnRGYWNlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzI2MDE3QTIxQzcyREM5OTAwRjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRGYWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNTM4OCwxMSArMjUzOTcsMjAgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAq
LywKKwkJCQlDMjM0QTk5QTIxRTkwRjU2MDAzQzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmNwcCAq
LywKKwkJCQlDMjM0QTk5QjIxRTkwRjU3MDAzQzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmggKi8s
CiAJCQkJQzIxMEU5MTEyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3BwICovLAogCQkJ
CUMyMTBFOTEyMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8sCisJCQkJQzIzNEE5
OEQyMUU4ODg4NDAwM0M5ODREIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovLAorCQkJCUMyMzRB
OThFMjFFODg4ODUwMDNDOTg0RCAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8sCisJCQkJQzIzNEE5
OEEyMUU4ODgzRTAwM0M5ODREIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKKwkJCQlDMjM0
QTk4QzIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKIAkJCQlDMjFC
RjczNzIxQ0Q4QTAyMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuY3BwICovLAogCQkJCUMyMUJGNzM4
MjFDRDhBMDMwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5oICovLAogCQkJCUMyMUJGNzNBMjFDRDhE
NzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywKKwkJCQlDMjM0QTk5OTIxRTkwRjI5MDAz
Qzk4NEQgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLywKKwkJCQlDMjM0QTk5NzIx
RTkwRjI4MDAzQzk4NEQgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggKi8sCisJCQkJQzIz
NEE5OUQyMUU5MTBCRDAwM0M5ODREIC8qIFdITFNMUmVzb2x2aW5nVHlwZS5oICovLAogCQkJCUMy
MUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQgKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IFdITFNMOwo=
</data>
<flag name="review"
          id="375743"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358977</attachid>
            <date>2019-01-11 19:53:52 -0800</date>
            <delta_ts>2019-01-11 19:53:52 -0800</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-193007-20190111195351.patch</filename>
            <type>text/plain</type>
            <size>73266</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWJkYWVlYjdhMWJjZDky
ZTY2NGZhZmNmM2NjNGYyZDZhMjM5OWE3Yi4uOWMxZmIwMGVmZjMyMjY0OTJmM2JiNjlkNzkwNjE1
ZGYzZmE0NTFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIE5hbWVSZXNvbHZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDA3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgYmFzZSBpbXBs
ZW1lbnRhdGlvbiBmb3IgV0hMU0wncyBuYW1lIHJlc29sdmVyLiBUaGUgbmFtZSByZXNvbHZlciBt
YXRjaGVzIHRocmVlIGtpbmRzIG9mIHRoaW5nczoKKyAgICAgICAgMS4gSXQgbWF0Y2hlcyBWYXJp
YWJsZVJlZnMgdG8gVmFyaWFibGVEZWNscworICAgICAgICAyLiBJdCBtYXRjaGVzIFR5cGVSZWZz
IHRvIE5hbWVkVHlwZXMKKyAgICAgICAgMy4gSXQgbWF0Y2hlcyBDYWxsRXhwcmVzc2lvbnMgdG8g
RnVuY3Rpb25EZWNsYXJhdGlvbnMKKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBpdCBp
c24ndCBob29rZWQgdXAgeWV0LiBOb3QgZW5vdWdoIG9mIHRoZSBjb21waWxlciBleGlzdHMgdG8g
aGF2ZSBhbnkgbWVhbmluZ2Z1bCBzb3J0CisgICAgICAgIG9mIHRlc3QuIFdoZW4gZW5vdWdoIG9m
IHRoZSBjb21waWxlciBpcyBwcmVzZW50LCBJJ2xsIHBvcnQgdGhlIHJlZmVyZW5jZSBpbXBsZW1l
bnRhdGlvbidzIHRlc3Qgc3VpdGUuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcDogTm93IHRoYXQgSW5mZXJUeXBlcy5oIGV4aXN0
cywgd2UgY2FuIGltcGxlbWVudCB0aGVzZQorICAgICAgICBmdW5jdGlvbnMuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpGbG9hdExpdGVyYWxUeXBlOjpjYW5SZXNvbHZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU6OmNvbnZlcnNp
b25Db3N0IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU6OnZhbHVlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwOiBOb3cgdGhhdCBJbmZlclR5cGVzLmggZXhpc3RzLCB3ZSBjYW4gaW1wbGVt
ZW50IHRoZXNlCisgICAgICAgIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OkludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0IGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuaDogUmVtb3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVyYWxUeXBlOjp2YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljLmNwcDogTW9kaWZ5aW5nIFNvdXJjZXMudHh0IGNhdXNlZCB0aGUgc291cmNl
cworICAgICAgICB0byBnZXQgc2h1ZmZsZWQgYXJvdW5kLCBzbyB0aGUgI2luY2x1ZGVzIG5lZWQg
dG8gYmUgZml4ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOiBOb3cgdGhhdCBJbmZlclR5cGVzLmggZXhpc3Rz
LCB3ZSBjYW4gaW1wbGVtZW50CisgICAgICAgIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaDogUmVtb3ZlIHVu
bmVjZXNzYXJ5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OnZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwOiBBZGRlZC4gVGhpcyBpcyB0
aGUgcmVwbGFjZW1lbnQgZm9yIFVuaWZpY2F0aW9uQ29udGV4dCBpbiB0aGUKKyAgICAgICAgcmVm
ZXJlbmNlIGNvbXBpbGVyLiBJdCdzIG11Y2ggc2ltcGxlciAoYW5kIHdlIHNob3VsZCByZW1vdmUg
VW5pZmljYXRpb25Db250ZXh0IGluIHRoZSByZWZlcmVuY2UgY29tcGlsZXIgaW4KKyAgICAgICAg
ZmF2b3Igb2YgdGhpcyBkZXNpZ24pLiBJdCBoYXMgdGhyZWUgc2V0cyBvZiBmdW5jdGlvbnM6IFRl
bGwgaWYgdHdvIHR5cGVzIGFyZSB0aGUgc2FtZSwgdGVsbCBpZiB0d28gdHlwZXMgYXJlCisgICAg
ICAgIHRoZSBzYW1lIGFuZCBjb21taXQgdGhlIHJlc29sdmFibGUgdHlwZSwgYW5kIHJ1biB0aGUg
YWJvdmUgZnVuY3Rpb25zIG9uIHR5cGUgcmVmZXJlbmNlcyBvciBmdW5jdGlvbiBhcmd1bWVudHMu
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6bWF0Y2hBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNvbW1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxsKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNw
cDogQWRkZWQuIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIE5hbWVk
VHlwZXMsCisgICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25zLCBhbmQgVmFyaWFibGVEZWNsYXJh
dGlvbnMgc28gTmFtZVJlc29sdmVyIGNhbiB3b3JrLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok5hbWVDb250ZXh0OjpOYW1lQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFt
ZUNvbnRleHQ6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6Omdl
dFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0RnVuY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0VmFyaWFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpleGlzdHMpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
VHlwZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmNwcDogQWRkZWQuIFVzZSB0aGUgTmFtZUNvbnRleHQgdG8gbWF0Y2ggdXAgdGhlIHRocmVlIHR5
cGVzIG9mIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6TmFt
ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2ZXI6OnZpc2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFtZXNJblR5cGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlw
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6c2V0Q3VycmVudEZ1
bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cm9ncmFtLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvZ3JhbTo6YXBwZW5kKTogVGhl
IHBhcnNlciBuZWVkcyB0byBhZGQgYWxsIGdsb2JhbCBkZWNsYXJhdGlvbnMgdG8gdGhlIG5hbWUg
Y29udGV4dCBzbyB0aGUKKyAgICAgICAgbmFtZSByZXNvbHZlciBpcyByZWFkeSB0byBnbyBhcyBz
b29uIGFzIHBhcnNpbmcgaXMgZmluaXNoZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJv
Z3JhbTo6bmFtZUNvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA6IEFkZGVkLiBQaWNrIHRoZSBhcHByb3ByaWF0ZSBGdW5j
dGlvbkRlY2xhcmF0aW9uIG9yCisgICAgICAgIE5hbWVkVHlwZSBmb3IgYSBwYXJ0aWN1bGFyIENh
bGxFeHByZXNzaW9uIG9yIFR5cGVSZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
Y29udmVyc2lvbkNvc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVGdW5jdGlv
bk92ZXJsb2FkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZVR5cGVPdmVy
bG9hZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5jcHAuIFRoaXMgZGVzY3JpYmVzIHRoZSB0d28gc3RhdGVzIHRoYXQgYSB0eXBlIGluIHRo
ZSB0eXBlIHJlc29sdmVyIGNhbiBiZSBpbjogZWl0aGVyIGFuIG93bmVkCisgICAgICAgIFVubmFt
ZWRUeXBlLCBvciBhIHJlZmVyZW5jZSB0byBhIFJlc29sdmFibGVUeXBlLiBUaGlzIGlzIGJlY2F1
c2UgZXZlcnkgZXhwcmVzc2lvbiBuZWVkcyB0byBoYXZlIGEgdHlwZQorICAgICAgICBhc3NvY2lh
dGVkIHdpdGggaXQsIGJ1dCB0aG9zZSB0eXBlcyBtaWdodCBiZSB0aGUgdHlwZSBvZiBhIGxpdGVy
YWwgKGFrYSBhIFJlc29sdmFibGVUeXBlKS4gTXVsdGlwbGUKKyAgICAgICAgZXhwcmVzc2lvbnMg
bWlnaHQgbmVlZCB0byByZWZlcmVuY2UgdGhlIHNhbWUgUmVzb2x2YWJsZVR5cGUgc28gd2hlbiBp
dCBnZXRzIHJlc29sdmVkLCBhbGwgdGhlIGV4cHJlc3Npb25zCisgICAgICAgIGdldCB0aGUgcmVz
dWx0LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNlOjpS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U6OnJlc29sdmFibGVUeXBlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTkt
MDEtMTEgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbV0hMU0xdIEFkZCBhIFZpc2l0b3IgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlw
ZS5jcHAKaW5kZXggNDY4MDkzMmY2NTk5Y2ZkZmRkMGM2NDEzYzMxMTQ1NzdhYjViNzBhMy4uMzMy
NWNjNWQxOTUwNWFjODBjYjkxODFmY2I1MDlmYjU0ZmNkYmNjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxv
YXRMaXRlcmFsVHlwZS5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShXRUJHUFUp
CiAKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00NCwxNiArNDYsMzAgQEAgRmxvYXRMaXRlcmFsVHlwZTo6Rmxv
YXRMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGZsb2F0IHZhbHVlKQogCiBGbG9h
dExpdGVyYWxUeXBlOjp+RmxvYXRMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKIAotYm9vbCBGbG9h
dExpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdAorRmxvYXRMaXRlcmFs
VHlwZTo6RmxvYXRMaXRlcmFsVHlwZShGbG9hdExpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKwor
RmxvYXRMaXRlcmFsVHlwZSYgRmxvYXRMaXRlcmFsVHlwZTo6b3BlcmF0b3I9KEZsb2F0TGl0ZXJh
bFR5cGUmJikgPSBkZWZhdWx0OworCitib29sIEZsb2F0TGl0ZXJhbFR5cGU6OmNhblJlc29sdmUo
Y29uc3QgVHlwZSYgdHlwZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMK
KyAgICBpZiAoIWlzPE5hbWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICgh
aXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9u
LmlzRmxvYXRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmNhblJlcHJlc2VudEZsb2F0KCkobV92YWx1ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdW5zaWduZWQgRmxvYXRMaXRlcmFsVHlw
ZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdAordW5zaWduZWQgRmxv
YXRMaXRlcmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotICAgIHJldHVybiAw
OworICAgIGlmIChtYXRjaGVzKHVubmFtZWRUeXBlLCBzdGF0aWNfY2FzdDxjb25zdCBUeXBlUmVm
ZXJlbmNlJj4obV9wcmVmZXJyZWRUeXBlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biAxOwogfQogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUu
aAppbmRleCBmM2E0NDMyNjgzOGQ1MDk4NDMzYjRkZTA4NDRkM2ViYzNmNTZkZmU5Li41NjgwNjQz
MDM0NzhjZTFjNDAxMjMxZGNiMzdmYWJmNTQyYjFiMDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRl
cmFsVHlwZS5oCkBAIC00NiwxMCArNDYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZsb2F0
TGl0ZXJhbFR5cGUoKTsKIAogICAgIEZsb2F0TGl0ZXJhbFR5cGUoY29uc3QgRmxvYXRMaXRlcmFs
VHlwZSYpID0gZGVsZXRlOwotICAgIEZsb2F0TGl0ZXJhbFR5cGUoRmxvYXRMaXRlcmFsVHlwZSYm
KSA9IGRlZmF1bHQ7CisgICAgRmxvYXRMaXRlcmFsVHlwZShGbG9hdExpdGVyYWxUeXBlJiYpOwog
CiAgICAgRmxvYXRMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUm
KSA9IGRlbGV0ZTsKLSAgICBGbG9hdExpdGVyYWxUeXBlJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFs
VHlwZSYmKSA9IGRlZmF1bHQ7CisgICAgRmxvYXRMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KEZsb2F0
TGl0ZXJhbFR5cGUmJik7CiAKICAgICBib29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNTgsOCArNTgsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlkZTsKICAgICB1bnNpZ25l
ZCBjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KIHByaXZhdGU6CiAg
ICAgZmxvYXQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZl
IGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWxUeXBlLmNwcAppbmRleCAwNDdlZTZmNTRlMTM2ZWNmMWEwNzhkOTE1YjgyNmMyY2U2YWIwOTVh
Li4zMjIzNjQxMzliNzRmYjYxMDZhN2JjZjQzNTkxNTI2NDlmOWQwODdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExT
TE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50Lmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCiAKQEAgLTQ1LDE2ICs0NywzMCBAQCBJ
bnRlZ2VyTGl0ZXJhbFR5cGU6OkludGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIGludCB2YWx1ZSkKIAogSW50ZWdlckxpdGVyYWxUeXBlOjp+SW50ZWdlckxpdGVyYWxUeXBl
KCkgPSBkZWZhdWx0OwogCi1ib29sIEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25z
dCBUeXBlJikgY29uc3QKK0ludGVnZXJMaXRlcmFsVHlwZTo6SW50ZWdlckxpdGVyYWxUeXBlKElu
dGVnZXJMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKK0ludGVnZXJMaXRlcmFsVHlwZSYgSW50
ZWdlckxpdGVyYWxUeXBlOjpvcGVyYXRvcj0oSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVs
dDsKKworYm9vbCBJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlw
ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICBpZiAoIWlzPE5h
bWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYW1lZFR5
cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihu
YW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jYW5S
ZXByZXNlbnRJbnRlZ2VyKCkobV92YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdW5zaWduZWQgSW50ZWdlckxpdGVyYWxUeXBlOjpjb252ZXJzaW9u
Q29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0Cit1bnNpZ25lZCBJbnRlZ2VyTGl0ZXJhbFR5
cGU6OmNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gMDsKKyAgICBpZiAo
bWF0Y2hlcyh1bm5hbWVkVHlwZSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHlwZVJlZmVyZW5jZSY+KG1f
cHJlZmVycmVkVHlwZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5oCmluZGV4
IDRlN2QwZWM1ODc0MTVkMjU0MjNmZWQ4OTBmYmVhYzFiYjgxYWYwOGMuLjQyNmYwZmUxODI1OTZj
ZGRmOGY0YThhZDMwNTgxMTBiMjIyYWE3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFs
VHlwZS5oCkBAIC00NiwxMCArNDYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkludGVnZXJM
aXRlcmFsVHlwZSgpOwogCiAgICAgSW50ZWdlckxpdGVyYWxUeXBlKGNvbnN0IEludGVnZXJMaXRl
cmFsVHlwZSYpID0gZGVsZXRlOwotICAgIEludGVnZXJMaXRlcmFsVHlwZShJbnRlZ2VyTGl0ZXJh
bFR5cGUmJikgPSBkZWZhdWx0OworICAgIEludGVnZXJMaXRlcmFsVHlwZShJbnRlZ2VyTGl0ZXJh
bFR5cGUmJik7CiAKICAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShjb25zdCBJbnRl
Z2VyTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKLSAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUmIG9wZXJh
dG9yPShJbnRlZ2VyTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworICAgIEludGVnZXJMaXRlcmFs
VHlwZSYgb3BlcmF0b3I9KEludGVnZXJMaXRlcmFsVHlwZSYmKTsKIAogICAgIGJvb2wgaXNJbnRl
Z2VyTGl0ZXJhbFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTU4
LDggKzU4LDYgQEAgcHVibGljOgogICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5
cGUmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KLQogcHJpdmF0ZToKICAgICBpbnQgbV92YWx1ZTsKICAgICAvLyBUaGlzIGlzIGEg
dW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRp
dmVUeXBlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCmluZGV4IDNkYmM1MDRiMThkM2ZmOGRk
Y2ExN2I2OWQ4ZTM1N2NiY2I4YmI2NzUuLmY2NTE4ODA5YWJmNWE2ZDA0ZDc5NzE1MGVlMTI3MDg0
MmVlNjcxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMTmFt
ZWRUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGUuY3BwCmluZGV4IDRhOWJjMDNhODE4MzBjYTMwYTc2YmZiY2VhZjliNDczMTgwNWI4
MzUuLmJmMzFhM2M2ZTc5YWQ1MjEwMDI4M2Q3ZGZlODJiNDZmYTY2MzZmYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAKQEAgLTI4LDYgKzI4
LDggQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMu
aCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtNDYsMTYgKzQ4LDMyIEBAIFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIHVuCiAKIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjp+VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CiAKLWJvb2wgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0CitVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZTo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUmJikgPSBkZWZhdWx0OworCitVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGU6Om9wZXJhdG9yPShVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYm
KSA9IGRlZmF1bHQ7CisKK2Jvb2wgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNhblJlc29s
dmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMKKyAgICBpZiAoIWlzPE5hbWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOworICAgIGlm
ICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZl
VHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmlzSW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5pc1NpZ25lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFu
YXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKCkobV92YWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdW5zaWdu
ZWQgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFt
ZWRUeXBlJikgY29uc3QKK3Vuc2lnbmVkIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpjb252
ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKG1hdGNoZXMo
dW5uYW1lZFR5cGUsIHN0YXRpY19jYXN0PGNvbnN0IFR5cGVSZWZlcmVuY2UmPihtX3ByZWZlcnJl
ZFR5cGUpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
LmgKaW5kZXggNTJhM2I3NzdhNDVmOGJjZDViMTg3ODdjYWQxN2NkNjZlZGRiZWE4YS4uMzYyZWZh
OTZkYjNiYjU0OWY3MjE4NmZlMmYxOWYxYzU5ZmIxN2RiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oCkBAIC00NiwxMCArNDYsMTAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgflVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCk7CiAKICAgICBVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZShjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYp
ID0gZGVsZXRlOwotICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZShVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYmKTsKIAogICAgIFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlJiBvcGVyYXRvcj0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9
IGRlbGV0ZTsKLSAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KFVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKyAgICBVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZSYgb3BlcmF0b3I9KFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiYpOwogCiAg
ICAgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCkBAIC01OCw4ICs1OCw2IEBAIHB1YmxpYzoKICAgICBib29sIGNhblJl
c29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVuc2lnbmVkIGNvbnZlcnNp
b25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB1bnNpZ25l
ZCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQogcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX3ZhbHVlOwogICAgIC8vIFRoaXMgaXMgYSB1bmlxdWVfcHRyIHRvIHJlc29sdmUgYSBj
aXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwZTBl
ZjA5ZTQxNDE1MjUxZTA4NGE4MmRlYjU1ZTFmMWZjZTI5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCkBA
IC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUg
IldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFBvaW50
ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6
VHlwZSYgdW5pZnlUaGlzLCBjb25zdCBBU1Q6OlR5cGUmIHVuaWZ5T3RoZXIpCit7CisgICAgaWYg
KCZ1bmlmeVRoaXMgPT0gJnVuaWZ5T3RoZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpICYmIGlzPEFTVDo6TmFtZWRUeXBlPih1
bmlmeU90aGVyKSkgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgYXV0byYgbmFtZWRU
aGlzID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8m
IG5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlPdGhlcik7CisgICAg
ICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUaGlzKSAmJiAhaXM8QVNU
OjpUeXBlRGVmaW5pdGlvbj4obmFtZWRPdGhlcikpOworI2VuZGlmCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5VGhpcykgJiYg
aXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcikpIHsKKyAgICAgICAgYXV0byYgdW5uYW1l
ZFRoaXMgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMpOworICAgICAgICBh
dXRvJiB1bm5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU90aGVy
KTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUaGlzKSAm
JiAhaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkT3RoZXIpKTsKKyAgICAgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkT3RoZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBwb2ludGVyVGhpcyA9IGRvd25jYXN0
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAgIGF1dG8mIHBvaW50
ZXJPdGhlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcik7CisgICAg
ICAgICAgICBpZiAocG9pbnRlclRoaXMuYWRkcmVzc1NwYWNlKCkgIT0gcG9pbnRlck90aGVyLmFk
ZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBtYXRjaGVzKHBvaW50ZXJUaGlzLmVsZW1lbnRUeXBlKCksIHBvaW50ZXJPdGhlci5l
bGVtZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5u
YW1lZE90aGVyKSkgeworICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUaGlzID0gZG93
bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAg
IGF1dG8mIGFycmF5UmVmZXJlbmNlT3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVJlZmVyZW5jZVRoaXMu
YWRkcmVzc1NwYWNlKCkgIT0gYXJyYXlSZWZlcmVuY2VPdGhlci5hZGRyZXNzU3BhY2UoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhh
cnJheVJlZmVyZW5jZVRoaXMuZWxlbWVudFR5cGUoKSwgYXJyYXlSZWZlcmVuY2VPdGhlci5lbGVt
ZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90aGVyKSkgeworICAgICAg
ICAgICAgYXV0byYgYXJyYXlUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRU
aGlzKTsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5T3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5
VHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVRoaXMubnVtRWxlbWVu
dHMoKSAhPSBhcnJheU90aGVyLm51bUVsZW1lbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlUaGlzLnR5cGUoKSwgYXJy
YXlPdGhlci50eXBlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIG90aGVyKQoreworICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCBvdGhlci51bmlmeU5vZGUo
KSk7Cit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBj
b25zdCBBU1Q6Ok5hbWVkVHlwZSYgb3RoZXIpCit7CisgICAgcmV0dXJuIG1hdGNoZXMobmFtZWRU
eXBlLnVuaWZ5Tm9kZSgpLCBvdGhlci51bmlmeU5vZGUoKSk7Cit9CisKK2Jvb2wgbWF0Y2hlcyhj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgQVNUOjpOYW1lZFR5cGUm
IG90aGVyKQoreworICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCBv
dGhlci51bmlmeU5vZGUoKSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VHlwZSYgdW5pZnlOb2RlLCBBU1Q6OlJl
c29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICBBU1NFUlQoIXJlc29sdmFibGVU
eXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoIXJlc29sdmFibGVUeXBlLmNhblJlc29sdmUo
dW5pZnlOb2RlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoaXM8QVNU
OjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgbmFtZWRVbmlmeU5vZGUg
PSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVW5pZnlOb2Rl
Lm9yaWdpbigpKSwgbmFtZWRVbmlmeU5vZGUpOworICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNv
bHZlKHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUocmVzdWx0KSB9
OworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4o
dW5pZnlOb2RlKS5jbG9uZSgpOworICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUocmVzdWx0LT5j
bG9uZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPcHRpb25hbDxVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICByZXR1cm4g
bWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIHJlc29sdmFibGVUeXBlKTsK
K30KKworT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1p
dChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZh
YmxlVHlwZSkKK3sKKyAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBlLnVuaWZ5Tm9k
ZSgpLCByZXNvbHZhYmxlVHlwZSk7Cit9CisKK09wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5
cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIpCit7CisgICAgQVNTRVJU
KCFyZXNvbHZhYmxlVHlwZTEucmVzb2x2ZWRUeXBlKCkpOworICAgIEFTU0VSVCghcmVzb2x2YWJs
ZVR5cGUyLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWxUeXBl
PihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJs
ZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6
OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25l
KCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkZsb2F0
TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpJ
bnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpJbnRlZ2VyTGl0
ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJl
c29sdmUoZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSku
cHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIucmVzb2x2
ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVm
ZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkludGVn
ZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsK
KyAgICB9CisgICAgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29s
dmFibGVUeXBlMSkgJiYgaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJl
ZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNh
c3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVm
ZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5j
bG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFi
bGVUeXBlMSkgJiYgaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsK
KyAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBtYXRjaCBudWxscHRyIGFuZCBudWxscHRyIGZh
aWxzLgorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNv
bW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICBBU1NFUlQo
IXJlc29sdmFibGVUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoaXM8QVNUOjpGbG9hdExp
dGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVz
b2x2ZShkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVm
ZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkZsb2F0
TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAg
ICB9CisgICAgaWYgKGlzPEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkp
IHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJM
aXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKKyAgICAgICAgcmVz
b2x2YWJsZVR5cGUucmVzb2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJs
ZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpO
dWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKSkgeworICAgICAgICAvLyBGSVhNRTogVHJ5
aW5nIHRvIG1hdGNoIG51bGxwdHIgYW5kIG51bGxwdHIgZmFpbHMuCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wg
aW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlwZSwg
QVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAgIGlmIChpczxBU1Q6OlR5
cGVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8IGlzPEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBpczxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKSkgeworICAgICAgICByZXR1cm4gdHlwZUFyZ3VtZW50
cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihwb3NzaWJsZVR5cGUpKTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24g
PSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocG9zc2libGVUeXBlKTsKKyAg
ICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0gdHlw
ZUFyZ3VtZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qIHR5cGVBcmd1bWVudEV4
cHJlc3Npb24gPSBudWxscHRyOworICAgICAgICBBU1Q6OlR5cGVSZWZlcmVuY2UqIHR5cGVBcmd1
bWVudFR5cGVSZWZlcmVuY2UgPSBudWxscHRyOworICAgICAgICBBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbiogbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFT
VDo6VHlwZVJlZmVyZW5jZSogbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxw
dHI7CisKKyAgICAgICAgYXV0byBhc3NpZ24gPSBbJl0oQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVB
cmd1bWVudCwgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qJiBleHByZXNzaW9uLCBBU1Q6OlR5cGVS
ZWZlcmVuY2UqJiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Np
b24pIHsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gJmNvbnN0YW50RXhwcmVzc2lvbjsK
KyAgICAgICAgICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdGhlVHlw
ZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIHR5cGVSZWZlcmVuY2UgPSAmc3RhdGljX2Nh
c3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4odGhlVHlwZVJlZmVyZW5jZSk7CisgICAgICAgICAgICB9
KSwgdHlwZUFyZ3VtZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBhc3NpZ24odHlwZUFyZ3Vt
ZW50c1tpXSwgdHlwZUFyZ3VtZW50RXhwcmVzc2lvbiwgdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5j
ZSk7CisgICAgICAgIGFzc2lnbihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
W2ldLCBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uLCBuYXRpdmVUeXBlQXJndW1lbnRUeXBl
UmVmZXJlbmNlKTsKKworICAgICAgICBpZiAodHlwZUFyZ3VtZW50RXhwcmVzc2lvbiAmJiBuYXRp
dmVUeXBlQXJndW1lbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVBcmd1bWVu
dEV4cHJlc3Npb24tPm1hdGNoZXMoKm5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlQXJndW1l
bnRUeXBlUmVmZXJlbmNlICYmIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpIHsKKyAg
ICAgICAgICAgIGlmICghbWF0Y2hlcygqdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSwgKm5hdGl2
ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIGluZmVy
VHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgcG9zc2libGVGdW5jdGlvbiwg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5
cGVzLCBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mIGNh
c3RSZXR1cm5UeXBlKQoreworICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgIT0gYXJndW1lbnRUeXBlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4g
Ym9vbCB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5jdGlvbi5wYXJh
bWV0ZXJzKClbaV0udHlwZSgpLCBzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1l
ZFR5cGUpKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJl
c29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiByZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKCpwb3NzaWJs
ZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpOworICAgICAgICB9KSwgYXJndW1lbnRU
eXBlc1tpXS5nZXQoKSk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKGNhc3RSZXR1cm5UeXBlICYmICFtYXRjaGVzKGNhc3RS
ZXR1cm5UeXBlLT5nZXQoKSwgcG9zc2libGVGdW5jdGlvbi50eXBlKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBl
cy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGZkNGI1NGU5NjI0NjdmNzlkMDRhMjgyMDVmOGViZjY4N2ViZTY1NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW5mZXJUeXBlcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29sdmluZ1R5cGUu
aCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNU
IHsKKworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNz
IFJlc29sdmFibGVUeXBlOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30KKworYm9vbCBtYXRjaGVz
KGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlJik7Citib29s
IG1hdGNoZXMoY29uc3QgQVNUOjpOYW1lZFR5cGUmLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYpOwor
Ym9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6Ok5hbWVkVHlw
ZSYpOworLy8gRklYTUU6IElzIGFueW9uZSBhY3R1YWxseSB1c2luZyB0aGUgcmV0dXJuIHR5cGUg
aGVyZT8KK09wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21t
aXQoQVNUOjpVbm5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK09wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUm
LCBBU1Q6OlJlc29sdmFibGVUeXBlJik7CitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29sdmFi
bGVUeXBlJik7CitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChB
U1Q6OlJlc29sdmFibGVUeXBlJik7Citib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFT
VDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOworYm9vbCBp
bmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rp
b24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1l
bnRUeXBlcywgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+
JiBjYXN0UmV0dXJuVHlwZSk7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2EzMTMwNjgxODFmNDVhYTdkZWNkYjE2Mzk5NWJiMDM4NGMzYzBkMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworTmFtZUNvbnRleHQ6
Ok5hbWVDb250ZXh0KE5hbWVDb250ZXh0KiBwYXJlbnQpCisgICAgOiBtX3BhcmVudChwYXJlbnQp
Cit7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBl
RGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHR5cGVE
ZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodHlwZURlZmluaXRp
b24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlz
dHMoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoZW51bWVy
YXRpb25EZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRv
IHJlc3VsdCA9IG1fdHlwZXMuYWRkKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxl
cy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQo
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5maW5kKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1f
dmFyaWFibGVzLmZpbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFy
aWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBt
X2Z1bmN0aW9ucy5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOwor
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAo
bV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0
aW9ucy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGV4aXN0
cyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fdmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFibGVEZWNsYXJhdGlv
bi5uYW1lKCkpLCAmdmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdC5pc05l
d0VudHJ5OworfQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4sIDE+KiBOYW1lQ29udGV4dDo6Z2V0VHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09
IG1fdHlwZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuIG1fcGFyZW50LT5nZXRUeXBlcyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworfQorCitWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogTmFtZUNvbnRleHQ6
OmdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9
IG1fZnVuY3Rpb25zLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rpb25z
LmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3Bh
cmVudC0+Z2V0RnVuY3Rpb25zKG5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKK0FTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0
b3IgPT0gbV92YXJpYWJsZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAg
ICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRWYXJpYWJsZShuYW1lKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKK2Jvb2wg
TmFtZUNvbnRleHQ6OmV4aXN0cyhTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1fdHlwZXMu
ZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fZnVuY3Rpb25zLmZpbmQo
bmFtZSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChu
YW1lKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmEwNDg3OGFlN2U5ZjFkODNlNWQ1OTJjMmZkNzUyYmVkYzkwZmE5Y2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTE5hbWVDb250ZXh0LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNzIEZ1
bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBUeXBlRGVmaW5pdGlvbjsKK2NsYXNzIFN0cnVjdHVy
ZURlZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247CitjbGFzcyBGdW5jdGlv
bkRlZmluaXRpb247CitjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmF0
aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbjsKKworfQorCitj
bGFzcyBOYW1lQ29udGV4dCB7CitwdWJsaWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQq
IHBhcmVudCA9IG51bGxwdHIpOworCisgICAgYm9vbCBhZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYp
OworICAgIGJvb2wgYWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRk
KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mKTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJv
b2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOworCisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5n
Jik7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsKKyAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgor
ICAgIGJvb2wgZXhpc3RzKFN0cmluZyYpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+PiBtX2Z1bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKj4gbV92YXJpYWJsZXM7CisgICAgTmFtZUNvbnRleHQqIG1f
cGFyZW50OworfTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZiZjE4ZTY5YWZjNWM4ZmU1MGQ3NDVlNTRkOTYyNmRkYzBkNTBlMGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNv
bHZlci5jcHAKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1do
aWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNp
bmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisj
aW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TFJlc29sdmVPdmVybG9hZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFJldHVybi5oIgorI2luY2x1
ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJh
dGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJX
SExTTFdoaWxlTG9vcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK05hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4
dCkKKyAgICA6IG1fbmFtZUNvbnRleHQobmFtZUNvbnRleHQpCit7Cit9CisKK3ZvaWQgTmFtZVJl
c29sdmVyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgIGlmICh0eXBlUmVmZXJlbmNl
LnJlc29sdmVkVHlwZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBjYW5kaWRhdGVz
ID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5hbWUoKSk7CisgICAgaWYg
KGNhbmRpZGF0ZXMgPT0gbnVsbHB0cikgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJ
bXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgICAg
IHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRUeXBlKCpyZXN1bHQpOworICAgIGVsc2UgeworICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIE5hbWVS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlv
bikKK3sKKyAgICBOYW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7Cisg
ICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0
byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAg
ICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAg
IGF1dG8gc3VjY2VzcyA9IG5ld05hbWVDb250ZXh0LmFkZChwYXJhbWV0ZXIpOworICAgICAgICBp
ZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4
dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vy
cm9yQW5kVmlzaXQoYmxvY2spOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJ
ZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3Rh
dGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25h
bWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRW
aXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgp
KSB7CisgICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAg
ICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpTdGF0ZW1lbnQmPigqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkpOworICAgIH0K
K30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3Ap
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAg
ICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29s
dmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9
CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiB3aGlsZUxvb3Ap
Cit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5h
bWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5
KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Cit9
CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCit7Cisg
ICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNv
bHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3ApOworfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURl
Y2xhcmF0aW9uKQoreworICAgIG1fbmFtZUNvbnRleHQuYWRkKHZhcmlhYmxlRGVjbGFyYXRpb24p
OworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKK30KKwordm9p
ZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVm
ZXJlbmNlKQoreworICAgIGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoYXV0byogdmFyaWFibGUgPSBtX25hbWVDb250ZXh0LmdldFZh
cmlhYmxlKHZhcmlhYmxlUmVmZXJlbmNlLm5hbWUoKSkpCisgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLnNldFZhcmlhYmxlKCp2YXJpYWJsZSk7CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRG
dW5jdGlvbik7CisgICAgcmV0dXJuU3RhdGVtZW50LnNldEZ1bmN0aW9uKG1fY3VycmVudEZ1bmN0
aW9uKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmV0dXJuU3RhdGVtZW50KTsKK30KKwordm9p
ZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7CisgICAgaWYgKGF1dG8qIGdldEZ1bmN0aW9ucyA9IG1f
bmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5nZXRGdW5j
dGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJs
ZUdldE92ZXJsb2FkcygqZ2V0RnVuY3Rpb25zKTsKKyAgICBpZiAoYXV0byogc2V0RnVuY3Rpb25z
ID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNl
dEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBv
c3NpYmxlU2V0T3ZlcmxvYWRzKCpzZXRGdW5jdGlvbnMpOworICAgIGlmIChhdXRvKiBhbmRGdW5j
dGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uYW5kRnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
c2V0UG9zc2libGVBbmRPdmVybG9hZHMoKmFuZEZ1bmN0aW9ucyk7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgaWYgKGlz
PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24uYmFzZSgpKSkgeworICAgICAg
ICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhkb3du
Y2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkubmFtZSgp
KSkgeworICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsK
KyAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVsw
XTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkp
IHsKKyAgICAgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRp
b25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUp
OworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVtZXJhdGlvbkRlZmluaXRp
b24ubWVtYmVyQnlOYW1lKGRvdEV4cHJlc3Npb24uZmllbGROYW1lKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVk
IHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1
cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgICAgICAgICBMZXhlcjo6VG9r
ZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRoIHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5z
dGVhZC4KKyAgICAgICAgICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigp
OworICAgICAgICAgICAgICAgICAgICBuZXcgKCZkb3RFeHByZXNzaW9uKSBBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbChXVEZNb3ZlKG9yaWdpbiksICptZW1iZXIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2
b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Np
b24pCit7CisgICAgaWYgKCFjYWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAg
ICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoY2FsbEV4
cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2Fk
cygqZnVuY3Rpb25zKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byogdHlw
ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodHlwZXMtPnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhTdHJp
bmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldENhc3REYXRhKCgqdHlwZXMp
WzBdLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92
ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWNhbGxFeHBy
ZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNhbGxFeHByZXNzaW9uKTsKK30K
Kwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlKQoreworICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250
ZXh0LmdldFR5cGVzKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
LmxlZnQoKSkpIHsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAx
KTsKKyAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBd
OworICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpKSB7Cisg
ICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0
aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpOworICAgICAg
ICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5h
bWUoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UucmlnaHQoKSkp
IHsKKyAgICAgICAgICAgICAgICBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZS5zZXRFbnVtZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlvbkRlZmluaXRpb24sICptZW1i
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBzZXRFcnJvcigpOworfQorCisvLyBGSVhNRTogTWFrZSBzdXJlIGFs
bCB0aGUgbmFtZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorCitib29sIHJlc29sdmVOYW1lc0luVHlw
ZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAg
Zm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpIHsK
KyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6
OlR5cGVEZWZpbml0aW9uJj4odHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgaWYgKG5hbWVSZXNv
bHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3Ig
KGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25z
KCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2Fz
dDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mPihzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAg
ICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVu
dW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJv
ckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJj4oZW51bWVy
YXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkgeworICAgICAg
ICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJj4obmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgIGlmIChu
YW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3Jh
bSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChhdXRv
JiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewor
ICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbigmc3RhdGlj
X2Nhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mPihmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAg
ICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBpZiAobmFt
ZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IG5hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG51bGxwdHIpOworICAg
IGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcyZTA4ZTA2MjEwNjdkYmUx
OTBjYTA0MDY4YTllOWE3MGJmZGNmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFt
OworCitjbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAg
TmFtZVJlc29sdmVyKE5hbWVDb250ZXh0Jik7CisKKyAgICB2aXJ0dWFsIH5OYW1lUmVzb2x2ZXIo
KSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIG1f
Y3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpCbG9jayYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRl
bWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6Rm9yTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlz
aXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIG92
ZXJyaWRlOworCisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKKyAgICBBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07Cit9OworCitib29s
IHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYpOworYm9vbCByZXNv
bHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7CisKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcm9ncmFtLmgKaW5kZXggYTY5ZTg0M2MxMGZkN2NjYTMxOTU1Mzc1MDIyN2FhYmVjY2ZkYTc5
Yi4uMGRjZjNmNWI4OTMzZWI0ZWRhYTczYTFhNWYxYTgyNDA1N2U4YTc5OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAj
aW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVD
b250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAj
aW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFN0
cnVjdHVyZURlZmluaXRpb24uaCIKQEAgLTQ3LDM5ICs0OCw0MCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsKICAg
ICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlRGVm
aW5pdGlvbj4oV1RGTW92ZSh0eXBlRGVmaW5pdGlvbikpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxBU1Q6OlR5cGVE
ZWZpbml0aW9uJj4obV90eXBlRGVmaW5pdGlvbnMubGFzdCgpKSk7CiAgICAgfQogCiAgICAgYm9v
bCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikK
ICAgICB7CiAgICAgICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVS
ZWY8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRpb24p
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5h
ZGQoc3RhdGljX2Nhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJj4obV9zdHJ1Y3R1cmVEZWZp
bml0aW9ucy5sYXN0KCkpKTsKICAgICB9CiAKICAgICBib29sIGFwcGVuZChBU1Q6OkVudW1lcmF0
aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1f
ZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OkVudW1lcmF0
aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24pKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGljX2Nh
c3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMu
bGFzdCgpKSk7CiAgICAgfQogCiAgICAgYm9vbCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mJiBmdW5jdGlvbkRlZmluaXRpb24pCiAgICAgewogICAgICAgICBtX2Z1bmN0aW9uRGVmaW5p
dGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KFdURk1v
dmUoZnVuY3Rpb25EZWZpbml0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJj4obV9mdW5jdGlvbkRlZmluaXRpb25zLmxhc3QoKSkpOwogICAgIH0KIAogICAgIGJvb2wg
YXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pCiAgICAgewogICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmFw
cGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oV1RGTW92
ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiY+KG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKSk7
CiAgICAgfQogCiAgICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJh
dGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KFdU
Rk1vdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJj4obV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSkpOwogICAgIH0K
IAorICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCgpIHsgcmV0dXJuIG1fbmFtZUNvbnRleHQ7
IH0KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6VHlwZURlZmluaXRpb24+PiYgdHlwZURlZmlu
aXRpb25zKCkgeyByZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KICAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsg
cmV0dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7IH0KICAgICBWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJl
dHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7IH0KQEAgLTkwLDYgKzkyLDcgQEAgcHVibGlj
OgogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+PiYgbmF0
aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsg
fQogCiBwcml2YXRlOgorICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CiAgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90eXBlRGVmaW5pdGlvbnM7CiAgICAg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiBtX3N0cnVjdHVyZURl
ZmluaXRpb25zOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24+PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYTE4MzNkOGQ5YWNhNGFlM2NhMGU5Y2Q3MDI4M2NmMzljMjQ0MzZh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZElt
cGwuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVj
bGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgdW5zaWduZWQgY29udmVyc2lv
bkNvc3QoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUsIGNvbnN0IFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcykKK3sK
KyAgICB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjYW5kaWRhdGUucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnZl
cnNpb25Db3N0ICs9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JikgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZSkgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVU
eXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5kaWRhdGUu
cGFyYW1ldGVycygpW2ldLnR5cGUoKSk7CisgICAgICAgIH0pLCBhcmd1bWVudFR5cGVzW2ldLmdl
dCgpKTsKKyAgICB9CisgICAgLy8gVGhlIHJldHVybiB0eXBlIGNhbiBuZXZlciBiZSBhIGxpdGVy
YWwgdHlwZSwgc28gaXRzIGNvbnZlcnNpb24gY29zdCBpcyBhbHdheXMgMC4KKyAgICByZXR1cm4g
Y29udmVyc2lvbkNvc3Q7Cit9CisKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1
bmN0aW9uT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBPcHRpb25hbDxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mIGNhc3RSZXR1cm5UeXBlKQor
eworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+IGNhbmRpZGF0ZXM7CisgICAgZm9yIChhdXRvJiBwb3NzaWJsZUZ1bmN0aW9uIDog
cG9zc2libGVGdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCku
ZW50cnlQb2ludFR5cGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoaW5m
ZXJUeXBlc0ZvckNhbGwocG9zc2libGVGdW5jdGlvbi5nZXQoKSwgYXJndW1lbnRUeXBlcywgY2Fz
dFJldHVyblR5cGUpKQorICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQocG9zc2libGVGdW5j
dGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgbWluaW11bUNvbnZlcnNpb25Db3N0
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIGZvciAoYXV0byYg
Y2FuZGlkYXRlIDogY2FuZGlkYXRlcykKKyAgICAgICAgbWluaW11bUNvbnZlcnNpb25Db3N0ID0g
c3RkOjptaW4obWluaW11bUNvbnZlcnNpb25Db3N0LCBjb252ZXJzaW9uQ29zdChjYW5kaWRhdGUu
Z2V0KCksIGFyZ3VtZW50VHlwZXMpKTsKKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1pbmltdW1Db3N0Q2FuZGlkYXRlczsK
KyAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgaWYgKGNv
bnZlcnNpb25Db3N0KGNhbmRpZGF0ZS5nZXQoKSwgYXJndW1lbnRUeXBlcykgPT0gbWluaW11bUNv
bnZlcnNpb25Db3N0KQorICAgICAgICAgICAgbWluaW11bUNvc3RDYW5kaWRhdGVzLmFwcGVuZChj
YW5kaWRhdGUpOworICAgIH0KKworICAgIGJvb2wgcmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cyA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbWluaW11bUNvc3RDYW5kaWRhdGVz
KSB7CisgICAgICAgIGlmIChpczxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oY2FuZGlkYXRlLmdl
dCgpKSAmJiBkb3duY2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oY2FuZGlkYXRlLmdldCgp
KS5yZXN0cmljdGVkKCkpIHsKKyAgICAgICAgICAgIHJlc3RyaWN0ZWRDYW5kaWRhdGVFeGlzdHMg
PSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYW5k
aWRhdGVzLmNsZWFyKCk7CisgICAgaWYgKHJlc3RyaWN0ZWRDYW5kaWRhdGVFeGlzdHMpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBtaW5pbXVtQ29zdENhbmRpZGF0ZXMpIHsKKyAg
ICAgICAgICAgIGlmIChpczxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oY2FuZGlkYXRlLmdldCgp
KSAmJiBkb3duY2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oY2FuZGlkYXRlLmdldCgpKS5y
ZXN0cmljdGVkKCkpCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoY2FuZGlkYXRl
LmdldCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBjYW5kaWRhdGVzID0gbWlu
aW11bUNvc3RDYW5kaWRhdGVzOworCisgICAgaWYgKGNhbmRpZGF0ZXMuc2l6ZSgpID09IDEpCisg
ICAgICAgIHJldHVybiAmY2FuZGlkYXRlc1swXS5nZXQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mIHBvc3NpYmxlVHlwZXMsIEFT
VDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAgICBBU1Q6Ok5hbWVkVHlwZSog
cmVzdWx0ID0gbnVsbHB0cjsKKyAgICBmb3IgKGF1dG8mIHBvc3NpYmxlVHlwZSA6IHBvc3NpYmxl
VHlwZXMpIHsKKyAgICAgICAgaWYgKGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKHBvc3NpYmxl
VHlwZSwgdHlwZUFyZ3VtZW50cykpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXN1bHQgPSAmc3RhdGljX2Nh
c3Q8QVNUOjpOYW1lZFR5cGUmPihwb3NzaWJsZVR5cGUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVy
bG9hZEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDkzNDZmZjg3NzZjZTkzMTRmZjEwNjY2YjgzY2JmZjU4
NTZjODAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMUmVzb2x2aW5nVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5j
bHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYW1lZFR5cGU7CisKK30KKworQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxl
RnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4m
IGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpOworQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3Zl
cmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwg
MT4mLCBBU1Q6OlR5cGVBcmd1bWVudHMmKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5
cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45N2MwZWJhZTgxZjgyYzQwZWZjYzllZjUzZjZmMTYzOTc5YzgyY2Iw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZpbmdUeXBlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNs
dWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3Mg
UmVzb2x2YWJsZVR5cGU7CitjbGFzcyBVbm5hbWVkVHlwZTsKKworfQorCitjbGFzcyBSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiB7CitwdWJsaWM6CisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoQVNUOjpSZXNvbHZh
YmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCisgICAgICAgIDogbV9yZXNvbHZhYmxlVHlwZSgmcmVz
b2x2YWJsZVR5cGUpCisgICAgeworICAgIH0KKworICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KGNvbnN0IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CisgICAgUmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2UoUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmJikgPSBkZWxldGU7CisKKyAg
ICBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSgpIHsgcmV0dXJuICptX3Jlc29s
dmFibGVUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgQVNUOjpSZXNvbHZhYmxlVHlwZSogbV9yZXNv
bHZhYmxlVHlwZTsKK307CisKK3VzaW5nIFJlc29sdmluZ1R5cGUgPSBWYXJpYW50PFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiwgUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj47CisKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMVmlzaXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xWaXNpdG9yLmgKaW5kZXggNWVhYjM0Yzg2NWYxYzg2OTA5ZTUxOGUyMzk0MjJiYzg2
MTBmYTQ2MC4uYTZhZTI5M2E5YjgzNmQxNWFhMTY3YjdkNDA5ZmIyYTZlNjQ1YjQzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgK
QEAgLTE3OCwxMyArMTc4LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZXJyb3IoKSBjb25zdCB7
IHJldHVybiBtX2Vycm9yOyB9CiAKLXByb3RlY3RlZDoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChUJiB4KQogICAgIHsKICAgICAgICAgaWYgKCFtX2Vy
cm9yKQogICAgICAgICAgICAgdmlzaXQoeCk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBzZXRFcnJvcigpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fZXJyb3IpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAppbmRleCAyOWY0ZDFkNmY2NjIxZWZhYmRkYWUyODg1MzcwZGRjZTEwODBkYTg4Li4wNmYzMmQx
OWQ4MmI3OTUzNWU2ZDUyM2EzM2ZjNGE3NmI4NGYzMjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMzA2
LDggKzMwNiwxMiBAQCBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAog
TW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAog
CiBNb2R1bGVzL3dlYmdwdS9ET01XaW5kb3dXZWJHUFUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEluZmVyVHlwZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNw
cAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVDb250ZXh0LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZElt
cGwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjM4YTNkYzMyZTQ3ZmMzZmZiM2Zl
NzA2ZTYzOTc3MGFhMmUxOTM3MS4uN2E5ZTFkZjYzYmE3OGQ3MzE1ZmRjZGIyOTY5ZGFlOTY0Mzgy
OTM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTMzMjMsNiArMTMzMjMsMTUgQEAKIAkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3
OTc5IC8qIFdITFNMUHJvZ3JhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFByb2dyYW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3NDIyMUNEOTYzQjAwMjI3OTc5IC8qIFdI
TFNMU3RhbmRhcmRMaWJyYXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdITFNMU3RhbmRhcmRMaWJyYXJ5
Lmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1dITFNMU3RhbmRhcmRMaWJyYXJ5Lmg7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyMUJGNzQ1MjFDRDk2OTgw
MDIyNzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV0hMU0xTdGFuZGFyZExp
YnJhcnkudHh0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk4QTIxRTg4ODNF
MDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hM
U0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk4
QzIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xOYW1lUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5
OEQyMUU4ODg4NDAwM0M5ODREIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0hMU0xOYW1lQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMzRBOThFMjFFODg4ODUwMDNDOTg0RCAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMTmFtZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIzNEE5OTcyMUU5MEYyODAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzIzNEE5OTkyMUU5MEYyOTAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFJlc29sdmVPdmVybG9hZElt
cGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk5QTIxRTkwRjU2MDAz
Qzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW5m
ZXJUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOTlCMjFFOTBG
NTcwMDNDOTg0RCAvKiBXSExTTEluZmVyVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbmZl
clR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzRBOTlEMjFFOTEwQkQw
MDNDOTg0RCAvKiBXSExTTFJlc29sdmluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZXNv
bHZpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMURGMkU3MUQ5RTRF
OTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udFZhcmlhdGlvblZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxREYyRTgxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRW
YXJpYXRpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250
VmFyaWF0aW9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIzNEE5ODUy
MUU4ODZBOTAwM0M5ODREIC8qIFdITFNMVmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
SExTTFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzOTAsMTEg
KzI1Mzk5LDIwIEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUMy
MUJGNkYxMjFDRDg5OEQwMDIyNzk3OSAvKiBBU1QgKi8sCisJCQkJQzIzNEE5OUEyMUU5MEY1NjAw
M0M5ODREIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCisJCQkJQzIzNEE5OUIyMUU5MEY1NzAw
M0M5ODREIC8qIFdITFNMSW5mZXJUeXBlcy5oICovLAogCQkJCUMyMTBFOTExMjFCNEJEMTAwMEI3
RjgzRCAvKiBXSExTTExleGVyLmNwcCAqLywKIAkJCQlDMjEwRTkxMjIxQjRCRDEwMDBCN0Y4M0Qg
LyogV0hMU0xMZXhlci5oICovLAorCQkJCUMyMzRBOThEMjFFODg4ODQwMDNDOTg0RCAvKiBXSExT
TE5hbWVDb250ZXh0LmNwcCAqLywKKwkJCQlDMjM0QTk4RTIxRTg4ODg1MDAzQzk4NEQgLyogV0hM
U0xOYW1lQ29udGV4dC5oICovLAorCQkJCUMyMzRBOThBMjFFODg4M0UwMDNDOTg0RCAvKiBXSExT
TE5hbWVSZXNvbHZlci5jcHAgKi8sCisJCQkJQzIzNEE5OEMyMUU4ODgzRTAwM0M5ODREIC8qIFdI
TFNMTmFtZVJlc29sdmVyLmggKi8sCiAJCQkJQzIxQkY3MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdI
TFNMUGFyc2VyLmNwcCAqLywKIAkJCQlDMjFCRjczODIxQ0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQ
YXJzZXIuaCAqLywKIAkJCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFt
LmggKi8sCisJCQkJQzIzNEE5OTkyMUU5MEYyOTAwM0M5ODREIC8qIFdITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5jcHAgKi8sCisJCQkJQzIzNEE5OTcyMUU5MEYyODAwM0M5ODREIC8qIFdITFNMUmVz
b2x2ZU92ZXJsb2FkSW1wbC5oICovLAorCQkJCUMyMzRBOTlEMjFFOTEwQkQwMDNDOTg0RCAvKiBX
SExTTFJlc29sdmluZ1R5cGUuaCAqLywKIAkJCQlDMjFCRjc0NTIxQ0Q5Njk4MDAyMjc5NzkgLyog
V0hMU0xTdGFuZGFyZExpYnJhcnkudHh0ICovLAogCQkJCUMyMzRBOTg1MjFFODg2QTkwMDNDOTg0
RCAvKiBXSExTTFZpc2l0b3IuY3BwICovLAogCQkJCUMyMzRBOTg3MjFFODg2QUQwMDNDOTg0RCAv
KiBXSExTTFZpc2l0b3IuaCAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>