<?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>204503</bug_id>
          
          <creation_ts>2019-11-22 03:34:51 -0800</creation_ts>
          <short_desc>[GTK][WPE] RemoteInspector: use sockets instead of DBus</short_desc>
          <delta_ts>2019-11-27 00:41:00 -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>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>basuke</cc>
    
    <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1592717</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-22 03:34:51 -0800</bug_when>
    <thetext>It turns out DBus is event slower than expected. Using GSockets API we can simplify the code and make it a lot more efficient. This will drastically reduce the time to run WebDriver tests in the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592720</commentid>
    <comment_count>1</comment_count>
      <attachid>384141</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-22 03:42:35 -0800</bug_when>
    <thetext>Created attachment 384141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592753</commentid>
    <comment_count>2</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2019-11-22 05:45:31 -0800</bug_when>
    <thetext>Will it be protocol-compatible with generic implementation in inspector/remote/socket?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592758</commentid>
    <comment_count>3</comment_count>
      <attachid>384141</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-11-22 06:06:03 -0800</bug_when>
    <thetext>Comment on attachment 384141
Patch

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

&gt; Source/WTF/wtf/glib/SocketConnection.cpp:125
&gt; +        memmove(m_readBuffer.data(), m_readBuffer.data() + messageSize, m_readBuffer.size() - messageSize);

This could be std::memmove().

&gt; Source/WTF/wtf/glib/SocketConnection.cpp:175
&gt; +        memmove(m_writeBuffer.data(), m_writeBuffer.data() + bytesWritten, m_writeBuffer.size() - bytesWritten);

And this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592762</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-22 06:16:15 -0800</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #2)
&gt; Will it be protocol-compatible with generic implementation in
&gt; inspector/remote/socket?

No, the message format is different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592766</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-22 06:22:47 -0800</bug_when>
    <thetext>Committed r252770: &lt;https://trac.webkit.org/changeset/252770&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593728</commentid>
    <comment_count>6</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-11-26 11:33:50 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; (In reply to Konstantin Tokarev from comment #2)
&gt; &gt; Will it be protocol-compatible with generic implementation in
&gt; &gt; inspector/remote/socket?
&gt; 
&gt; No, the message format is different.

How can we address this? It&apos;s really wasteful and unfortunate to have GTK/WPE move from DBus to sockets only to use a different implementation from the one that&apos;s meant for generic use. Basuke has had the socket-based inspector working downstream on GTK port for a long time, it just was higher-priority for us to get the WinCairo / PlayStation parts upstreamed first. Hopefully we can work together to realize a common solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593806</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-11-27 00:41:00 -0800</bug_when>
    <thetext>We want to keep using GVariant for the message parameters, it&apos;s a lot more convenient when sending complex data, and probably more efficient too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384141</attachid>
            <date>2019-11-22 03:42:35 -0800</date>
            <delta_ts>2019-11-22 06:04:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-inspector-sockets.diff</filename>
            <type>text/plain</type>
            <size>111358</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGQ5ZDJiOGY4ZTA4Li41Yzc1MWEyODRlNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTktMTEtMjIgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQ
RV0gUmVtb3RlSW5zcGVjdG9yOiB1c2Ugc29ja2V0cyBpbnN0ZWFkIG9mIERCdXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDUwMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IHR1cm5zIG91dCBEQnVz
IGlzIGV2ZW50IHNsb3dlciB0aGFuIGV4cGVjdGVkLiBVc2luZyBHU29ja2V0cyBBUEkgd2UgY2Fu
IHNpbXBsaWZ5IHRoZSBjb2RlIGFuZCBtYWtlIGl0IGEgbG90CisgICAgICAgIG1vcmUgZWZmaWNp
ZW50LiBUaGlzIHdpbGwgZHJhc3RpY2FsbHkgcmVkdWNlIHRoZSB0aW1lIHRvIHJ1biBXZWJEcml2
ZXIgdGVzdHMgaW4gdGhlIGJvdHMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3Rvci5oOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNw
ZWN0b3JHbGliLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzdGFy
dCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3RvcEludGVybmFsKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzZXR1cENvbm5lY3Rpb24pOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnB1c2hMaXN0aW5nc05vdyk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdzU29vbik6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2VuZEF1dG9tYXRpY0luc3BlY3Rp
b25DYW5kaWRhdGVNZXNzYWdlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9y
OjpzZW5kTWVzc2FnZVRvUmVtb3RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL2dsaWIv
UmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yU2VydmVyOjp+UmVtb3RlSW5zcGVjdG9yU2VydmVyKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzdGFydCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3RvclNlcnZlcjo6aW5jb21pbmdDb25uZWN0aW9uQ2FsbGJhY2spOgorICAgICAg
ICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmluY29taW5nQ29ubmVjdGlvbik6
CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0VGFyZ2V0TGlz
dCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXBJbnNw
ZWN0b3JDbGllbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6
OnNldHVwKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpjbG9z
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6Y29ubmVjdGlv
bkRpZENsb3NlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpz
ZW5kTWVzc2FnZVRvQmFja2VuZCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rv
clNlcnZlcjo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVt
b3RlSW5zcGVjdG9yU2VydmVyOjpzdGFydEF1dG9tYXRpb25TZXNzaW9uKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmg6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6aXNSdW5uaW5nIGNvbnN0KToKKwogMjAx
OS0xMS0xOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4gYW5kIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBCaWdJbnQgc2hvdWxkIHN0
b3JlIGl0cyBkYXRhIGluIHRoZSBwcmltaXRpdmUgZ2lnYWNhZ2UuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oCmlu
ZGV4IGJjNDliN2VmZDkxLi42M2UxODlmNzMwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgKQEAgLTQ3LDEw
ICs0Nyw5IEBAIHR5cGVkZWYgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gVGFyZ2V0TGlzdGluZzsK
IAogI2lmIFVTRShHTElCKQogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvZ2xpYi9Tb2NrZXRDb25uZWN0aW9uLmg+CiB0eXBlZGVmIEdSZWZQdHI8R1ZhcmlhbnQ+
IFRhcmdldExpc3Rpbmc7CiB0eXBlZGVmIHN0cnVjdCBfR0NhbmNlbGxhYmxlIEdDYW5jZWxsYWJs
ZTsKLXR5cGVkZWYgc3RydWN0IF9HREJ1c0Nvbm5lY3Rpb24gR0RCdXNDb25uZWN0aW9uOwotdHlw
ZWRlZiBzdHJ1Y3QgX0dEQnVzSW50ZXJmYWNlVlRhYmxlIEdEQnVzSW50ZXJmYWNlVlRhYmxlOwog
I2VuZGlmCiAKICNpZiBVU0UoSU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIpCkBAIC0xNzgsOCArMTc3
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldHVwWFBDQ29ubmVjdGlvbklmTmVlZGVkKCk7CiAj
ZW5kaWYKICNpZiBVU0UoR0xJQikKLSAgICB2b2lkIHNldHVwQ29ubmVjdGlvbihHUmVmUHRyPEdE
QnVzQ29ubmVjdGlvbj4mJik7Ci0gICAgc3RhdGljIGNvbnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxl
IHNfaW50ZXJmYWNlVlRhYmxlOworICAgIHZvaWQgc2V0dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRD
b25uZWN0aW9uPiYmKTsKKyAgICBzdGF0aWMgY29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2Fn
ZUhhbmRsZXJzIHNfbWVzc2FnZUhhbmRsZXJzOwogCiAgICAgdm9pZCByZWNlaXZlZEdldFRhcmdl
dExpc3RNZXNzYWdlKCk7CiAgICAgdm9pZCByZWNlaXZlZFNldHVwTWVzc2FnZShUYXJnZXRJRCk7
CkBAIC0yNTIsNyArMjUxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UmVtb3RlSW5zcGVjdG9y
WFBDQ29ubmVjdGlvbj4gbV9yZWxheUNvbm5lY3Rpb247CiAjZW5kaWYKICNpZiBVU0UoR0xJQikK
LSAgICBHUmVmUHRyPEdEQnVzQ29ubmVjdGlvbj4gbV9kYnVzQ29ubmVjdGlvbjsKKyAgICBSZWZQ
dHI8U29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwogICAgIEdSZWZQdHI8R0Nh
bmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVtb3RlSW5zcGVjdG9yR2xpYi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUlu
c3BlY3RvckdsaWIuY3BwCmluZGV4IGViYmFmNzExMDA2Li5kNDMzNmVhY2MyMCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNw
ZWN0b3JHbGliLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9nbGliL1JlbW90ZUluc3BlY3RvckdsaWIuY3BwCkBAIC0zNiwxMSArMzYsNiBAQAogI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgogCi0j
ZGVmaW5lIFJFTU9URV9JTlNQRUNUT1JfREJVU19JTlRFUkZBQ0UgIm9yZy53ZWJraXQuUmVtb3Rl
SW5zcGVjdG9yIgotI2RlZmluZSBSRU1PVEVfSU5TUEVDVE9SX0RCVVNfT0JKRUNUX1BBVEggIi9v
cmcvd2Via2l0L1JlbW90ZUluc3BlY3RvciIKLSNkZWZpbmUgSU5TUEVDVE9SX0RCVVNfSU5URVJG
QUNFICJvcmcud2Via2l0Lkluc3BlY3RvciIKLSNkZWZpbmUgSU5TUEVDVE9SX0RCVVNfT0JKRUNU
X1BBVEggIi9vcmcvd2Via2l0L0luc3BlY3RvciIKLQogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
IFJlbW90ZUluc3BlY3RvciYgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKQpAQCAtNjUsMjIg
KzYwLDE2IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzdGFydCgpCiAgICAgbV9lbmFibGVkID0g
dHJ1ZTsKICAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkp
OwogCi0gICAgR1VuaXF1ZVB0cjxjaGFyPiBpbnNwZWN0b3JBZGRyZXNzKGdfc3RyZHVwKGdfZ2V0
ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIpKSk7Ci0gICAgY2hhciogcG9ydFB0ciA9IGdf
c3RycnN0cihpbnNwZWN0b3JBZGRyZXNzLmdldCgpLCAiOiIpOwotICAgIEFTU0VSVChwb3J0UHRy
KTsKLSAgICAqcG9ydFB0ciA9ICdcMCc7Ci0gICAgcG9ydFB0cisrOwotICAgIHVuc2lnbmVkIHBv
cnQgPSBnX2FzY2lpX3N0cnRvdWxsKHBvcnRQdHIsIG51bGxwdHIsIDEwKTsKLSAgICBHVW5pcXVl
UHRyPGNoYXI+IGRidXNBZGRyZXNzKGdfc3RyZHVwX3ByaW50ZigidGNwOmhvc3Q9JXMscG9ydD0l
dSIsIGluc3BlY3RvckFkZHJlc3MuZ2V0KCksIHBvcnQpKTsKLSAgICBnX2RidXNfY29ubmVjdGlv
bl9uZXdfZm9yX2FkZHJlc3MoZGJ1c0FkZHJlc3MuZ2V0KCksIEdfREJVU19DT05ORUNUSU9OX0ZM
QUdTX0FVVEhFTlRJQ0FUSU9OX0NMSUVOVCwgbnVsbHB0ciwgbV9jYW5jZWxsYWJsZS5nZXQoKSwK
LSAgICAgICAgW10oR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRH
UmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7CisgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3Rf
dG9faG9zdF9hc3luYyhzb2NrZXRDbGllbnQuZ2V0KCksIGdfZ2V0ZW52KCJXRUJLSVRfSU5TUEVD
VE9SX1NFUlZFUiIpLCAwLCBtX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICBbXShHT2JqZWN0
KiBjbGllbnQsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewogICAg
ICAgICAgICAgUmVtb3RlSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSBzdGF0aWNfY2FzdDxSZW1vdGVJ
bnNwZWN0b3IqPih1c2VyRGF0YSk7CiAgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4g
ZXJyb3I7Ci0gICAgICAgICAgICBpZiAoR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+IGNvbm5lY3Rp
b24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5lY3Rpb25fbmV3X2Zvcl9hZGRyZXNzX2ZpbmlzaChy
ZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpKQotICAgICAgICAgICAgICAgIGluc3BlY3Rvci0+c2V0
dXBDb25uZWN0aW9uKFdURk1vdmUoY29ubmVjdGlvbikpOworICAgICAgICAgICAgaWYgKEdSZWZQ
dHI8R1NvY2tldENvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xp
ZW50X2Nvbm5lY3RfdG9faG9zdF9maW5pc2goR19TT0NLRVRfQ0xJRU5UKGNsaWVudCksIHJlc3Vs
dCwgJmVycm9yLm91dFB0cigpKSkpCisgICAgICAgICAgICAgICAgaW5zcGVjdG9yLT5zZXR1cENv
bm5lY3Rpb24oU29ja2V0Q29ubmVjdGlvbjo6Y3JlYXRlKFdURk1vdmUoY29ubmVjdGlvbiksIHNf
bWVzc2FnZUhhbmRsZXJzLCBpbnNwZWN0b3IpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKCFnX2Vy
cm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVE
KSkKICAgICAgICAgICAgICAgICBnX3dhcm5pbmcoIlJlbW90ZUluc3BlY3RvciBmYWlsZWQgdG8g
Y29ubmVjdCB0byBpbnNwZWN0b3Igc2VydmVyIGF0OiAlczogJXMiLCBnX2dldGVudigiV0VCS0lU
X0lOU1BFQ1RPUl9TRVJWRVIiKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAgIH0sIHRoaXMpOworICAg
ICAgICB9LCB0aGlzKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChT
dG9wU291cmNlKQpAQCAtMTAwLDg3ICs4OSw2MSBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c3Rv
cEludGVybmFsKFN0b3BTb3VyY2UpCiAgICAgdXBkYXRlSGFzQWN0aXZlRGVidWdTZXNzaW9uKCk7
CiAKICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVzZWQgPSBmYWxzZTsKLSAgICBtX2RidXND
b25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBudWxscHRyOwog
fQogCi1zdGF0aWMgY29uc3QgY2hhciBpbnRyb3NwZWN0aW9uWE1MW10gPQotICAgICI8bm9kZT4i
Ci0gICAgIiAgPGludGVyZmFjZSBuYW1lPSciIFJFTU9URV9JTlNQRUNUT1JfREJVU19JTlRFUkZB
Q0UgIic+IgotICAgICIgICAgPG1ldGhvZCBuYW1lPSdHZXRUYXJnZXRMaXN0Jz4iCi0gICAgIiAg
ICA8L21ldGhvZD4iCi0gICAgIiAgICA8bWV0aG9kIG5hbWU9J1NldHVwJz4iCi0gICAgIiAgICAg
IDxhcmcgdHlwZT0ndCcgbmFtZT0ndGFyZ2V0JyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICAg
PC9tZXRob2Q+IgotICAgICIgICAgPG1ldGhvZCBuYW1lPSdTZW5kTWVzc2FnZVRvVGFyZ2V0Jz4i
Ci0gICAgIiAgICAgIDxhcmcgdHlwZT0ndCcgbmFtZT0ndGFyZ2V0JyBkaXJlY3Rpb249J2luJy8+
IgotICAgICIgICAgICA8YXJnIHR5cGU9J3MnIG5hbWU9J21lc3NhZ2UnIGRpcmVjdGlvbj0naW4n
Lz4iCi0gICAgIiAgICA8L21ldGhvZD4iCi0gICAgIiAgICA8bWV0aG9kIG5hbWU9J0Zyb250ZW5k
RGlkQ2xvc2UnPiIKLSAgICAiICAgICAgPGFyZyB0eXBlPSd0JyBuYW1lPSd0YXJnZXQnIGRpcmVj
dGlvbj0naW4nLz4iCi0gICAgIiAgICA8L21ldGhvZD4iCi0gICAgIiAgPC9pbnRlcmZhY2U+Igot
ICAgICI8L25vZGU+IjsKLQotY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgUmVtb3RlSW5zcGVj
dG9yOjpzX2ludGVyZmFjZVZUYWJsZSA9IHsKLSAgICAvLyBtZXRob2RfY2FsbAotICAgIFtdIChH
REJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciogLypzZW5kZXIqLywgY29uc3QgZ2NoYXIqIC8q
b2JqZWN0UGF0aCovLCBjb25zdCBnY2hhciogLyppbnRlcmZhY2VOYW1lKi8sIGNvbnN0IGdjaGFy
KiBtZXRob2ROYW1lLCBHVmFyaWFudCogcGFyYW1ldGVycywgR0RCdXNNZXRob2RJbnZvY2F0aW9u
KiBpbnZvY2F0aW9uLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICBhdXRvKiBpbnNwZWN0
b3IgPSBzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3IqPih1c2VyRGF0YSk7Ci0gICAgICAgIGlm
ICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRUYXJnZXRMaXN0IikpIHsKLSAgICAgICAgICAg
IGluc3BlY3Rvci0+cmVjZWl2ZWRHZXRUYXJnZXRMaXN0TWVzc2FnZSgpOwotICAgICAgICAgICAg
Z19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBudWxscHRy
KTsKLSAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXR1cCIpKSB7
Citjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMgUmVtb3RlSW5zcGVjdG9y
OjpzX21lc3NhZ2VIYW5kbGVycyA9IHsKKyAgICB7ICJEaWRDbG9zZSIsIHN0ZDo6cGFpcjxDU3Ry
aW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgeyB9LAorICAgICAgICBb
XShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICAgICAgYXV0byYgaW5zcGVjdG9yID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3Rvcio+
KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGluc3BlY3Rvci5zdG9wKCk7CisgICAgICAgIH19Cisg
ICAgfSwKKyAgICB7ICJHZXRUYXJnZXRMaXN0Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENv
bm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyB7IH0sCisgICAgICAgIFtdKFNvY2tldENvbm5l
Y3Rpb24mLCBHVmFyaWFudCosIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRv
JiBpbnNwZWN0b3IgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yKj4odXNlckRhdGEpOwor
ICAgICAgICAgICAgaW5zcGVjdG9yLnJlY2VpdmVkR2V0VGFyZ2V0TGlzdE1lc3NhZ2UoKTsKKyAg
ICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNldHVwIiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tl
dENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHQpIiwKKyAgICAgICAgW10oU29ja2V0
Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgewor
ICAgICAgICAgICAgYXV0byYgaW5zcGVjdG9yID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3Rv
cio+KHVzZXJEYXRhKTsKICAgICAgICAgICAgIGd1aW50NjQgdGFyZ2V0SUQ7CiAgICAgICAgICAg
ICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodCkiLCAmdGFyZ2V0SUQpOwotICAgICAgICAg
ICAgaW5zcGVjdG9yLT5yZWNlaXZlZFNldHVwTWVzc2FnZSh0YXJnZXRJRCk7Ci0gICAgICAgICAg
ICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIG51bGxw
dHIpOwotICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlNlbmRNZXNz
YWdlVG9UYXJnZXQiKSkgeworICAgICAgICAgICAgaW5zcGVjdG9yLnJlY2VpdmVkU2V0dXBNZXNz
YWdlKHRhcmdldElEKTsKKyAgICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNlbmRNZXNzYWdlVG9U
YXJnZXQiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxi
YWNrPiB7ICIodHMpIiwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBw
YXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgaW5zcGVj
dG9yID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3Rvcio+KHVzZXJEYXRhKTsKICAgICAgICAg
ICAgIGd1aW50NjQgdGFyZ2V0SUQ7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOwog
ICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHQmcykiLCAmdGFyZ2V0SUQs
ICZtZXNzYWdlKTsKLSAgICAgICAgICAgIGluc3BlY3Rvci0+cmVjZWl2ZWREYXRhTWVzc2FnZSh0
YXJnZXRJRCwgbWVzc2FnZSk7Ci0gICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25f
cmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIG51bGxwdHIpOwotICAgICAgICB9IGVsc2UgaWYgKCFn
X3N0cmNtcDAobWV0aG9kTmFtZSwgIkZyb250ZW5kRGlkQ2xvc2UiKSkgeworICAgICAgICAgICAg
aW5zcGVjdG9yLnJlY2VpdmVkRGF0YU1lc3NhZ2UodGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgICAg
ICB9fQorICAgIH0sCisgICAgeyAiRnJvbnRlbmREaWRDbG9zZSIsIHN0ZDo6cGFpcjxDU3RyaW5n
LCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0KSIsCisgICAgICAgIFtd
KFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRh
dGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGluc3BlY3RvciA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJ
bnNwZWN0b3IqPih1c2VyRGF0YSk7CiAgICAgICAgICAgICBndWludDY0IHRhcmdldElEOwogICAg
ICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHQpIiwgJnRhcmdldElEKTsKLSAg
ICAgICAgICAgIGluc3BlY3Rvci0+cmVjZWl2ZWRDbG9zZU1lc3NhZ2UodGFyZ2V0SUQpOwotICAg
ICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9u
LCBudWxscHRyKTsKLSAgICAgICAgfQotICAgIH0sCi0gICAgLy8gZ2V0X3Byb3BlcnR5Ci0gICAg
bnVsbHB0ciwKLSAgICAvLyBzZXRfcHJvcGVydHkKLSAgICBudWxscHRyLAotICAgIC8vIHBhZGRp
bmcKLSAgICB7IDAgfQorICAgICAgICAgICAgaW5zcGVjdG9yLnJlY2VpdmVkQ2xvc2VNZXNzYWdl
KHRhcmdldElEKTsKKyAgICAgICAgfX0KKyAgICB9CiB9OwogCi12b2lkIFJlbW90ZUluc3BlY3Rv
cjo6c2V0dXBDb25uZWN0aW9uKEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24p
Cit2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0
aW9uPiYmIGNvbm5lY3Rpb24pCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwogCiAg
ICAgQVNTRVJUKGNvbm5lY3Rpb24pOwotICAgIEFTU0VSVCghbV9kYnVzQ29ubmVjdGlvbik7Ci0g
ICAgbV9kYnVzQ29ubmVjdGlvbiA9IFdURk1vdmUoY29ubmVjdGlvbik7Ci0KLSAgICBzdGF0aWMg
R0RCdXNOb2RlSW5mbyogaW50cm9zcGVjdGlvbkRhdGEgPSBudWxscHRyOwotICAgIGlmICghaW50
cm9zcGVjdGlvbkRhdGEpCi0gICAgICAgIGludHJvc3BlY3Rpb25EYXRhID0gZ19kYnVzX25vZGVf
aW5mb19uZXdfZm9yX3htbChpbnRyb3NwZWN0aW9uWE1MLCBudWxscHRyKTsKLQotICAgIGdfZGJ1
c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdChtX2RidXNDb25uZWN0aW9uLmdldCgpLCBSRU1P
VEVfSU5TUEVDVE9SX0RCVVNfT0JKRUNUX1BBVEgsCi0gICAgICAgIGludHJvc3BlY3Rpb25EYXRh
LT5pbnRlcmZhY2VzWzBdLCAmc19pbnRlcmZhY2VWVGFibGUsIHRoaXMsIG51bGxwdHIsIG51bGxw
dHIpOworICAgIEFTU0VSVCghbV9zb2NrZXRDb25uZWN0aW9uKTsKIAorICAgIG1fc29ja2V0Q29u
bmVjdGlvbiA9IFdURk1vdmUoY29ubmVjdGlvbik7CiAgICAgaWYgKCFtX3RhcmdldE1hcC5pc0Vt
cHR5KCkpCiAgICAgICAgIHB1c2hMaXN0aW5nc1Nvb24oKTsKIH0KIAotc3RhdGljIHZvaWQgZGJ1
c0Nvbm5lY3Rpb25DYWxsQXN5bmNSZWFkeUNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5j
UmVzdWx0KiByZXN1bHQsIGdwb2ludGVyKQotewotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBl
cnJvcjsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1bHRWYXJpYW50ID0gYWRvcHRHUmVmKGdf
ZGJ1c19jb25uZWN0aW9uX2NhbGxfZmluaXNoKEdfREJVU19DT05ORUNUSU9OKHNvdXJjZSksIHJl
c3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgaWYgKCFyZXN1bHRWYXJpYW50ICYmICFnX2Vy
cm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVE
KSkKLSAgICAgICAgZ193YXJuaW5nKCJSZW1vdGVJbnNwZWN0b3IgZmFpbGVkIHRvIHNlbmQgREJ1
cyBtZXNzYWdlOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLX0KLQogVGFyZ2V0TGlzdGluZyBSZW1v
dGVJbnNwZWN0b3I6Omxpc3RpbmdGb3JJbnNwZWN0aW9uVGFyZ2V0KGNvbnN0IFJlbW90ZUluc3Bl
Y3Rpb25UYXJnZXQmIHRhcmdldCkgY29uc3QKIHsKICAgICBpZiAoIXRhcmdldC5yZW1vdGVEZWJ1
Z2dpbmdBbGxvd2VkKCkpCkBAIC0yMDUsNyArMTY4LDcgQEAgVGFyZ2V0TGlzdGluZyBSZW1vdGVJ
bnNwZWN0b3I6Omxpc3RpbmdGb3JBdXRvbWF0aW9uVGFyZ2V0KGNvbnN0IFJlbW90ZUF1dG9tYXRp
b24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnB1c2hMaXN0aW5nc05vdygpCiB7Ci0gICAgaWYg
KCFtX2RidXNDb25uZWN0aW9uKQorICAgIGlmICghbV9zb2NrZXRDb25uZWN0aW9uKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX3B1c2hTY2hlZHVsZWQgPSBmYWxzZTsKQEAgLTIxNywxNSArMTgw
LDEyIEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpwdXNoTGlzdGluZ3NOb3coKQogICAgICAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9hZGRfdmFsdWUoJmJ1aWxkZXIsIGxpc3RpbmcuZ2V0KCkpOwogICAg
IGdfdmFyaWFudF9idWlsZGVyX2Nsb3NlKCZidWlsZGVyKTsKICAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQoJmJ1aWxkZXIsICJiIiwgbV9jbGllbnRDYXBhYmlsaXRpZXMgJiYgbV9jbGllbnRDYXBh
YmlsaXRpZXMtPnJlbW90ZUF1dG9tYXRpb25BbGxvd2VkKTsKLSAgICBnX2RidXNfY29ubmVjdGlv
bl9jYWxsKG1fZGJ1c0Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsCi0gICAgICAgIElOU1BFQ1RP
Ul9EQlVTX09CSkVDVF9QQVRILCBJTlNQRUNUT1JfREJVU19JTlRFUkZBQ0UsICJTZXRUYXJnZXRM
aXN0IiwKLSAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSwgbnVsbHB0ciwg
R19EQlVTX0NBTExfRkxBR1NfTk9fQVVUT19TVEFSVCwKLSAgICAgICAgLTEsIG1fY2FuY2VsbGFi
bGUuZ2V0KCksIGRidXNDb25uZWN0aW9uQ2FsbEFzeW5jUmVhZHlDYWxsYmFjaywgbnVsbHB0cik7
CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0VGFyZ2V0TGlzdCIsIGdf
dmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOwogfQogCiB2b2lkIFJlbW90ZUluc3BlY3Rv
cjo6cHVzaExpc3RpbmdzU29vbigpCiB7Ci0gICAgaWYgKCFtX2RidXNDb25uZWN0aW9uKQorICAg
IGlmICghbV9zb2NrZXRDb25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9w
dXNoU2NoZWR1bGVkKQpAQCAtMjQ2LDIxICsyMDYsMTcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6
OnNlbmRBdXRvbWF0aWNJbnNwZWN0aW9uQ2FuZGlkYXRlTWVzc2FnZSgpCiAgICAgQVNTRVJUKG1f
YXV0b21hdGljSW5zcGVjdGlvbkVuYWJsZWQpOwogICAgIEFTU0VSVChtX2F1dG9tYXRpY0luc3Bl
Y3Rpb25QYXVzZWQpOwogICAgIEFTU0VSVChtX2F1dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVU
YXJnZXRJZGVudGlmaWVyKTsKLSAgICBBU1NFUlQobV9kYnVzQ29ubmVjdGlvbik7CisgICAgQVNT
RVJUKG1fc29ja2V0Q29ubmVjdGlvbik7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhdXRvbWF0
aWMgaW5zcGVjdGlvbi4KIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9S
ZW1vdGUoVGFyZ2V0SUQgdGFyZ2V0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewogICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsKLSAgICBpZiAoIW1fZGJ1c0Nvbm5lY3Rp
b24pCisgICAgaWYgKCFtX3NvY2tldENvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAg
IGdfZGJ1c19jb25uZWN0aW9uX2NhbGwobV9kYnVzQ29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwK
LSAgICAgICAgSU5TUEVDVE9SX0RCVVNfT0JKRUNUX1BBVEgsIElOU1BFQ1RPUl9EQlVTX0lOVEVS
RkFDRSwgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCIsCi0gICAgICAgIGdfdmFyaWFudF9uZXcoIih0
cykiLCBzdGF0aWNfY2FzdDxndWludDY0Pih0YXJnZXRJZGVudGlmaWVyKSwgbWVzc2FnZS51dGY4
KCkuZGF0YSgpKSwKLSAgICAgICAgbnVsbHB0ciwgR19EQlVTX0NBTExfRkxBR1NfTk9fQVVUT19T
VEFSVCwKLSAgICAgICAgLTEsIG1fY2FuY2VsbGFibGUuZ2V0KCksIGRidXNDb25uZWN0aW9uQ2Fs
bEFzeW5jUmVhZHlDYWxsYmFjaywgbnVsbHB0cik7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5z
ZW5kTWVzc2FnZSgiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIiwgZ192YXJpYW50X25ldygiKHRzKSIs
IHN0YXRpY19jYXN0PGd1aW50NjQ+KHRhcmdldElkZW50aWZpZXIpLCBtZXNzYWdlLnV0ZjgoKS5k
YXRhKCkpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlY2VpdmVkR2V0VGFyZ2V0TGlz
dE1lc3NhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9y
ZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwCmluZGV4
IGVjZDlkNmU3MDFmLi4yNzlkYTQ1NDQwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIvUmVtb3RlSW5zcGVj
dG9yU2VydmVyLmNwcApAQCAtMzMsMTMgKzMzLDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgogCi0jZGVmaW5lIElOU1BFQ1RPUl9E
QlVTX0lOVEVSRkFDRSAib3JnLndlYmtpdC5JbnNwZWN0b3IiCi0jZGVmaW5lIElOU1BFQ1RPUl9E
QlVTX09CSkVDVF9QQVRIICIvb3JnL3dlYmtpdC9JbnNwZWN0b3IiCi0jZGVmaW5lIFJFTU9URV9J
TlNQRUNUT1JfREJVU19JTlRFUkZBQ0UgIm9yZy53ZWJraXQuUmVtb3RlSW5zcGVjdG9yIgotI2Rl
ZmluZSBSRU1PVEVfSU5TUEVDVE9SX0RCVVNfT0JKRUNUX1BBVEggIi9vcmcvd2Via2l0L1JlbW90
ZUluc3BlY3RvciIKLSNkZWZpbmUgUkVNT1RFX0lOU1BFQ1RPUl9DTElFTlRfREJVU19JTlRFUkZB
Q0UgIm9yZy53ZWJraXQuUmVtb3RlSW5zcGVjdG9yQ2xpZW50IgotI2RlZmluZSBSRU1PVEVfSU5T
UEVDVE9SX0NMSUVOVF9PQkpFQ1RfUEFUSCAiL29yZy93ZWJraXQvUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50IgotCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRl
Q29ubmVjdGlvbklEKCkKQEAgLTQ4LDQ1ICs0MSw2IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0
ZUNvbm5lY3Rpb25JRCgpCiAgICAgcmV0dXJuICsrY29ubmVjdGlvbklEOwogfQogCi1uYW1lc3Bh
Y2UgUmVtb3RlSW5zcGVjdG9yU2VydmVySW50ZXJuYWwgewotc3RhdGljIGNvbnN0IGNoYXIgaW50
cm9zcGVjdGlvblhNTFtdID0KLSAgICAiPG5vZGU+IgotICAgICIgIDxpbnRlcmZhY2UgbmFtZT0n
IiBJTlNQRUNUT1JfREJVU19JTlRFUkZBQ0UgIic+IgotICAgICIgICAgPG1ldGhvZCBuYW1lPSdT
ZXRUYXJnZXRMaXN0Jz4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT0nYSh0c3NzYiknIG5hbWU9J2xp
c3QnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT0nYicgbmFtZT0ncmVt
b3RlQXV0b21hdGlvbkVuYWJsZWQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgIiAgICA8L21ldGhv
ZD4iCi0gICAgIiAgICA8bWV0aG9kIG5hbWU9J1NldHVwSW5zcGVjdG9yQ2xpZW50Jz4iCi0gICAg
IiAgICAgIDxhcmcgdHlwZT0nYXknIG5hbWU9J2JhY2tlbmRDb21tYW5kc0hhc2gnIGRpcmVjdGlv
bj0naW4nLz4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT0nYXknIG5hbWU9J2JhY2tlbmRDb21tYW5k
cycgZGlyZWN0aW9uPSdvdXQnLz4iCi0gICAgIiAgICA8L21ldGhvZD4iCi0gICAgIiAgICA8bWV0
aG9kIG5hbWU9J1NldHVwJz4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT0ndCcgbmFtZT0nY29ubmVj
dGlvbicgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAgICAgPGFyZyB0eXBlPSd0JyBuYW1lPSd0
YXJnZXQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgIiAgICA8L21ldGhvZD4iCi0gICAgIiAgICA8
bWV0aG9kIG5hbWU9J0Zyb250ZW5kRGlkQ2xvc2UnPiIKLSAgICAiICAgICAgPGFyZyB0eXBlPSd0
JyBuYW1lPSdjb25uZWN0aW9uJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICAgICA8YXJnIHR5
cGU9J3QnIG5hbWU9J3RhcmdldCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAgIDwvbWV0aG9k
PiIKLSAgICAiICAgIDxtZXRob2QgbmFtZT0nU2VuZE1lc3NhZ2VUb0Zyb250ZW5kJz4iCi0gICAg
IiAgICAgIDxhcmcgdHlwZT0ndCcgbmFtZT0ndGFyZ2V0JyBkaXJlY3Rpb249J2luJy8+IgotICAg
ICIgICAgICA8YXJnIHR5cGU9J3MnIG5hbWU9J21lc3NhZ2UnIGRpcmVjdGlvbj0naW4nLz4iCi0g
ICAgIiAgICA8L21ldGhvZD4iCi0gICAgIiAgICA8bWV0aG9kIG5hbWU9J1NlbmRNZXNzYWdlVG9C
YWNrZW5kJz4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT0ndCcgbmFtZT0nY29ubmVjdGlvbicgZGly
ZWN0aW9uPSdpbicvPiIKLSAgICAiICAgICAgPGFyZyB0eXBlPSd0JyBuYW1lPSd0YXJnZXQnIGRp
cmVjdGlvbj0naW4nLz4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT0ncycgbmFtZT0nbWVzc2FnZScg
ZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAgIDwvbWV0aG9kPiIKLSAgICAiICAgIDxtZXRob2Qg
bmFtZT0nU3RhcnRBdXRvbWF0aW9uU2Vzc2lvbic+IgotICAgICIgICAgICA8YXJnIHR5cGU9J3Mn
IG5hbWU9J3Nlc3Npb25JRCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAgICAgPGFyZyB0eXBl
PSdhe3N2fScgbmFtZT0nY2FwYWJpbGl0aWVzJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICAg
ICA8YXJnIHR5cGU9J3MnIG5hbWU9J2Jyb3dzZXJOYW1lJyBkaXJlY3Rpb249J291dCcvPiIKLSAg
ICAiICAgICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdicm93c2VyVmVyc2lvbicgZGlyZWN0aW9uPSdv
dXQnLz4iCi0gICAgIiAgICA8L21ldGhvZD4iCi0gICAgIiAgPC9pbnRlcmZhY2U+IgotICAgICI8
L25vZGU+IjsKLX0KLQogc3RhdGljIFJlbW90ZUluc3BlY3Rvcjo6Q2xpZW50OjpTZXNzaW9uQ2Fw
YWJpbGl0aWVzIHByb2Nlc3NTZXNzaW9uQ2FwYWJpbGl0aWVzKEdWYXJpYW50KiBzZXNzaW9uQ2Fw
YWJpbGl0aWVzKQogewogICAgIFJlbW90ZUluc3BlY3Rvcjo6Q2xpZW50OjpTZXNzaW9uQ2FwYWJp
bGl0aWVzIGNhcGFiaWxpdGllczsKQEAgLTEzOCw1OSArOTIsNzcgQEAgc3RhdGljIFJlbW90ZUlu
c3BlY3Rvcjo6Q2xpZW50OjpTZXNzaW9uQ2FwYWJpbGl0aWVzIHByb2Nlc3NTZXNzaW9uQ2FwYWJp
bGl0aWVzKEcKIAogICAgIHJldHVybiBjYXBhYmlsaXRpZXM7CiB9Ci1jb25zdCBHREJ1c0ludGVy
ZmFjZVZUYWJsZSBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNfaW50ZXJmYWNlVlRhYmxlID0gewot
ICAgIC8vIG1ldGhvZF9jYWxsCi0gICAgW10gKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiwg
Y29uc3QgZ2NoYXIqIC8qc2VuZGVyKi8sIGNvbnN0IGdjaGFyKiAvKm9iamVjdFBhdGgqLywgY29u
c3QgZ2NoYXIqIC8qaW50ZXJmYWNlTmFtZSovLCBjb25zdCBnY2hhciogbWV0aG9kTmFtZSwgR1Zh
cmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3Bv
aW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgYXV0byogaW5zcGVjdG9yU2VydmVyID0gc3RhdGlj
X2Nhc3Q8UmVtb3RlSW5zcGVjdG9yU2VydmVyKj4odXNlckRhdGEpOwotICAgICAgICBpZiAoIWdf
c3RyY21wMChtZXRob2ROYW1lLCAiU2V0VGFyZ2V0TGlzdCIpKSB7Ci0gICAgICAgICAgICBpbnNw
ZWN0b3JTZXJ2ZXItPnNldFRhcmdldExpc3QoY29ubmVjdGlvbiwgcGFyYW1ldGVycyk7Ci0gICAg
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IG51bGxwdHIpOwotICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlNl
dHVwSW5zcGVjdG9yQ2xpZW50IikpIHsKKworY29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2Fn
ZUhhbmRsZXJzIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6c19tZXNzYWdlSGFuZGxlcnMgPSB7Cisg
ICAgeyAiRGlkQ2xvc2UiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVz
c2FnZUNhbGxiYWNrPiB7IHsgfSwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgR1ZhcmlhbnQqLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYg
aW5zcGVjdG9yU2VydmVyID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvclNlcnZlcio+KHVz
ZXJEYXRhKTsKKyAgICAgICAgICAgIGluc3BlY3RvclNlcnZlci5jb25uZWN0aW9uRGlkQ2xvc2Uo
Y29ubmVjdGlvbik7CisgICAgICAgIH19CisgICAgfSwKKyAgICB7ICJTZXRUYXJnZXRMaXN0Iiwg
c3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAi
KGEodHNzc2IpYikiLAorICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBH
VmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1
dG8mIGluc3BlY3RvclNlcnZlciA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIq
Pih1c2VyRGF0YSk7CisgICAgICAgICAgICBpbnNwZWN0b3JTZXJ2ZXIuc2V0VGFyZ2V0TGlzdChj
b25uZWN0aW9uLCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNldHVw
SW5zcGVjdG9yQ2xpZW50Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1l
c3NhZ2VDYWxsYmFjaz4geyAiKGF5KSIsCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICAgICAgYXV0byYgaW5zcGVjdG9yU2VydmVyID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3Bl
Y3RvclNlcnZlcio+KHVzZXJEYXRhKTsKICAgICAgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IGJh
Y2tlbmRDb21tYW5kc0hhc2g7CiAgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMs
ICIoQGF5KSIsICZiYWNrZW5kQ29tbWFuZHNIYXNoLm91dFB0cigpKTsKLSAgICAgICAgICAgIGF1
dG8qIGJhY2tlbmRDb21tYW5kcyA9IGluc3BlY3RvclNlcnZlci0+c2V0dXBJbnNwZWN0b3JDbGll
bnQoY29ubmVjdGlvbiwgZ192YXJpYW50X2dldF9ieXRlc3RyaW5nKGJhY2tlbmRDb21tYW5kc0hh
c2guZ2V0KCkpKTsKLSAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5f
dmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKEBheSkiLCBiYWNrZW5kQ29tbWFuZHMp
KTsKLSAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXR1cCIpKSB7
CisgICAgICAgICAgICBhdXRvKiBiYWNrZW5kQ29tbWFuZHMgPSBpbnNwZWN0b3JTZXJ2ZXIuc2V0
dXBJbnNwZWN0b3JDbGllbnQoY29ubmVjdGlvbiwgZ192YXJpYW50X2dldF9ieXRlc3RyaW5nKGJh
Y2tlbmRDb21tYW5kc0hhc2guZ2V0KCkpKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZE1l
c3NhZ2UoIkRpZFNldHVwSW5zcGVjdG9yQ2xpZW50IiwgZ192YXJpYW50X25ldygiKEBheSkiLCBi
YWNrZW5kQ29tbWFuZHMpKTsKKyAgICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNldHVwIiwgc3Rk
OjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHR0
KSIsCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIEdWYXJpYW50KiBw
YXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgaW5zcGVj
dG9yU2VydmVyID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvclNlcnZlcio+KHVzZXJEYXRh
KTsKICAgICAgICAgICAgIGd1aW50NjQgY29ubmVjdGlvbklELCB0YXJnZXRJRDsKICAgICAgICAg
ICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0dCkiLCAmY29ubmVjdGlvbklELCAmdGFy
Z2V0SUQpOwotICAgICAgICAgICAgaW5zcGVjdG9yU2VydmVyLT5zZXR1cChjb25uZWN0aW9uLCBj
b25uZWN0aW9uSUQsIHRhcmdldElEKTsKLSAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2Nh
dGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgbnVsbHB0cik7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiRnJvbnRlbmREaWRDbG9zZSIpKSB7CisgICAgICAg
ICAgICBpbnNwZWN0b3JTZXJ2ZXIuc2V0dXAoY29ubmVjdGlvbiwgY29ubmVjdGlvbklELCB0YXJn
ZXRJRCk7CisgICAgICAgIH19CisgICAgfSwKKyAgICB7ICJGcm9udGVuZERpZENsb3NlIiwgc3Rk
OjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHR0
KSIsCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIEdWYXJpYW50KiBw
YXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgaW5zcGVj
dG9yU2VydmVyID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvclNlcnZlcio+KHVzZXJEYXRh
KTsKICAgICAgICAgICAgIGd1aW50NjQgY29ubmVjdGlvbklELCB0YXJnZXRJRDsKICAgICAgICAg
ICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0dCkiLCAmY29ubmVjdGlvbklELCAmdGFy
Z2V0SUQpOwotICAgICAgICAgICAgaW5zcGVjdG9yU2VydmVyLT5jbG9zZShjb25uZWN0aW9uLCBj
b25uZWN0aW9uSUQsIHRhcmdldElEKTsKLSAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2Nh
dGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgbnVsbHB0cik7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIikpIHsKKyAg
ICAgICAgICAgIGluc3BlY3RvclNlcnZlci5jbG9zZShjb25uZWN0aW9uLCBjb25uZWN0aW9uSUQs
IHRhcmdldElEKTsKKyAgICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9u
dGVuZCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJh
Y2s+IHsgIih0cykiLAorICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBH
VmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1
dG8mIGluc3BlY3RvclNlcnZlciA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIq
Pih1c2VyRGF0YSk7CiAgICAgICAgICAgICBndWludDY0IHRhcmdldElEOwogICAgICAgICAgICAg
Y29uc3QgY2hhciogbWVzc2FnZTsKICAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVy
cywgIih0JnMpIiwgJnRhcmdldElELCAmbWVzc2FnZSk7Ci0gICAgICAgICAgICBpbnNwZWN0b3JT
ZXJ2ZXItPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25uZWN0aW9uLCB0YXJnZXRJRCwgbWVzc2Fn
ZSk7Ci0gICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGlu
dm9jYXRpb24sIG51bGxwdHIpOwotICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9k
TmFtZSwgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIikpIHsKKyAgICAgICAgICAgIGluc3BlY3RvclNl
cnZlci5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29ubmVjdGlvbiwgdGFyZ2V0SUQsIG1lc3NhZ2Up
OworICAgICAgICB9fQorICAgIH0sCisgICAgeyAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiLCBzdGQ6
OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIodHRz
KSIsCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIEdWYXJpYW50KiBw
YXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgaW5zcGVj
dG9yU2VydmVyID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvclNlcnZlcio+KHVzZXJEYXRh
KTsKICAgICAgICAgICAgIGd1aW50NjQgY29ubmVjdGlvbklELCB0YXJnZXRJRDsKICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7CiAgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFt
ZXRlcnMsICIodHQmcykiLCAmY29ubmVjdGlvbklELCAmdGFyZ2V0SUQsICZtZXNzYWdlKTsKLSAg
ICAgICAgICAgIGluc3BlY3RvclNlcnZlci0+c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29ubmVjdGlv
biwgY29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2FnZSk7Ci0gICAgICAgICAgICBnX2RidXNf
bWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIG51bGxwdHIpOwotICAg
ICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIlN0YXJ0QXV0b21hdGlvblNl
c3Npb24iKSkgeworICAgICAgICAgICAgaW5zcGVjdG9yU2VydmVyLnNlbmRNZXNzYWdlVG9CYWNr
ZW5kKGNvbm5lY3Rpb24sIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgICAg
ICB9fQorICAgIH0sCisgICAgeyAiU3RhcnRBdXRvbWF0aW9uU2Vzc2lvbiIsIHN0ZDo6cGFpcjxD
U3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIihzYXtzdn0pIiwK
KyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgR1ZhcmlhbnQqIHBhcmFt
ZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBpbnNwZWN0b3JT
ZXJ2ZXIgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yU2VydmVyKj4odXNlckRhdGEpOwog
ICAgICAgICAgICAgY29uc3QgY2hhciogc2Vzc2lvbklEOwogICAgICAgICAgICAgR1JlZlB0cjxH
VmFyaWFudD4gc2Vzc2lvbkNhcGFiaWxpdGllczsKICAgICAgICAgICAgIGdfdmFyaWFudF9nZXQo
cGFyYW1ldGVycywgIigmc0Bhe3N2fSkiLCAmc2Vzc2lvbklELCAmc2Vzc2lvbkNhcGFiaWxpdGll
cy5vdXRQdHIoKSk7CiAgICAgICAgICAgICBhdXRvIGNhcGFiaWxpdGllcyA9IHByb2Nlc3NTZXNz
aW9uQ2FwYWJpbGl0aWVzKHNlc3Npb25DYXBhYmlsaXRpZXMuZ2V0KCkpOwotICAgICAgICAgICAg
aW5zcGVjdG9yU2VydmVyLT5zdGFydEF1dG9tYXRpb25TZXNzaW9uKGNvbm5lY3Rpb24sIHNlc3Np
b25JRCwgY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgICAgIGluc3BlY3RvclNlcnZlci5zdGFydEF1
dG9tYXRpb25TZXNzaW9uKGNvbm5lY3Rpb24sIHNlc3Npb25JRCwgY2FwYWJpbGl0aWVzKTsKICAg
ICAgICAgICAgIGF1dG8gY2xpZW50Q2FwYWJpbGl0aWVzID0gUmVtb3RlSW5zcGVjdG9yOjpzaW5n
bGV0b24oKS5jbGllbnRDYXBhYmlsaXRpZXMoKTsKLSAgICAgICAgICAgIGdfZGJ1c19tZXRob2Rf
aW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKHNzKSIs
CisgICAgICAgICAgICBjb25uZWN0aW9uLnNlbmRNZXNzYWdlKCJEaWRTdGFydEF1dG9tYXRpb25T
ZXNzaW9uIiwgZ192YXJpYW50X25ldygiKHNzKSIsCiAgICAgICAgICAgICAgICAgY2xpZW50Q2Fw
YWJpbGl0aWVzID8gY2xpZW50Q2FwYWJpbGl0aWVzLT5icm93c2VyTmFtZS51dGY4KCkuZGF0YSgp
IDogIiIsCiAgICAgICAgICAgICAgICAgY2xpZW50Q2FwYWJpbGl0aWVzID8gY2xpZW50Q2FwYWJp
bGl0aWVzLT5icm93c2VyVmVyc2lvbi51dGY4KCkuZGF0YSgpIDogIiIpKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGlu
dm9jYXRpb24sIG51bGxwdHIpOwotICAgIH0sCi0gICAgLy8gZ2V0X3Byb3BlcnR5Ci0gICAgbnVs
bHB0ciwKLSAgICAvLyBzZXRfcHJvcGVydHkKLSAgICBudWxscHRyLAotICAgIC8vIHBhZGRpbmcK
LSAgICB7IDAgfQorICAgICAgICB9fQorICAgIH0KIH07CiAKIFJlbW90ZUluc3BlY3RvclNlcnZl
ciYgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzaW5nbGV0b24oKQpAQCAtMjAxLDEwOCArMTczLDYw
IEBAIFJlbW90ZUluc3BlY3RvclNlcnZlciYgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzaW5nbGV0
b24oKQogCiBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6On5SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIoKQog
ewotICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwotICAgIGlm
IChtX2RidXNTZXJ2ZXIpCi0gICAgICAgIGdfZGJ1c19zZXJ2ZXJfc3RvcChtX2RidXNTZXJ2ZXIu
Z2V0KCkpOwotICAgIGlmIChtX2ludHJvc3BlY3Rpb25EYXRhKQotICAgICAgICBnX2RidXNfbm9k
ZV9pbmZvX3VucmVmKG1faW50cm9zcGVjdGlvbkRhdGEpOwotfQotCi1HREJ1c0ludGVyZmFjZUlu
Zm8qIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6aW50ZXJmYWNlSW5mbygpCi17Ci0gICAgaWYgKCFt
X2ludHJvc3BlY3Rpb25EYXRhKSB7Ci0gICAgICAgIG1faW50cm9zcGVjdGlvbkRhdGEgPSBnX2Ri
dXNfbm9kZV9pbmZvX25ld19mb3JfeG1sKFJlbW90ZUluc3BlY3RvclNlcnZlckludGVybmFsOjpp
bnRyb3NwZWN0aW9uWE1MLCBudWxscHRyKTsKLSAgICAgICAgQVNTRVJUKG1faW50cm9zcGVjdGlv
bkRhdGEpOwotICAgIH0KLSAgICByZXR1cm4gbV9pbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNl
c1swXTsKKyAgICBpZiAobV9zZXJ2aWNlKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQobV9zZXJ2aWNlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKIH0KIAogYm9vbCBSZW1vdGVJbnNwZWN0b3JTZXJ2
ZXI6OnN0YXJ0KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVuc2lnbmVkIHBvcnQpCiB7Ci0gICAgR1Vu
aXF1ZVB0cjxjaGFyPiBkYnVzQWRkcmVzcyhnX3N0cmR1cF9wcmludGYoInRjcDpob3N0PSVzLHBv
cnQ9JXUiLCBhZGRyZXNzLCBwb3J0KSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiB1aWQoZ19kYnVz
X2dlbmVyYXRlX2d1aWQoKSk7Ci0KLSAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2Fu
Y2VsbGFibGVfbmV3KCkpOworICAgIG1fc2VydmljZSA9IGFkb3B0R1JlZihnX3NvY2tldF9zZXJ2
aWNlX25ldygpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2VydmljZS5nZXQoKSwgImluY29t
aW5nIiwgR19DQUxMQkFDSyhpbmNvbWluZ0Nvbm5lY3Rpb25DYWxsYmFjayksIHRoaXMpOwogCisg
ICAgR1JlZlB0cjxHU29ja2V0QWRkcmVzcz4gc29ja2V0QWRkcmVzcyA9IGFkb3B0R1JlZihnX2lu
ZXRfc29ja2V0X2FkZHJlc3NfbmV3X2Zyb21fc3RyaW5nKGFkZHJlc3MsIHBvcnQpKTsKICAgICBH
VW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgbV9kYnVzU2VydmVyID0gYWRvcHRHUmVm
KGdfZGJ1c19zZXJ2ZXJfbmV3X3N5bmMoZGJ1c0FkZHJlc3MuZ2V0KCksIEdfREJVU19TRVJWRVJf
RkxBR1NfQVVUSEVOVElDQVRJT05fQUxMT1dfQU5PTllNT1VTLCB1aWQuZ2V0KCksIG51bGxwdHIs
IG1fY2FuY2VsbGFibGUuZ2V0KCksICZlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmICghbV9kYnVz
U2VydmVyKSB7Ci0gICAgICAgIGlmICghZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lP
X0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCi0gICAgICAgICAgICBnX3dhcm5pbmcoIkZh
aWxlZCB0byBzdGFydCByZW1vdGUgaW5zcGVjdG9yIHNlcnZlciBvbiAlczogJXNcbiIsIGRidXNB
ZGRyZXNzLmdldCgpLCBlcnJvci0+bWVzc2FnZSk7CisgICAgaWYgKCFnX3NvY2tldF9saXN0ZW5l
cl9hZGRfYWRkcmVzcyhHX1NPQ0tFVF9MSVNURU5FUihtX3NlcnZpY2UuZ2V0KCkpLCBzb2NrZXRB
ZGRyZXNzLmdldCgpLCBHX1NPQ0tFVF9UWVBFX1NUUkVBTSwgR19TT0NLRVRfUFJPVE9DT0xfVENQ
LCBudWxscHRyLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKSB7CisgICAgICAgIGdfd2Fybmlu
ZygiRmFpbGVkIHRvIHN0YXJ0IHJlbW90ZSBpbnNwZWN0b3Igc2VydmVyIG9uICVzOiV1OiAlc1xu
IiwgYWRkcmVzcywgcG9ydCwgZXJyb3ItPm1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgZ19zaWduYWxfY29ubmVjdChtX2RidXNTZXJ2ZXIuZ2V0KCksICJuZXct
Y29ubmVjdGlvbiIsIEdfQ0FMTEJBQ0sobmV3Q29ubmVjdGlvbkNhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgZ19kYnVzX3NlcnZlcl9zdGFydChtX2RidXNTZXJ2ZXIuZ2V0KCkpOwotCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWdib29sZWFuIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6bmV3Q29ubmVjdGlv
bkNhbGxiYWNrKEdEQnVzU2VydmVyKiwgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBSZW1v
dGVJbnNwZWN0b3JTZXJ2ZXIqIGluc3BlY3RvclNlcnZlcikKK2dib29sZWFuIFJlbW90ZUluc3Bl
Y3RvclNlcnZlcjo6aW5jb21pbmdDb25uZWN0aW9uQ2FsbGJhY2soR1NvY2tldFNlcnZpY2UqLCBH
U29ja2V0Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgR09iamVjdCosIFJlbW90ZUluc3BlY3RvclNl
cnZlciogaW5zcGVjdG9yU2VydmVyKQogewotICAgIGluc3BlY3RvclNlcnZlci0+bmV3Q29ubmVj
dGlvbihjb25uZWN0aW9uKTsKKyAgICBpbnNwZWN0b3JTZXJ2ZXItPmluY29taW5nQ29ubmVjdGlv
bihTb2NrZXRDb25uZWN0aW9uOjpjcmVhdGUoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4oY29u
bmVjdGlvbiksIHNfbWVzc2FnZUhhbmRsZXJzLCBpbnNwZWN0b3JTZXJ2ZXIpKTsKICAgICByZXR1
cm4gVFJVRTsKIH0KIAotdm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNvbm5lY3Rpb25DbG9z
ZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGdib29sZWFuIC8qcmVtb3Rl
UGVlclZhbmlzaGVkKi8sIEdFcnJvciosIFJlbW90ZUluc3BlY3RvclNlcnZlciogc2VydmVyKQot
ewotICAgIHNlcnZlci0+Y29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKLX0KLQotdm9pZCBS
ZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6Om5ld0Nvbm5lY3Rpb24oR0RCdXNDb25uZWN0aW9uKiBjb25u
ZWN0aW9uKQotewotICAgIEFTU0VSVCghbV9jb25uZWN0aW9ucy5jb250YWlucyhjb25uZWN0aW9u
KSk7Ci0gICAgbV9jb25uZWN0aW9ucy5hZGQoY29ubmVjdGlvbik7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChjb25uZWN0aW9uLCAiY2xvc2VkIiwgR19DQUxMQkFDSyhjb25uZWN0aW9uQ2xvc2VkQ2Fs
bGJhY2spLCB0aGlzKTsKLQotICAgIGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdChj
b25uZWN0aW9uLCBJTlNQRUNUT1JfREJVU19PQkpFQ1RfUEFUSCwgaW50ZXJmYWNlSW5mbygpLCAm
c19pbnRlcmZhY2VWVGFibGUsIHRoaXMsIG51bGxwdHIsIG51bGxwdHIpOwotfQotCi1uYW1lc3Bh
Y2UgUmVtb3RlSW5zcGVjdG9yU2VydmVySW50ZXJuYWwgewotc3RhdGljIHZvaWQgZGJ1c0Nvbm5l
Y3Rpb25DYWxsQXN5bmNSZWFkeUNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIGdwb2ludGVyKQordm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmluY29taW5n
Q29ubmVjdGlvbihSZWY8U29ja2V0Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQogewotICAgIEdV
bmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1bHRW
YXJpYW50ID0gYWRvcHRHUmVmKGdfZGJ1c19jb25uZWN0aW9uX2NhbGxfZmluaXNoKEdfREJVU19D
T05ORUNUSU9OKHNvdXJjZSksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgaWYgKCFy
ZXN1bHRWYXJpYW50ICYmICFnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1Is
IEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJSZW1vdGVJbnNw
ZWN0b3JTZXJ2ZXIgZmFpbGVkIHRvIHNlbmQgREJ1cyBtZXNzYWdlOiAlcyIsIGVycm9yLT5tZXNz
YWdlKTsKLX0KKyAgICBBU1NFUlQoIW1fY29ubmVjdGlvbnMuY29udGFpbnMoY29ubmVjdGlvbi5w
dHIoKSkpOworICAgIG1fY29ubmVjdGlvbnMuYWRkKFdURk1vdmUoY29ubmVjdGlvbikpOwogfQog
Ci12b2lkIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0VGFyZ2V0TGlzdChHREJ1c0Nvbm5lY3Rp
b24qIHJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb24sIEdWYXJpYW50KiBwYXJhbWV0ZXJzKQordm9p
ZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNldFRhcmdldExpc3QoU29ja2V0Q29ubmVjdGlvbiYg
cmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMpCiB7Ci0gICAg
QVNTRVJUKG1fY29ubmVjdGlvbnMuY29udGFpbnMocmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbikp
OwotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9yZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uVG9JRE1h
cC5hZGQocmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbiwgMCk7CisgICAgQVNTRVJUKG1fY29ubmVj
dGlvbnMuY29udGFpbnMoJnJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb24pKTsKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fcmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvblRvSURNYXAuYWRkKCZyZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uLCAwKTsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsK
ICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdlbmVyYXRlQ29ubmVjdGlvbklE
KCk7Ci0gICAgICAgIG1faWRUb1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25NYXAuYWRkKGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUsIHJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb24pOworICAgICAg
ICBtX2lkVG9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uTWFwLmFkZChhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLCAmcmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbik7CiAgICAgfQogCiAgICAgZ2Jv
b2xlYW4gcmVtb3RlQXV0b21hdGlvbkVuYWJsZWQ7CiAgICAgR1JlZlB0cjxHVmFyaWFudD4gdGFy
Z2V0TGlzdDsKICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoQGEodHNzc2IpYikiLCAm
dGFyZ2V0TGlzdC5vdXRQdHIoKSwgJnJlbW90ZUF1dG9tYXRpb25FbmFibGVkKTsKLSAgICBHREJ1
c0Nvbm5lY3Rpb24qIGNsaWVudENvbm5lY3Rpb24gPSByZW1vdGVBdXRvbWF0aW9uRW5hYmxlZCAm
JiBtX2F1dG9tYXRpb25Db25uZWN0aW9uID8gbV9hdXRvbWF0aW9uQ29ubmVjdGlvbi5nZXQoKSA6
IG1fY2xpZW50Q29ubmVjdGlvbi5nZXQoKTsKKyAgICBTb2NrZXRDb25uZWN0aW9uKiBjbGllbnRD
b25uZWN0aW9uID0gcmVtb3RlQXV0b21hdGlvbkVuYWJsZWQgJiYgbV9hdXRvbWF0aW9uQ29ubmVj
dGlvbiA/IG1fYXV0b21hdGlvbkNvbm5lY3Rpb24gOiBtX2NsaWVudENvbm5lY3Rpb247CiAgICAg
aWYgKCFjbGllbnRDb25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBnX2RidXNfY29u
bmVjdGlvbl9jYWxsKGNsaWVudENvbm5lY3Rpb24sIG51bGxwdHIsCi0gICAgICAgIFJFTU9URV9J
TlNQRUNUT1JfQ0xJRU5UX09CSkVDVF9QQVRILAotICAgICAgICBSRU1PVEVfSU5TUEVDVE9SX0NM
SUVOVF9EQlVTX0lOVEVSRkFDRSwKLSAgICAgICAgIlNldFRhcmdldExpc3QiLAotICAgICAgICBn
X3ZhcmlhbnRfbmV3KCIodEBhKHRzc3NiKSkiLCBtX3JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25U
b0lETWFwLmdldChyZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uKSwgdGFyZ2V0TGlzdC5nZXQoKSks
Ci0gICAgICAgIG51bGxwdHIsIEdfREJVU19DQUxMX0ZMQUdTX05PX0FVVE9fU1RBUlQsCi0gICAg
ICAgIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXJJbnRlcm5h
bDo6ZGJ1c0Nvbm5lY3Rpb25DYWxsQXN5bmNSZWFkeUNhbGxiYWNrLCBudWxscHRyKTsKLX0KLQot
dm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNsaWVudENvbm5lY3Rpb25DbG9zZWRDYWxsYmFj
ayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGdib29sZWFuIC8qcmVtb3RlUGVlclZhbmlz
aGVkKi8sIEdFcnJvciosIFJlbW90ZUluc3BlY3RvclNlcnZlciogc2VydmVyKQotewotICAgIHNl
cnZlci0+Y2xpZW50Q29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKKyAgICBjbGllbnRDb25u
ZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0VGFyZ2V0TGlzdCIsIGdfdmFyaWFudF9uZXcoIih0QGEo
dHNzc2IpKSIsIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIHRhcmdldExpc3QuZ2V0KCkpKTsK
IH0KIAotR1ZhcmlhbnQqIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXBJbnNwZWN0b3JDbGll
bnQoR0RCdXNDb25uZWN0aW9uKiBjbGllbnRDb25uZWN0aW9uLCBjb25zdCBjaGFyKiBjbGllbnRC
YWNrZW5kQ29tbWFuZHNIYXNoKQorR1ZhcmlhbnQqIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0
dXBJbnNwZWN0b3JDbGllbnQoU29ja2V0Q29ubmVjdGlvbiYgY2xpZW50Q29ubmVjdGlvbiwgY29u
c3QgY2hhciogY2xpZW50QmFja2VuZENvbW1hbmRzSGFzaCkKIHsKICAgICBBU1NFUlQoIW1fY2xp
ZW50Q29ubmVjdGlvbik7Ci0gICAgbV9jbGllbnRDb25uZWN0aW9uID0gY2xpZW50Q29ubmVjdGlv
bjsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fY2xpZW50Q29ubmVjdGlvbi5nZXQoKSwgImNsb3Nl
ZCIsIEdfQ0FMTEJBQ0soY2xpZW50Q29ubmVjdGlvbkNsb3NlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgbV9jbGllbnRDb25uZWN0aW9uID0gJmNsaWVudENvbm5lY3Rpb247CiAKICAgICBHVmFyaWFu
dCogYmFja2VuZENvbW1hbmRzOwogICAgIGlmIChzdHJjbXAoY2xpZW50QmFja2VuZENvbW1hbmRz
SGFzaCwgYmFja2VuZENvbW1hbmRzSGFzaCgpLmRhdGEoKSkpIHsKQEAgLTMxMiwxNDMgKzIzNiw5
NSBAQCBHVmFyaWFudCogUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cEluc3BlY3RvckNsaWVu
dChHREJ1c0Nvbm5lY3Rpb24qIGNsaWVudENvbgogICAgICAgICBiYWNrZW5kQ29tbWFuZHMgPSBn
X3ZhcmlhbnRfbmV3X2J5dGVzdHJpbmcoIiIpOwogCiAgICAgLy8gQXNrIGFsbCByZW1vdGUgaW5z
cGVjdG9ycyB0byBwdXNoIHRoZWlyIHRhcmdldCBsaXN0cyB0byBub3RpZnkgdGhlIG5ldyBjbGll
bnQuCi0gICAgZm9yIChhdXRvKiByZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uIDogbV9yZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uVG9JRE1hcC5rZXlzKCkpIHsKLSAgICAgICAgZ19kYnVzX2Nvbm5l
Y3Rpb25fY2FsbChyZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uLCBudWxscHRyLAotICAgICAgICAg
ICAgUkVNT1RFX0lOU1BFQ1RPUl9EQlVTX09CSkVDVF9QQVRILAotICAgICAgICAgICAgUkVNT1RF
X0lOU1BFQ1RPUl9EQlVTX0lOVEVSRkFDRSwKLSAgICAgICAgICAgICJHZXRUYXJnZXRMaXN0IiwK
LSAgICAgICAgICAgIG51bGxwdHIsCi0gICAgICAgICAgICBudWxscHRyLCBHX0RCVVNfQ0FMTF9G
TEFHU19OT19BVVRPX1NUQVJULAotICAgICAgICAgICAgLTEsIG1fY2FuY2VsbGFibGUuZ2V0KCks
IFJlbW90ZUluc3BlY3RvclNlcnZlckludGVybmFsOjpkYnVzQ29ubmVjdGlvbkNhbGxBc3luY1Jl
YWR5Q2FsbGJhY2ssIG51bGxwdHIpOwotICAgIH0KKyAgICBmb3IgKGF1dG8qIHJlbW90ZUluc3Bl
Y3RvckNvbm5lY3Rpb24gOiBtX3JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25Ub0lETWFwLmtleXMo
KSkKKyAgICAgICAgcmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIkdldFRh
cmdldExpc3QiLCBudWxscHRyKTsKIAogICAgIHJldHVybiBiYWNrZW5kQ29tbWFuZHM7CiB9CiAK
LXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cChHREJ1c0Nvbm5lY3Rpb24qIGNsaWVu
dENvbm5lY3Rpb24sIHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCit2
b2lkIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0dXAoU29ja2V0Q29ubmVjdGlvbiYgY2xpZW50
Q29ubmVjdGlvbiwgdWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKIHsK
LSAgICBBU1NFUlQobV9jbGllbnRDb25uZWN0aW9uLmdldCgpID09IGNsaWVudENvbm5lY3Rpb24g
fHwgbV9hdXRvbWF0aW9uQ29ubmVjdGlvbi5nZXQoKSA9PSBjbGllbnRDb25uZWN0aW9uKTsKKyAg
ICBBU1NFUlQobV9jbGllbnRDb25uZWN0aW9uID09ICZjbGllbnRDb25uZWN0aW9uIHx8IG1fYXV0
b21hdGlvbkNvbm5lY3Rpb24gPT0gJmNsaWVudENvbm5lY3Rpb24pOwogICAgIEFTU0VSVChtX2lk
VG9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uTWFwLmNvbnRhaW5zKGNvbm5lY3Rpb25JRCkpOwot
ICAgIGlmIChjbGllbnRDb25uZWN0aW9uID09IG1fYXV0b21hdGlvbkNvbm5lY3Rpb24uZ2V0KCkp
IHsKKyAgICBpZiAoJmNsaWVudENvbm5lY3Rpb24gPT0gbV9hdXRvbWF0aW9uQ29ubmVjdGlvbikg
ewogICAgICAgICBtX2F1dG9tYXRpb25UYXJnZXRzLmFkZChzdGQ6Om1ha2VfcGFpcihjb25uZWN0
aW9uSUQsIHRhcmdldElEKSk7CiAgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCku
c2V0dXAodGFyZ2V0SUQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9pbnNwZWN0
aW9uVGFyZ2V0cy5hZGQoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwot
ICAgIGF1dG8qIHJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb24gPSBtX2lkVG9SZW1vdGVJbnNwZWN0
b3JDb25uZWN0aW9uTWFwLmdldChjb25uZWN0aW9uSUQpOwotICAgIGdfZGJ1c19jb25uZWN0aW9u
X2NhbGwocmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbiwgbnVsbHB0ciwKLSAgICAgICAgUkVNT1RF
X0lOU1BFQ1RPUl9EQlVTX09CSkVDVF9QQVRILAotICAgICAgICBSRU1PVEVfSU5TUEVDVE9SX0RC
VVNfSU5URVJGQUNFLAotICAgICAgICAiU2V0dXAiLAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIo
dCkiLCB0YXJnZXRJRCksCi0gICAgICAgIG51bGxwdHIsIEdfREJVU19DQUxMX0ZMQUdTX05PX0FV
VE9fU1RBUlQsCi0gICAgICAgIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBSZW1vdGVJbnNwZWN0
b3JTZXJ2ZXJJbnRlcm5hbDo6ZGJ1c0Nvbm5lY3Rpb25DYWxsQXN5bmNSZWFkeUNhbGxiYWNrLCBu
dWxscHRyKTsKKyAgICBtX2lkVG9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uTWFwLmdldChjb25u
ZWN0aW9uSUQpLT5zZW5kTWVzc2FnZSgiU2V0dXAiLCBnX3ZhcmlhbnRfbmV3KCIodCkiLCB0YXJn
ZXRJRCkpOwogfQogCi12b2lkIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6Y2xvc2UoR0RCdXNDb25u
ZWN0aW9uKiBjbGllbnRDb25uZWN0aW9uLCB1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90
IHRhcmdldElEKQordm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNsb3NlKFNvY2tldENvbm5l
Y3Rpb24mIGNsaWVudENvbm5lY3Rpb24sIHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3Qg
dGFyZ2V0SUQpCiB7Ci0gICAgQVNTRVJUKG1fY2xpZW50Q29ubmVjdGlvbi5nZXQoKSA9PSBjbGll
bnRDb25uZWN0aW9uIHx8IG1fYXV0b21hdGlvbkNvbm5lY3Rpb24uZ2V0KCkgPT0gY2xpZW50Q29u
bmVjdGlvbik7CisgICAgQVNTRVJUKG1fY2xpZW50Q29ubmVjdGlvbiA9PSAmY2xpZW50Q29ubmVj
dGlvbiB8fCBtX2F1dG9tYXRpb25Db25uZWN0aW9uID09ICZjbGllbnRDb25uZWN0aW9uKTsKICAg
ICBBU1NFUlQobV9pZFRvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbk1hcC5jb250YWlucyhjb25u
ZWN0aW9uSUQpKTsKLSAgICBpZiAoY2xpZW50Q29ubmVjdGlvbiA9PSBtX2F1dG9tYXRpb25Db25u
ZWN0aW9uLmdldCgpKSB7CisgICAgaWYgKCZjbGllbnRDb25uZWN0aW9uID09IG1fYXV0b21hdGlv
bkNvbm5lY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6IGF1dG9tYXRpb24uCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBBU1NFUlQobV9pbnNwZWN0aW9uVGFyZ2V0cy5jb250YWlucyhz
dGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSkpOwotICAgIGF1dG8qIHJlbW90
ZUluc3BlY3RvckNvbm5lY3Rpb24gPSBtX2lkVG9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uTWFw
LmdldChjb25uZWN0aW9uSUQpOwotICAgIGdfZGJ1c19jb25uZWN0aW9uX2NhbGwocmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbiwgbnVsbHB0ciwKLSAgICAgICAgUkVNT1RFX0lOU1BFQ1RPUl9EQlVT
X09CSkVDVF9QQVRILAotICAgICAgICBSRU1PVEVfSU5TUEVDVE9SX0RCVVNfSU5URVJGQUNFLAot
ICAgICAgICAiRnJvbnRlbmREaWRDbG9zZSIsCi0gICAgICAgIGdfdmFyaWFudF9uZXcoIih0KSIs
IHRhcmdldElEKSwKLSAgICAgICAgbnVsbHB0ciwgR19EQlVTX0NBTExfRkxBR1NfTk9fQVVUT19T
VEFSVCwKLSAgICAgICAgLTEsIG1fY2FuY2VsbGFibGUuZ2V0KCksIFJlbW90ZUluc3BlY3RvclNl
cnZlckludGVybmFsOjpkYnVzQ29ubmVjdGlvbkNhbGxBc3luY1JlYWR5Q2FsbGJhY2ssIG51bGxw
dHIpOworICAgIG1faWRUb1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25NYXAuZ2V0KGNvbm5lY3Rp
b25JRCktPnNlbmRNZXNzYWdlKCJGcm9udGVuZERpZENsb3NlIiwgZ192YXJpYW50X25ldygiKHQp
IiwgdGFyZ2V0SUQpKTsKICAgICBtX2luc3BlY3Rpb25UYXJnZXRzLnJlbW92ZShzdGQ6Om1ha2Vf
cGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CiB9CiAKLXZvaWQgUmVtb3RlSW5zcGVjdG9y
U2VydmVyOjpjbGllbnRDb25uZWN0aW9uQ2xvc2VkKEdEQnVzQ29ubmVjdGlvbiogY2xpZW50Q29u
bmVjdGlvbikKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpjb25uZWN0aW9uRGlkQ2xvc2Uo
U29ja2V0Q29ubmVjdGlvbiYgY2xpZW50Q29ubmVjdGlvbikKIHsKLSAgICBBU1NFUlQobV9jbGll
bnRDb25uZWN0aW9uLmdldCgpID09IGNsaWVudENvbm5lY3Rpb24gfHwgbV9hdXRvbWF0aW9uQ29u
bmVjdGlvbi5nZXQoKSA9PSBjbGllbnRDb25uZWN0aW9uKTsKLSAgICBpZiAoY2xpZW50Q29ubmVj
dGlvbiA9PSBtX2F1dG9tYXRpb25Db25uZWN0aW9uLmdldCgpKSB7CisgICAgQVNTRVJUKG1fY29u
bmVjdGlvbnMuY29udGFpbnMoJmNsaWVudENvbm5lY3Rpb24pKTsKKyAgICBpZiAoJmNsaWVudENv
bm5lY3Rpb24gPT0gbV9hdXRvbWF0aW9uQ29ubmVjdGlvbikgewogICAgICAgICBmb3IgKGF1dG8g
Y29ubmVjdGlvblRhcmdldFBhaXIgOiBtX2F1dG9tYXRpb25UYXJnZXRzKQogICAgICAgICAgICAg
Y2xvc2UoY2xpZW50Q29ubmVjdGlvbiwgY29ubmVjdGlvblRhcmdldFBhaXIuZmlyc3QsIGNvbm5l
Y3Rpb25UYXJnZXRQYWlyLnNlY29uZCk7CiAgICAgICAgIG1fYXV0b21hdGlvbkNvbm5lY3Rpb24g
PSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChhdXRvIGNvbm5l
Y3Rpb25UYXJnZXRQYWlyIDogbV9pbnNwZWN0aW9uVGFyZ2V0cykKLSAgICAgICAgY2xvc2UoY2xp
ZW50Q29ubmVjdGlvbiwgY29ubmVjdGlvblRhcmdldFBhaXIuZmlyc3QsIGNvbm5lY3Rpb25UYXJn
ZXRQYWlyLnNlY29uZCk7Ci0gICAgbV9jbGllbnRDb25uZWN0aW9uID0gbnVsbHB0cjsKLX0KLQot
dm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNvbm5lY3Rpb25DbG9zZWQoR0RCdXNDb25uZWN0
aW9uKiByZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uKQotewotICAgIEFTU0VSVChtX2Nvbm5lY3Rp
b25zLmNvbnRhaW5zKHJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb24pKTsKLSAgICBpZiAobV9yZW1v
dGVJbnNwZWN0b3JDb25uZWN0aW9uVG9JRE1hcC5jb250YWlucyhyZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uKSkgewotICAgICAgICB1aW50NjRfdCBjb25uZWN0aW9uSUQgPSBtX3JlbW90ZUluc3Bl
Y3RvckNvbm5lY3Rpb25Ub0lETWFwLnRha2UocmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbik7Cisg
ICAgfSBlbHNlIGlmICgmY2xpZW50Q29ubmVjdGlvbiA9PSBtX2NsaWVudENvbm5lY3Rpb24pIHsK
KyAgICAgICAgZm9yIChhdXRvIGNvbm5lY3Rpb25UYXJnZXRQYWlyIDogbV9pbnNwZWN0aW9uVGFy
Z2V0cykKKyAgICAgICAgICAgIGNsb3NlKGNsaWVudENvbm5lY3Rpb24sIGNvbm5lY3Rpb25UYXJn
ZXRQYWlyLmZpcnN0LCBjb25uZWN0aW9uVGFyZ2V0UGFpci5zZWNvbmQpOworICAgICAgICBtX2Ns
aWVudENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIH0gZWxzZSBpZiAobV9yZW1vdGVJbnNwZWN0
b3JDb25uZWN0aW9uVG9JRE1hcC5jb250YWlucygmY2xpZW50Q29ubmVjdGlvbikpIHsKKyAgICAg
ICAgdWludDY0X3QgY29ubmVjdGlvbklEID0gbV9yZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uVG9J
RE1hcC50YWtlKCZjbGllbnRDb25uZWN0aW9uKTsKICAgICAgICAgbV9pZFRvUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbk1hcC5yZW1vdmUoY29ubmVjdGlvbklEKTsKICAgICAgICAgLy8gU2VuZCBh
biBlbXB0eSB0YXJnZXQgbGlzdCB0byB0aGUgY2xpZW50cy4KLSAgICAgICAgVmVjdG9yPEdSZWZQ
dHI8R0RCdXNDb25uZWN0aW9uPj4gY2xpZW50Q29ubmVjdGlvbnMgPSB7IG1fYXV0b21hdGlvbkNv
bm5lY3Rpb24sIG1fY2xpZW50Q29ubmVjdGlvbiB9OwotICAgICAgICBmb3IgKGF1dG8mIGNsaWVu
dENvbm5lY3Rpb24gOiBjbGllbnRDb25uZWN0aW9ucykgewotICAgICAgICAgICAgaWYgKCFjbGll
bnRDb25uZWN0aW9uKQorICAgICAgICBWZWN0b3I8U29ja2V0Q29ubmVjdGlvbio+IGNsaWVudENv
bm5lY3Rpb25zID0geyBtX2F1dG9tYXRpb25Db25uZWN0aW9uLCBtX2NsaWVudENvbm5lY3Rpb24g
fTsKKyAgICAgICAgZm9yIChhdXRvKiBjb25uZWN0aW9uIDogY2xpZW50Q29ubmVjdGlvbnMpIHsK
KyAgICAgICAgICAgIGlmICghY29ubmVjdGlvbikKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2NhbGwoY2xpZW50Q29ubmVjdGlvbi5nZXQo
KSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBSRU1PVEVfSU5TUEVDVE9SX0NMSUVOVF9PQkpF
Q1RfUEFUSCwKLSAgICAgICAgICAgICAgICBSRU1PVEVfSU5TUEVDVE9SX0NMSUVOVF9EQlVTX0lO
VEVSRkFDRSwKLSAgICAgICAgICAgICAgICAiU2V0VGFyZ2V0TGlzdCIsCi0gICAgICAgICAgICAg
ICAgZ192YXJpYW50X25ldygiKHRAYSh0c3NzYikpIiwgY29ubmVjdGlvbklELCBnX3ZhcmlhbnRf
bmV3X2FycmF5KEdfVkFSSUFOVF9UWVBFKCIodHNzc2IpIiksIG51bGxwdHIsIDApKSwKLSAgICAg
ICAgICAgICAgICBudWxscHRyLCBHX0RCVVNfQ0FMTF9GTEFHU19OT19BVVRPX1NUQVJULAotICAg
ICAgICAgICAgICAgIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBSZW1vdGVJbnNwZWN0b3JTZXJ2
ZXJJbnRlcm5hbDo6ZGJ1c0Nvbm5lY3Rpb25DYWxsQXN5bmNSZWFkeUNhbGxiYWNrLCBudWxscHRy
KTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZXRUYXJnZXRMaXN0Iiwg
Z192YXJpYW50X25ldygiKHRAYSh0c3NzYikpIiwgY29ubmVjdGlvbklELCBnX3ZhcmlhbnRfbmV3
X2FycmF5KEdfVkFSSUFOVF9UWVBFKCIodHNzc2IpIiksIG51bGxwdHIsIDApKSk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgbV9jb25uZWN0aW9ucy5yZW1vdmUocmVtb3RlSW5zcGVjdG9yQ29ubmVj
dGlvbik7CisgICAgbV9jb25uZWN0aW9ucy5yZW1vdmUoJmNsaWVudENvbm5lY3Rpb24pOwogfQog
Ci12b2lkIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoR0RCdXND
b25uZWN0aW9uKiBjbGllbnRDb25uZWN0aW9uLCB1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2
NF90IHRhcmdldElELCBjb25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXI6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKFNvY2tldENvbm5lY3Rpb24mIGNsaWVudENvbm5l
Y3Rpb24sIHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKG1fY2xpZW50Q29ubmVjdGlvbi5nZXQoKSA9PSBj
bGllbnRDb25uZWN0aW9uIHx8IG1fYXV0b21hdGlvbkNvbm5lY3Rpb24uZ2V0KCkgPT0gY2xpZW50
Q29ubmVjdGlvbik7CisgICAgQVNTRVJUKG1fY2xpZW50Q29ubmVjdGlvbiA9PSAmY2xpZW50Q29u
bmVjdGlvbiB8fCBtX2F1dG9tYXRpb25Db25uZWN0aW9uID09ICZjbGllbnRDb25uZWN0aW9uKTsK
ICAgICBBU1NFUlQobV9pZFRvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbk1hcC5jb250YWlucyhj
b25uZWN0aW9uSUQpKTsKLSAgICBpZiAoY2xpZW50Q29ubmVjdGlvbiA9PSBtX2F1dG9tYXRpb25D
b25uZWN0aW9uLmdldCgpKSB7CisgICAgaWYgKCZjbGllbnRDb25uZWN0aW9uID09IG1fYXV0b21h
dGlvbkNvbm5lY3Rpb24pIHsKICAgICAgICAgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5z
ZW5kTWVzc2FnZVRvVGFyZ2V0KHRhcmdldElELCBtZXNzYWdlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8qIHJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb24gPSBtX2lkVG9SZW1v
dGVJbnNwZWN0b3JDb25uZWN0aW9uTWFwLmdldChjb25uZWN0aW9uSUQpOwotICAgIGdfZGJ1c19j
b25uZWN0aW9uX2NhbGwocmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbiwgbnVsbHB0ciwKLSAgICAg
ICAgUkVNT1RFX0lOU1BFQ1RPUl9EQlVTX09CSkVDVF9QQVRILAotICAgICAgICBSRU1PVEVfSU5T
UEVDVE9SX0RCVVNfSU5URVJGQUNFLAotICAgICAgICAiU2VuZE1lc3NhZ2VUb1RhcmdldCIsCi0g
ICAgICAgIGdfdmFyaWFudF9uZXcoIih0JnMpIiwgdGFyZ2V0SUQsIG1lc3NhZ2UpLAotICAgICAg
ICBudWxscHRyLCBHX0RCVVNfQ0FMTF9GTEFHU19OT19BVVRPX1NUQVJULAotICAgICAgICAtMSwg
bV9jYW5jZWxsYWJsZS5nZXQoKSwgUmVtb3RlSW5zcGVjdG9yU2VydmVySW50ZXJuYWw6OmRidXND
b25uZWN0aW9uQ2FsbEFzeW5jUmVhZHlDYWxsYmFjaywgbnVsbHB0cik7CisgICAgbV9pZFRvUmVt
b3RlSW5zcGVjdG9yQ29ubmVjdGlvbk1hcC5nZXQoY29ubmVjdGlvbklEKS0+c2VuZE1lc3NhZ2Uo
IlNlbmRNZXNzYWdlVG9UYXJnZXQiLCBnX3ZhcmlhbnRfbmV3KCIodCZzKSIsIHRhcmdldElELCBt
ZXNzYWdlKSk7CiB9CiAKLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRv
RnJvbnRlbmQoR0RCdXNDb25uZWN0aW9uKiByZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uLCB1aW50
NjRfdCB0YXJnZXRJRCwgY29uc3QgY2hhciogbWVzc2FnZSkKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
U2VydmVyOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoU29ja2V0Q29ubmVjdGlvbiYgcmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbiwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
CiB7Ci0gICAgQVNTRVJUKG1fY29ubmVjdGlvbnMuY29udGFpbnMocmVtb3RlSW5zcGVjdG9yQ29u
bmVjdGlvbikpOwotICAgIEFTU0VSVChtX3JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25Ub0lETWFw
LmNvbnRhaW5zKHJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb24pKTsKKyAgICBBU1NFUlQobV9jb25u
ZWN0aW9ucy5jb250YWlucygmcmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbikpOworICAgIEFTU0VS
VChtX3JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25Ub0lETWFwLmNvbnRhaW5zKCZyZW1vdGVJbnNw
ZWN0b3JDb25uZWN0aW9uKSk7CiAKLSAgICB1aW50NjRfdCBjb25uZWN0aW9uSUQgPSBtX3JlbW90
ZUluc3BlY3RvckNvbm5lY3Rpb25Ub0lETWFwLmdldChyZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9u
KTsKKyAgICB1aW50NjRfdCBjb25uZWN0aW9uSUQgPSBtX3JlbW90ZUluc3BlY3RvckNvbm5lY3Rp
b25Ub0lETWFwLmdldCgmcmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbik7CiAgICAgYXV0byBjb25u
ZWN0aW9uVGFyZ2V0UGFpciA9IHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQp
OwogICAgIEFTU0VSVChtX2F1dG9tYXRpb25UYXJnZXRzLmNvbnRhaW5zKGNvbm5lY3Rpb25UYXJn
ZXRQYWlyKSB8fCBtX2luc3BlY3Rpb25UYXJnZXRzLmNvbnRhaW5zKGNvbm5lY3Rpb25UYXJnZXRQ
YWlyKSk7Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBjbGllbnRDb25uZWN0aW9uID0gbV9pbnNwZWN0
aW9uVGFyZ2V0cy5jb250YWlucyhjb25uZWN0aW9uVGFyZ2V0UGFpcikgPyBtX2NsaWVudENvbm5l
Y3Rpb24uZ2V0KCkgOiBtX2F1dG9tYXRpb25Db25uZWN0aW9uLmdldCgpOworICAgIFNvY2tldENv
bm5lY3Rpb24qIGNsaWVudENvbm5lY3Rpb24gPSBtX2luc3BlY3Rpb25UYXJnZXRzLmNvbnRhaW5z
KGNvbm5lY3Rpb25UYXJnZXRQYWlyKSA/IG1fY2xpZW50Q29ubmVjdGlvbiA6IG1fYXV0b21hdGlv
bkNvbm5lY3Rpb247CiAgICAgQVNTRVJUKGNsaWVudENvbm5lY3Rpb24pOwotCi0gICAgZ19kYnVz
X2Nvbm5lY3Rpb25fY2FsbChjbGllbnRDb25uZWN0aW9uLCBudWxscHRyLAotICAgICAgICBSRU1P
VEVfSU5TUEVDVE9SX0NMSUVOVF9PQkpFQ1RfUEFUSCwKLSAgICAgICAgUkVNT1RFX0lOU1BFQ1RP
Ul9DTElFTlRfREJVU19JTlRFUkZBQ0UsCi0gICAgICAgICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQi
LAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIodHQmcykiLCBtX3JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25Ub0lETWFwLmdldChyZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uKSwgdGFyZ2V0SUQsIG1l
c3NhZ2UpLAotICAgICAgICBudWxscHRyLCBHX0RCVVNfQ0FMTF9GTEFHU19OT19BVVRPX1NUQVJU
LAotICAgICAgICAtMSwgbV9jYW5jZWxsYWJsZS5nZXQoKSwgUmVtb3RlSW5zcGVjdG9yU2VydmVy
SW50ZXJuYWw6OmRidXNDb25uZWN0aW9uQ2FsbEFzeW5jUmVhZHlDYWxsYmFjaywgbnVsbHB0cik7
CisgICAgY2xpZW50Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCIsIGdfdmFyaWFudF9uZXcoIih0dCZzKSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3Nh
Z2UpKTsKIH0KIAotdm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnN0YXJ0QXV0b21hdGlvblNl
c3Npb24oR0RCdXNDb25uZWN0aW9uKiBhdXRvbWF0aW9uQ29ubmVjdGlvbiwgY29uc3QgY2hhciog
c2Vzc2lvbklELCBjb25zdCBSZW1vdGVJbnNwZWN0b3I6OkNsaWVudDo6U2Vzc2lvbkNhcGFiaWxp
dGllcyYgY2FwYWJpbGl0aWVzKQordm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnN0YXJ0QXV0
b21hdGlvblNlc3Npb24oU29ja2V0Q29ubmVjdGlvbiYgYXV0b21hdGlvbkNvbm5lY3Rpb24sIGNv
bnN0IGNoYXIqIHNlc3Npb25JRCwgY29uc3QgUmVtb3RlSW5zcGVjdG9yOjpDbGllbnQ6OlNlc3Np
b25DYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcykKIHsKICAgICBpZiAoIW1fYXV0b21hdGlvbkNv
bm5lY3Rpb24pCi0gICAgICAgIG1fYXV0b21hdGlvbkNvbm5lY3Rpb24gPSBhdXRvbWF0aW9uQ29u
bmVjdGlvbjsKLSAgICBBU1NFUlQobV9hdXRvbWF0aW9uQ29ubmVjdGlvbi5nZXQoKSA9PSBhdXRv
bWF0aW9uQ29ubmVjdGlvbik7CisgICAgICAgIG1fYXV0b21hdGlvbkNvbm5lY3Rpb24gPSAmYXV0
b21hdGlvbkNvbm5lY3Rpb247CisgICAgQVNTRVJUKG1fYXV0b21hdGlvbkNvbm5lY3Rpb24gPT0g
JmF1dG9tYXRpb25Db25uZWN0aW9uKTsKIAogICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9u
KCkucmVxdWVzdEF1dG9tYXRpb25TZXNzaW9uKHNlc3Npb25JRCwgY2FwYWJpbGl0aWVzKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL2dsaWIv
UmVtb3RlSW5zcGVjdG9yU2VydmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclNlcnZlci5oCmluZGV4IGY2YzdiNGVmYmRlLi5i
MDUyZWE0YzY4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9y
ZW1vdGUvZ2xpYi9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9nbGliL1JlbW90ZUluc3BlY3RvclNlcnZlci5oCkBAIC0z
MSwxNCArMzEsMTAgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL1NvY2tldENvbm5lY3Rpb24uaD4KIAotdHlwZWRlZiBzdHJ1Y3QgX0dDYW5jZWxsYWJsZSBH
Q2FuY2VsbGFibGU7Ci10eXBlZGVmIHN0cnVjdCBfR0RCdXNDb25uZWN0aW9uIEdEQnVzQ29ubmVj
dGlvbjsKLXR5cGVkZWYgc3RydWN0IF9HREJ1c0ludGVyZmFjZUluZm8gR0RCdXNJbnRlcmZhY2VJ
bmZvOwotdHlwZWRlZiBzdHJ1Y3QgX0dEQnVzSW50ZXJmYWNlVlRhYmxlIEdEQnVzSW50ZXJmYWNl
VlRhYmxlOwotdHlwZWRlZiBzdHJ1Y3QgX0dEQnVzTm9kZUluZm8gR0RCdXNOb2RlSW5mbzsKLXR5
cGVkZWYgc3RydWN0IF9HREJ1c1NlcnZlciBHREJ1c1NlcnZlcjsKLXR5cGVkZWYgc3RydWN0IF9H
VmFyaWFudCBHVmFyaWFudDsKK3R5cGVkZWYgc3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29j
a2V0Q29ubmVjdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9HU29ja2V0U2VydmljZSBHU29ja2V0U2Vy
dmljZTsKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ4LDM3ICs0NCwyOSBAQCBwdWJs
aWM6CiAgICAgflJlbW90ZUluc3BlY3RvclNlcnZlcigpOwogCiAgICAgYm9vbCBzdGFydChjb25z
dCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0KTsKLSAgICBib29sIGlzUnVubmluZygpIGNv
bnN0IHsgcmV0dXJuICEhbV9kYnVzU2VydmVyOyB9CisgICAgYm9vbCBpc1J1bm5pbmcoKSBjb25z
dCB7IHJldHVybiAhIW1fc2VydmljZTsgfQogCiBwcml2YXRlOgotICAgIEdEQnVzSW50ZXJmYWNl
SW5mbyogaW50ZXJmYWNlSW5mbygpOworICAgIHN0YXRpYyBnYm9vbGVhbiBpbmNvbWluZ0Nvbm5l
Y3Rpb25DYWxsYmFjayhHU29ja2V0U2VydmljZSosIEdTb2NrZXRDb25uZWN0aW9uKiwgR09iamVj
dCosIFJlbW90ZUluc3BlY3RvclNlcnZlciopOworICAgIHZvaWQgaW5jb21pbmdDb25uZWN0aW9u
KFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmKTsKIAotICAgIHN0YXRpYyBnYm9vbGVhbiBuZXdDb25u
ZWN0aW9uQ2FsbGJhY2soR0RCdXNTZXJ2ZXIqLCBHREJ1c0Nvbm5lY3Rpb24qLCBSZW1vdGVJbnNw
ZWN0b3JTZXJ2ZXIqKTsKLSAgICBzdGF0aWMgdm9pZCBjb25uZWN0aW9uQ2xvc2VkQ2FsbGJhY2so
R0RCdXNDb25uZWN0aW9uKiwgZ2Jvb2xlYW4gcmVtb3RlUGVlclZhbmlzaGVkLCBHRXJyb3IqLCBS
ZW1vdGVJbnNwZWN0b3JTZXJ2ZXIqKTsKLSAgICB2b2lkIG5ld0Nvbm5lY3Rpb24oR0RCdXNDb25u
ZWN0aW9uKik7Ci0gICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKEdEQnVzQ29ubmVjdGlvbiopOwor
ICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMgc19tZXNz
YWdlSGFuZGxlcnM7CisgICAgdm9pZCBjb25uZWN0aW9uRGlkQ2xvc2UoU29ja2V0Q29ubmVjdGlv
biYpOworICAgIHZvaWQgc2V0VGFyZ2V0TGlzdChTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQq
KTsKKyAgICBHVmFyaWFudCogc2V0dXBJbnNwZWN0b3JDbGllbnQoU29ja2V0Q29ubmVjdGlvbiYs
IGNvbnN0IGNoYXIqIGNsaWVudEJhY2tlbmRDb21tYW5kc0hhc2gpOworICAgIHZvaWQgc2V0dXAo
U29ja2V0Q29ubmVjdGlvbiYsIHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0
SUQpOworICAgIHZvaWQgY2xvc2UoU29ja2V0Q29ubmVjdGlvbiYsIHVpbnQ2NF90IGNvbm5lY3Rp
b25JRCwgdWludDY0X3QgdGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KFNvY2tldENvbm5lY3Rpb24mLCB1aW50NjRfdCB0YXJnZXQsIGNvbnN0IGNoYXIqKTsKKyAgICB2
b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKFNvY2tldENvbm5lY3Rpb24mLCB1aW50NjRfdCBjb25u
ZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKik7CisgICAgdm9pZCBzdGFy
dEF1dG9tYXRpb25TZXNzaW9uKFNvY2tldENvbm5lY3Rpb24mLCBjb25zdCBjaGFyKiBzZXNzaW9u
SUQsIGNvbnN0IFJlbW90ZUluc3BlY3Rvcjo6Q2xpZW50OjpTZXNzaW9uQ2FwYWJpbGl0aWVzJik7
CiAKLSAgICBzdGF0aWMgY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19pbnRlcmZhY2VWVGFi
bGU7Ci0gICAgdm9pZCBzZXRUYXJnZXRMaXN0KEdEQnVzQ29ubmVjdGlvbiosIEdWYXJpYW50Kik7
Ci0gICAgR1ZhcmlhbnQqIHNldHVwSW5zcGVjdG9yQ2xpZW50KEdEQnVzQ29ubmVjdGlvbiosIGNv
bnN0IGNoYXIqIGNsaWVudEJhY2tlbmRDb21tYW5kc0hhc2gpOwotICAgIHZvaWQgc2V0dXAoR0RC
dXNDb25uZWN0aW9uKiwgdWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCk7
Ci0gICAgdm9pZCBjbG9zZShHREJ1c0Nvbm5lY3Rpb24qLCB1aW50NjRfdCBjb25uZWN0aW9uSUQs
IHVpbnQ2NF90IHRhcmdldElEKTsKLSAgICB2b2lkIGNsaWVudENvbm5lY3Rpb25DbG9zZWQoR0RC
dXNDb25uZWN0aW9uKik7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoR0RCdXNDb25u
ZWN0aW9uKiwgdWludDY0X3QgdGFyZ2V0LCBjb25zdCBjaGFyKik7Ci0gICAgdm9pZCBzZW5kTWVz
c2FnZVRvQmFja2VuZChHREJ1c0Nvbm5lY3Rpb24qLCB1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVp
bnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKik7Ci0gICAgdm9pZCBzdGFydEF1dG9tYXRpb25T
ZXNzaW9uKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqIHNlc3Npb25JRCwgY29uc3QgUmVt
b3RlSW5zcGVjdG9yOjpDbGllbnQ6OlNlc3Npb25DYXBhYmlsaXRpZXMmKTsKLQotICAgIHN0YXRp
YyB2b2lkIGNsaWVudENvbm5lY3Rpb25DbG9zZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qLCBn
Ym9vbGVhbiByZW1vdGVQZWVyVmFuaXNoZWQsIEdFcnJvciosIFJlbW90ZUluc3BlY3RvclNlcnZl
ciopOwotCi0gICAgR0RCdXNOb2RlSW5mbyogbV9pbnRyb3NwZWN0aW9uRGF0YSB7IG51bGxwdHIg
fTsKLSAgICBHUmVmUHRyPEdEQnVzU2VydmVyPiBtX2RidXNTZXJ2ZXI7Ci0gICAgR1JlZlB0cjxH
Q2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgSGFzaFNldDxHUmVmUHRyPEdEQnVzQ29u
bmVjdGlvbj4+IG1fY29ubmVjdGlvbnM7Ci0gICAgSGFzaE1hcDxHREJ1c0Nvbm5lY3Rpb24qLCB1
aW50NjRfdD4gbV9yZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uVG9JRE1hcDsKLSAgICBIYXNoTWFw
PHVpbnQ2NF90LCBHREJ1c0Nvbm5lY3Rpb24qPiBtX2lkVG9SZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uTWFwOwotICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiBtX2NsaWVudENvbm5lY3Rpb247
CisgICAgR1JlZlB0cjxHU29ja2V0U2VydmljZT4gbV9zZXJ2aWNlOworICAgIEhhc2hTZXQ8UmVm
UHRyPFNvY2tldENvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25zOworICAgIEhhc2hNYXA8U29ja2V0
Q29ubmVjdGlvbiosIHVpbnQ2NF90PiBtX3JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25Ub0lETWFw
OworICAgIEhhc2hNYXA8dWludDY0X3QsIFNvY2tldENvbm5lY3Rpb24qPiBtX2lkVG9SZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uTWFwOworICAgIFNvY2tldENvbm5lY3Rpb24qIG1fY2xpZW50Q29u
bmVjdGlvbiB7IG51bGxwdHIgfTsKKyAgICBTb2NrZXRDb25uZWN0aW9uKiBtX2F1dG9tYXRpb25D
b25uZWN0aW9uIHsgbnVsbHB0ciB9OwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPHVpbnQ2NF90LCB1
aW50NjRfdD4+IG1faW5zcGVjdGlvblRhcmdldHM7Ci0gICAgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rp
b24+IG1fYXV0b21hdGlvbkNvbm5lY3Rpb247CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8dWludDY0
X3QsIHVpbnQ2NF90Pj4gbV9hdXRvbWF0aW9uVGFyZ2V0czsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNmFhYTQzOWM4
YTIuLjIxZDYxMGE2ZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTExLTIyICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVd
IFJlbW90ZUluc3BlY3RvcjogdXNlIHNvY2tldHMgaW5zdGVhZCBvZiBEQnVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ1MDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgU29ja2V0Q29ubmVjdGlv
biBjbGFzcy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiB3
dGYvUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICogd3RmL2dsaWIvR1NvY2tldE1vbml0b3Iu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvZ2xpYi9HU29ja2V0
TW9uaXRvci5jcHAuCisgICAgICAgIChXVEY6OkdTb2NrZXRNb25pdG9yOjpzdGFydCk6CisgICAg
ICAgICogd3RmL2dsaWIvR1NvY2tldE1vbml0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuaC4KKyAgICAgICAgKFdURjo6R1Nv
Y2tldE1vbml0b3I6OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKiB3dGYvZ2xpYi9HVHlwZWRl
ZnMuaDoKKyAgICAgICAgKiB3dGYvZ2xpYi9HVW5pcXVlUHRyLmg6CisgICAgICAgICogd3RmL2ds
aWIvU29ja2V0Q29ubmVjdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpTb2NrZXRDb25u
ZWN0aW9uOjpTb2NrZXRDb25uZWN0aW9uKToKKyAgICAgICAgKFdURjo6U29ja2V0Q29ubmVjdGlv
bjo6flNvY2tldENvbm5lY3Rpb24pOgorICAgICAgICAoV1RGOjpTb2NrZXRDb25uZWN0aW9uOjpy
ZWFkKToKKyAgICAgICAgKFdURjo6U29ja2V0Q29ubmVjdGlvbjo6cmVhZE1lc3NhZ2UpOgorICAg
ICAgICAoV1RGOjpTb2NrZXRDb25uZWN0aW9uOjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChXVEY6
OlNvY2tldENvbm5lY3Rpb246OndyaXRlKToKKyAgICAgICAgKFdURjo6U29ja2V0Q29ubmVjdGlv
bjo6d2FpdEZvclNvY2tldFdyaXRhYmlsaXR5KToKKyAgICAgICAgKFdURjo6U29ja2V0Q29ubmVj
dGlvbjo6Y2xvc2UpOgorICAgICAgICAoV1RGOjpTb2NrZXRDb25uZWN0aW9uOjpkaWRDbG9zZSk6
CisgICAgICAgICogd3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6U29ja2V0Q29ubmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6U29ja2V0Q29u
bmVjdGlvbjo6aXNDbG9zZWQgY29uc3QpOgorCiAyMDE5LTExLTE1ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIGluZGV4LW1hc2tpbmcg
b24gU2NvcGVkQXJndW1lbnRzIGFuZCBwdXQgaXQgaW4gSXNvU3Vic3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm1HVEsuY21ha2UKaW5kZXggOWRjNDU1MjU2ZWUuLjc4MjJhYjdhMzgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtNCw5ICs0LDExIEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVB
REVSUwogICAgIGdsaWIvR0xpYlV0aWxpdGllcy5oCiAgICAgZ2xpYi9HTXV0ZXhMb2NrZXIuaAog
ICAgIGdsaWIvR1JlZlB0ci5oCisgICAgZ2xpYi9HU29ja2V0TW9uaXRvci5oCiAgICAgZ2xpYi9H
VHlwZWRlZnMuaAogICAgIGdsaWIvR1VuaXF1ZVB0ci5oCiAgICAgZ2xpYi9SdW5Mb29wU291cmNl
UHJpb3JpdHkuaAorICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5oCiAgICAgZ2xpYi9XVEZHVHlw
ZS5oCiApCiAKQEAgLTI0LDcgKzI2LDkgQEAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICBn
bGliL0ZpbGVTeXN0ZW1HbGliLmNwcAogICAgIGdsaWIvR0xpYlV0aWxpdGllcy5jcHAKICAgICBn
bGliL0dSZWZQdHIuY3BwCisgICAgZ2xpYi9HU29ja2V0TW9uaXRvci5jcHAKICAgICBnbGliL1J1
bkxvb3BHTGliLmNwcAorICAgIGdsaWIvU29ja2V0Q29ubmVjdGlvbi5jcHAKICAgICBnbGliL1VS
TEdMaWIuY3BwCiAKICAgICBwb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVdQRS5jbWFrZQppbmRleCBkODBiZTJhMDc1Mi4uZTE4ZGI1MWI0NmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtV1BFLmNtYWtlCkBAIC0yLDkgKzIsMTEgQEAgbGlzdChBUFBFTkQgV1RGX1BVQkxJQ19IRUFE
RVJTCiAgICAgZ2xpYi9HTGliVXRpbGl0aWVzLmgKICAgICBnbGliL0dNdXRleExvY2tlci5oCiAg
ICAgZ2xpYi9HUmVmUHRyLmgKKyAgICBnbGliL0dTb2NrZXRNb25pdG9yLmgKICAgICBnbGliL0dU
eXBlZGVmcy5oCiAgICAgZ2xpYi9HVW5pcXVlUHRyLmgKICAgICBnbGliL1J1bkxvb3BTb3VyY2VQ
cmlvcml0eS5oCisgICAgZ2xpYi9Tb2NrZXRDb25uZWN0aW9uLmgKICAgICBnbGliL1dURkdUeXBl
LmgKIAogICAgIGxpbnV4L1Byb2Nlc3NNZW1vcnlGb290cHJpbnQuaApAQCAtMTksNyArMjEsOSBA
QCBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgIGdsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCiAg
ICAgZ2xpYi9HTGliVXRpbGl0aWVzLmNwcAogICAgIGdsaWIvR1JlZlB0ci5jcHAKKyAgICBnbGli
L0dTb2NrZXRNb25pdG9yLmNwcAogICAgIGdsaWIvUnVuTG9vcEdMaWIuY3BwCisgICAgZ2xpYi9T
b2NrZXRDb25uZWN0aW9uLmNwcAogICAgIGdsaWIvVVJMR0xpYi5jcHAKIAogICAgIGxpbnV4L0N1
cnJlbnRQcm9jZXNzTWVtb3J5U3RhdHVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvZ2xpYi9HU29ja2V0TW9uaXRvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGli
L0dTb2NrZXRNb25pdG9yLmNwcApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9nbGliL0dTb2NrZXRNb25pdG9yLmNwcApyZW5hbWUgdG8g
U291cmNlL1dURi93dGYvZ2xpYi9HU29ja2V0TW9uaXRvci5jcHAKaW5kZXggYjA1MmY4NzhiMWEu
LmM4OGVhOWY5MWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9nbGli
L0dTb2NrZXRNb25pdG9yLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dTb2NrZXRNb25p
dG9yLmNwcApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGdpby9naW8uaD4KICNpbmNsdWRl
IDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KIAotbmFtZXNwYWNlIElQQyB7Citu
YW1lc3BhY2UgV1RGIHsKIAogR1NvY2tldE1vbml0b3I6On5HU29ja2V0TW9uaXRvcigpCiB7CkBA
IC00Myw3ICs0Myw3IEBAIGdib29sZWFuIEdTb2NrZXRNb25pdG9yOjpzb2NrZXRTb3VyY2VDYWxs
YmFjayhHU29ja2V0KiwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwKICAgICByZXR1cm4gbW9uaXRv
ci0+bV9jYWxsYmFjayhjb25kaXRpb24pOwogfQogCi12b2lkIEdTb2NrZXRNb25pdG9yOjpzdGFy
dChHU29ja2V0KiBzb2NrZXQsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIFJ1bkxvb3AmIHJ1bkxv
b3AsIEZ1bmN0aW9uPGdib29sZWFuIChHSU9Db25kaXRpb24pPiYmIGNhbGxiYWNrKQordm9pZCBH
U29ja2V0TW9uaXRvcjo6c3RhcnQoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0
aW9uLCBSdW5Mb29wJiBydW5Mb29wLCBGdW5jdGlvbjxnYm9vbGVhbihHSU9Db25kaXRpb24pPiYm
IGNhbGxiYWNrKQogewogICAgIHN0b3AoKTsKIApAQCAtNjgsNCArNjgsNCBAQCB2b2lkIEdTb2Nr
ZXRNb25pdG9yOjpzdG9wKCkKICAgICBtX2NhbGxiYWNrID0gbnVsbHB0cjsKIH0KIAotfSAvLyBu
YW1lc3BhY2UgSVBDCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL2ds
aWIvR1NvY2tldE1vbml0b3IuaApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9nbGliL0dTb2NrZXRNb25pdG9yLmgKcmVuYW1lIHRvIFNv
dXJjZS9XVEYvd3RmL2dsaWIvR1NvY2tldE1vbml0b3IuaAppbmRleCA4YWM1ZjFjNzA2Yy4uMzBm
OTZhMzAxZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL2dsaWIvR1Nv
Y2tldE1vbml0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dTb2NrZXRNb25pdG9yLmgK
QEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIEdTb2NrZXRNb25pdG9yX2gKLSNkZWZpbmUgR1NvY2tldE1vbml0b3JfaAor
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTM0LDcgKzMzLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXQgR1NvY2tldDsK
IAotbmFtZXNwYWNlIElQQyB7CituYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgR1NvY2tldE1vbml0
b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdTb2NrZXRNb25pdG9yKTsKQEAgLTQyLDE3
ICs0MSwxOCBAQCBwdWJsaWM6CiAgICAgR1NvY2tldE1vbml0b3IoKSA9IGRlZmF1bHQ7CiAgICAg
fkdTb2NrZXRNb25pdG9yKCk7CiAKLSAgICB2b2lkIHN0YXJ0KEdTb2NrZXQqLCBHSU9Db25kaXRp
b24sIFJ1bkxvb3AmLCBGdW5jdGlvbjxnYm9vbGVhbiAoR0lPQ29uZGl0aW9uKT4mJik7CisgICAg
dm9pZCBzdGFydChHU29ja2V0KiwgR0lPQ29uZGl0aW9uLCBSdW5Mb29wJiwgRnVuY3Rpb248Z2Jv
b2xlYW4oR0lPQ29uZGl0aW9uKT4mJik7CiAgICAgdm9pZCBzdG9wKCk7CisgICAgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9zb3VyY2U7IH0KIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgZ2Jvb2xlYW4gc29ja2V0U291cmNlQ2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiwg
R1NvY2tldE1vbml0b3IqKTsKIAogICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7CiAgICAg
R1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgRnVuY3Rpb248Z2Jvb2xl
YW4gKEdJT0NvbmRpdGlvbik+IG1fY2FsbGJhY2s7CisgICAgRnVuY3Rpb248Z2Jvb2xlYW4oR0lP
Q29uZGl0aW9uKT4gbV9jYWxsYmFjazsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIElQQworfSAvLyBu
YW1lc3BhY2UgV1RGCiAKLSNlbmRpZiAvLyBHU29ja2V0TW9uaXRvcl9oCit1c2luZyBXVEY6OkdT
b2NrZXRNb25pdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9HVHlwZWRlZnMu
aCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1R5cGVkZWZzLmgKaW5kZXggZTk0NzkwZTczZTAuLjQw
M2ZmZDBhNDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dUeXBlZGVmcy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1R5cGVkZWZzLmgKQEAgLTYyLDYgKzYyLDcgQEAgdHlw
ZWRlZiBzdHJ1Y3QgX0dTb3VyY2UgR1NvdXJjZTsKIHR5cGVkZWYgc3RydWN0IF9HVmFyaWFudCBH
VmFyaWFudDsKIHR5cGVkZWYgc3RydWN0IF9HVmFyaWFudEJ1aWxkZXIgR1ZhcmlhbnRCdWlsZGVy
OwogdHlwZWRlZiBzdHJ1Y3QgX0dWYXJpYW50SXRlciBHVmFyaWFudEl0ZXI7Cit0eXBlZGVmIHN0
cnVjdCBfR1ZhcmlhbnRUeXBlIEdWYXJpYW50VHlwZTsKIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50
IEdka0V2ZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dUaW1lciBHVGltZXI7CiB0eXBlZGVmIHN0cnVj
dCBfR0tleUZpbGUgR0tleUZpbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dV
bmlxdWVQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1VuaXF1ZVB0ci5oCmluZGV4IGVmMzZm
MjY4MjQyLi5lZjYwZDEyNzdhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9HVW5p
cXVlUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9HVW5pcXVlUHRyLmgKQEAgLTQ2LDcg
KzQ2LDggQEAgdXNpbmcgR1VuaXF1ZVB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxULCBHUHRyRGVsZXRl
cjxUPj47CiAgICAgbWFjcm8oR1RpbWVyLCBnX3RpbWVyX2Rlc3Ryb3kpIFwKICAgICBtYWNybyhH
S2V5RmlsZSwgZ19rZXlfZmlsZV9mcmVlKSBcCiAgICAgbWFjcm8oY2hhciosIGdfc3RyZnJlZXYp
IFwKLSAgICBtYWNybyhHVmFyaWFudEl0ZXIsIGdfdmFyaWFudF9pdGVyX2ZyZWUpCisgICAgbWFj
cm8oR1ZhcmlhbnRJdGVyLCBnX3ZhcmlhbnRfaXRlcl9mcmVlKSBcCisgICAgbWFjcm8oR1Zhcmlh
bnRUeXBlLCBnX3ZhcmlhbnRfdHlwZV9mcmVlKQogCiAjZGVmaW5lIFdURl9ERUZJTkVfR1BUUl9E
RUxFVEVSKHR5cGVOYW1lLCBkZWxldGVyRnVuYykgXAogICAgIHRlbXBsYXRlPD4gc3RydWN0IEdQ
dHJEZWxldGVyPHR5cGVOYW1lPiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1Nv
Y2tldENvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9Tb2NrZXRDb25uZWN0aW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTg2OWJiOTBlYzYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1NvY2tldENvbm5lY3Rpb24u
Y3BwCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IElnYWxpYSwg
Uy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0Q29u
bmVjdGlvbi5oIgorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEJ1
ZmZlclNpemUgPSA0MDk2OworCitTb2NrZXRDb25uZWN0aW9uOjpTb2NrZXRDb25uZWN0aW9uKEdS
ZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlvbiwgY29uc3QgTWVzc2FnZUhhbmRs
ZXJzJiBtZXNzYWdlSGFuZGxlcnMsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIDogbV9jb25uZWN0
aW9uKFdURk1vdmUoY29ubmVjdGlvbikpCisgICAgLCBtX21lc3NhZ2VIYW5kbGVycyhtZXNzYWdl
SGFuZGxlcnMpCisgICAgLCBtX3VzZXJEYXRhKHVzZXJEYXRhKQoreworICAgIG1fcmVhZEJ1ZmZl
ci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlZmF1bHRCdWZmZXJTaXplKTsKKyAgICBtX3dyaXRl
QnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVmYXVsdEJ1ZmZlclNpemUpOworCisgICAg
YXV0byogc29ja2V0ID0gZ19zb2NrZXRfY29ubmVjdGlvbl9nZXRfc29ja2V0KG1fY29ubmVjdGlv
bi5nZXQoKSk7CisgICAgZ19zb2NrZXRfc2V0X2Jsb2NraW5nKHNvY2tldCwgRkFMU0UpOworICAg
IG1fcmVhZE1vbml0b3Iuc3RhcnQoc29ja2V0LCBHX0lPX0lOLCBSdW5Mb29wOjpjdXJyZW50KCks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKEdJT0NvbmRpdGlvbiBjb25k
aXRpb24pIC0+IGdib29sZWFuIHsKKyAgICAgICAgaWYgKGlzQ2xvc2VkKCkpCisgICAgICAgICAg
ICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOworCisgICAgICAgIGlmIChjb25kaXRpb24gJiBHX0lP
X0hVUCB8fCBjb25kaXRpb24gJiBHX0lPX0VSUiB8fCBjb25kaXRpb24gJiBHX0lPX05WQUwpIHsK
KyAgICAgICAgICAgIGRpZENsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gR19TT1VSQ0VfUkVN
T1ZFOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvbiAmIEdfSU9fSU4pOwor
ICAgICAgICByZXR1cm4gcmVhZCgpOworICAgIH0pOworfQorCitTb2NrZXRDb25uZWN0aW9uOjp+
U29ja2V0Q29ubmVjdGlvbigpCit7Cit9CisKK2Jvb2wgU29ja2V0Q29ubmVjdGlvbjo6cmVhZCgp
Cit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc2l6ZV90IHByZXZpb3VzQnVmZmVyU2l6
ZSA9IG1fcmVhZEJ1ZmZlci5zaXplKCk7CisgICAgICAgIGlmIChtX3JlYWRCdWZmZXIuY2FwYWNp
dHkoKSAtIHByZXZpb3VzQnVmZmVyU2l6ZSA8PSAwKQorICAgICAgICAgICAgbV9yZWFkQnVmZmVy
LnJlc2VydmVDYXBhY2l0eShtX3JlYWRCdWZmZXIuY2FwYWNpdHkoKSArIGRlZmF1bHRCdWZmZXJT
aXplKTsKKyAgICAgICAgbV9yZWFkQnVmZmVyLmdyb3cobV9yZWFkQnVmZmVyLmNhcGFjaXR5KCkp
OworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGF1dG8gYnl0
ZXNSZWFkID0gZ19zb2NrZXRfcmVjZWl2ZShnX3NvY2tldF9jb25uZWN0aW9uX2dldF9zb2NrZXQo
bV9jb25uZWN0aW9uLmdldCgpKSwgbV9yZWFkQnVmZmVyLmRhdGEoKSArIHByZXZpb3VzQnVmZmVy
U2l6ZSwgbV9yZWFkQnVmZmVyLnNpemUoKSAtIHByZXZpb3VzQnVmZmVyU2l6ZSwgbnVsbHB0ciwg
JmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSAtMSkgeworICAgICAg
ICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19F
UlJPUl9XT1VMRF9CTE9DSykpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWRCdWZmZXIuc2hyaW5r
KHByZXZpb3VzQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdfd2FybmluZygiRXJyb3IgcmVhZGluZyBmcm9tIHNvY2tldCBj
b25uZWN0aW9uOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAgZGlkQ2xvc2Uo
KTsKKyAgICAgICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWJ5dGVzUmVhZCkgeworICAgICAgICAgICAgZGlkQ2xvc2UoKTsKKyAgICAgICAg
ICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7CisgICAgICAgIH0KKworICAgICAgICBtX3JlYWRC
dWZmZXIuc2hyaW5rKHByZXZpb3VzQnVmZmVyU2l6ZSArIGJ5dGVzUmVhZCk7CisKKyAgICAgICAg
d2hpbGUgKHJlYWRNZXNzYWdlKCkpIHsgfQorICAgICAgICBpZiAoaXNDbG9zZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7CisgICAgfQorICAgIHJldHVybiBHX1NPVVJD
RV9DT05USU5VRTsKK30KKworYm9vbCBTb2NrZXRDb25uZWN0aW9uOjpyZWFkTWVzc2FnZSgpCit7
CisgICAgaWYgKG1fcmVhZEJ1ZmZlci5zaXplKCkgPCBzaXplb2Yoc2l6ZV90KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byogbWVzc2FnZURhdGEgPSBtX3JlYWRCdWZmZXIuZGF0
YSgpOworICAgIHNpemVfdCBib2R5U2l6ZTsKKyAgICBtZW1jcHkoJmJvZHlTaXplLCBtZXNzYWdl
RGF0YSwgc2l6ZW9mKHNpemVfdCkpOworICAgIG1lc3NhZ2VEYXRhICs9IHNpemVvZihzaXplX3Qp
OworICAgIGF1dG8gbWVzc2FnZVNpemUgPSBzaXplb2Yoc2l6ZV90KSArIGJvZHlTaXplOworICAg
IGlmIChtX3JlYWRCdWZmZXIuc2l6ZSgpIDwgbWVzc2FnZVNpemUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gbWVzc2FnZU5hbWVMZW5ndGggPSBzdHJsZW4obWVzc2FnZURhdGEp
ICsgMTsKKyAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUoKSA8IG1lc3NhZ2VOYW1lTGVuZ3RoKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgY29uc3QgYXV0byBpdCA9IG1fbWVzc2FnZUhhbmRsZXJzLmZpbmQobWVzc2Fn
ZURhdGEpOworICAgIGlmIChpdCAhPSBtX21lc3NhZ2VIYW5kbGVycy5lbmQoKSkgeworICAgICAg
ICBtZXNzYWdlRGF0YSArPSBtZXNzYWdlTmFtZUxlbmd0aDsKKyAgICAgICAgR1JlZlB0cjxHVmFy
aWFudD4gcGFyYW1ldGVyczsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuZmlyc3QuaXNOdWxsKCkp
IHsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8R1ZhcmlhbnRUeXBlPiB2YXJpYW50VHlwZShnX3Zh
cmlhbnRfdHlwZV9uZXcoaXQtPnZhbHVlLmZpcnN0LmRhdGEoKSkpOworICAgICAgICAgICAgcGFy
YW1ldGVycyA9IGdfdmFyaWFudF9uZXdfZnJvbV9kYXRhKHZhcmlhbnRUeXBlLmdldCgpLCBtZXNz
YWdlRGF0YSwgYm9keVNpemUgLSBtZXNzYWdlTmFtZUxlbmd0aCwgRkFMU0UsIG51bGxwdHIsIG51
bGxwdHIpOworICAgICAgICB9CisgICAgICAgIGl0LT52YWx1ZS5zZWNvbmQoKnRoaXMsIHBhcmFt
ZXRlcnMuZ2V0KCksIG1fdXNlckRhdGEpOworICAgICAgICBpZiAoaXNDbG9zZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUo
KSA+IG1lc3NhZ2VTaXplKSB7CisgICAgICAgIG1lbW1vdmUobV9yZWFkQnVmZmVyLmRhdGEoKSwg
bV9yZWFkQnVmZmVyLmRhdGEoKSArIG1lc3NhZ2VTaXplLCBtX3JlYWRCdWZmZXIuc2l6ZSgpIC0g
bWVzc2FnZVNpemUpOworICAgICAgICBtX3JlYWRCdWZmZXIuc2hyaW5rKG1fcmVhZEJ1ZmZlci5z
aXplKCkgLSBtZXNzYWdlU2l6ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fcmVhZEJ1ZmZlci5z
aHJpbmsoMCk7CisKKyAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUoKSA8IGRlZmF1bHRCdWZmZXJT
aXplKQorICAgICAgICBtX3JlYWRCdWZmZXIuc2hyaW5rQ2FwYWNpdHkoZGVmYXVsdEJ1ZmZlclNp
emUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU29ja2V0Q29ubmVjdGlvbjo6c2Vu
ZE1lc3NhZ2UoY29uc3QgY2hhciogbWVzc2FnZU5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzKQor
eworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IGFkb3B0ZWRQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsK
KyAgICBzaXplX3QgcGFyYW1ldGVyc1NpemUgPSBwYXJhbWV0ZXJzID8gZ192YXJpYW50X2dldF9z
aXplKHBhcmFtZXRlcnMpIDogMDsKKyAgICBhdXRvIG1lc3NhZ2VOYW1lTGVuZ3RoID0gc3RybGVu
KG1lc3NhZ2VOYW1lKSArIDE7CisgICAgc2l6ZV90IGJvZHlTaXplID0gbWVzc2FnZU5hbWVMZW5n
dGggKyBwYXJhbWV0ZXJzU2l6ZTsKKyAgICBzaXplX3QgcHJldmlvdXNCdWZmZXJTaXplID0gbV93
cml0ZUJ1ZmZlci5zaXplKCk7CisgICAgbV93cml0ZUJ1ZmZlci5ncm93KHByZXZpb3VzQnVmZmVy
U2l6ZSArIHNpemVvZihzaXplX3QpICsgYm9keVNpemUpOworCisgICAgYXV0byogbWVzc2FnZURh
dGEgPSBtX3dyaXRlQnVmZmVyLmRhdGEoKSArIHByZXZpb3VzQnVmZmVyU2l6ZTsKKyAgICBtZW1j
cHkobWVzc2FnZURhdGEsICZib2R5U2l6ZSwgc2l6ZW9mKHNpemVfdCkpOworICAgIG1lc3NhZ2VE
YXRhICs9IHNpemVvZihzaXplX3QpOworICAgIG1lbWNweShtZXNzYWdlRGF0YSwgbWVzc2FnZU5h
bWUsIG1lc3NhZ2VOYW1lTGVuZ3RoKTsKKyAgICBtZXNzYWdlRGF0YSArPSBtZXNzYWdlTmFtZUxl
bmd0aDsKKyAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgbWVtY3B5KG1lc3NhZ2VEYXRhLCBn
X3ZhcmlhbnRfZ2V0X2RhdGEocGFyYW1ldGVycyksIHBhcmFtZXRlcnNTaXplKTsKKworICAgIHdy
aXRlKCk7Cit9CisKK3ZvaWQgU29ja2V0Q29ubmVjdGlvbjo6d3JpdGUoKQoreworICAgIGlmIChp
c0Nsb3NlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgYXV0byBieXRlc1dyaXR0ZW4gPSBnX3NvY2tldF9zZW5kKGdfc29ja2V0X2Nv
bm5lY3Rpb25fZ2V0X3NvY2tldChtX2Nvbm5lY3Rpb24uZ2V0KCkpLCBtX3dyaXRlQnVmZmVyLmRh
dGEoKSwgbV93cml0ZUJ1ZmZlci5zaXplKCksIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgeworICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVz
KGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKSkgeworICAg
ICAgICAgICAgd2FpdEZvclNvY2tldFdyaXRhYmlsaXR5KCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBnX3dhcm5pbmcoIkVycm9yIHNlbmRpbmcgbWVzc2FnZSBv
biBzb2NrZXQgY29ubmVjdGlvbjogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZGlk
Q2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3dyaXRlQnVmZmVy
LnNpemUoKSA+IHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNXcml0dGVuKSkgeworICAgICAgICBt
ZW1tb3ZlKG1fd3JpdGVCdWZmZXIuZGF0YSgpLCBtX3dyaXRlQnVmZmVyLmRhdGEoKSArIGJ5dGVz
V3JpdHRlbiwgbV93cml0ZUJ1ZmZlci5zaXplKCkgLSBieXRlc1dyaXR0ZW4pOworICAgICAgICBt
X3dyaXRlQnVmZmVyLnNocmluayhtX3dyaXRlQnVmZmVyLnNpemUoKSAtIGJ5dGVzV3JpdHRlbik7
CisgICAgfSBlbHNlCisgICAgICAgIG1fd3JpdGVCdWZmZXIuc2hyaW5rKDApOworCisgICAgaWYg
KG1fd3JpdGVCdWZmZXIuc2l6ZSgpIDwgZGVmYXVsdEJ1ZmZlclNpemUpCisgICAgICAgIG1fd3Jp
dGVCdWZmZXIuc2hyaW5rQ2FwYWNpdHkoZGVmYXVsdEJ1ZmZlclNpemUpOworCisgICAgaWYgKCFt
X3dyaXRlQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAgd2FpdEZvclNvY2tldFdyaXRhYmlsaXR5
KCk7Cit9CisKK3ZvaWQgU29ja2V0Q29ubmVjdGlvbjo6d2FpdEZvclNvY2tldFdyaXRhYmlsaXR5
KCkKK3sKKyAgICBpZiAobV93cml0ZU1vbml0b3IuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV93cml0ZU1vbml0b3Iuc3RhcnQoZ19zb2NrZXRfY29ubmVjdGlvbl9nZXRfc29j
a2V0KG1fY29ubmVjdGlvbi5nZXQoKSksIEdfSU9fT1VULCBSdW5Mb29wOjpjdXJyZW50KCksIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChHSU9Db25kaXRpb24gY29uZGl0
aW9uKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGlmIChjb25kaXRpb24gJiBHX0lPX09VVCkgewor
ICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc3RvcCB0aGUgbW9uaXRvciBmcm9tIHRoaXMgbGFtYmRh
LCBiZWNhdXNlIHN0b3AgZGVzdHJveXMgdGhlIGxhbWJkYS4KKyAgICAgICAgICAgIFJ1bkxvb3A6
OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMu
Y29weVJlZigpXSB7CisgICAgICAgICAgICAgICAgbV93cml0ZU1vbml0b3Iuc3RvcCgpOworICAg
ICAgICAgICAgICAgIHdyaXRlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOworICAgIH0pOworfQorCit2b2lkIFNvY2tldENvbm5l
Y3Rpb246OmNsb3NlKCkKK3sKKyAgICBtX3JlYWRNb25pdG9yLnN0b3AoKTsKKyAgICBtX3dyaXRl
TW9uaXRvci5zdG9wKCk7CisgICAgbV9jb25uZWN0aW9uID0gbnVsbHB0cjsKK30KKwordm9pZCBT
b2NrZXRDb25uZWN0aW9uOjpkaWRDbG9zZSgpCit7CisgICAgaWYgKGlzQ2xvc2VkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNsb3NlKCk7CisgICAgQVNTRVJUKG1fbWVzc2FnZUhhbmRsZXJz
LmNvbnRhaW5zKCJEaWRDbG9zZSIpKTsKKyAgICBtX21lc3NhZ2VIYW5kbGVycy5nZXQoIkRpZENs
b3NlIikuc2Vjb25kKCp0aGlzLCBudWxscHRyLCBtX3VzZXJEYXRhKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1NvY2tldENvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMGE5ZmFjNTFjOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhLCBTLkwuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIv
R1NvY2tldE1vbml0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR1NvY2tldENvbm5l
Y3Rpb24gR1NvY2tldENvbm5lY3Rpb247CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBTb2Nr
ZXRDb25uZWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8U29ja2V0Q29ubmVjdGlvbj4geworcHVi
bGljOgorICAgIHR5cGVkZWYgdm9pZCAoKiBNZXNzYWdlQ2FsbGJhY2spKFNvY2tldENvbm5lY3Rp
b24mLCBHVmFyaWFudCosIGdwb2ludGVyKTsKKyAgICB1c2luZyBNZXNzYWdlSGFuZGxlcnMgPSBI
YXNoTWFwPENTdHJpbmcsIHN0ZDo6cGFpcjxDU3RyaW5nLCBNZXNzYWdlQ2FsbGJhY2s+PjsKKyAg
ICBzdGF0aWMgUmVmPFNvY2tldENvbm5lY3Rpb24+IGNyZWF0ZShHUmVmUHRyPEdTb2NrZXRDb25u
ZWN0aW9uPiYmIGNvbm5lY3Rpb24sIGNvbnN0IE1lc3NhZ2VIYW5kbGVycyYgbWVzc2FnZUhhbmRs
ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNvY2tldENvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSwgbWVzc2FnZUhhbmRsZXJz
LCB1c2VyRGF0YSkpOworICAgIH0KKyAgICB+U29ja2V0Q29ubmVjdGlvbigpOworCisgICAgYm9v
bCBpc0Nsb3NlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2Nvbm5lY3Rpb247IH0KKyAgICB2b2lkIHNl
bmRNZXNzYWdlKGNvbnN0IGNoYXIqLCBHVmFyaWFudCopOworICAgIHZvaWQgY2xvc2UoKTsKKwor
cHJpdmF0ZToKKyAgICBTb2NrZXRDb25uZWN0aW9uKEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+
JiYsIGNvbnN0IE1lc3NhZ2VIYW5kbGVycyYsIGdwb2ludGVyKTsKKworICAgIGJvb2wgcmVhZCgp
OworICAgIGJvb2wgcmVhZE1lc3NhZ2UoKTsKKyAgICB2b2lkIHdyaXRlKCk7CisgICAgdm9pZCB3
YWl0Rm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICB2b2lkIGRpZENsb3NlKCk7CisKKyAgICBH
UmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgY29uc3QgTWVzc2Fn
ZUhhbmRsZXJzJiBtX21lc3NhZ2VIYW5kbGVyczsKKyAgICBncG9pbnRlciBtX3VzZXJEYXRhOwor
ICAgIFZlY3RvcjxjaGFyPiBtX3JlYWRCdWZmZXI7CisgICAgR1NvY2tldE1vbml0b3IgbV9yZWFk
TW9uaXRvcjsKKyAgICBWZWN0b3I8Y2hhcj4gbV93cml0ZUJ1ZmZlcjsKKyAgICBHU29ja2V0TW9u
aXRvciBtX3dyaXRlTW9uaXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OlNvY2tldENvbm5lY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJEcml2ZXIvQ2hhbmdlTG9nCmluZGV4IDdmMzYzZjQ3ZjBiLi4zMmIz
NGVmNjAxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxOS0xMS0yMiAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11b
V1BFXSBSZW1vdGVJbnNwZWN0b3I6IHVzZSBzb2NrZXRzIGluc3RlYWQgb2YgREJ1cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NTAzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIEdTb2NrZXRzIEFQ
SSBpbnN0ZWFkIG9mIERCdXMuCisKKyAgICAgICAgKiBTZXNzaW9uSG9zdC5jcHA6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb25Ib3N0OjpzZW5kQ29tbWFuZFRvQmFja2VuZCk6CisgICAgICAg
ICogU2Vzc2lvbkhvc3QuaDoKKyAgICAgICAgKiBnbGliL1Nlc3Npb25Ib3N0R2xpYi5jcHA6Cisg
ICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb25Ib3N0Ojp+U2Vzc2lvbkhvc3QpOgorICAgICAgICAo
V2ViRHJpdmVyOjpTZXNzaW9uSG9zdDo6aXNDb25uZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpDb25uZWN0VG9Ccm93c2VyQXN5bmNEYXRhOjpDb25uZWN0VG9Ccm93c2VyQXN5bmNE
YXRhKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbkhvc3Q6OmxhdW5jaEJyb3dzZXIpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uSG9zdDo6Y29ubmVjdFRvQnJvd3Nlcik6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb25Ib3N0Ojpjb25uZWN0aW9uRGlkQ2xvc2UpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uSG9zdDo6c2V0dXBDb25uZWN0aW9uKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbkhvc3Q6OnN0YXJ0QXV0b21hdGlvblNlc3Npb24pOgorICAgICAgICAo
V2ViRHJpdmVyOjpTZXNzaW9uSG9zdDo6ZGlkU3RhcnRBdXRvbWF0aW9uU2Vzc2lvbik6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb25Ib3N0OjpzZXRUYXJnZXRMaXN0KToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbkhvc3Q6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKToKKyAgICAgICAgKiBz
b2NrZXQvU2Vzc2lvbkhvc3RTb2NrZXQuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9u
SG9zdDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorCiAyMDE5LTExLTE4ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBXZWJEcml2ZXI6IGhhbmRs
ZSBlbGVtZW50cyBvZiB0eXBlIGZpbGUgaW4gc2VuZCBrZXlzIGNvbW1hbmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwIGIvU291cmNlL1dlYkRyaXZlci9TZXNz
aW9uSG9zdC5jcHAKaW5kZXggN2JkMjllMDA3NGIuLmQxNjliOTVjNGI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25Ib3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nl
c3Npb25Ib3N0LmNwcApAQCAtNTUsNyArNTUsNyBAQCBsb25nIFNlc3Npb25Ib3N0OjpzZW5kQ29t
bWFuZFRvQmFja2VuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIFJlZlB0cjxKU09OOjpPYmplYwog
ICAgICAgICBtZXNzYWdlQnVpbGRlci5hcHBlbmQocGFyYW1ldGVycy0+dG9KU09OU3RyaW5nKCkp
OwogICAgIH0KICAgICBtZXNzYWdlQnVpbGRlci5hcHBlbmQoJ30nKTsKLSAgICBzZW5kTWVzc2Fn
ZVRvQmFja2VuZChzZXF1ZW5jZUlELCBtZXNzYWdlQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBz
ZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlQnVpbGRlci50b1N0cmluZygpKTsKIAogICAgIHJl
dHVybiBzZXF1ZW5jZUlEOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9u
SG9zdC5oIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5oCmluZGV4IDUzNjUwNzAxNmEx
Li40MDZjYTllNjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5o
CisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuaApAQCAtMzEsOCArMzEsNyBAQAog
CiAjaWYgVVNFKEdMSUIpCiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotdHlwZWRlZiBz
dHJ1Y3QgX0dEQnVzQ29ubmVjdGlvbiBHREJ1c0Nvbm5lY3Rpb247Ci10eXBlZGVmIHN0cnVjdCBf
R0RCdXNJbnRlcmZhY2VWVGFibGUgR0RCdXNJbnRlcmZhY2VWVGFibGU7CisjaW5jbHVkZSA8d3Rm
L2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oPgogdHlwZWRlZiBzdHJ1Y3QgX0dTdWJwcm9jZXNzIEdT
dWJwcm9jZXNzOwogI2VuZGlmCiAKQEAgLTcxLDE3ICs3MCwxOCBAQCBwcml2YXRlOgogICAgIH07
CiAKICAgICB2b2lkIGluc3BlY3RvckRpc2Nvbm5lY3RlZCgpOwotICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQobG9uZywgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRv
QmFja2VuZChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZShjb25zdCBT
dHJpbmcmKTsKIAogI2lmIFVTRShHTElCKQotICAgIHN0YXRpYyB2b2lkIGRidXNDb25uZWN0aW9u
Q2xvc2VkQ2FsbGJhY2soU2Vzc2lvbkhvc3QqKTsKLSAgICBzdGF0aWMgY29uc3QgR0RCdXNJbnRl
cmZhY2VWVGFibGUgc19pbnRlcmZhY2VWVGFibGU7CisgICAgc3RhdGljIGNvbnN0IFNvY2tldENv
bm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycyBzX21lc3NhZ2VIYW5kbGVyczsKKyAgICB2b2lkIGNv
bm5lY3Rpb25EaWRDbG9zZSgpOwogICAgIHZvaWQgbGF1bmNoQnJvd3NlcihGdW5jdGlvbjx2b2lk
IChPcHRpb25hbDxTdHJpbmc+IGVycm9yKT4mJik7CiAgICAgdm9pZCBjb25uZWN0VG9Ccm93c2Vy
KHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0VG9Ccm93c2VyQXN5bmNEYXRhPiYmKTsKICAgICBib29s
IG1hdGNoQ2FwYWJpbGl0aWVzKEdWYXJpYW50Kik7CiAgICAgYm9vbCBidWlsZFNlc3Npb25DYXBh
YmlsaXRpZXMoR1ZhcmlhbnRCdWlsZGVyKikgY29uc3Q7Ci0gICAgdm9pZCBzZXR1cENvbm5lY3Rp
b24oR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+JiYpOworICAgIHZvaWQgc2V0dXBDb25uZWN0aW9u
KFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmKTsKKyAgICB2b2lkIGRpZFN0YXJ0QXV0b21hdGlvblNl
c3Npb24oR1ZhcmlhbnQqKTsKICAgICB2b2lkIHNldFRhcmdldExpc3QodWludDY0X3QgY29ubmVj
dGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKiBt
ZXNzYWdlKTsKICNlbmRpZgpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogI2lmIFVTRShHTElC
KQogICAgIEZ1bmN0aW9uPHZvaWQgKGJvb2wsIE9wdGlvbmFsPFN0cmluZz4pPiBtX3N0YXJ0U2Vz
c2lvbkNvbXBsZXRpb25IYW5kbGVyOwogICAgIEdSZWZQdHI8R1N1YnByb2Nlc3M+IG1fYnJvd3Nl
cjsKLSAgICBHUmVmUHRyPEdEQnVzQ29ubmVjdGlvbj4gbV9kYnVzQ29ubmVjdGlvbjsKKyAgICBS
ZWZQdHI8U29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwogICAgIEdSZWZQdHI8
R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkRyaXZlci9nbGliL1Nlc3Npb25Ib3N0R2xpYi5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVy
L2dsaWIvU2Vzc2lvbkhvc3RHbGliLmNwcAppbmRleCAyNWRjZTExMWRkNy4uMGMyYmRjNjE2NTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvZ2xpYi9TZXNzaW9uSG9zdEdsaWIuY3BwCisr
KyBiL1NvdXJjZS9XZWJEcml2ZXIvZ2xpYi9TZXNzaW9uSG9zdEdsaWIuY3BwCkBAIC0zMiw0MiAr
MzIsMzMgQEAKICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KIAotI2RlZmluZSBSRU1PVEVfSU5TUEVDVE9SX0NMSUVOVF9EQlVTX0lOVEVSRkFD
RSAib3JnLndlYmtpdC5SZW1vdGVJbnNwZWN0b3JDbGllbnQiCi0jZGVmaW5lIFJFTU9URV9JTlNQ
RUNUT1JfQ0xJRU5UX09CSkVDVF9QQVRIICIvb3JnL3dlYmtpdC9SZW1vdGVJbnNwZWN0b3JDbGll
bnQiCi0jZGVmaW5lIElOU1BFQ1RPUl9EQlVTX0lOVEVSRkFDRSAib3JnLndlYmtpdC5JbnNwZWN0
b3IiCi0jZGVmaW5lIElOU1BFQ1RPUl9EQlVTX09CSkVDVF9QQVRIICIvb3JnL3dlYmtpdC9JbnNw
ZWN0b3IiCi0KIG5hbWVzcGFjZSBXZWJEcml2ZXIgewogCiBTZXNzaW9uSG9zdDo6flNlc3Npb25I
b3N0KCkKIHsKLSAgICBpZiAobV9kYnVzQ29ubmVjdGlvbikKLSAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fZGJ1c0Nvbm5lY3Rpb24uZ2V0KCksIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwogICAgIGdfY2FuY2Vs
bGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOworICAgIGlmIChtX3NvY2tldENvbm5l
Y3Rpb24pCisgICAgICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+Y2xvc2UoKTsKICAgICBpZiAobV9i
cm93c2VyKQogICAgICAgICBnX3N1YnByb2Nlc3NfZm9yY2VfZXhpdChtX2Jyb3dzZXIuZ2V0KCkp
OwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBpbnRyb3NwZWN0aW9uWE1MW10gPQotICAgICI8bm9k
ZT4iCi0gICAgIiAgPGludGVyZmFjZSBuYW1lPSciIFJFTU9URV9JTlNQRUNUT1JfQ0xJRU5UX0RC
VVNfSU5URVJGQUNFICInPiIKLSAgICAiICAgIDxtZXRob2QgbmFtZT0nU2V0VGFyZ2V0TGlzdCc+
IgotICAgICIgICAgICA8YXJnIHR5cGU9J3QnIG5hbWU9J2Nvbm5lY3Rpb25JRCcgZGlyZWN0aW9u
PSdpbicvPiIKLSAgICAiICAgICAgPGFyZyB0eXBlPSdhKHRzc3NiKScgbmFtZT0nbGlzdCcgZGly
ZWN0aW9uPSdpbicvPiIKLSAgICAiICAgIDwvbWV0aG9kPiIKLSAgICAiICAgIDxtZXRob2QgbmFt
ZT0nU2VuZE1lc3NhZ2VUb0Zyb250ZW5kJz4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT0ndCcgbmFt
ZT0nY29ubmVjdGlvbklEJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICAgICA8YXJnIHR5cGU9
J3QnIG5hbWU9J3RhcmdldCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAgICAgPGFyZyB0eXBl
PSdzJyBuYW1lPSdtZXNzYWdlJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICAgPC9tZXRob2Q+
IgotICAgICIgIDwvaW50ZXJmYWNlPiIKLSAgICAiPC9ub2RlPiI7Ci0KLWNvbnN0IEdEQnVzSW50
ZXJmYWNlVlRhYmxlIFNlc3Npb25Ib3N0OjpzX2ludGVyZmFjZVZUYWJsZSA9IHsKLSAgICAvLyBt
ZXRob2RfY2FsbAotICAgIFtdKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGdjaGFyKiwgY29uc3Qg
Z2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBtZXRob2ROYW1lLCBHVmFyaWFudCog
cGFyYW1ldGVycywgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBncG9pbnRlciB1
c2VyRGF0YSkgewotICAgICAgICBhdXRvKiBzZXNzaW9uSG9zdCA9IHN0YXRpY19jYXN0PFNlc3Np
b25Ib3N0Kj4odXNlckRhdGEpOwotICAgICAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAi
U2V0VGFyZ2V0TGlzdCIpKSB7Citjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxl
cnMgU2Vzc2lvbkhvc3Q6OnNfbWVzc2FnZUhhbmRsZXJzID0geworICAgIHsgIkRpZENsb3NlIiwg
c3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyB7
IH0sCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCosIGdwb2ludGVyIHVz
ZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBzZXNzaW9uSG9zdCA9ICpzdGF0aWNfY2FzdDxT
ZXNzaW9uSG9zdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIHNlc3Npb25Ib3N0LmNvbm5lY3Rp
b25EaWRDbG9zZSgpOworICAgICAgICB9fQorICAgIH0sCisgICAgeyAiRGlkU3RhcnRBdXRvbWF0
aW9uU2Vzc2lvbiIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdl
Q2FsbGJhY2s+IHsgIihzcykiLAorICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1Zhcmlh
bnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBz
ZXNzaW9uSG9zdCA9ICpzdGF0aWNfY2FzdDxTZXNzaW9uSG9zdCo+KHVzZXJEYXRhKTsKKyAgICAg
ICAgICAgIHNlc3Npb25Ib3N0LmRpZFN0YXJ0QXV0b21hdGlvblNlc3Npb24ocGFyYW1ldGVycyk7
CisgICAgICAgIH19CisgICAgfSwKKyAgICB7ICJTZXRUYXJnZXRMaXN0Iiwgc3RkOjpwYWlyPENT
dHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHRhKHRzc3NiKSki
LAorICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdw
b2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBzZXNzaW9uSG9zdCA9ICpzdGF0
aWNfY2FzdDxTZXNzaW9uSG9zdCo+KHVzZXJEYXRhKTsKICAgICAgICAgICAgIGd1aW50NjQgY29u
bmVjdGlvbklEOwogICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHVmFyaWFudEl0ZXI+IGl0ZXI7
CiAgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodGEodHNzc2IpKSIsICZj
b25uZWN0aW9uSUQsICZpdGVyLm91dFB0cigpKTsKQEAgLTgzLDIyICs3NCwxOCBAQCBjb25zdCBH
REJ1c0ludGVyZmFjZVZUYWJsZSBTZXNzaW9uSG9zdDo6c19pbnRlcmZhY2VWVGFibGUgPSB7CiAg
ICAgICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAodHlwZSwgIkF1dG9tYXRpb24iKSkKICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0TGlzdC51bmNoZWNrZWRBcHBlbmQoeyB0YXJnZXRJRCwgbmFt
ZSwgc3RhdGljX2Nhc3Q8Ym9vbD4oaXNQYWlyZWQpIH0pOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc2Vzc2lvbkhvc3QtPnNldFRhcmdldExpc3QoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRh
cmdldExpc3QpKTsKLSAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5f
dmFsdWUoaW52b2NhdGlvbiwgbnVsbHB0cik7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21w
MChtZXRob2ROYW1lLCAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIikpIHsKKyAgICAgICAgICAgIHNl
c3Npb25Ib3N0LnNldFRhcmdldExpc3QoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3Qp
KTsKKyAgICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCIsIHN0
ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0
dHMpIiwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJz
LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgc2Vzc2lvbkhvc3QgPSAq
c3RhdGljX2Nhc3Q8U2Vzc2lvbkhvc3QqPih1c2VyRGF0YSk7CiAgICAgICAgICAgICBndWludDY0
IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQ7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdl
OwogICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHR0JnMpIiwgJmNvbm5l
Y3Rpb25JRCwgJnRhcmdldElELCAmbWVzc2FnZSk7Ci0gICAgICAgICAgICBzZXNzaW9uSG9zdC0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UpOwot
ICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0
aW9uLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgIH0sCi0gICAgLy8gZ2V0X3Byb3BlcnR5Ci0g
ICAgbnVsbHB0ciwKLSAgICAvLyBzZXRfcHJvcGVydHkKLSAgICBudWxscHRyLAotICAgIC8vIHBh
ZGRpbmcKLSAgICB7IDAgfQorICAgICAgICAgICAgc2Vzc2lvbkhvc3Quc2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgICAgICB9fQorICAg
IH0KIH07CiAKIHZvaWQgU2Vzc2lvbkhvc3Q6OmNvbm5lY3RUb0Jyb3dzZXIoRnVuY3Rpb248dm9p
ZCAoT3B0aW9uYWw8U3RyaW5nPiBlcnJvcik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMDgs
MjIgKzk1LDIyIEBAIHZvaWQgU2Vzc2lvbkhvc3Q6OmNvbm5lY3RUb0Jyb3dzZXIoRnVuY3Rpb248
dm9pZCAoT3B0aW9uYWw8U3RyaW5nPiBlcnJvcik+JiYgY29tCiAKIGJvb2wgU2Vzc2lvbkhvc3Q6
OmlzQ29ubmVjdGVkKCkgY29uc3QKIHsKLSAgICAvLyBTZXNzaW9uIGlzIGNvbm5lY3RlZCB3aGVu
IGxhdW5jaGluZyBvciB3aGVuIGRidXMgY29ubmVjdGlvbiBoYXNuJ3QgYmVlbiBjbG9zZWQuCi0g
ICAgcmV0dXJuIG1fYnJvd3NlciAmJiAoIW1fZGJ1c0Nvbm5lY3Rpb24gfHwgIWdfZGJ1c19jb25u
ZWN0aW9uX2lzX2Nsb3NlZChtX2RidXNDb25uZWN0aW9uLmdldCgpKSk7CisgICAgLy8gU2Vzc2lv
biBpcyBjb25uZWN0ZWQgd2hlbiBsYXVuY2hpbmcgb3Igd2hlbiBzb2NrZXQgY29ubmVjdGlvbiBo
YXNuJ3QgYmVlbiBjbG9zZWQuCisgICAgcmV0dXJuIG1fYnJvd3NlciAmJiAoIW1fc29ja2V0Q29u
bmVjdGlvbiB8fCAhbV9zb2NrZXRDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKTsKIH0KIAogc3RydWN0
IENvbm5lY3RUb0Jyb3dzZXJBc3luY0RhdGEgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FM
TE9DQVRFRDsKLSAgICBDb25uZWN0VG9Ccm93c2VyQXN5bmNEYXRhKFNlc3Npb25Ib3N0KiBzZXNz
aW9uSG9zdCwgR1VuaXF1ZVB0cjxjaGFyPiYmIGRidXNBZGRyZXNzLCBHQ2FuY2VsbGFibGUqIGNh
bmNlbGxhYmxlLCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxTdHJpbmc+IGVycm9yKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKKyAgICBDb25uZWN0VG9Ccm93c2VyQXN5bmNEYXRhKFNlc3Npb25Ib3N0
KiBzZXNzaW9uSG9zdCwgR1VuaXF1ZVB0cjxjaGFyPiYmIGluc3BlY3RvckFkZHJlc3MsIEdDYW5j
ZWxsYWJsZSogY2FuY2VsbGFibGUsIEZ1bmN0aW9uPHZvaWQoT3B0aW9uYWw8U3RyaW5nPik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIDogc2Vzc2lvbkhvc3Qoc2Vzc2lvbkhvc3QpCi0g
ICAgICAgICwgZGJ1c0FkZHJlc3MoV1RGTW92ZShkYnVzQWRkcmVzcykpCisgICAgICAgICwgaW5z
cGVjdG9yQWRkcmVzcyhXVEZNb3ZlKGluc3BlY3RvckFkZHJlc3MpKQogICAgICAgICAsIGNhbmNl
bGxhYmxlKGNhbmNlbGxhYmxlKQogICAgICAgICAsIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKQogICAgIHsKICAgICB9CiAKICAgICBTZXNzaW9uSG9zdCogc2Vz
c2lvbkhvc3Q7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBkYnVzQWRkcmVzczsKKyAgICBHVW5pcXVl
UHRyPGNoYXI+IGluc3BlY3RvckFkZHJlc3M7CiAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IGNh
bmNlbGxhYmxlOwogICAgIEZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPFN0cmluZz4gZXJyb3IpPiBj
b21wbGV0aW9uSGFuZGxlcjsKIH07CkBAIC0xNzMsOCArMTYwLDcgQEAgdm9pZCBTZXNzaW9uSG9z
dDo6bGF1bmNoQnJvd3NlcihGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxTdHJpbmc+IGVycm9yKT4m
JiBjb21wbGUKICAgICAgICAgc2Vzc2lvbkhvc3QtPm1fYnJvd3NlciA9IG51bGxwdHI7CiAgICAg
fSwgdGhpcyk7CiAKLSAgICBHVW5pcXVlUHRyPGNoYXI+IGRidXNBZGRyZXNzKGdfc3RyZHVwX3By
aW50ZigidGNwOmhvc3Q9JXMscG9ydD0ldSIsICIxMjcuMC4wLjEiLCBwb3J0KSk7Ci0gICAgY29u
bmVjdFRvQnJvd3NlcihtYWtlVW5pcXVlPENvbm5lY3RUb0Jyb3dzZXJBc3luY0RhdGE+KHRoaXMs
IFdURk1vdmUoZGJ1c0FkZHJlc3MpLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSkpOworICAgIGNvbm5lY3RUb0Jyb3dzZXIobWFrZVVuaXF1ZTxDb25uZWN0
VG9Ccm93c2VyQXN5bmNEYXRhPih0aGlzLCBXVEZNb3ZlKGluc3BlY3RvckFkZHJlc3MpLCBtX2Nh
bmNlbGxhYmxlLmdldCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwogfQogCiB2b2lk
IFNlc3Npb25Ib3N0Ojpjb25uZWN0VG9Ccm93c2VyKHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0VG9C
cm93c2VyQXN5bmNEYXRhPiYmIGRhdGEpCkBAIC0xODcsMTEgKzE3MywxMiBAQCB2b2lkIFNlc3Np
b25Ib3N0Ojpjb25uZWN0VG9Ccm93c2VyKHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0VG9Ccm93c2Vy
QXN5bmNEYXRhPiYmCiAgICAgICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChkYXRh
LT5jYW5jZWxsYWJsZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZ19k
YnVzX2Nvbm5lY3Rpb25fbmV3X2Zvcl9hZGRyZXNzKGRhdGEtPmRidXNBZGRyZXNzLmdldCgpLCBH
X0RCVVNfQ09OTkVDVElPTl9GTEFHU19BVVRIRU5USUNBVElPTl9DTElFTlQsIG51bGxwdHIsIGRh
dGEtPmNhbmNlbGxhYmxlLmdldCgpLAotICAgICAgICAgICAgW10oR09iamVjdCosIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBHUmVmUHRyPEdTb2Nr
ZXRDbGllbnQ+IHNvY2tldENsaWVudCA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfbmV3KCkp
OworICAgICAgICBnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNvY2tldENs
aWVudC5nZXQoKSwgZGF0YS0+aW5zcGVjdG9yQWRkcmVzcy5nZXQoKSwgMCwgZGF0YS0+Y2FuY2Vs
bGFibGUuZ2V0KCksCisgICAgICAgICAgICBbXShHT2JqZWN0KiBjbGllbnQsIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewogICAgICAgICAgICAgICAgIGF1dG8gZGF0
YSA9IHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0VG9Ccm93c2VyQXN5bmNEYXRhPihzdGF0aWNfY2Fz
dDxDb25uZWN0VG9Ccm93c2VyQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKICAgICAgICAgICAgICAg
ICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICAgICAgR1JlZlB0cjxH
REJ1c0Nvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5lY3Rpb25f
bmV3X2Zvcl9hZGRyZXNzX2ZpbmlzaChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAg
ICAgICAgICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBhZG9wdEdS
ZWYoZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9maW5pc2goR19TT0NLRVRfQ0xJRU5U
KGNsaWVudCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CiAgICAgICAgICAgICAgICAgaWYg
KCFjb25uZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMo
ZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwNCwzOSArMTkxLDI0IEBAIHZvaWQgU2Vzc2lv
bkhvc3Q6OmNvbm5lY3RUb0Jyb3dzZXIoc3RkOjp1bmlxdWVfcHRyPENvbm5lY3RUb0Jyb3dzZXJB
c3luY0RhdGE+JiYKICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Y29tcGxldGlvbkhhbmRsZXIo
U3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRhdGEtPnNlc3Npb25I
b3N0LT5zZXR1cENvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSk7CisgICAgICAgICAgICAg
ICAgZGF0YS0+c2Vzc2lvbkhvc3QtPnNldHVwQ29ubmVjdGlvbihTb2NrZXRDb25uZWN0aW9uOjpj
cmVhdGUoV1RGTW92ZShjb25uZWN0aW9uKSwgc19tZXNzYWdlSGFuZGxlcnMsIGRhdGEtPnNlc3Np
b25Ib3N0KSk7CiAgICAgICAgICAgICAgICAgZGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoV1RGOjpu
dWxsb3B0KTsKICAgICAgICAgfSwgZGF0YSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU2Vzc2lvbkhv
c3Q6OmRidXNDb25uZWN0aW9uQ2xvc2VkQ2FsbGJhY2soU2Vzc2lvbkhvc3QqIHNlc3Npb25Ib3N0
KQordm9pZCBTZXNzaW9uSG9zdDo6Y29ubmVjdGlvbkRpZENsb3NlKCkKIHsKLSAgICBzZXNzaW9u
SG9zdC0+bV9icm93c2VyID0gbnVsbHB0cjsKLSAgICBzZXNzaW9uSG9zdC0+aW5zcGVjdG9yRGlz
Y29ubmVjdGVkKCk7CisgICAgbV9icm93c2VyID0gbnVsbHB0cjsKKyAgICBpbnNwZWN0b3JEaXNj
b25uZWN0ZWQoKTsKKyAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBudWxscHRyOwogfQogCi1zdGF0
aWMgdm9pZCBkYnVzQ29ubmVjdGlvbkNhbGxBc3luY1JlYWR5Q2FsbGJhY2soR09iamVjdCogc291
cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIpCit2b2lkIFNlc3Npb25Ib3N0Ojpz
ZXR1cENvbm5lY3Rpb24oUmVmPFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKIHsKLSAg
ICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gcmVz
dWx0VmFyaWFudCA9IGFkb3B0R1JlZihnX2RidXNfY29ubmVjdGlvbl9jYWxsX2ZpbmlzaChHX0RC
VVNfQ09OTkVDVElPTihzb3VyY2UpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAgIGlm
ICghcmVzdWx0VmFyaWFudCAmJiAhZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VS
Uk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCi0gICAgICAgIFdURkxvZ0Fsd2F5cygiUmVtb3Rl
SW5zcGVjdG9yU2VydmVyIGZhaWxlZCB0byBzZW5kIERCdXMgbWVzc2FnZTogJXMiLCBlcnJvci0+
bWVzc2FnZSk7Ci19Ci0KLXZvaWQgU2Vzc2lvbkhvc3Q6OnNldHVwQ29ubmVjdGlvbihHUmVmUHRy
PEdEQnVzQ29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQotewotICAgIEFTU0VSVCghbV9kYnVzQ29u
bmVjdGlvbik7CisgICAgQVNTRVJUKCFtX3NvY2tldENvbm5lY3Rpb24pOwogICAgIEFTU0VSVChj
b25uZWN0aW9uKTsKLSAgICBtX2RidXNDb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9uKTsK
LQotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2RidXNDb25uZWN0aW9uLmdldCgpLCAi
Y2xvc2VkIiwgR19DQUxMQkFDSyhkYnVzQ29ubmVjdGlvbkNsb3NlZENhbGxiYWNrKSwgdGhpcyk7
Ci0KLSAgICBzdGF0aWMgR0RCdXNOb2RlSW5mbyogaW50cm9zcGVjdGlvbkRhdGEgPSBudWxscHRy
OwotICAgIGlmICghaW50cm9zcGVjdGlvbkRhdGEpCi0gICAgICAgIGludHJvc3BlY3Rpb25EYXRh
ID0gZ19kYnVzX25vZGVfaW5mb19uZXdfZm9yX3htbChpbnRyb3NwZWN0aW9uWE1MLCBudWxscHRy
KTsKLQotICAgIGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdChtX2RidXNDb25uZWN0
aW9uLmdldCgpLCBSRU1PVEVfSU5TUEVDVE9SX0NMSUVOVF9PQkpFQ1RfUEFUSCwgaW50cm9zcGVj
dGlvbkRhdGEtPmludGVyZmFjZXNbMF0sICZzX2ludGVyZmFjZVZUYWJsZSwgdGhpcywgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9u
KTsKIH0KIAogc3RhdGljIGJvb2wgbWF0Y2hCcm93c2VyT3B0aW9ucyhjb25zdCBTdHJpbmcmIGJy
b3dzZXJOYW1lLCBjb25zdCBTdHJpbmcmIGJyb3dzZXJWZXJzaW9uLCBjb25zdCBDYXBhYmlsaXRp
ZXMmIGNhcGFiaWxpdGllcykKQEAgLTMyNywzNyArMjk5LDIxIEBAIGJvb2wgU2Vzc2lvbkhvc3Q6
OmJ1aWxkU2Vzc2lvbkNhcGFiaWxpdGllcyhHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIpIGNvbnN0
CiAKIHZvaWQgU2Vzc2lvbkhvc3Q6OnN0YXJ0QXV0b21hdGlvblNlc3Npb24oRnVuY3Rpb248dm9p
ZCAoYm9vbCwgT3B0aW9uYWw8U3RyaW5nPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
QVNTRVJUKG1fZGJ1c0Nvbm5lY3Rpb24pOworICAgIEFTU0VSVChtX3NvY2tldENvbm5lY3Rpb24p
OwogICAgIEFTU0VSVCghbV9zdGFydFNlc3Npb25Db21wbGV0aW9uSGFuZGxlcik7CiAgICAgbV9z
dGFydFNlc3Npb25Db21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
OwogICAgIG1fc2Vzc2lvbklEID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwogICAgIEdW
YXJpYW50QnVpbGRlciBidWlsZGVyOwotICAgIGdfZGJ1c19jb25uZWN0aW9uX2NhbGwobV9kYnVz
Q29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwKLSAgICAgICAgSU5TUEVDVE9SX0RCVVNfT0JKRUNU
X1BBVEgsCi0gICAgICAgIElOU1BFQ1RPUl9EQlVTX0lOVEVSRkFDRSwKLSAgICAgICAgIlN0YXJ0
QXV0b21hdGlvblNlc3Npb24iLAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc2F7c3Z9KSIsIG1f
c2Vzc2lvbklELnV0ZjgoKS5kYXRhKCksIGJ1aWxkU2Vzc2lvbkNhcGFiaWxpdGllcygmYnVpbGRl
cikgPyAmYnVpbGRlciA6IG51bGxwdHIpLAotICAgICAgICBudWxscHRyLCBHX0RCVVNfQ0FMTF9G
TEFHU19OT19BVVRPX1NUQVJULAotICAgICAgICAtMSwgbV9jYW5jZWxsYWJsZS5nZXQoKSwgW10o
R09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEp
IHsKLSAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdFZhcmlhbnQgPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5l
Y3Rpb25fY2FsbF9maW5pc2goR19EQlVTX0NPTk5FQ1RJT04oc291cmNlKSwgcmVzdWx0LCAmZXJy
b3Iub3V0UHRyKCkpKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0VmFyaWFudCAmJiBnX2Vycm9y
X21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGF1dG8gc2Vzc2lvbkhvc3Qg
PSBzdGF0aWNfY2FzdDxTZXNzaW9uSG9zdCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0VmFyaWFudCkgewotICAgICAgICAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIg
PSBzdGQ6OmV4Y2hhbmdlKHNlc3Npb25Ib3N0LT5tX3N0YXJ0U2Vzc2lvbkNvbXBsZXRpb25IYW5k
bGVyLCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSwg
bWFrZVN0cmluZygiRmFpbGVkIHRvIHN0YXJ0IGF1dG9tYXRpb24gc2Vzc2lvbjogIiwgU3RyaW5n
Ojpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU3RhcnRB
dXRvbWF0aW9uU2Vzc2lvbiIsIGdfdmFyaWFudF9uZXcoIihzYXtzdn0pIiwgbV9zZXNzaW9uSUQu
dXRmOCgpLmRhdGEoKSwgYnVpbGRTZXNzaW9uQ2FwYWJpbGl0aWVzKCZidWlsZGVyKSA/ICZidWls
ZGVyIDogbnVsbHB0cikpOworfQogCi0gICAgICAgICAgICBpZiAoIXNlc3Npb25Ib3N0LT5tYXRj
aENhcGFiaWxpdGllcyhyZXN1bHRWYXJpYW50LmdldCgpKSkgewotICAgICAgICAgICAgICAgIGF1
dG8gY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKHNlc3Npb25Ib3N0LT5tX3N0YXJ0
U2Vzc2lvbkNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSwgV1RGOjpudWxsb3B0KTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sIHRoaXMKLSAgICApOwordm9pZCBTZXNzaW9u
SG9zdDo6ZGlkU3RhcnRBdXRvbWF0aW9uU2Vzc2lvbihHVmFyaWFudCogcGFyYW1ldGVycykKK3sK
KyAgICBpZiAobWF0Y2hDYXBhYmlsaXRpZXMocGFyYW1ldGVycykpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fc3RhcnRTZXNz
aW9uQ29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlLCBXVEY6Om51bGxvcHQpOwogfQogCiB2b2lkIFNlc3Npb25Ib3N0OjpzZXRUYXJnZXRMaXN0
KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4mJiB0YXJnZXRMaXN0KQpAQCAt
MzcxLDggKzMyNyw4IEBAIHZvaWQgU2Vzc2lvbkhvc3Q6OnNldFRhcmdldExpc3QodWludDY0X3Qg
Y29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmIHRhcmdldExpCiAgICAgaWYgKHRhcmdldExp
c3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fdGFyZ2V0ID0gVGFyZ2V0KCk7CiAgICAgICAgIGlm
IChtX2Nvbm5lY3Rpb25JRCkgewotICAgICAgICAgICAgaWYgKG1fZGJ1c0Nvbm5lY3Rpb24pCi0g
ICAgICAgICAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fY2xvc2UobV9kYnVzQ29ubmVjdGlvbi5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAobV9zb2Nr
ZXRDb25uZWN0aW9uKQorICAgICAgICAgICAgICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+Y2xvc2Uo
KTsKICAgICAgICAgICAgIG1fY29ubmVjdGlvbklEID0gMDsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CkBAIC0zOTAsMTMgKzM0Niw3IEBAIHZvaWQgU2Vzc2lvbkhvc3Q6OnNldFRhcmdldExp
c3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmIHRhcmdldExpCiAgICAg
fQogCiAgICAgbV9jb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uSUQ7Ci0gICAgZ19kYnVzX2Nvbm5l
Y3Rpb25fY2FsbChtX2RidXNDb25uZWN0aW9uLmdldCgpLCBudWxscHRyLAotICAgICAgICBJTlNQ
RUNUT1JfREJVU19PQkpFQ1RfUEFUSCwKLSAgICAgICAgSU5TUEVDVE9SX0RCVVNfSU5URVJGQUNF
LAotICAgICAgICAiU2V0dXAiLAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgbV9jb25u
ZWN0aW9uSUQsIG1fdGFyZ2V0LmlkKSwKLSAgICAgICAgbnVsbHB0ciwgR19EQlVTX0NBTExfRkxB
R1NfTk9fQVVUT19TVEFSVCwKLSAgICAgICAgLTEsIG1fY2FuY2VsbGFibGUuZ2V0KCksIGRidXND
b25uZWN0aW9uQ2FsbEFzeW5jUmVhZHlDYWxsYmFjaywgbnVsbHB0cik7CisgICAgbV9zb2NrZXRD
b25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0dXAiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgbV9j
b25uZWN0aW9uSUQsIG1fdGFyZ2V0LmlkKSk7CiAKICAgICBhdXRvIHN0YXJ0U2Vzc2lvbkNvbXBs
ZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3N0YXJ0U2Vzc2lvbkNvbXBsZXRpb25IYW5k
bGVyLCBudWxscHRyKTsKICAgICBzdGFydFNlc3Npb25Db21wbGV0aW9uSGFuZGxlcih0cnVlLCBX
VEY6Om51bGxvcHQpOwpAQCAtNDA5LDM5ICszNTksMTIgQEAgdm9pZCBTZXNzaW9uSG9zdDo6c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0
SUQKICAgICBkaXNwYXRjaE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7CiB9CiAK
LXN0cnVjdCBNZXNzYWdlQ29udGV4dCB7Ci0gICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOwotICAgIGxvbmcgbWVzc2FnZUlEOwotICAgIFNlc3Npb25Ib3N0KiBob3N0OwotfTsKLQot
dm9pZCBTZXNzaW9uSG9zdDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQobG9uZyBtZXNzYWdlSUQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgU2Vzc2lvbkhvc3Q6OnNlbmRNZXNzYWdlVG9CYWNr
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBBU1NFUlQobV9kYnVzQ29ubmVjdGlv
bik7CisgICAgQVNTRVJUKG1fc29ja2V0Q29ubmVjdGlvbik7CiAgICAgQVNTRVJUKG1fY29ubmVj
dGlvbklEKTsKICAgICBBU1NFUlQobV90YXJnZXQuaWQpOwotCi0gICAgYXV0byBtZXNzYWdlQ29u
dGV4dCA9IG1ha2VVbmlxdWU8TWVzc2FnZUNvbnRleHQ+KE1lc3NhZ2VDb250ZXh0IHsgbWVzc2Fn
ZUlELCB0aGlzIH0pOwotICAgIGdfZGJ1c19jb25uZWN0aW9uX2NhbGwobV9kYnVzQ29ubmVjdGlv
bi5nZXQoKSwgbnVsbHB0ciwKLSAgICAgICAgSU5TUEVDVE9SX0RCVVNfT0JKRUNUX1BBVEgsCi0g
ICAgICAgIElOU1BFQ1RPUl9EQlVTX0lOVEVSRkFDRSwKLSAgICAgICAgIlNlbmRNZXNzYWdlVG9C
YWNrZW5kIiwKLSAgICAgICAgZ192YXJpYW50X25ldygiKHR0cykiLCBtX2Nvbm5lY3Rpb25JRCwg
bV90YXJnZXQuaWQsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSksCi0gICAgICAgIG51bGxwdHIsIEdf
REJVU19DQUxMX0ZMQUdTX05PX0FVVE9fU1RBUlQsCi0gICAgICAgIC0xLCBtX2NhbmNlbGxhYmxl
LmdldCgpLCBbXShHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0byBtZXNzYWdlQ29udGV4dCA9IHN0ZDo6dW5p
cXVlX3B0cjxNZXNzYWdlQ29udGV4dD4oc3RhdGljX2Nhc3Q8TWVzc2FnZUNvbnRleHQqPih1c2Vy
RGF0YSkpOwotICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgICAg
ICAgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0VmFyaWFudCA9IGFkb3B0R1JlZihnX2RidXNf
Y29ubmVjdGlvbl9jYWxsX2ZpbmlzaChHX0RCVVNfQ09OTkVDVElPTihzb3VyY2UpLCByZXN1bHQs
ICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHRWYXJpYW50ICYmICFn
X2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VM
TEVEKSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzcG9uc2VIYW5kbGVyID0gbWVzc2FnZUNv
bnRleHQtPmhvc3QtPm1fY29tbWFuZFJlcXVlc3RzLnRha2UobWVzc2FnZUNvbnRleHQtPm1lc3Nh
Z2VJRCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlSGFuZGxlcikgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVycm9yT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgZXJyb3JPYmplY3QtPnNldEludGVnZXIoImNvZGUiX3MsIC0zMjYw
Myk7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yT2JqZWN0LT5zZXRTdHJpbmcoIm1lc3NhZ2Ui
X3MsIFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VIYW5kbGVyKHsgV1RGTW92ZShlcnJvck9iamVjdCksIHRydWUgfSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LCBtZXNzYWdlQ29udGV4dC5y
ZWxlYXNlKCkpOworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNlbmRNZXNz
YWdlVG9CYWNrZW5kIiwgZ192YXJpYW50X25ldygiKHR0cykiLCBtX2Nvbm5lY3Rpb25JRCwgbV90
YXJnZXQuaWQsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJEcml2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvc29ja2V0L1Nlc3Npb25Ib3N0
U29ja2V0LmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvc29ja2V0L1Nlc3Npb25Ib3N0U29ja2V0LmNw
cAppbmRleCA5ZDNiNzZkNDE1NS4uNGVlZDVlZjJjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJE
cml2ZXIvc29ja2V0L1Nlc3Npb25Ib3N0U29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVy
L3NvY2tldC9TZXNzaW9uSG9zdFNvY2tldC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBTZXNz
aW9uSG9zdDo6c3RhcnRBdXRvbWF0aW9uU2Vzc2lvbihGdW5jdGlvbjx2b2lkIChib29sLCBPcHRp
b25hbDxTdHJpbmc+KT4KIHsKIH0KIAotdm9pZCBTZXNzaW9uSG9zdDo6c2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQobG9uZyBtZXNzYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgU2Vzc2lv
bkhvc3Q6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCA2MWE3ZTE0OTNkZi4uNjM0NDk3ODM4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMTktMTEtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gUmVtb3RlSW5zcGVjdG9yOiB1c2Ugc29ja2V0
cyBpbnN0ZWFkIG9mIERCdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVzZSBHU29ja2V0cyBBUEkgaW5zdGVhZCBvZiBEQnVzLgorCisgICAgICAgICog
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDogUmVt
b3ZlIEdTb2NrZXRNb25pdG9yIHRoYXQgaGFzIGJlZW4gbW92ZWQgdG8gV1RGLgorICAgICAgICAq
IFNvdXJjZXNXUEUudHh0OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ2xpYi9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6flJlbW90ZUluc3BlY3RvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUluc3BlY3RvckNsaWVudDo6c2V0dXBDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZCk6CisgICAgICAg
ICogVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50Lmg6CisKIDIwMTktMTEtMTgg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFdl
YkRyaXZlcjogaGFuZGxlIGVsZW1lbnRzIG9mIHR5cGUgZmlsZSBpbiBzZW5kIGtleXMgY29tbWFu
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCmluZGV4IDMzYjA1OTE3ZjFh
Li5iMjU3OGQ2Y2NlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaApA
QCAtNTEsNyArNTEsNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoR0xJQikKLSNpbmNsdWRlICJHU29j
a2V0TW9uaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dTb2NrZXRNb25pdG9yLmg+CiAjZW5k
aWYKIAogbmFtZXNwYWNlIElQQyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNH
VEsudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAppbmRleCBmYjgwMTQ4ZjNlNC4u
MWEwNWUzMzQzNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysr
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtNDQsNyArNDQsNiBAQCBOZXR3b3Jr
UHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ01vbml0b3IuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJy
dGMvTmV0d29ya1JUQ1Byb3ZpZGVyLmNwcAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENTb2NrZXQuY3BwCiAKLVBsYXRmb3JtL0lQQy9nbGliL0dTb2NrZXRNb25pdG9yLmNwcAogUGxh
dGZvcm0vSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwCiBQbGF0Zm9ybS9JUEMvdW5peC9Db25u
ZWN0aW9uVW5peC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4
dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggNWI1MTRkNTIxNmUuLjNkMjAw
ZmE2MGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CisrKyBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKQEAgLTQ0LDggKzQ0LDYgQEAgTmV0d29ya1Byb2Nl
c3Mvd2VicnRjL05ldHdvcmtSVENNb25pdG9yLmNwcAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENQcm92aWRlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDU29j
a2V0LmNwcAogCi1QbGF0Zm9ybS9JUEMvZ2xpYi9HU29ja2V0TW9uaXRvci5jcHAKLQogUGxhdGZv
cm0vSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwCiBQbGF0Zm9ybS9JUEMvdW5peC9Db25uZWN0
aW9uVW5peC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IDE0MWNiMDJjODE0Li4wYzVlZGIwYjhiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmNwcApAQCAtMzQsMTEgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5p
cXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKLSNkZWZpbmUgUkVNT1RF
X0lOU1BFQ1RPUl9DTElFTlRfREJVU19JTlRFUkZBQ0UgIm9yZy53ZWJraXQuUmVtb3RlSW5zcGVj
dG9yQ2xpZW50IgotI2RlZmluZSBSRU1PVEVfSU5TUEVDVE9SX0NMSUVOVF9PQkpFQ1RfUEFUSCAi
L29yZy93ZWJraXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50IgotI2RlZmluZSBJTlNQRUNUT1JfREJV
U19JTlRFUkZBQ0UgIm9yZy53ZWJraXQuSW5zcGVjdG9yIgotI2RlZmluZSBJTlNQRUNUT1JfREJV
U19PQkpFQ1RfUEFUSCAiL29yZy93ZWJraXQvSW5zcGVjdG9yIgotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlDbGllbnQgewpAQCAtOTgsMjYgKzkzLDI0IEBAIHByaXZhdGU6CiAgICAg
dWludDY0X3QgbV90YXJnZXRJRDsKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyIGludHJvc3BlY3Rp
b25YTUxbXSA9Ci0gICAgIjxub2RlPiIKLSAgICAiICA8aW50ZXJmYWNlIG5hbWU9JyIgUkVNT1RF
X0lOU1BFQ1RPUl9DTElFTlRfREJVU19JTlRFUkZBQ0UgIic+IgotICAgICIgICAgPG1ldGhvZCBu
YW1lPSdTZXRUYXJnZXRMaXN0Jz4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT0ndCcgbmFtZT0nY29u
bmVjdGlvbklEJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICAgICA8YXJnIHR5cGU9J2EodHNz
c2IpJyBuYW1lPSdsaXN0JyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICAgPC9tZXRob2Q+Igot
ICAgICIgICAgPG1ldGhvZCBuYW1lPSdTZW5kTWVzc2FnZVRvRnJvbnRlbmQnPiIKLSAgICAiICAg
ICAgPGFyZyB0eXBlPSd0JyBuYW1lPSdjb25uZWN0aW9uSUQnIGRpcmVjdGlvbj0naW4nLz4iCi0g
ICAgIiAgICAgIDxhcmcgdHlwZT0ndCcgbmFtZT0ndGFyZ2V0JyBkaXJlY3Rpb249J2luJy8+Igot
ICAgICIgICAgICA8YXJnIHR5cGU9J3MnIG5hbWU9J21lc3NhZ2UnIGRpcmVjdGlvbj0naW4nLz4i
Ci0gICAgIiAgICA8L21ldGhvZD4iCi0gICAgIiAgPC9pbnRlcmZhY2U+IgotICAgICI8L25vZGU+
IjsKLQotY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
X2ludGVyZmFjZVZUYWJsZSA9IHsKLSAgICAvLyBtZXRob2RfY2FsbAotICAgIFtdKEdEQnVzQ29u
bmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgZ2NoYXIqIHNlbmRlciwgY29uc3QgZ2NoYXIqIG9i
amVjdFBhdGgsIGNvbnN0IGdjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBnY2hhciogbWV0aG9k
TmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgYXV0byogY2xpZW50ID0gc3RhdGlj
X2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAgICAgICBpZiAoIWdf
c3RyY21wMChtZXRob2ROYW1lLCAiU2V0VGFyZ2V0TGlzdCIpKSB7Citjb25zdCBTb2NrZXRDb25u
ZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzX21lc3NhZ2VI
YW5kbGVycyA9IHsKKyAgICB7ICJEaWRDbG9zZSIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRD
b25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgeyB9LAorICAgICAgICBbXShTb2NrZXRDb25u
ZWN0aW9uJiwgR1ZhcmlhbnQqLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0
byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRh
KTsKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0aW9uRGlkQ2xvc2UoKTsKKyAgICAgICAgfX0K
KyAgICB9LAorICAgIHsgIkRpZFNldHVwSW5zcGVjdG9yQ2xpZW50Iiwgc3RkOjpwYWlyPENTdHJp
bmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKGF5KSIsCisgICAgICAg
IFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNl
ckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJ
bnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBHUmVmUHRyPEdWYXJpYW50
PiBiYWNrZW5kQ29tbWFuZHNWYXJpYW50OworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJh
bWV0ZXJzLCAiKEBheSkiLCAmYmFja2VuZENvbW1hbmRzVmFyaWFudC5vdXRQdHIoKSk7CisgICAg
ICAgICAgICBjbGllbnQuc2V0QmFja2VuZENvbW1hbmRzKGdfdmFyaWFudF9nZXRfYnl0ZXN0cmlu
ZyhiYWNrZW5kQ29tbWFuZHNWYXJpYW50LmdldCgpKSk7CisgICAgICAgIH19CisgICAgfSwKKyAg
ICB7ICJTZXRUYXJnZXRMaXN0Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246
Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHRhKHRzc3NiKSkiLAorICAgICAgICBbXShTb2NrZXRDb25u
ZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAg
ICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50
Kj4odXNlckRhdGEpOwogICAgICAgICAgICAgZ3VpbnQ2NCBjb25uZWN0aW9uSUQ7CiAgICAgICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50SXRlcj4gaXRlcjsKICAgICAgICAgICAgIGdfdmFy
aWFudF9nZXQocGFyYW1ldGVycywgIih0YSh0c3NzYikpIiwgJmNvbm5lY3Rpb25JRCwgJml0ZXIu
b3V0UHRyKCkpOwpAQCAtMTMzLDIzICsxMjYsMTggQEAgY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFi
bGUgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzX2ludGVyZmFjZVZUYWJsZSA9IHsKICAgICAgICAg
ICAgICAgICBpZiAoIWdfc3RyY21wMCh0eXBlLCAiV2ViIikgfHwgIWdfc3RyY21wMCh0eXBlLCAi
SmF2YVNjcmlwdCIpKQogICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaXN0LnVuY2hlY2tlZEFw
cGVuZCh7IHRhcmdldElELCB0eXBlLCBuYW1lLCB1cmwgfSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjbGllbnQtPnNldFRhcmdldExpc3QoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdl
dExpc3QpKTsKLSAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFs
dWUoaW52b2NhdGlvbiwgbnVsbHB0cik7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMCht
ZXRob2ROYW1lLCAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIikpIHsKKyAgICAgICAgICAgIGNsaWVu
dC5zZXRUYXJnZXRMaXN0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAg
ICAgIH19CisgICAgfSwKKyAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiLCBzdGQ6OnBhaXI8
Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIodHRzKSIsCisg
ICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxS
ZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CiAgICAgICAgICAgICBndWludDY0IGNv
bm5lY3Rpb25JRCwgdGFyZ2V0SUQ7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOwog
ICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHR0JnMpIiwgJmNvbm5lY3Rp
b25JRCwgJnRhcmdldElELCAmbWVzc2FnZSk7Ci0gICAgICAgICAgICBjbGllbnQtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdlKTsKLSAgICAgICAg
ICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgbnVs
bHB0cik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0
aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBudWxscHRyKTsKLSAgICB9LAotICAgIC8vIGdl
dF9wcm9wZXJ0eQotICAgIG51bGxwdHIsCi0gICAgLy8gc2V0X3Byb3BlcnR5Ci0gICAgbnVsbHB0
ciwKLSAgICAvLyBwYWRkaW5nCi0gICAgeyAwIH0KKyAgICAgICAgICAgIGNsaWVudC5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2FnZSk7CisgICAgICAg
IH19CisgICAgfQogfTsKIAogUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JD
bGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9y
T2JzZXJ2ZXImIG9ic2VydmVyKQpAQCAtMTU3LDcyICsxNDUsMzIgQEAgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWdu
ZWQgcG9ydCwKICAgICAsIG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCiAgICAgLCBtX2NhbmNlbGxhYmxl
KGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSkKIHsKLSAgICBHVW5pcXVlUHRyPGNoYXI+
IGRidXNBZGRyZXNzKGdfc3RyZHVwX3ByaW50ZigidGNwOmhvc3Q9JXMscG9ydD0ldSIsIGFkZHJl
c3MsIHBvcnQpKTsKLSAgICBnX2RidXNfY29ubmVjdGlvbl9uZXdfZm9yX2FkZHJlc3MoZGJ1c0Fk
ZHJlc3MuZ2V0KCksIEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX0FVVEhFTlRJQ0FUSU9OX0NMSUVO
VCwgbnVsbHB0ciwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgW10oR09iamVjdCosIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0
byogY2xpZW50ID0gc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEp
OworICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdf
c29ja2V0X2NsaWVudF9uZXcoKSk7CisgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9z
dF9hc3luYyhzb2NrZXRDbGllbnQuZ2V0KCksIG1faG9zdEFuZFBvcnQudXRmOCgpLmRhdGEoKSwg
MCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAgICAgW10oR09iamVjdCogb2JqZWN0LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKICAgICAgICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfZGJ1c19jb25uZWN0aW9uX25ld19mb3JfYWRk
cmVzc19maW5pc2gocmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAgICAgIGlmICgh
Y29ubmVjdGlvbiAmJiAhZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBH
X0lPX0VSUk9SX0NBTkNFTExFRCkpCisgICAgICAgICAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hv
c3RfZmluaXNoKEdfU09DS0VUX0NMSUVOVChvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIo
KSkpOworICAgICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19F
UlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGF1dG8qIGNsaWVudCA9IHN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVu
dCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGlmIChjb25uZWN0aW9uKQorICAgICAgICAgICAg
ICAgIGNsaWVudC0+c2V0dXBDb25uZWN0aW9uKFNvY2tldENvbm5lY3Rpb246OmNyZWF0ZShXVEZN
b3ZlKGNvbm5lY3Rpb24pLCBzX21lc3NhZ2VIYW5kbGVycywgY2xpZW50KSk7CisgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlJlbW90ZUluc3BlY3RvckNs
aWVudCBmYWlsZWQgdG8gY29ubmVjdCB0byBpbnNwZWN0b3Igc2VydmVyOiAlcyIsIGVycm9yLT5t
ZXNzYWdlKTsKLSAgICAgICAgICAgIGNsaWVudC0+c2V0dXBDb25uZWN0aW9uKFdURk1vdmUoY29u
bmVjdGlvbikpOworICAgICAgICAgICAgICAgIGNsaWVudC0+bV9vYnNlcnZlci5jb25uZWN0aW9u
Q2xvc2VkKCpjbGllbnQpOworICAgICAgICAgICAgfQogICAgIH0sIHRoaXMpOwogfQogCiBSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQogeworICAgIGdfY2Fu
Y2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwogfQogCi1zdGF0aWMgdm9pZCBk
YnVzQ29ubmVjdGlvbkNhbGxBc3luY1JlYWR5Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIpCi17Ci0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+
IGVycm9yOwotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdFZhcmlhbnQgPSBhZG9wdEdSZWYo
Z19kYnVzX2Nvbm5lY3Rpb25fY2FsbF9maW5pc2goR19EQlVTX0NPTk5FQ1RJT04oc291cmNlKSwg
cmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAoIXJlc3VsdFZhcmlhbnQgJiYgIWdf
ZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxM
RUQpKQotICAgICAgICBXVEZMb2dBbHdheXMoIlJlbW90ZUluc3BlY3RvckNsaWVudCBmYWlsZWQg
dG8gc2VuZCBEQnVzIG1lc3NhZ2U6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotfQotCi12b2lkIFJl
bW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZENhbGxiYWNrKEdEQnVzQ29ubmVj
dGlvbiogY29ubmVjdGlvbiwgZ2Jvb2xlYW4gLypyZW1vdGVQZWVyVmFuaXNoZWQqLywgR0Vycm9y
KiwgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChj
b25uZWN0aW9uLCBjbGllbnQtPm1fZGJ1c0Nvbm5lY3Rpb24uZ2V0KCkgPT0gY29ubmVjdGlvbik7
Ci0gICAgY2xpZW50LT5jb25uZWN0aW9uQ2xvc2VkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZXR1cENvbm5lY3Rpb24oR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+JiYgY29u
bmVjdGlvbikKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXR1cENvbm5lY3Rpb24oUmVm
PFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKIHsKLSAgICBtX2RidXNDb25uZWN0aW9u
ID0gV1RGTW92ZShjb25uZWN0aW9uKTsKLSAgICBpZiAoIW1fZGJ1c0Nvbm5lY3Rpb24pIHsKLSAg
ICAgICAgbV9vYnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCp0aGlzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGJ1c0Nvbm5lY3Rpb24uZ2V0KCksICJj
bG9zZWQiLCBHX0NBTExCQUNLKGNvbm5lY3Rpb25DbG9zZWRDYWxsYmFjayksIHRoaXMpOwotCi0g
ICAgc3RhdGljIEdEQnVzTm9kZUluZm8qIGludHJvc3BlY3Rpb25EYXRhID0gbnVsbHB0cjsKLSAg
ICBpZiAoIWludHJvc3BlY3Rpb25EYXRhKQotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YSA9IGdf
ZGJ1c19ub2RlX2luZm9fbmV3X2Zvcl94bWwoaW50cm9zcGVjdGlvblhNTCwgbnVsbHB0cik7Ci0K
LSAgICBnX2RidXNfY29ubmVjdGlvbl9yZWdpc3Rlcl9vYmplY3QobV9kYnVzQ29ubmVjdGlvbi5n
ZXQoKSwgUkVNT1RFX0lOU1BFQ1RPUl9DTElFTlRfT0JKRUNUX1BBVEgsIGludHJvc3BlY3Rpb25E
YXRhLT5pbnRlcmZhY2VzWzBdLCAmc19pbnRlcmZhY2VWVGFibGUsIHRoaXMsIG51bGxwdHIsIG51
bGxwdHIpOwotCi0gICAgZ19kYnVzX2Nvbm5lY3Rpb25fY2FsbChtX2RidXNDb25uZWN0aW9uLmdl
dCgpLCBudWxscHRyLAotICAgICAgICBJTlNQRUNUT1JfREJVU19PQkpFQ1RfUEFUSCwKLSAgICAg
ICAgSU5TUEVDVE9SX0RCVVNfSU5URVJGQUNFLAotICAgICAgICAiU2V0dXBJbnNwZWN0b3JDbGll
bnQiLAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoQGF5KSIsIGdfdmFyaWFudF9uZXdfYnl0ZXN0
cmluZyhJbnNwZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2goKS5kYXRhKCkpKSwKLSAgICAgICAg
bnVsbHB0ciwgR19EQlVTX0NBTExfRkxBR1NfTk9fQVVUT19TVEFSVCwKLSAgICAgICAgLTEsIG1f
Y2FuY2VsbGFibGUuZ2V0KCksIFtdKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJv
cj4gZXJyb3I7Ci0gICAgICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1bHRWYXJpYW50ID0g
YWRvcHRHUmVmKGdfZGJ1c19jb25uZWN0aW9uX2NhbGxfZmluaXNoKEdfREJVU19DT05ORUNUSU9O
KHNvdXJjZSksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAoZ19l
cnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExF
RCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKCFyZXN1bHRWYXJp
YW50KSB7Ci0gICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJSZW1vdGVJbnNwZWN0b3JDbGll
bnQgZmFpbGVkIHRvIHNlbmQgREJ1cyBtZXNzYWdlOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF1dG8q
IGNsaWVudCA9IHN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsK
LSAgICAgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IGJhY2tlbmRDb21tYW5kc1ZhcmlhbnQ7Ci0g
ICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHJlc3VsdFZhcmlhbnQuZ2V0KCksICIoQGF5KSIsICZi
YWNrZW5kQ29tbWFuZHNWYXJpYW50Lm91dFB0cigpKTsKLSAgICAgICAgICAgIGNsaWVudC0+c2V0
QmFja2VuZENvbW1hbmRzKGdfdmFyaWFudF9nZXRfYnl0ZXN0cmluZyhiYWNrZW5kQ29tbWFuZHNW
YXJpYW50LmdldCgpKSk7Ci0gICAgICAgIH0sIHRoaXMpOworICAgIG1fc29ja2V0Q29ubmVjdGlv
biA9IFdURk1vdmUoY29ubmVjdGlvbik7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVz
c2FnZSgiU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBnX3ZhcmlhbnRfbmV3KCIoQGF5KSIsIGdfdmFy
aWFudF9uZXdfYnl0ZXN0cmluZyhJbnNwZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2goKS5kYXRh
KCkpKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFu
ZHMoY29uc3QgY2hhciogYmFja2VuZENvbW1hbmRzKQpAQCAtMjM3LDEyICsxODUsMTEgQEAgdm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBjaGFyKiBi
YWNrZW5kQ29tbWFuZHMpCiAgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSAiZGF0YTp0ZXh0L2ph
dmFzY3JpcHQ7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwogfQogCi12b2lkIFJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZCgpCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6
Y29ubmVjdGlvbkRpZENsb3NlKCkKIHsKLSAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNl
bGxhYmxlLmdldCgpKTsKICAgICBtX3RhcmdldHMuY2xlYXIoKTsKICAgICBtX2luc3BlY3RvclBy
b3h5TWFwLmNsZWFyKCk7Ci0gICAgbV9kYnVzQ29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgbV9z
b2NrZXRDb25uZWN0aW9uID0gbnVsbHB0cjsKICAgICBtX29ic2VydmVyLmNvbm5lY3Rpb25DbG9z
ZWQoKnRoaXMpOwogfQogCkBAIC0yNTYsMzggKzIwMywxOSBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElE
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZ19kYnVzX2Nvbm5lY3Rpb25fY2FsbCht
X2RidXNDb25uZWN0aW9uLmdldCgpLCBudWxscHRyLAotICAgICAgICBJTlNQRUNUT1JfREJVU19P
QkpFQ1RfUEFUSCwKLSAgICAgICAgSU5TUEVDVE9SX0RCVVNfSU5URVJGQUNFLAotICAgICAgICAi
U2V0dXAiLAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0YXJn
ZXRJRCksCi0gICAgICAgIG51bGxwdHIsIEdfREJVU19DQUxMX0ZMQUdTX05PX0FVVE9fU1RBUlQs
Ci0gICAgICAgIC0xLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBkYnVzQ29ubmVjdGlvbkNhbGxBc3lu
Y1JlYWR5Q2FsbGJhY2ssIG51bGxwdHIpOwotCisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5k
TWVzc2FnZSgiU2V0dXAiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0YXJn
ZXRJRCkpOwogICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmxvYWQoKTsKIH0KIAogdm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKHVpbnQ2NF90IGNv
bm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsK
LSAgICBnX2RidXNfY29ubmVjdGlvbl9jYWxsKG1fZGJ1c0Nvbm5lY3Rpb24uZ2V0KCksIG51bGxw
dHIsCi0gICAgICAgIElOU1BFQ1RPUl9EQlVTX09CSkVDVF9QQVRILAotICAgICAgICBJTlNQRUNU
T1JfREJVU19JTlRFUkZBQ0UsCi0gICAgICAgICJTZW5kTWVzc2FnZVRvQmFja2VuZCIsCi0gICAg
ICAgIGdfdmFyaWFudF9uZXcoIih0dHMpIiwgY29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2Fn
ZS51dGY4KCkuZGF0YSgpKSwKLSAgICAgICAgbnVsbHB0ciwgR19EQlVTX0NBTExfRkxBR1NfTk9f
QVVUT19TVEFSVCwKLSAgICAgICAgLTEsIG1fY2FuY2VsbGFibGUuZ2V0KCksIGRidXNDb25uZWN0
aW9uQ2FsbEFzeW5jUmVhZHlDYWxsYmFjaywgbnVsbHB0cik7CisgICAgbV9zb2NrZXRDb25uZWN0
aW9uLT5zZW5kTWVzc2FnZSgiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiLCBnX3ZhcmlhbnRfbmV3KCIo
dHRzKSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOwog
fQogCiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y2xvc2VGcm9tRnJvbnRlbmQodWludDY0
X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKIHsKICAgICBBU1NFUlQobV9pbnNw
ZWN0b3JQcm94eU1hcC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdl
dElEKSkpOwotICAgIGdfZGJ1c19jb25uZWN0aW9uX2NhbGwobV9kYnVzQ29ubmVjdGlvbi5nZXQo
KSwgbnVsbHB0ciwKLSAgICAgICAgSU5TUEVDVE9SX0RCVVNfT0JKRUNUX1BBVEgsCi0gICAgICAg
IElOU1BFQ1RPUl9EQlVTX0lOVEVSRkFDRSwKLSAgICAgICAgIkZyb250ZW5kRGlkQ2xvc2UiLAot
ICAgICAgICBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0YXJnZXRJRCksCi0g
ICAgICAgIG51bGxwdHIsIEdfREJVU19DQUxMX0ZMQUdTX05PX0FVVE9fU1RBUlQsCi0gICAgICAg
IC0xLCBtX2NhbmNlbGxhYmxlLmdldCgpLCBkYnVzQ29ubmVjdGlvbkNhbGxBc3luY1JlYWR5Q2Fs
bGJhY2ssIG51bGxwdHIpOworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIkZy
b250ZW5kRGlkQ2xvc2UiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0YXJn
ZXRJRCkpOwogICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNv
bm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKaW5kZXggNjg4MThjZjAyZjQuLmU2
ZDE4ODk2NmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1JlbW90
ZUluc3BlY3RvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTMwLDExICszMCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9Tb2NrZXRDb25uZWN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HQ2FuY2VsbGFibGUg
R0NhbmNlbGxhYmxlOwotdHlwZWRlZiBzdHJ1Y3QgX0dEQnVzQ29ubmVjdGlvbiBHREJ1c0Nvbm5l
Y3Rpb247Ci10eXBlZGVmIHN0cnVjdCBfR0RCdXNJbnRlcmZhY2VWVGFibGUgR0RCdXNJbnRlcmZh
Y2VWVGFibGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC03MiwxMSArNzEsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1
aW50NjRfdCB0YXJnZXRJRCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgY29ubmVjdGlv
bkNsb3NlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiosIGdib29sZWFuIHJlbW90ZVBlZXJWYW5p
c2hlZCwgR0Vycm9yKiwgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Kik7Ci0gICAgdm9pZCBzZXR1cENv
bm5lY3Rpb24oR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+JiYpOwotICAgIHZvaWQgY29ubmVjdGlv
bkNsb3NlZCgpOworICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFu
ZGxlcnMgc19tZXNzYWdlSGFuZGxlcnM7CisgICAgdm9pZCBzZXR1cENvbm5lY3Rpb24oUmVmPFNv
Y2tldENvbm5lY3Rpb24+JiYpOworICAgIHZvaWQgY29ubmVjdGlvbkRpZENsb3NlKCk7CiAKLSAg
ICBzdGF0aWMgY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19pbnRlcmZhY2VWVGFibGU7CiAg
ICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciopOwogICAgIHZvaWQgc2V0VGFy
Z2V0TGlzdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYpOwogICAgIHZv
aWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3Qg
dGFyZ2V0SUQsIGNvbnN0IGNoYXIqKTsKQEAgLTg0LDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgbV9ob3N0QW5kUG9ydDsKICAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CiAg
ICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7Ci0gICAgR1JlZlB0cjxHREJ1
c0Nvbm5lY3Rpb24+IG1fZGJ1c0Nvbm5lY3Rpb247CisgICAgUmVmUHRyPFNvY2tldENvbm5lY3Rp
b24+IG1fc29ja2V0Q29ubmVjdGlvbjsKICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5j
ZWxsYWJsZTsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRz
OwogICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVJbnNwZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjU3ZDNiZjk2MjIu
LjQ0NjMwYjkzZTg3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTEtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gUmVtb3RlSW5zcGVj
dG9yOiB1c2Ugc29ja2V0cyBpbnN0ZWFkIG9mIERCdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGUgdW5pdCB0ZXN0cyB0byBub3QgdXNl
IERCdXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1
dG9tYXRpb25TZXNzaW9uLmNwcDoKKwogMjAxOS0xMS0xNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29u
X2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBbVUlXS0RvY3VtZW50Q29udGV4dF0g
QWRkIHRoZSBhYmlsaXR5IHRvIHJlcXVlc3QgYWxsIG1hcmtlZCB0ZXh0IHJlY3RzCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1dG9tYXRpb25T
ZXNzaW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0
b21hdGlvblNlc3Npb24uY3BwCmluZGV4IGIxMzA5OTIxNTZiLi5jZGFiNGFlZWRlZiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rl
c3RBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTIyLDIwICsyMiwyMyBAQAogI2luY2x1ZGUgIlRl
c3RNYWluLmgiCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPHd0Zi9VVUlELmg+Cisj
aW5jbHVkZSA8d3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogY2xhc3MgQXV0b21hdGlvblRlc3Q6IHB1YmxpYyBUZXN0IHsK
IHB1YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEF1dG9tYXRpb25UZXN0KTsKIAor
ICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMgc19tZXNz
YWdlSGFuZGxlcnM7CisKICAgICBBdXRvbWF0aW9uVGVzdCgpCiAgICAgICAgIDogbV9tYWluTG9v
cChhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpKSkKICAgICB7Ci0gICAg
ICAgIGdfZGJ1c19jb25uZWN0aW9uX25ld19mb3JfYWRkcmVzcygidGNwOmhvc3Q9MTI3LjAuMC4x
LHBvcnQ9MjIyOSIsCi0gICAgICAgICAgICBHX0RCVVNfQ09OTkVDVElPTl9GTEFHU19BVVRIRU5U
SUNBVElPTl9DTElFTlQsIG51bGxwdHIsIG51bGxwdHIsIFtdKEdPYmplY3QqLCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgICAgICBHUmVmUHRy
PEdEQnVzQ29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX2RidXNfY29ubmVjdGlv
bl9uZXdfZm9yX2FkZHJlc3NfZmluaXNoKHJlc3VsdCwgbnVsbHB0cikpOwotICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEF1dG9tYXRpb25UZXN0Kj4odXNlckRhdGEpLT5zZXRDb25uZWN0aW9u
KFdURk1vdmUoY29ubmVjdGlvbikpOwotICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIEdS
ZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2Ns
aWVudF9uZXcoKSk7CisgICAgICAgIGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfYXN5
bmMoc29ja2V0Q2xpZW50LmdldCgpLCAiMTI3LjAuMC4xOjIyMjkiLCAwLCBudWxscHRyLCBbXShH
T2JqZWN0KiBjbGllbnQsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkg
eworICAgICAgICAgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFk
b3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2ZpbmlzaChHX1NPQ0tFVF9D
TElFTlQoY2xpZW50KSwgcmVzdWx0LCBudWxscHRyKSk7CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxBdXRvbWF0aW9uVGVzdCo+KHVzZXJEYXRhKS0+c2V0Q29ubmVjdGlvbihTb2NrZXRDb25uZWN0
aW9uOjpjcmVhdGUoV1RGTW92ZShjb25uZWN0aW9uKSwgc19tZXNzYWdlSGFuZGxlcnMsIHVzZXJE
YXRhKSk7CisgICAgICAgIH0sIHRoaXMpOwogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcC5nZXQoKSk7CiAgICAgfQogCkBAIC01Nyw2OSArNjAsMTAgQEAgcHVibGljOgogICAgICAg
ICBib29sIGlzUGFpcmVkIHsgZmFsc2UgfTsKICAgICB9OwogCi0gICAgY29uc3QgR0RCdXNJbnRl
cmZhY2VWVGFibGUgc19pbnRlcmZhY2VWVGFibGUgPSB7Ci0gICAgICAgIC8vIG1ldGhvZF9jYWxs
Ci0gICAgICAgIFtdKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgZ2NoYXIqIHNl
bmRlciwgY29uc3QgZ2NoYXIqIG9iamVjdFBhdGgsIGNvbnN0IGdjaGFyKiBpbnRlcmZhY2VOYW1l
LCBjb25zdCBnY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0
aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAg
ICAgIGF1dG8qIHRlc3QgPSBzdGF0aWNfY2FzdDxBdXRvbWF0aW9uVGVzdCo+KHVzZXJEYXRhKTsK
LSAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJTZXRUYXJnZXRMaXN0Iikp
IHsKLSAgICAgICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRDsKLSAgICAgICAgICAgICAg
ICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50SXRlcj4gaXRlcjsKLSAgICAgICAgICAgICAgICBnX3Zh
cmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodGEodHNzc2IpKSIsICZjb25uZWN0aW9uSUQsICZpdGVy
Lm91dFB0cigpKTsKLSAgICAgICAgICAgICAgICBndWludDY0IHRhcmdldElEOwotICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHR5cGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFt
ZTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkdW1teTsKLSAgICAgICAgICAgICAgICBn
Ym9vbGVhbiBpc1BhaXJlZDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJf
bG9vcChpdGVyLmdldCgpLCAiKHQmcyZzJnNiKSIsICZ0YXJnZXRJRCwgJnR5cGUsICZuYW1lLCAm
ZHVtbXksICZpc1BhaXJlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAo
dHlwZSwgIkF1dG9tYXRpb24iKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC0+c2V0
VGFyZ2V0KGNvbm5lY3Rpb25JRCwgVGFyZ2V0KHRhcmdldElELCBuYW1lLCBpc1BhaXJlZCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9u
X3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBudWxscHRyKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIikpIHsKLSAg
ICAgICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQ7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKLSAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0
KHBhcmFtZXRlcnMsICIodHQmcykiLCAmY29ubmVjdGlvbklELCAmdGFyZ2V0SUQsICZtZXNzYWdl
KTsKLSAgICAgICAgICAgICAgICB0ZXN0LT5yZWNlaXZlZE1lc3NhZ2UoY29ubmVjdGlvbklELCB0
YXJnZXRJRCwgbWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0
aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBudWxscHRyKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSwKLSAgICAgICAgLy8gZ2V0X3Byb3BlcnR5Ci0gICAgICAgIG51bGxwdHIsCi0gICAg
ICAgIC8vIHNldF9wcm9wZXJ0eQotICAgICAgICBudWxscHRyLAotICAgICAgICAvLyBwYWRkaW5n
Ci0gICAgICAgIHsgMCB9Ci0gICAgfTsKLQotICAgIHZvaWQgcmVnaXN0ZXJEQnVzT2JqZWN0KCkK
KyAgICB2b2lkIHNldENvbm5lY3Rpb24oUmVmPFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlv
bikKICAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGludHJvc3BlY3Rpb25YTUxbXSA9
Ci0gICAgICAgICAgICAiPG5vZGU+IgotICAgICAgICAgICAgIiAgPGludGVyZmFjZSBuYW1lPSdv
cmcud2Via2l0LlJlbW90ZUluc3BlY3RvckNsaWVudCc+IgotICAgICAgICAgICAgIiAgICA8bWV0
aG9kIG5hbWU9J1NldFRhcmdldExpc3QnPiIKLSAgICAgICAgICAgICIgICAgICA8YXJnIHR5cGU9
J3QnIG5hbWU9J2Nvbm5lY3Rpb25JRCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAgICAgICAgICIg
ICAgICA8YXJnIHR5cGU9J2EodHNzc2IpJyBuYW1lPSdsaXN0JyBkaXJlY3Rpb249J2luJy8+Igot
ICAgICAgICAgICAgIiAgICA8L21ldGhvZD4iCi0gICAgICAgICAgICAiICAgIDxtZXRob2QgbmFt
ZT0nU2VuZE1lc3NhZ2VUb0Zyb250ZW5kJz4iCi0gICAgICAgICAgICAiICAgICAgPGFyZyB0eXBl
PSd0JyBuYW1lPSdjb25uZWN0aW9uSUQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgICAgICAgICAi
ICAgICAgPGFyZyB0eXBlPSd0JyBuYW1lPSd0YXJnZXQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAg
ICAgICAgICAiICAgICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdtZXNzYWdlJyBkaXJlY3Rpb249J2lu
Jy8+IgotICAgICAgICAgICAgIiAgICA8L21ldGhvZD4iCi0gICAgICAgICAgICAiICA8L2ludGVy
ZmFjZT4iCi0gICAgICAgICAgICAiPC9ub2RlPiI7Ci0gICAgICAgIHN0YXRpYyBHREJ1c05vZGVJ
bmZvKiBpbnRyb3NwZWN0aW9uRGF0YSA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghaW50cm9zcGVj
dGlvbkRhdGEpCi0gICAgICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YSA9IGdfZGJ1c19ub2RlX2lu
Zm9fbmV3X2Zvcl94bWwoaW50cm9zcGVjdGlvblhNTCwgbnVsbHB0cik7Ci0gICAgICAgIGdfZGJ1
c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdChtX2Nvbm5lY3Rpb24uZ2V0KCksICIvb3JnL3dl
YmtpdC9SZW1vdGVJbnNwZWN0b3JDbGllbnQiLCBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNl
c1swXSwgJnNfaW50ZXJmYWNlVlRhYmxlLCB0aGlzLCBudWxscHRyLCBudWxscHRyKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHNldENvbm5lY3Rpb24oR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+JiYgY29u
bmVjdGlvbikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X3RydWUoR19JU19EQlVTX0NPTk5FQ1RJ
T04oY29ubmVjdGlvbi5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF90cnVlKGNvbm5lY3Rpb24u
cHRyKCkpOwogICAgICAgICBtX2Nvbm5lY3Rpb24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pOwotICAg
ICAgICByZWdpc3RlckRCdXNPYmplY3QoKTsKICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21h
aW5Mb29wLmdldCgpKTsKICAgICB9CiAKQEAgLTE1NSw5ICs5OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1lc3NhZ2VCdWlsZGVyLmFwcGVuZChwYXJhbWV0ZXJzKTsKICAgICAgICAgfQogICAg
ICAgICBtZXNzYWdlQnVpbGRlci5hcHBlbmQoJ30nKTsKLSAgICAgICAgZ19kYnVzX2Nvbm5lY3Rp
b25fY2FsbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsICIvb3JnL3dlYmtpdC9JbnNwZWN0
b3IiLCAib3JnLndlYmtpdC5JbnNwZWN0b3IiLAotICAgICAgICAgICAgIlNlbmRNZXNzYWdlVG9C
YWNrZW5kIiwgZ192YXJpYW50X25ldygiKHR0cykiLCBtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXQu
aWQsIG1lc3NhZ2VCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSksCi0gICAgICAgICAg
ICBudWxscHRyLCBHX0RCVVNfQ0FMTF9GTEFHU19OT19BVVRPX1NUQVJULCAtMSwgbnVsbHB0ciwg
bnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fY29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNl
bmRNZXNzYWdlVG9CYWNrZW5kIiwgZ192YXJpYW50X25ldygiKHR0cykiLCBtX2Nvbm5lY3Rpb25J
RCwgbV90YXJnZXQuaWQsIG1lc3NhZ2VCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkp
OwogICAgIH0KIAogICAgIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVXZWJWaWV3Q2FsbGJh
Y2soV2ViS2l0QXV0b21hdGlvblNlc3Npb24qIHNlc3Npb24sIEF1dG9tYXRpb25UZXN0KiB0ZXN0
KQpAQCAtMjA5LDI2ICsxNTEsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR1VuaXF1ZVB0
cjxjaGFyPihnX3N0cmR1cF9wcmludGYoIiV1LiV1LiV1IiwgbWFqb3IsIG1pbm9yLCBtaWNybykp
OwogICAgIH0KIAorICAgIHZvaWQgZGlkU3RhcnRBdXRvbWF0aW9uU2Vzc2lvbihHVmFyaWFudCog
Y2FwYWJpbGl0aWVzKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Nlc3Npb24pCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChjYXBhYmlsaXRpZXMpOworICAg
ICAgICBjb25zdCBjaGFyKiBicm93c2VyTmFtZTsKKyAgICAgICAgY29uc3QgY2hhciogYnJvd3Nl
clZlcnNpb247CisgICAgICAgIGdfdmFyaWFudF9nZXQoY2FwYWJpbGl0aWVzLCAiKCZzJnMpIiwg
JmJyb3dzZXJOYW1lLCAmYnJvd3NlclZlcnNpb24pOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
YnJvd3Nlck5hbWUsID09LCAiQXV0b21hdGlvblRlc3RCcm93c2VyIik7CisgICAgICAgIEdVbmlx
dWVQdHI8Y2hhcj4gdmVyc2lvblN0cmluZyA9IHRvVmVyc2lvblN0cmluZyhXRUJLSVRfTUFKT1Jf
VkVSU0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKGJyb3dzZXJWZXJzaW9uLCA9PSwgdmVyc2lvblN0cmluZy5n
ZXQoKSk7CisgICAgfQorCiAgICAgV2ViS2l0QXV0b21hdGlvblNlc3Npb24qIHJlcXVlc3RTZXNz
aW9uKGNvbnN0IGNoYXIqIHNlc3Npb25JRCkKICAgICB7CiAgICAgICAgIGF1dG8gc2lnbmFsSUQg
PSBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29udGV4dC5nZXQoKSwgImF1dG9tYXRpb24tc3RhcnRl
ZCIsIEdfQ0FMTEJBQ0soYXV0b21hdGlvblN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAg
ICBnX2RidXNfY29ubmVjdGlvbl9jYWxsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgIi9v
cmcvd2Via2l0L0luc3BlY3RvciIsICJvcmcud2Via2l0Lkluc3BlY3RvciIsCi0gICAgICAgICAg
ICAiU3RhcnRBdXRvbWF0aW9uU2Vzc2lvbiIsIGdfdmFyaWFudF9uZXcoIihzYXtzdn0pIiwgc2Vz
c2lvbklELCBudWxscHRyKSwgbnVsbHB0ciwgR19EQlVTX0NBTExfRkxBR1NfTk9fQVVUT19TVEFS
VCwgLTEsIG51bGxwdHIsCi0gICAgICAgICAgICBbXShHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgICAgIGF1dG8q
IHRlc3QgPSBzdGF0aWNfY2FzdDxBdXRvbWF0aW9uVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXRlc3QtPm1fc2Vzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gY2FwYWJpbGl0aWVzID0gYWRv
cHRHUmVmKGdfZGJ1c19jb25uZWN0aW9uX2NhbGxfZmluaXNoKEdfREJVU19DT05ORUNUSU9OKHNv
dXJjZSksIHJlc3VsdCwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIGdfYXNzZXJ0X25vbm51
bGwoY2FwYWJpbGl0aWVzLmdldCgpKTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBicm93
c2VyTmFtZTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBicm93c2VyVmVyc2lvbjsKLSAg
ICAgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KGNhcGFiaWxpdGllcy5nZXQoKSwgIigmcyZzKSIs
ICZicm93c2VyTmFtZSwgJmJyb3dzZXJWZXJzaW9uKTsKLSAgICAgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIoYnJvd3Nlck5hbWUsID09LCAiQXV0b21hdGlvblRlc3RCcm93c2VyIik7Ci0gICAg
ICAgICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiB2ZXJzaW9uU3RyaW5nID0gdG9WZXJzaW9uU3Ry
aW5nKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlOT1JfVkVSU0lPTiwgV0VCS0lUX01J
Q1JPX1ZFUlNJT04pOwotICAgICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihicm93c2VyVmVy
c2lvbiwgPT0sIHZlcnNpb25TdHJpbmcuZ2V0KCkpOwotICAgICAgICAgICAgfSwgdGhpcwotICAg
ICAgICApOworICAgICAgICBtX2Nvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTdGFydEF1dG9tYXRp
b25TZXNzaW9uIiwgZ192YXJpYW50X25ldygiKHNhe3N2fSkiLCBzZXNzaW9uSUQsIG51bGxwdHIp
KTsKICAgICAgICAgYXV0byB0aW1lb3V0SUQgPSBnX3RpbWVvdXRfYWRkKDEwMDAsIFtdKGdwb2lu
dGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CiAgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0
KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKSk7CiAgICAgICAgICAgICByZXR1cm4g
R19TT1VSQ0VfUkVNT1ZFOwpAQCAtMjQ3LDggKzE4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KG1fdGFyZ2V0LmlzUGFpcmVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBnX2Fzc2Vy
dF9jbXB1aW50KG1fdGFyZ2V0LmlkLCAhPSwgMCk7Ci0gICAgICAgIGdfZGJ1c19jb25uZWN0aW9u
X2NhbGwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCAiL29yZy93ZWJraXQvSW5zcGVjdG9y
IiwgIm9yZy53ZWJraXQuSW5zcGVjdG9yIiwKLSAgICAgICAgICAgICJTZXR1cCIsIGdfdmFyaWFu
dF9uZXcoIih0dCkiLCBtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXQuaWQpLCBudWxscHRyLCBHX0RC
VVNfQ0FMTF9GTEFHU19OT19BVVRPX1NUQVJULCAtMSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
cik7CisgICAgICAgIG1fY29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNldHVwIiwgZ192YXJpYW50
X25ldygiKHR0KSIsIG1fY29ubmVjdGlvbklELCBtX3RhcmdldC5pZCkpOwogICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcC5nZXQoKSk7CiAgICAgICAgIGdfYXNzZXJ0X3RydWUobV90
YXJnZXQuaXNQYWlyZWQpOwogICAgIH0KQEAgLTMxMSw3ICsyNTAsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fbWFpbkxvb3A7Ci0gICAgR1JlZlB0cjxHREJ1
c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBSZWZQdHI8U29ja2V0Q29ubmVjdGlvbj4g
bV9jb25uZWN0aW9uOwogICAgIFdlYktpdEF1dG9tYXRpb25TZXNzaW9uKiBtX3Nlc3Npb247CiAg
ICAgZ3VpbnQ2NCBtX2Nvbm5lY3Rpb25JRCB7IDAgfTsKICAgICBUYXJnZXQgbV90YXJnZXQ7CkBA
IC0zMjMsNiArMjYyLDQ5IEBAIHB1YmxpYzoKICAgICBDU3RyaW5nIG1fbWVzc2FnZTsKIH07CiAK
K2NvbnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycyBBdXRvbWF0aW9uVGVzdDo6
c19tZXNzYWdlSGFuZGxlcnMgPSB7CisgICAgeyAiRGlkQ2xvc2UiLCBzdGQ6OnBhaXI8Q1N0cmlu
ZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7IHsgfSwKKyAgICAgICAgW10o
U29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAg
ICAgICAgIGF1dG8mIHRlc3QgPSAqc3RhdGljX2Nhc3Q8QXV0b21hdGlvblRlc3QqPih1c2VyRGF0
YSk7CisgICAgICAgICAgICB0ZXN0Lm1fY29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgICAgIH19
CisgICAgfSwKKyAgICB7ICJEaWRTdGFydEF1dG9tYXRpb25TZXNzaW9uIiwgc3RkOjpwYWlyPENT
dHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHNzKSIsCisgICAg
ICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIg
dXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIHRlc3QgPSAqc3RhdGljX2Nhc3Q8QXV0b21h
dGlvblRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgICAgICB0ZXN0LmRpZFN0YXJ0QXV0b21hdGlv
blNlc3Npb24ocGFyYW1ldGVycyk7CisgICAgICAgIH19CisgICAgfSwKKyAgICB7ICJTZXRUYXJn
ZXRMaXN0Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxs
YmFjaz4geyAiKHRhKHRzc3NiKSkiLAorICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1Zh
cmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRv
JiB0ZXN0ID0gKnN0YXRpY19jYXN0PEF1dG9tYXRpb25UZXN0Kj4odXNlckRhdGEpOworICAgICAg
ICAgICAgZ3VpbnQ2NCBjb25uZWN0aW9uSUQ7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdW
YXJpYW50SXRlcj4gaXRlcjsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywg
Iih0YSh0c3NzYikpIiwgJmNvbm5lY3Rpb25JRCwgJml0ZXIub3V0UHRyKCkpOworICAgICAgICAg
ICAgZ3VpbnQ2NCB0YXJnZXRJRDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHR5cGU7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgY29uc3QgY2hhciogZHVtbXk7
CisgICAgICAgICAgICBnYm9vbGVhbiBpc1BhaXJlZDsKKyAgICAgICAgICAgIHdoaWxlIChnX3Zh
cmlhbnRfaXRlcl9sb29wKGl0ZXIuZ2V0KCksICIodCZzJnMmc2IpIiwgJnRhcmdldElELCAmdHlw
ZSwgJm5hbWUsICZkdW1teSwgJmlzUGFpcmVkKSkgeworICAgICAgICAgICAgICAgIGlmICghZ19z
dHJjbXAwKHR5cGUsICJBdXRvbWF0aW9uIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdC5z
ZXRUYXJnZXQoY29ubmVjdGlvbklELCBUYXJnZXQodGFyZ2V0SUQsIG5hbWUsIGlzUGFpcmVkKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCIs
IHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsg
Iih0dHMpIiwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0
ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgdGVzdCA9ICpzdGF0
aWNfY2FzdDxBdXRvbWF0aW9uVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGd1aW50NjQg
Y29ubmVjdGlvbklELCB0YXJnZXRJRDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7
CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodHQmcykiLCAmY29ubmVj
dGlvbklELCAmdGFyZ2V0SUQsICZtZXNzYWdlKTsKKyAgICAgICAgICAgIHRlc3QucmVjZWl2ZWRN
ZXNzYWdlKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgICAgICB9fQorICAg
IH0KK307CisKIHN0YXRpYyB2b2lkIHRlc3RBdXRvbWF0aW9uU2Vzc2lvblJlcXVlc3RTZXNzaW9u
KEF1dG9tYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIFN0cmluZyBzZXNz
aW9uSUQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Cg==
</data>
<flag name="review"
          id="399937"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>