<?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>155401</bug_id>
          
          <creation_ts>2016-03-12 17:41:23 -0800</creation_ts>
          <short_desc>WebKit can easily crash below NetworkSession::dataTaskForIdentifier() with NSURLSession enabled</short_desc>
          <delta_ts>2016-03-13 13:11:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>berto</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1174111</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-12 17:41:23 -0800</bug_when>
    <thetext>WebKit can easily crash below NetworkSession::dataTaskForIdentifier() with NSURLSession enabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174112</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-12 17:41:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/25129946&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174117</commentid>
    <comment_count>2</comment_count>
      <attachid>273861</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-12 17:58:11 -0800</bug_when>
    <thetext>Created attachment 273861
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174118</commentid>
    <comment_count>3</comment_count>
      <attachid>273862</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-12 18:01:30 -0800</bug_when>
    <thetext>Created attachment 273862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174119</commentid>
    <comment_count>4</comment_count>
      <attachid>273863</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-12 18:09:31 -0800</bug_when>
    <thetext>Created attachment 273863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174124</commentid>
    <comment_count>5</comment_count>
      <attachid>273863</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-12 18:37:34 -0800</bug_when>
    <thetext>Comment on attachment 273863
Patch

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

This is subtle, but a correct improvement to the NetworkSession lifetime.  r=me

&gt; Source/WebKit2/ChangeLog:14
&gt; +        - Made NetworkSession RefCounted.

https://imgflip.com/i/10qt2g

&gt; Source/WebKit2/ChangeLog:23
&gt; +

Please mention in the changelog that you also changed the SessionTracker to track a NetworkSession which contains a NetworkStorageSession if using NETWORK_SESSION or just a NetworkStorageSession otherwise so that the NetworkSession/NetworkStorageSession management is done automatically.  This is an improvement.

&gt; Source/WebKit2/NetworkProcess/NetworkDataTask.h:145
&gt; +    RefPtr&lt;NetworkSession&gt; m_session;

Why not Ref&lt;NetworkSession&gt; ?

&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:-61
&gt; -        ASSERT_NOT_REACHED();

We may as well keep the ASSERT_NOT_REACHED after the WTFLogAlways.  If this ever happens, we want people to not be able to miss it, especially if they&apos;re using a debug build.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:-322
&gt; -        } else
&gt; -            ASSERT_NOT_REACHED();

Yep, this is a better design. Removing these assertions is great.

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:336
&gt; +    if (!m_networkStorageSession)
&gt; +        return WebCore::NetworkStorageSession::defaultStorageSession();
&gt; +    return *m_networkStorageSession;

It would be nice to store the type from the constructor so we can assert m_type is Ephemeral if m_networkStorageSession and m_type is Normal if we are returning the defaultStorageSession.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:77
&gt; +    SessionTracker::forEachNetworkStorageSession([&amp;] (const NetworkStorageSession&amp; networkStorageSession) {

This is nice, too.  No more public map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174204</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-13 13:11:46 -0700</bug_when>
    <thetext>Committed r198083: &lt;http://trac.webkit.org/changeset/198083&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273861</attachid>
            <date>2016-03-12 17:58:11 -0800</date>
            <delta_ts>2016-03-12 18:01:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155401-20160312175758.patch</filename>
            <type>text/plain</type>
            <size>48405</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE2LTAzLTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgV2ViS2l0IGNhbiBlYXNpbHkgY3Jhc2gg
YmVsb3cgTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcigpIHdpdGggTlNVUkxT
ZXNzaW9uIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NTQwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhIFNlc3Npb25JRCBhcyBhIG1lbWJlciBvZiBOZXR3b3JrU3RvcmFnZVNlc3Np
b24uIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIGhhdmluZyBIYXNoTWFwcworICAgICAgICB0byBt
YXAgYmV0d2VlbiB0aGUgdHdvIHR5cGVzLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6c2Vzc2lvbklEKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Y3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpwbGF0Zm9ybVNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlZmF1bHRTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbik6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN3aXRj
aFRvTmV3VGVzdGluZ1Nlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRT
dG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c291cE5ldHdvcmtTZXNzaW9uKToKKwogMjAx
Ni0wMy0xMiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAg
ICAgIERlbGV0ZSBkZWFkIFNWRyBGb250IGNvZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkocmV2aXNp
b24gMTk4MDc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDEyIEBACiAjZGVmaW5l
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbl9oCiAKICNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5o
IgotCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgIlNlc3Npb25JRC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFVTRShDRk5FVFdPUkspCiAjaW5jbHVkZSAiQ0ZOZXR3b3JrU1BJLmgiCisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDMxICs0
NSwzNiBAQCBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBjcmVhdGVQcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJhc2UgPSBTdHJpbmcoKSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+
IGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXJCYXNlID0gU3RyaW5nKCkpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZv
aWQgc3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpOwogCisgICAgU2Vzc2lvbklEIHNlc3Npb25J
RCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CiAgICAgQ3JlZGVudGlhbFN0b3JhZ2Um
IGNyZWRlbnRpYWxTdG9yYWdlKCkgeyByZXR1cm4gbV9jcmVkZW50aWFsU3RvcmFnZTsgfQogCiAj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRk5FVFdPUkspCi0gICAgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPik7CisgICAgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCwgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+
KTsKKwogICAgIC8vIE1heSBiZSBudWxsLCBpbiB3aGljaCBjYXNlIGEgRm91bmRhdGlvbiBkZWZh
dWx0IHNob3VsZCBiZSB1c2VkLgogICAgIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcGxhdGZvcm1T
ZXNzaW9uKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVNlc3Npb24uZ2V0KCk7IH0KICAgICBXRUJDT1JF
X0VYUE9SVCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSgp
IGNvbnN0OwogI2VsaWYgVVNFKFNPVVApCi0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKHN0ZDo6
dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+KTsKKyAgICBOZXR3b3JrU3RvcmFnZVNlc3Np
b24oU2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPik7CiAgICAg
fk5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworCiAgICAgU291cE5ldHdvcmtTZXNzaW9uJiBzb3Vw
TmV0d29ya1Nlc3Npb24oKSBjb25zdDsKICAgICB2b2lkIHNldFNvdXBOZXR3b3JrU2Vzc2lvbihz
dGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPik7CiAjZWxzZQotICAgIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbihOZXR3b3JraW5nQ29udGV4dCopOworICAgIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbihTZXNzaW9uSUQsIE5ldHdvcmtpbmdDb250ZXh0Kik7CiAgICAgfk5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpOworCiAgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKICNl
bmRpZgogCiBwcml2YXRlOgorICAgIFNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKwogI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBVU0UoQ0ZORVRXT1JLKQotICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigp
OwogICAgIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBtX3BsYXRmb3JtU2Vzc2lv
bjsKICNlbGlmIFVTRShTT1VQKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Np
b24+IG1fc2Vzc2lvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAkocmV2aXNpb24g
MTk4MDc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFn
ZVNlc3Npb25TdHViLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDEzIEBACiAjaW5j
bHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCiAKICNpbmNsdWRlICJOZXR3b3JraW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCitOZXR3
b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lv
bklELCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Np
b25JRCkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQogewogfQogCkBAIC00NywxOCArNDksMjUg
QEAgTmV0d29ya2luZ0NvbnRleHQqIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbgogICAgIHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Np
b24+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihj
b25zdCBTdHJpbmcmKQorc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLU5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQorc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+JiBkZWZhdWx0U2Vzc2lvbigpCiB7Ci0gICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgc2Vz
c2lvbiwgKDApKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4+IHNlc3Npb247CiAgICAgcmV0dXJuIHNlc3Npb247CiB9CiAK
K05ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKQoreworICAgIGlmICghZGVmYXVsdFNlc3Npb24oKSkKKyAgICAgICAgZGVm
YXVsdFNlc3Npb24oKSA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuICpkZWZh
dWx0U2Vzc2lvbigpOworfQorCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3dpdGNoVG9O
ZXdUZXN0aW5nU2Vzc2lvbigpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNG
TmV0LmNwcAkocmV2aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDggKzQxLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3RvcmFnZVNl
c3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZj4gcGxhdGZvcm1TZXNzaW9uKQotICAgIDogbV9wbGF0Zm9ybVNlc3Npb24ocGxhdGZvcm1T
ZXNzaW9uKQorTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24oU2Vz
c2lvbklEIHNlc3Npb25JRCwgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IHBsYXRm
b3JtU2Vzc2lvbikKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKKyAgICAsIG1fcGxhdGZv
cm1TZXNzaW9uKHBsYXRmb3JtU2Vzc2lvbikKIHsKIH0KIApAQCAtNTgsMjcgKzU5LDI3IEBAIHZv
aWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzd2l0Y2hUb05ld1QKICAgICAvLyBTZXNzaW9uIG5h
bWUgc2hvdWxkIGJlIHNob3J0IGVub3VnaCBmb3Igc2hhcmVkIG1lbW9yeSByZWdpb24gbmFtZSB0
byBiZSB1bmRlciB0aGUgbGltaXQsIG90ZWhyd2lzZSBzYW5kYm94IHJ1bGVzIHdvbid0IHdvcmsg
KHNlZSA8cmRhcjovL3Byb2JsZW0vMTM2NDI4NTI+KS4KICAgICBTdHJpbmcgc2Vzc2lvbk5hbWUg
PSBTdHJpbmc6OmZvcm1hdCgiV2ViS2l0IFRlc3QtJXUiLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
Z2V0Q3VycmVudFByb2Nlc3NJRCgpKSk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZGVmYXVs
dE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KGFkb3B0Q0Yod2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oc2Vzc2lvbk5h
bWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpKTsKKyAgICBkZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIGFkb3B0Q0Yod2tDcmVhdGVQcml2YXRlU3RvcmFnZVNl
c3Npb24oc2Vzc2lvbk5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpKTsKICNlbHNlCi0gICAg
ZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KGFkb3B0Q0Yod2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oc2Vz
c2lvbk5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbigpLT5wbGF0Zm9ybVNlc3Npb24oKSkpKTsKKyAgICBkZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIGFkb3B0Q0Yod2tDcmVhdGVQcml2YXRlU3RvcmFnZVNl
c3Npb24oc2Vzc2lvbk5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgZGVmYXVsdE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbigpLT5wbGF0Zm9ybVNlc3Npb24oKSkpKTsKICNlbmRpZgogfQogCiBOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkKIHsKICAgICBpZiAoIWRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKSkKLSAg
ICAgICAgZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpID0gc3RkOjptYWtlX3VuaXF1ZTxO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+KG51bGxwdHIpOworICAgICAgICBkZWZhdWx0TmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4o
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIHJldHVybiAqZGVm
YXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93
c2luZ1Nlc3Npb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKK3N0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXJCYXNlKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVy
ID0gU3RyaW5nKGlkZW50aWZpZXJCYXNlICsgIi5Qcml2YXRlQnJvd3NpbmciKS5jcmVhdGVDRlN0
cmluZygpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYXV0byBzZXNzaW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KGFkb3B0Q0Yod2tDcmVhdGVQcml2YXRl
U3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSkpOworICAgIGF1dG8gc2Vzc2lvbiA9
IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQsIGFkb3B0
Q0Yod2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKSkpOwog
I2Vsc2UKLSAgICBhdXRvIHNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZp
ZXIuZ2V0KCksIGRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+cGxhdGZvcm1TZXNzaW9u
KCkpKSk7CisgICAgYXV0byBzZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KHNlc3Npb25JRCwgYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lv
bihjZklkZW50aWZpZXIuZ2V0KCksIGRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+cGxh
dGZvcm1TZXNzaW9uKCkpKSk7CiAjZW5kaWYKIAogICAgIHJldHVybiBzZXNzaW9uOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lv
blNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAkocmV2aXNpb24gMTk4MDc0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lv
blNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw5IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24o
c3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gc2Vzc2lvbikKLSAgICA6IG1fc2Vz
c2lvbihXVEZNb3ZlKHNlc3Npb24pKQorTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3
b3JrU2Vzc2lvbj4gc2Vzc2lvbikKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKKyAgICAs
IG1fc2Vzc2lvbihXVEZNb3ZlKHNlc3Npb24pKQogewogfQogCkBAIC01NSwxOSArNTYsMTkgQEAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlcwogTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpCiB7
CiAgICAgaWYgKCFkZWZhdWx0U2Vzc2lvbigpKQotICAgICAgICBkZWZhdWx0U2Vzc2lvbigpID0g
c3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KG51bGxwdHIpOworICAgICAg
ICBkZWZhdWx0U2Vzc2lvbigpID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Np
b24+KFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBudWxscHRyKTsKICAgICByZXR1cm4g
KmRlZmF1bHRTZXNzaW9uKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNl
c3Npb24+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lv
bihjb25zdCBTdHJpbmcmKQorc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgYXV0byBzZXNzaW9uID0gc3Rk
OjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFNvdXBOZXR3b3JrU2Vzc2lvbjo6
Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpKTsKKyAgICBhdXRvIHNlc3Npb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBTb3VwTmV0d29y
a1Nlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKSk7CiAgICAgcmV0dXJuIHNl
c3Npb247CiB9CiAKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzd2l0Y2hUb05ld1Rlc3Rp
bmdTZXNzaW9uKCkKIHsKLSAgICBkZWZhdWx0U2Vzc2lvbigpID0gc3RkOjptYWtlX3VuaXF1ZTxO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+KFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlVGVzdGluZ1Nl
c3Npb24oKSk7CisgICAgZGVmYXVsdFNlc3Npb24oKSA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgU291cE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGVUZXN0aW5nU2Vzc2lvbigpKTsKIH0KIAogU291cE5ldHdvcmtTZXNz
aW9uJiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3NSBAQAorMjAxNi0wMy0xMiAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFdlYktpdCBjYW4gZWFzaWx5IGNyYXNoIGJl
bG93IE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIoKSB3aXRoIE5TVVJMU2Vz
c2lvbiBlbmFibGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU0MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGUgaXNzdWUgd2FzIHRoYXQgTlNVUkxTZXNzaW9uRGF0YVRhc2tzIGNhbiBjb250aW51
ZSB0byBpbnZva2UgdGhlaXIgTlNVUkxTZXNzaW9uJ3MgZGVsZWdhdGUgbWV0aG9kcworICAgICAg
ICBhZnRlciAtW05TVVJMU2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXSBpcyBjYWxsZWQuIFNv
LCB3aGVuIHRoZSBOZXR3b3JrU2Vzc2lvbiB3YXMgZGVzdHJveWVkLCBhbmQKKyAgICAgICAgc3Rp
bGwgaGFkIG91dHN0YW5kaW5nIGRhdGEgdGFza3MsIHRoZSBzZXNzaW9uIGRlbGVnYXRlIHdvdWxk
IGdldCBjYWxsZWQsIHRyeSB0byB1c2UgdGhlIHNlc3Npb24sIGFuZAorICAgICAgICBjcmFzaC4g
VG8gZml4IHRoaXMgSToKKyAgICAgICAgCisgICAgICAgIC0gTWFkZSBOZXR3b3JrU2Vzc2lvbiBS
ZWZDb3VudGVkLgorICAgICAgICAtIEdhdmUgTmV0d29ya1Nlc3Npb24gdHdvIGRlbGVnYXRlcywg
b25lIGZvciBlYWNoIE5TVVJMU2Vzc2lvbi4KKyAgICAgICAgLSBNYWRlIGVhY2ggZGVsZWdhdGUg
aGF2ZSBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIE5ldHdvcmtTZXNzaW9uIHRoYXQgZ2V0cyBj
bGVhcmVkIG91dCBpbiB0aGUKKyAgICAgICAgICBuZXdseSBpbXBsZW1lbnRlZCBVUkxTZXNzaW9u
OmRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6IG1ldGhvZC4KKyAgICAgICAgLSBDaGFuZ2VkIGZy
b20gc2ltcGx5IGRlc3Ryb3lpbmcgdGhlIE5ldHdvcmtTZXNzaW9uIGluIFNlc3Npb25UcmFja2Vy
OjpkZXN0cm95U2Vzc2lvbigpLCB0byBkZXJlZmluZworICAgICAgICAgIGl0IGFuZCBleHBsaWNp
dGx5IGNhbGxpbmcgaW52YWxpZGF0ZUFuZENhbmNlbCBvbiB0aGUgdHdvIGFzc29jaWF0ZWQgTlNV
UkxTZXNzaW9ucyAod2hpY2ggaW4gdHVybiAKKyAgICAgICAgICBldmVudHVhbGx5IGNhdXNlIHRo
ZSBVUkxTZXNzaW9uOmRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6IHRvIGZpcmUpLgorICAgICAg
ICAtIFRvIGVuc3VyZSB0aGUgY29ycmVjdCBsaWZldGltZSBvZiB0aGUgV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uLCBJIG1hZGUgaXQgYSBtZW1iZXIgb2YgdGhlCisgICAgICAgICAgTmV0
d29ya1Nlc3Npb24uIFRoaXMgYWxzbyBhbGxvd2VkIHNvbWUgc2ltcGxpZmljYXRpb24gaW5zaWRl
IFNlc3Npb25UcmFja2VyLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25s
b2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWRM
b2NhdGlvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6TmV0d29ya0xvYWQpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNz
aW9uOjpzZXNzaW9uSUQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtE
YXRhVGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Ok5ldHdv
cmtEYXRhVGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtE
YXRhVGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1I
VFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRyeVBh
c3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRl
bGVnYXRlIGluaXRXaXRoTmV0d29ya1Nlc3Npb246XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nl
c3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6XSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzZXRDdXN0b21Qcm90b2NvbE1hbmFnZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNz
aW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Np
b246Om5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNz
aW9uOjpjbGVhckNyZWRlbnRpYWxzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAgICAgKiBTaGFy
ZWQvU2Vzc2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjppZGVudGlmaWVyQmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzZXRJZGVudGlmaWVyQmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OnN0YXRpY1Nlc3Npb25NYXApOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9u
VHJhY2tlcjo6bmV0d29ya1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tl
cjo6c3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpzdGF0aWNTdG9yYWdlU2Vzc2lv
bk1hcCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQpOgorICAg
ICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbik6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OlNl
c3Npb25UcmFja2VyOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6c3RvcmFnZVNlc3Npb25Ub0lEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U2Vz
c2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFy
ZWQvU2Vzc2lvblRyYWNrZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0
UG9saWN5Rm9yQWxsQ29udGV4dHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Ojpsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2NoZWR1bGVkUnVuTG9vcFBhaXJzKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OldlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQpOgorCiAyMDE2LTAzLTEyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgRGVsZXRlIGRlYWQgU1ZHIEZvbnQgY29kZQpJ
bmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgJKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtEYXRhVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgcHVibGlj
OgogICAgIH0KICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOwogICAgIGNvbnN0
IFN0cmluZyYgcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSB7IHJldHVybiBtX3BlbmRpbmdEb3du
bG9hZExvY2F0aW9uOyB9CisKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgY3VycmVudFJl
cXVlc3QoKTsKICAgICBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKTsKICAgICB2b2lkIHdpbGxQ
ZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcik7CkBA
IC0xNDEsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZhaWx1cmVUaW1lckZpcmVkKCk7
CiAgICAgdm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogICAgIAotICAgIE5ldHdv
cmtTZXNzaW9uJiBtX3Nlc3Npb247CisgICAgUmVmUHRyPE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Np
b247CiAgICAgTmV0d29ya0RhdGFUYXNrQ2xpZW50KiBtX2NsaWVudDsKICAgICBQZW5kaW5nRG93
bmxvYWQqIG1fcGVuZGluZ0Rvd25sb2FkIHsgbnVsbHB0ciB9OwogICAgIERvd25sb2FkSUQgbV9w
ZW5kaW5nRG93bmxvYWRJRDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtMb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZC5jcHAJKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NyBAQCBOZXR3b3JrTG9hZDo6TmV0d29ya0xvYWQoTmV0d29ya0xvYWRDbGllCiAgICAgICAgIGlm
ICghcGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nKQogICAgICAgICAgICAgbV90YXNrLT5yZXN1bWUo
KTsKICAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIFdU
RkxvZ0Fsd2F5cygiQXR0ZW1wdGVkIHRvIGNyZWF0ZSBhIE5ldHdvcmtMb2FkIHdpdGggYSBzZXNz
aW9uIChpZD0lIiBQUkl1NjQgIikgdGhhdCBkb2VzIG5vdCBleGlzdC4iLCBwYXJhbWV0ZXJzLnNl
c3Npb25JRC5zZXNzaW9uSUQoKSk7CiAjZWxzZQogICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZShtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBwYXJhbWV0ZXJzLnJlcXVlc3Qs
IHRoaXMsIHBhcmFtZXRlcnMuZGVmZXJzTG9hZGluZywgcGFyYW1ldGVycy5jb250ZW50U25pZmZp
bmdQb2xpY3kgPT0gU25pZmZDb250ZW50KTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCShyZXZpc2lvbiAxOTgwNzQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxOSArNDcsMjUgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEN1
c3RvbVByb3RvY29sTWFuYWdlcjsKIAotY2xhc3MgTmV0d29ya1Nlc3Npb24geworY2xhc3MgTmV0
d29ya1Nlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrU2Vzc2lvbj4gewogICAgIGZy
aWVuZCBjbGFzcyBOZXR3b3JrRGF0YVRhc2s7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBUeXBl
IHsKICAgICAgICAgTm9ybWFsLAogICAgICAgICBFcGhlbWVyYWwKICAgICB9OwotICAgIE5ldHdv
cmtTZXNzaW9uKFR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
KiwgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKik7CisKKyAgICBzdGF0aWMgUmVmPE5l
dHdvcmtTZXNzaW9uPiBjcmVhdGUoVHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90
b2NvbE1hbmFnZXIqLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPik7CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uJiBkZWZhdWx0U2Vzc2lvbigpOwogICAg
IH5OZXR3b3JrU2Vzc2lvbigpOwogCi0gICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgp
IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7
CisKKyAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXNzaW9uSUQ7IH0KKyAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIG5ldHdvcmtT
dG9yYWdlU2Vzc2lvbigpOworCiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciopOwotICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiYg
ZGVmYXVsdFNlc3Npb24oKTsKKwogI2lmICFVU0UoQ1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVU
V09SS19TRVNTSU9OKQogICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpOwogI2VuZGlmCkBAIC03
MSwxNCArNzcsMjAgQEAgcHVibGljOgogICAgIERvd25sb2FkSUQgdGFrZURvd25sb2FkSUQoTmV0
d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllcik7CiAgICAgCiBwcml2YXRlOgorICAgIE5ldHdv
cmtTZXNzaW9uKFR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Kiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4pOworCiAg
ICAgV2ViQ29yZTo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9uOwor
CiAgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0
YVRhc2sqPiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOwogICAgIEhhc2hNYXA8TmV0d29y
a0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza01h
cFdpdGhvdXRDcmVkZW50aWFsczsKICAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lk
ZW50aWZpZXIsIERvd25sb2FkSUQ+IG1fZG93bmxvYWRNYXA7CisKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0
b3JhZ2U7CisgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9u
V2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7CiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lv
bj4gbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOwotICAgIFJldGFpblB0cjxXS05l
dHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbkRlbGVnYXRlOworICAgIFJldGFpblB0cjxX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFn
ZURlbGVnYXRlOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkocmV2
aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgc3Rh
dGljIHZvaWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZQogCiBOZXR3b3JrRGF0YVRhc2s6
Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNr
Q2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdp
dGhDcmVkZW50aWFscywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKICAgICA6IG1fZmFp
bHVyZVRpbWVyKCp0aGlzLCAmTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKLSAg
ICAsIG1fc2Vzc2lvbihzZXNzaW9uKQorICAgICwgbV9zZXNzaW9uKCZzZXNzaW9uKQogICAgICwg
bV9jbGllbnQoJmNsaWVudCkKICAgICAsIG1fc3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVu
dGlhbHMpCiAgICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMuaHR0
cE1ldGhvZCgpKQpAQCAtNzksMTMgKzc5LDEwIEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0Rh
dGFUYXNrKE5ldHdvcmsKICAgICAgICAgdXJsID0gcmVxdWVzdC51cmwoKTsKICAgICAKICNpZiBV
U0UoQ1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVUV09SS19TRVNTSU9OKQotICAgICAgICBpZiAo
YXV0byBzdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihtX3Nl
c3Npb24uc2Vzc2lvbklEKCkpKSB7Ci0gICAgICAgICAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAm
JiBtX3Bhc3N3b3JkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2luaXRpYWxDcmVkZW50
aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHVybCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxT
dG9yYWdlKCkuc2V0KFdlYkNvcmU6OkNyZWRlbnRpYWwobV91c2VyLCBtX3Bhc3N3b3JkLCBXZWJD
b3JlOjpDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgdXJsKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgaWYgKG1fdXNlci5pc0Vt
cHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2luaXRpYWxDcmVk
ZW50aWFsID0gbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3Rv
cmFnZSgpLmdldCh1cmwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3Nlc3Npb24tPm5l
dHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KFdlYkNvcmU6OkNy
ZWRlbnRpYWwobV91c2VyLCBtX3Bhc3N3b3JkLCBXZWJDb3JlOjpDcmVkZW50aWFsUGVyc2lzdGVu
Y2VOb25lKSwgdXJsKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTA0LDEzICsxMDEsMTMgQEAgTmV0
d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29yawogICAgIH0KIAogICAgIGlmIChz
dG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7Ci0g
ICAgICAgIG1fdGFzayA9IFttX3Nlc3Npb24ubV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
IGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKLSAgICAgICAgQVNTRVJUKCFtX3Nlc3Np
b24ubV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5jb250YWlucyhbbV90YXNrIHRhc2tJZGVu
dGlmaWVyXSkpOwotICAgICAgICBtX3Nlc3Npb24ubV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFs
cy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOworICAgICAgICBtX3Rhc2sgPSBb
bV9zZXNzaW9uLT5tX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVx
dWVzdDpuc1JlcXVlc3RdOworICAgICAgICBBU1NFUlQoIW1fc2Vzc2lvbi0+bV9kYXRhVGFza01h
cFdpdGhDcmVkZW50aWFscy5jb250YWlucyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOworICAg
ICAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuYWRkKFttX3Rhc2sg
dGFza0lkZW50aWZpZXJdLCB0aGlzKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX3Rhc2sgPSBb
bV9zZXNzaW9uLm1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhS
ZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgICAgIEFTU0VSVCghbV9zZXNzaW9uLm1fZGF0YVRhc2tN
YXBXaXRob3V0Q3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pKTsK
LSAgICAgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuYWRkKFtt
X3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICAgICAgbV90YXNrID0gW21fc2Vzc2lv
bi0+bV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlIGRhdGFUYXNrV2l0aFJlcXVlc3Q6
bnNSZXF1ZXN0XTsKKyAgICAgICAgQVNTRVJUKCFtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRo
b3V0Q3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pKTsKKyAgICAg
ICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmFkZChbbV90YXNr
IHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CiAgICAgfQogCiAjaWYgSEFWRShDRk5FVFdPUktfU1RP
UkFHRV9QQVJUSVRJT05JTkcpCkBAIC0xMjUsMTEgKzEyMiwxMSBAQCBOZXR3b3JrRGF0YVRhc2s6
On5OZXR3b3JrRGF0YVRhc2soKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYg
KG1fdGFzaykgewogICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFscykgewotICAgICAgICAgICAg
QVNTRVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmdldChbbV90YXNr
IHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX3Nlc3Npb24ubV9kYXRh
VGFza01hcFdpdGhDcmVkZW50aWFscy5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pOwor
ICAgICAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFs
cy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAgICAgICAgICAgbV9z
ZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLnJlbW92ZShbbV90YXNrIHRhc2tJ
ZGVudGlmaWVyXSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zZXNz
aW9uLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50
aWZpZXJdKSA9PSB0aGlzKTsKLSAgICAgICAgICAgIG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0
aG91dENyZWRlbnRpYWxzLnJlbW92ZShbbV90YXNrIHRhc2tJZGVudGlmaWVyXSk7CisgICAgICAg
ICAgICBBU1NFUlQobV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmdl
dChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7CisgICAgICAgICAgICBtX3Nlc3Np
b24tPm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lk
ZW50aWZpZXJdKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIyMSwxNiArMjE4LDEzIEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrOjp3aWxsUGVyZm9ybUhUVFBSZWQKICAgICAgICAgLy8gT25seSBj
b25zaWRlciBhcHBseWluZyBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBpZiB0aGlzIGlzIGFj
dHVhbGx5IGEgcmVkaXJlY3QgYW5kIHRoZSByZWRpcmVjdAogICAgICAgICAvLyBVUkwgZGlkbid0
IGluY2x1ZGUgY3JlZGVudGlhbHMgb2YgaXRzIG93bi4KICAgICAgICAgaWYgKG1fdXNlci5pc0Vt
cHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkgJiYgIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNr
ZXI6OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbi5zZXNzaW9uSUQoKSkpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIGNyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2Uo
KS5nZXQocmVxdWVzdC51cmwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjcmVkZW50aWFsLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2luaXRpYWxDcmVkZW50aWFsID0gY3Jl
ZGVudGlhbDsKKyAgICAgICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29y
a1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocmVxdWVzdC51cmwoKSk7
CisgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CiAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFN1cHBvcnQgRGlnZXN0IGF1dGhlbnRpY2F0aW9uLCBhbmQgUHJveHktQXV0
aG9yaXphdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25I
ZWFkZXIocmVxdWVzdCwgbV9pbml0aWFsQ3JlZGVudGlhbCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgRGlnZXN0IGF1dGhlbnRpY2F0aW9u
LCBhbmQgUHJveHktQXV0aG9yaXphdGlvbi4KKyAgICAgICAgICAgICAgICBhcHBseUJhc2ljQXV0
aG9yaXphdGlvbkhlYWRlcihyZXF1ZXN0LCBtX2luaXRpYWxDcmVkZW50aWFsKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtMjk4LDI4ICsyOTIsMjUgQEAgYm9v
bCBOZXR3b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3JkQmFzZWRBdQogCiAjaWYgVVNFKENSRURFTlRJ
QUxfU1RPUkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikKICAgICBpZiAobV9zdG9yZWRDcmVkZW50
aWFscyA9PSBXZWJDb3JlOjpBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7Ci0gICAgICAgIGlmIChh
dXRvIHN0b3JhZ2VTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKG1fc2Vz
c2lvbi5zZXNzaW9uSUQoKSkpIHsKLSAgICAgICAgICAgIGlmICghbV9pbml0aWFsQ3JlZGVudGlh
bC5pc0VtcHR5KCkgfHwgY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGUgc3RvcmVkIGNyZWRlbnRpYWwgd2Fzbid0IGFjY2VwdGVkLCBzdG9w
IHVzaW5nIGl0LgotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24g
aGVyZSwgc2luY2UgYSBkaWZmZXJlbnQgY3JlZGVudGlhbCBtaWdodCBoYXZlIGFscmVhZHkgYmVl
biBzdG9yZWQgYnkgYW5vdGhlciBSZXNvdXJjZUhhbmRsZSwKLSAgICAgICAgICAgICAgICAvLyBi
dXQgdGhlIG9ic2VydmFibGUgZWZmZWN0IHNob3VsZCBiZSB2ZXJ5IG1pbm9yLCBpZiBhbnkuCi0g
ICAgICAgICAgICAgICAgc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkucmVtb3Zl
KGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlm
ICghbV9pbml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5KCkgfHwgY2hhbGxlbmdlLnByZXZpb3VzRmFp
bHVyZUNvdW50KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBzdG9yZWQgY3JlZGVudGlhbCB3YXNu
J3QgYWNjZXB0ZWQsIHN0b3AgdXNpbmcgaXQuCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHJh
Y2UgY29uZGl0aW9uIGhlcmUsIHNpbmNlIGEgZGlmZmVyZW50IGNyZWRlbnRpYWwgbWlnaHQgaGF2
ZSBhbHJlYWR5IGJlZW4gc3RvcmVkIGJ5IGFub3RoZXIgUmVzb3VyY2VIYW5kbGUsCisgICAgICAg
ICAgICAvLyBidXQgdGhlIG9ic2VydmFibGUgZWZmZWN0IHNob3VsZCBiZSB2ZXJ5IG1pbm9yLCBp
ZiBhbnkuCisgICAgICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNy
ZWRlbnRpYWxTdG9yYWdlKCkucmVtb3ZlKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJlQ291
bnQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IHN0b3JhZ2VTZXNzaW9u
LT5jcmVkZW50aWFsU3RvcmFnZSgpLmdldChjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOwot
ICAgICAgICAgICAgICAgIGlmICghY3JlZGVudGlhbC5pc0VtcHR5KCkgJiYgY3JlZGVudGlhbCAh
PSBtX2luaXRpYWxDcmVkZW50aWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjcmVk
ZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gV2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9u
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCku
aHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0
b3JlIHRoZSBjcmVkZW50aWFsIGJhY2ssIHBvc3NpYmx5IGFkZGluZyBpdCBhcyBhIGRlZmF1bHQg
Zm9yIHRoaXMgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVNlc3Np
b24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0
aW9uU3BhY2UoKSwgY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBjcmVkZW50aWFs
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghY2hhbGxl
bmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8gY3JlZGVudGlh
bCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2Uo
KS5nZXQoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpKTsKKyAgICAgICAgICAgIGlmICghY3Jl
ZGVudGlhbC5pc0VtcHR5KCkgJiYgY3JlZGVudGlhbCAhPSBtX2luaXRpYWxDcmVkZW50aWFsKSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBXZWJD
b3JlOjpDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hh
bGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjcmVkZW50aWFsIGJhY2ssIHBvc3NpYmx5IGFk
ZGluZyBpdCBhcyBhIGRlZmF1bHQgZm9yIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAg
ICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdl
KCkuc2V0KGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdl
LmZhaWx1cmVSZXNwb25zZSgpLnVybCgpKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6VXNlQ3JlZGVudGlhbCwgY3JlZGVudGlhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lv
bkNvY29hLm1tCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3
ICs3Nyw4IEBAIHN0YXRpYyBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXQKIH0KIAog
QGludGVyZmFjZSBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgOiBOU09iamVjdCA8TlNVUkxTZXNz
aW9uRGF0YURlbGVnYXRlPiB7Ci0gICAgV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbiogX3Nlc3Npb247
CisgICAgUmVmUHRyPFdlYktpdDo6TmV0d29ya1Nlc3Npb24+IF9zZXNzaW9uOworICAgIGJvb2wg
X3Nlc3Npb25EZXN0cm95ZWQ7CiB9CiAKIC0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdl
YktpdDo6TmV0d29ya1Nlc3Npb24mKXNlc3Npb247CkBAIC05Nyw2ICs5OCwxMSBAQCAtIChpZClp
bml0V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5lCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAK
Ky0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkaWRCZWNvbWVJbnZh
bGlkV2l0aEVycm9yOihudWxsYWJsZSBOU0Vycm9yICopZXJyb3IKK3sKKyAgICBfc2Vzc2lvbiA9
IG51bGxwdHI7Cit9CisKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lv
biB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRTZW5kQm9keURhdGE6KGludDY0X3Qp
Ynl0ZXNTZW50IHRvdGFsQnl0ZXNTZW50OihpbnQ2NF90KXRvdGFsQnl0ZXNTZW50IHRvdGFsQnl0
ZXNFeHBlY3RlZFRvU2VuZDooaW50NjRfdCl0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQKIHsKICAg
ICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzID0gc2Vzc2lvbi5jb25maWd1cmF0aW9uLlVSTENyZWRl
bnRpYWxTdG9yYWdlID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6RG9Ob3RBbGxvd1N0b3JlZENy
ZWRlbnRpYWxzOwpAQCAtMjY1LDE3ICsyNzEsMjMgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0
Q3VzdG9tUHJvdG9jb2xNYQogICAgIGdsb2JhbEN1c3RvbVByb3RvY29sTWFuYWdlcigpID0gY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyOwogfQogCitSZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNz
aW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0
b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3RvY29sTWFuYWdlciwgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5cGUsIHNlc3Npb25J
RCwgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyLCBXVEZNb3ZlKG5ldHdvcmtTdG9yYWdlU2Vzc2lvbikp
KTsKK30KKwogTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TmV0d29ya1Nlc3Npb24+IHNlc3Npb24oTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbCwg
V2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIGdsb2JhbEN1c3RvbVByb3Rv
Y29sTWFuYWdlcigpLmdldCgpLCAmV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKSk7Ci0gICAgcmV0dXJuIHNlc3Npb247CisgICAgc3RhdGljIE5l
dHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nl
c3Npb246OlR5cGU6Ok5vcm1hbCwgV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIGdsb2JhbEN1c3RvbVByb3RvY29sTWFuYWdlcigpLmdldCgpLCBudWxscHRyKS5sZWFrUmVm
KCk7CisgICAgcmV0dXJuICpzZXNzaW9uOwogfQogCi1OZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nl
c3Npb24oVHlwZSB0eXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90
b2NvbE1hbmFnZXIqIGN1c3RvbVByb3RvY29sTWFuYWdlciwgV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24pCitOZXR3b3JrU2Vzc2lvbjo6TmV0d29y
a1Nlc3Npb24oVHlwZSB0eXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Q
cm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3RvY29sTWFuYWdlciwgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKQogICAg
IDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9uZXR3b3JrU3RvcmFnZVNlc3Npb24o
V1RGTW92ZShuZXR3b3JrU3RvcmFnZVNlc3Npb24pKQogewotICAgIG1fc2Vzc2lvbkRlbGVnYXRl
ID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3
b3JrU2Vzc2lvbjoqdGhpc10pOworICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwogCiAg
ICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRp
b25Gb3JUeXBlKHR5cGUpOwogCkBAIC0yODgsMjEgKzMwMCw0MiBAQCBOZXR3b3JrU2Vzc2lvbjo6
TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlCiAgICAgc2V0Q29sbGVjdHNUaW1pbmdEYXRhKCk7CiAj
ZW5kaWYKIAotICAgIGlmIChuZXR3b3JrU3RvcmFnZVNlc3Npb24pIHsKLSAgICAgICAgaWYgKENG
SFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+Y29v
a2llU3RvcmFnZSgpLmdldCgpKQorICAgIGlmIChtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbikgewor
ICAgICAgICBBU1NFUlQodHlwZSA9PSBUeXBlOjpFcGhlbWVyYWwpOworICAgICAgICBpZiAoQ0ZI
VFRQQ29va2llU3RvcmFnZVJlZiBzdG9yYWdlID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb24tPmNv
b2tpZVN0b3JhZ2UoKS5nZXQoKSkKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tp
ZVN0b3JhZ2UgPSBbW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9jXSBfaW5pdFdpdGhDRkhUVFBD
b29raWVTdG9yYWdlOnN0b3JhZ2VdIGF1dG9yZWxlYXNlXTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQodHlwZSA9PSBUeXBlOjpOb3JtYWwpOworICAgICAgICBpZiAoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBzdG9yYWdlID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkuZ2V0KCkpCiAgICAgICAgICAgICBj
b25maWd1cmF0aW9uLkhUVFBDb29raWVTdG9yYWdlID0gW1tbTlNIVFRQQ29va2llU3RvcmFnZSBh
bGxvY10gX2luaXRXaXRoQ0ZIVFRQQ29va2llU3RvcmFnZTpzdG9yYWdlXSBhdXRvcmVsZWFzZV07
CiAgICAgfQotICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSA9IFtOU1VSTFNlc3Np
b24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGlj
X2Nhc3Q8aWQ+KG1fc2Vzc2lvbkRlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJh
dGlvblF1ZXVlIG1haW5RdWV1ZV1dOworCisgICAgbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9y
YWdlRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBp
bml0V2l0aE5ldHdvcmtTZXNzaW9uOip0aGlzXSk7CisgICAgbV9zZXNzaW9uV2l0aENyZWRlbnRp
YWxTdG9yYWdlID0gW05TVVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9zZXNzaW9uV2l0aENyZWRlbnRpYWxT
dG9yYWdlRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFp
blF1ZXVlXV07CisKICAgICBjb25maWd1cmF0aW9uLlVSTENyZWRlbnRpYWxTdG9yYWdlID0gbmls
OwotICAgIG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZSA9IFtOU1VSTFNlc3Npb24g
c2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nh
c3Q8aWQ+KG1fc2Vzc2lvbkRlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlv
blF1ZXVlIG1haW5RdWV1ZV1dOworICAgIG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFn
ZURlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpc10pOworICAgIG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50
aWFsU3RvcmFnZSA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50
aWFsU3RvcmFnZURlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVl
IG1haW5RdWV1ZV1dOwogfQogCiBOZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtTZXNzaW9uKCkKIHsK
K30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCit7CiAgICAg
W21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKICAg
ICBbbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxd
OwogfQogCisKK1dlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246
Om5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpCit7CisgICAgaWYgKCFtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbikKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgcmV0dXJuICptX25ldHdvcmtTdG9yYWdlU2Vzc2lv
bjsKK30KKwogI2lmICFVU0UoQ1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVUV09SS19TRVNTSU9O
KQogdm9pZCBOZXR3b3JrU2Vzc2lvbjo6Y2xlYXJDcmVkZW50aWFscygpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5l
dHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEwMCwxNSArMTAwLDE0IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVu
c3VyZVByaXYKICAgICBlbHNlCiAgICAgICAgIGJhc2UgPSBTZXNzaW9uVHJhY2tlcjo6Z2V0SWRl
bnRpZmllckJhc2UoKTsKIAotICAgIGF1dG8gbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGJhc2UgKyAnLicg
KyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKLSNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKQotICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPE5l
dHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQs
IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFu
YWdlcj4oKSwgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLmdldCgpKTsKLSNlbmRpZgotICAgIFNlc3Np
b25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3JrU3RvcmFnZVNl
c3Npb24pCisgICAgYXV0byBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBiYXNlICsgJy4n
ICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7CisKICNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQotICAgICAgICAsIFdURk1vdmUobmV0d29ya1Nlc3Npb24pCisgICAgYXV0
byBuZXR3b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246
OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCku
c3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCksIFdURk1vdmUobmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBX
VEZNb3ZlKG5ldHdvcmtTZXNzaW9uKSk7CisjZWxzZQorICAgIFNlc3Npb25UcmFja2VyOjpzZXRT
ZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3JrU3RvcmFnZVNlc3Npb24pKTsKICNlbmRp
ZgotICAgICk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJh
Y2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25UcmFj
a2VyLmNwcAkocmV2aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Np
b25UcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTA1ICszNSwxMDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgSGFzaE1h
cDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc3Rh
dGljU3RvcmFnZVNlc3Npb25NYXAoKQorc3RhdGljIFN0cmluZyYgaWRlbnRpZmllckJhc2UoKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNl
c3Npb24+Pj4gbWFwOwotICAgIHJldHVybiBtYXA7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gYmFzZTsKKyAgICByZXR1cm4gYmFzZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8Y29u
c3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiwgU2Vzc2lvbklEPiYgc3RvcmFnZVNlc3Npb25Ub0lE
KCkKK2NvbnN0IFN0cmluZyYgU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCkKIHsK
LSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hNYXA8Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiwgU2Vzc2lvbklEPj4gbWFw
OwotICAgIHJldHVybiBtYXA7CisgICAgcmV0dXJuIGlkZW50aWZpZXJCYXNlKCk7CiB9CiAKLXN0
YXRpYyBTdHJpbmcmIGlkZW50aWZpZXJCYXNlKCkKK3ZvaWQgU2Vzc2lvblRyYWNrZXI6OnNldElk
ZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYmFz
ZTsKLSAgICByZXR1cm4gYmFzZTsKKyAgICBpZGVudGlmaWVyQmFzZSgpID0gaWRlbnRpZmllcjsK
IH0KIAotY29uc3QgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+PiYgU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFwKCkKKyNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQorc3RhdGljIEhhc2hNYXA8U2Vzc2lvbklELCBSZWZQdHI8TmV0
d29ya1Nlc3Npb24+PiYgc3RhdGljU2Vzc2lvbk1hcCgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY1N0
b3JhZ2VTZXNzaW9uTWFwKCk7Ci19CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
Y29uc3QgU3RyaW5nJiBTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKQotewotICAg
IHJldHVybiBpZGVudGlmaWVyQmFzZSgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNo
TWFwPFNlc3Npb25JRCwgUmVmUHRyPE5ldHdvcmtTZXNzaW9uPj4+IG1hcDsKKyAgICByZXR1cm4g
bWFwOwogfQogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb24qIFNlc3Npb25UcmFja2VyOjpzdG9yYWdl
U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQorTmV0d29ya1Nlc3Npb24qIFNlc3Npb25UcmFj
a2VyOjpuZXR3b3JrU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNz
aW9uSUQgPT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVybiAm
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICByZXR1
cm4gc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKS5nZXQoc2Vzc2lvbklEKTsKKyAgICAgICAgcmV0
dXJuICZOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKTsKKyAgICByZXR1cm4gc3RhdGlj
U2Vzc2lvbk1hcCgpLmdldChzZXNzaW9uSUQpOwogfQogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lP
TikKLXN0YXRpYyBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNz
aW9uPj4mIHN0YXRpY1Nlc3Npb25NYXAoKQorTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBTZXNzaW9u
VHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKK3sgICAgCisgICAg
YXV0byBzZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7
CisgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
JnNlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworfQorI2Vsc2UKK3N0YXRpYyBIYXNo
TWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+JiBz
dGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTZXNzaW9uSUQsIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+PiBtYXA7CisKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+Pj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKLU5ldHdvcmtTZXNzaW9uKiBT
ZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdv
cmtTdG9yYWdlU2Vzc2lvbiogU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKFNlc3Npb25J
RCBzZXNzaW9uSUQpCiB7CiAgICAgaWYgKHNlc3Npb25JRCA9PSBTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Np
b24oKTsKLSAgICByZXR1cm4gc3RhdGljU2Vzc2lvbk1hcCgpLmdldChzZXNzaW9uSUQpOworICAg
ICAgICByZXR1cm4gJk5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7CisgICAgcmV0dXJuIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuZ2V0KHNlc3Npb25JRCk7
CiB9CiAjZW5kaWYKIAogU2Vzc2lvbklEIFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKQogewotICAgIGlmICgmc2Vzc2lvbiA9PSAm
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAg
cmV0dXJuIFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwotICAgIHJldHVybiBzdG9yYWdl
U2Vzc2lvblRvSUQoKS5nZXQoJnNlc3Npb24pOworICAgIHJldHVybiBzZXNzaW9uLnNlc3Npb25J
RCgpOwogfQogCi12b2lkIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKFNlc3Npb25JRCBzZXNz
aW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+IHN0b3JhZ2VTZXNz
aW9uCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrU2Vzc2lvbj4gc2Vzc2lvbgotI2VuZGlmCi0pCit2b2lkIFNlc3Npb25UcmFja2VyOjpzZXRT
ZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQsIFJlZjxOZXR3b3JrU2Vzc2lvbj4mJiBzZXNzaW9u
KQoreworICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpOworICAgIHN0YXRpY1Nlc3Npb25NYXAoKS5zZXQoc2Vzc2lvbklELCBXVEZNb3ZlKHNlc3Np
b24pKTsKK30KKyNlbHNlCit2b2lkIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKFNlc3Npb25J
RCBzZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+IHN0b3Jh
Z2VTZXNzaW9uKQogewogICAgIEFTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAgICAgQVNTRVJUKHNl
c3Npb25JRCAhPSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgc3RvcmFnZVNl
c3Npb25Ub0lEKCkuc2V0KHN0b3JhZ2VTZXNzaW9uLmdldCgpLCBzZXNzaW9uSUQpOwogICAgIHN0
YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuc2V0KHNlc3Npb25JRCwgV1RGTW92ZShzdG9yYWdlU2Vz
c2lvbikpOwotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUKHNlc3Npb24pOwot
ICAgIHN0YXRpY1Nlc3Npb25NYXAoKS5zZXQoc2Vzc2lvbklELCBXVEZNb3ZlKHNlc3Npb24pKTsK
LSNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgU2Vzc2lvblRyYWNrZXI6OmRlc3Ryb3lTZXNzaW9u
KFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICBpZiAoc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKS5jb250YWlucyhzZXNzaW9uSUQpKSB7
CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShz
dGF0aWNTZXNzaW9uTWFwKCkuY29udGFpbnMoc2Vzc2lvbklEKSwgIk5ldHdvcmtTZXNzaW9ucyBh
bmQgTmV0d29ya1N0b3JhZ2VTZXNzaW9ucyBzaG91bGQgYWx3YXlzIGJlIGNyZWF0ZWQsIGRlbGV0
ZWQsIGFuZCBtYW5hZ2VkIGFzIHBhaXJzIik7Ci0gICAgICAgIHN0YXRpY1Nlc3Npb25NYXAoKS5y
ZW1vdmUoc2Vzc2lvbklEKTsKKyAgICBhdXRvIHNlc3Npb24gPSBzdGF0aWNTZXNzaW9uTWFwKCku
dGFrZShzZXNzaW9uSUQpOworICAgIHNlc3Npb24tPmludmFsaWRhdGVBbmRDYW5jZWwoKTsKKyNl
bHNlCisgICAgc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKS5yZW1vdmUoc2Vzc2lvbklEKTsKICNl
bmRpZgotICAgICAgICBzdG9yYWdlU2Vzc2lvblRvSUQoKS5yZW1vdmUoc3RvcmFnZVNlc3Npb24o
c2Vzc2lvbklEKSk7Ci0gICAgICAgIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkucmVtb3ZlKHNl
c3Npb25JRCk7Ci0gICAgfQogfQogCi12b2lkIFNlc3Npb25UcmFja2VyOjpzZXRJZGVudGlmaWVy
QmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit2b2lkIFNlc3Npb25UcmFja2VyOjpmb3JF
YWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4gZnVuY3RvcikKIHsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgaWRlbnRpZmllckJhc2UoKSA9IGlkZW50aWZpZXI7CisjaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBzdGF0aWNTZXNz
aW9uTWFwKCkudmFsdWVzKCkpCisgICAgICAgIGZ1bmN0b3Ioc2Vzc2lvbi0+bmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCkpOworI2Vsc2UKKyAgICBmb3IgKGF1dG8mIG5ldHdvcmtTdG9yYWdlU2Vzc2lv
biA6IHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkudmFsdWVzKCkpCisgICAgICAgIGZ1bmN0b3Io
Km5ldHdvcmtTdG9yYWdlU2Vzc2lvbik7CisjZW5kaWYKIH0KIAorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJhY2tlci5oCShyZXZpc2lv
biAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblRyYWNrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMjQgKzQyLDI4IEBAIGNsYXNzIE5ldHdvcmtTZXNzaW9uOwogY2xh
c3MgU2Vzc2lvblRyYWNrZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlc3Npb25UcmFj
a2VyKTsKIHB1YmxpYzoKLSAgICAvLyBGSVhNRTogc3RvcmFnZVNlc3Npb25NYXAoKSdzIHJldHVy
bmVkIG1hcCBkb2VzIG5vdCBpbmNsdWRlIGRlZmF1bHQgc2Vzc2lvbi4KLSAgICBzdGF0aWMgY29u
c3QgSGFzaE1hcDxXZWJDb3JlOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+PiYgc3RvcmFnZVNlc3Npb25NYXAoKTsKLQogICAgIHN0YXRp
YyBjb25zdCBTdHJpbmcmIGdldElkZW50aWZpZXJCYXNlKCk7CisgICAgc3RhdGljIHZvaWQgc2V0
SWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJik7CisKICAgICBzdGF0aWMgV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQpOwor
ICAgIAorICAgIC8vIEZJWE1FOiBSZW1vdmUgdXNlcyBvZiB0aGlzIGFzIGl0IGlzIGp1c3QgYSBt
ZW1iZXIgYWNjZXNzIGludG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uLgogICAgIHN0YXRpYyBXZWJD
b3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYpOwotICAgIHN0YXRpYyB2b2lkIHNldFNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklELCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPgorCiAjaWYgVVNF
KE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Np
b24+CisgICAgc3RhdGljIHZvaWQgc2V0U2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQsIFJlZjxO
ZXR3b3JrU2Vzc2lvbj4mJik7CisjZWxzZQorICAgIHN0YXRpYyB2b2lkIHNldFNlc3Npb24oV2Vi
Q29yZTo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uPik7CiAjZW5kaWYKLSAgICApOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lTZXNzaW9u
KFdlYkNvcmU6OlNlc3Npb25JRCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0SWRlbnRpZmllckJhc2Uo
Y29uc3QgU3RyaW5nJik7CiAgICAgCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICAvLyBG
SVhNRTogQSBOZXR3b3JrU2Vzc2lvbiBhbmQgYSBOZXR3b3JrU3RvcmFnZVNlc3Npb24gc2hvdWxk
IGJlIHRoZSBzYW1lIG9iamVjdCBvbmNlIE5FVFdPUktfU0VTU0lPTiBpcyB1c2VkIGJ5IGRlZmF1
bHQuCiAgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBuZXR3b3JrU2Vzc2lvbihXZWJDb3JlOjpT
ZXNzaW9uSUQpOwogI2VuZGlmCisKKyAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBpbmNsdWRl
IHRoZSBkZWZhdWx0IG5ldHdvcmsgc3RvcmFnZSBzZXNpb24gaW4gaXQncyBpdGVyYXRpb24uCisg
ICAgc3RhdGljIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihzdGQ6OmZ1bmN0aW9u
PHZvaWQoY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+KTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01OCwxNSArNTgsMTMgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVQcgogICAgIGVsc2UKICAgICAgICAgYmFzZSA9IFNlc3Npb25UcmFj
a2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpOwogCi0gICAgYXV0byBuZXR3b3JrU3RvcmFnZVNlc3Np
b24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24o
YmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOworICAg
IGF1dG8gbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVh
dGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgYmFzZSArICcuJyArIFN0cmluZzo6
bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04p
Ci0gICAgYXV0byBuZXR3b3JrU2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1Nlc3Np
b24+KE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0ciwg
bmV0d29ya1N0b3JhZ2VTZXNzaW9uLmdldCgpKTsKLSNlbmRpZgotICAgIFNlc3Npb25UcmFja2Vy
OjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0j
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgLCBXVEZNb3ZlKG5ldHdvcmtTZXNzaW9u
KQorICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdv
cmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0ciwgV1RGTW92ZShu
ZXR3b3JrU3RvcmFnZVNlc3Npb24pKTsKKyAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihz
ZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1Nlc3Npb24pKTsKKyNlbHNlCisgICAgU2Vzc2lvblRy
YWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBXVEZNb3ZlKG5ldHdvcmtTdG9yYWdlU2Vzc2lv
bikpOwogI2VuZGlmCi0gICAgKTsKIH0KIAogdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSkKQEAgLTc2LDEwICs3NCw5IEBAIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dDo6c2V0Q29va2kKICAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpLmNvb2tpZVN0b3JhZ2UoKSkKICAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENv
b2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOwogCi0gICAgZm9y
IChjb25zdCBhdXRvJiBzZXNzaW9uIDogU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uTWFw
KCkudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHNlc3Npb24pCi0gICAgICAgICAgICBDRkhUVFBD
b29raWVTdG9yYWdlU2V0Q29va2llQWNjZXB0UG9saWN5KHNlc3Npb24tPmNvb2tpZVN0b3JhZ2Uo
KS5nZXQoKSwgcG9saWN5KTsKLSAgICB9CisgICAgU2Vzc2lvblRyYWNrZXI6OmZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIG5ldHdv
cmtTdG9yYWdlU2Vzc2lvbikgeworICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2ll
QWNjZXB0UG9saWN5KG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0KCks
IHBvbGljeSk7CisgICAgfSk7CiB9CiAgICAgCiBib29sIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQ6OmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSBjb25zdApAQCAtOTAsNyArODcs
NyBAQCBib29sIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmxvY2FsRmlsCiBTY2hlZHVsZVBh
aXJIYXNoU2V0KiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzY2hlZHVsZWRSdW5Mb29wUGFp
cnMoKSBjb25zdAogewogICAgIGlmICghZnJhbWUoKSB8fCAhZnJhbWUoKS0+cGFnZSgpKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGZyYW1l
KCktPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE5
ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9X
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByCiAgICAgaWYgKFNl
c3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTdHJpbmc6Om51bWJlcihz
ZXNzaW9uSUQuc2Vzc2lvbklEKCkpKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24o
c2Vzc2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nl
c3Npb24oc2Vzc2lvbklELCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKSk7
CiB9CiAKIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9s
aWN5Rm9yQWxsQ29udGV4dHMoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCkBAIC03Miwx
MCArNzIsOSBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpCiAgICAg
U291cE5ldHdvcmtTZXNzaW9uJiBzb3VwU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCk7CiAgICAgc291cF9j
b29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KHNvdXBTZXNzaW9uLmNvb2tpZUphcigpLCBzb3Vw
UG9saWN5KTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lvbiA6IFNlc3Npb25UcmFja2Vy
OjpzdG9yYWdlU2Vzc2lvbk1hcCgpLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uKQot
ICAgICAgICAgICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KHNlc3Npb24tPnNv
dXBOZXR3b3JrU2Vzc2lvbigpLmNvb2tpZUphcigpLCBzb3VwUG9saWN5KTsKLSAgICB9CisgICAg
U2Vzc2lvblRyYWNrZXI6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZdIChjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgc291cF9jb29raWVfamFy
X3NldF9hY2NlcHRfcG9saWN5KHNlc3Npb24tPnNvdXBOZXR3b3JrU2Vzc2lvbigpLmNvb2tpZUph
cigpLCBzb3VwUG9saWN5KTsKKyAgICB9KTsKIH0KIAogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dChXZWJGcmFtZSogZnJhbWUpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wMy0xMiAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFdlYktpdCBjYW4gZWFzaWx5IGNyYXNoIGJl
bG93IE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIoKSB3aXRoIE5TVVJMU2Vz
c2lvbiBlbmFibGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU0MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAg
ICAgIChXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNz
aW9uKToKKyAgICAgICAgUGFzcyBhIFNlc3Npb25JRCB0byBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKS4KKwogMjAxNi0wMy0xMiAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGV0ZSBkZWFkIFNW
RyBGb250IGNvZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTk4
MDc0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Nl
c3Npb25JRC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAKQEAgLTU2LDcgKzU3LDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVQcgogICAgIGlmIChwcml2YXRlU2Vzc2lvbigpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBwcml2YXRlU2Vzc2lvbigpID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0pOworICAgIHByaXZhdGVTZXNzaW9uKCkgPSBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEOjpsZWdhY3lQcml2YXRl
U2Vzc2lvbklEKCksIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0pOwog
fQogCiB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlc3Ryb3lQcml2YXRlQnJvd3Np
bmdTZXNzaW9uKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273862</attachid>
            <date>2016-03-12 18:01:30 -0800</date>
            <delta_ts>2016-03-12 18:09:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155401-20160312180117.patch</filename>
            <type>text/plain</type>
            <size>49979</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE2LTAzLTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgV2ViS2l0IGNhbiBlYXNpbHkgY3Jhc2gg
YmVsb3cgTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcigpIHdpdGggTlNVUkxT
ZXNzaW9uIGVuYWJsZWQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI1MTI5OTQ2PgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDAxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgU2Vzc2lvbklE
IGFzIGEgbWVtYmVyIG9mIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbi4gVGhpcyBhbGxvd3MgdXMgdG8g
YXZvaWQgaGF2aW5nIEhhc2hNYXBzCisgICAgICAgIHRvIG1hcCBiZXR3ZWVuIHRoZSB0d28gdHlw
ZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVkZW50aWFsU3RvcmFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnBsYXRmb3JtU2Vz
c2lvbik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25T
dHViLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNy
ZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFNl
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0
U3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Ojpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdl
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN3aXRj
aFRvTmV3VGVzdGluZ1Nlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpzb3VwTmV0d29ya1Nlc3Npb24pOgorCiAyMDE2LTAzLTEyICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgRGVsZXRlIGRlYWQgU1ZHIEZv
bnQgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKICNkZWZpbmUgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
X2gKIAogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSAiU2Vzc2lvbklELmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKICNpbmNs
dWRlICJDRk5ldHdvcmtTUEkuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMzEgKzQ1LDM2IEBAIGNsYXNzIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+IGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyQmFzZSA9IFN0cmluZygpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gY3JlYXRlUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbihTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJhc2UgPSBTdHJpbmco
KSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzd2l0Y2hUb05ld1Rlc3RpbmdT
ZXNzaW9uKCk7CiAKKyAgICBTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXNzaW9uSUQ7IH0KICAgICBDcmVkZW50aWFsU3RvcmFnZSYgY3JlZGVudGlhbFN0b3JhZ2UoKSB7
IHJldHVybiBtX2NyZWRlbnRpYWxTdG9yYWdlOyB9CiAKICNpZiBQTEFURk9STShDT0NPQSkgfHwg
VVNFKENGTkVUV09SSykKLSAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24oUmV0YWluUHRyPENGVVJM
U3RvcmFnZVNlc3Npb25SZWY+KTsKKyAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24oU2Vzc2lvbklE
LCBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4pOworCiAgICAgLy8gTWF5IGJlIG51
bGwsIGluIHdoaWNoIGNhc2UgYSBGb3VuZGF0aW9uIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuCiAg
ICAgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBwbGF0Zm9ybVNlc3Npb24oKSB7IHJldHVybiBtX3Bs
YXRmb3JtU2Vzc2lvbi5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlKCkgY29uc3Q7CiAjZWxpZiBVU0UoU09V
UCkKLSAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24oc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3Jr
U2Vzc2lvbj4pOworICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+KTsKICAgICB+TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCk7CisKICAgICBTb3VwTmV0d29ya1Nlc3Npb24mIHNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0
OwogICAgIHZvaWQgc2V0U291cE5ldHdvcmtTZXNzaW9uKHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0
d29ya1Nlc3Npb24+KTsKICNlbHNlCi0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKE5ldHdvcmtp
bmdDb250ZXh0Kik7CisgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCwgTmV0d29y
a2luZ0NvbnRleHQqKTsKICAgICB+TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CisKICAgICBOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CisgICAg
U2Vzc2lvbklEIG1fc2Vzc2lvbklEOworCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRk5F
VFdPUkspCi0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CiAgICAgUmV0YWluUHRyPENGVVJM
U3RvcmFnZVNlc3Npb25SZWY+IG1fcGxhdGZvcm1TZXNzaW9uOwogI2VsaWYgVVNFKFNPVVApCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHVi
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdv
cmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTMgQEAKICNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNl
c3Npb24uaCIKIAogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKK05ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0KQorICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCiB7CiB9CiAKQEAgLTQ3LDE4ICs0OSwyNSBAQCBOZXR3b3JraW5nQ29udGV4dCog
TmV0d29ya1N0b3JhZ2VTZXNzaW9uCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGNvbnN0IFN0cmluZyYpCitzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNy
ZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4mIGRlZmF1bHRTZXNzaW9uKCkKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoTmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBzZXNzaW9uLCAoMCkpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4g
c2Vzc2lvbjsKICAgICByZXR1cm4gc2Vzc2lvbjsKIH0KIAorTmV0d29ya1N0b3JhZ2VTZXNzaW9u
JiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpCit7CisgICAg
aWYgKCFkZWZhdWx0U2Vzc2lvbigpKQorICAgICAgICBkZWZhdWx0U2Vzc2lvbigpID0gc3RkOjpt
YWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gKmRlZmF1bHRTZXNzaW9uKCk7Cit9CisKIHZv
aWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCShyZXZpc2lvbiAxOTgw
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBwbGF0Zm9ybVNlc3Npb24p
Ci0gICAgOiBtX3BsYXRmb3JtU2Vzc2lvbihwbGF0Zm9ybVNlc3Npb24pCitOZXR3b3JrU3RvcmFn
ZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBSZXRh
aW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gcGxhdGZvcm1TZXNzaW9uKQorICAgIDogbV9z
ZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9wbGF0Zm9ybVNlc3Npb24ocGxhdGZvcm1TZXNz
aW9uKQogewogfQogCkBAIC01OCwyNyArNTksMjcgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OnN3aXRjaFRvTmV3VAogICAgIC8vIFNlc3Npb24gbmFtZSBzaG91bGQgYmUgc2hvcnQgZW5v
dWdoIGZvciBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBuYW1lIHRvIGJlIHVuZGVyIHRoZSBsaW1pdCwg
b3RlaHJ3aXNlIHNhbmRib3ggcnVsZXMgd29uJ3Qgd29yayAoc2VlIDxyZGFyOi8vcHJvYmxlbS8x
MzY0Mjg1Mj4pLgogICAgIFN0cmluZyBzZXNzaW9uTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJXZWJL
aXQgVGVzdC0ldSIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihnZXRDdXJyZW50UHJvY2Vzc0lEKCkp
KTsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBkZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oYWRvcHRDRih3a0Ny
ZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihzZXNzaW9uTmFtZS5jcmVhdGVDRlN0cmluZygpLmdl
dCgpKSkpOworICAgIGRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKSA9IHN0ZDo6bWFrZV91
bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSwgYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihzZXNzaW9uTmFtZS5jcmVh
dGVDRlN0cmluZygpLmdldCgpKSkpOwogI2Vsc2UKLSAgICBkZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oYWRvcHRD
Rih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihzZXNzaW9uTmFtZS5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpLCBkZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnBsYXRmb3JtU2Vzc2lv
bigpKSkpOworICAgIGRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKSA9IHN0ZDo6bWFrZV91
bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSwgYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihzZXNzaW9uTmFtZS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCBkZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnBsYXRm
b3JtU2Vzc2lvbigpKSkpOwogI2VuZGlmCiB9CiAKIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQogewogICAgIGlmICgh
ZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKQotICAgICAgICBkZWZhdWx0TmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4o
bnVsbHB0cik7CisgICAgICAgIGRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKSA9IHN0ZDo6
bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSwgbnVsbHB0cik7CiAgICAgcmV0dXJuICpkZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXJCYXNlKQorc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJhc2UpCiB7CiAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZpZXIgPSBTdHJpbmcoaWRlbnRpZmllckJh
c2UgKyAiLlByaXZhdGVCcm93c2luZyIpLmNyZWF0ZUNGU3RyaW5nKCk7CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBhdXRvIHNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4oYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50
aWZpZXIuZ2V0KCkpKSk7CisgICAgYXV0byBzZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9y
YWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKSk7CiAjZWxzZQotICAgIGF1dG8gc2Vzc2lv
biA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihhZG9wdENGKHdrQ3Jl
YXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSwgZGVmYXVsdE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpLT5wbGF0Zm9ybVNlc3Npb24oKSkpKTsKKyAgICBhdXRvIHNlc3Np
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBh
ZG9wdENGKHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSwg
ZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLT5wbGF0Zm9ybVNlc3Npb24oKSkpKTsKICNl
bmRpZgogCiAgICAgcmV0dXJuIHNlc3Npb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vz
c2lvblNvdXAuY3BwCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDggKzM2LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3Rv
cmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihzdGQ6OnVuaXF1ZV9wdHI8U291cE5l
dHdvcmtTZXNzaW9uPiBzZXNzaW9uKQotICAgIDogbV9zZXNzaW9uKFdURk1vdmUoc2Vzc2lvbikp
CitOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQg
c2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiBzZXNzaW9uKQor
ICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9zZXNzaW9uKFdURk1vdmUoc2Vz
c2lvbikpCiB7CiB9CiAKQEAgLTU1LDE5ICs1NiwxOSBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtTdG9yYWdlU2VzCiBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKIHsKICAgICBpZiAoIWRlZmF1bHRTZXNz
aW9uKCkpCi0gICAgICAgIGRlZmF1bHRTZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4obnVsbHB0cik7CisgICAgICAgIGRlZmF1bHRTZXNzaW9uKCkgPSBz
dGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oU2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIHJldHVybiAqZGVmYXVsdFNlc3Npb24oKTsKIH0K
IAotc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGNvbnN0IFN0cmluZyYpCitzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBhdXRvIHNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4oU291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKCkpOworICAgIGF1dG8gc2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0
b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQsIFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0
ZUJyb3dzaW5nU2Vzc2lvbigpKTsKICAgICByZXR1cm4gc2Vzc2lvbjsKIH0KIAogdm9pZCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQogewotICAgIGRl
ZmF1bHRTZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4o
U291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVUZXN0aW5nU2Vzc2lvbigpKTsKKyAgICBkZWZhdWx0
U2Vzc2lvbigpID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBTb3VwTmV0d29ya1Nlc3Npb246OmNyZWF0ZVRlc3Rp
bmdTZXNzaW9uKCkpOwogfQogCiBTb3VwTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE5ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDc2IEBACisyMDE2LTAzLTEyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgV2ViS2l0IGNhbiBlYXNpbHkgY3Jhc2ggYmVsb3cgTmV0d29ya1Nlc3Npb246OmRh
dGFUYXNrRm9ySWRlbnRpZmllcigpIHdpdGggTlNVUkxTZXNzaW9uIGVuYWJsZWQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI1MTI5OTQ2PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIGlzc3VlIHdhcyB0aGF0IE5TVVJMU2Vzc2lvbkRhdGFUYXNr
cyBjYW4gY29udGludWUgdG8gaW52b2tlIHRoZWlyIE5TVVJMU2Vzc2lvbidzIGRlbGVnYXRlIG1l
dGhvZHMKKyAgICAgICAgYWZ0ZXIgLVtOU1VSTFNlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF0g
aXMgY2FsbGVkLiBTbywgd2hlbiB0aGUgTmV0d29ya1Nlc3Npb24gd2FzIGRlc3Ryb3llZCwgYW5k
CisgICAgICAgIHN0aWxsIGhhZCBvdXRzdGFuZGluZyBkYXRhIHRhc2tzLCB0aGUgc2Vzc2lvbiBk
ZWxlZ2F0ZSB3b3VsZCBnZXQgY2FsbGVkLCB0cnkgdG8gdXNlIHRoZSBzZXNzaW9uLCBhbmQKKyAg
ICAgICAgY3Jhc2guIFRvIGZpeCB0aGlzIEk6CisgICAgICAgIAorICAgICAgICAtIE1hZGUgTmV0
d29ya1Nlc3Npb24gUmVmQ291bnRlZC4KKyAgICAgICAgLSBHYXZlIE5ldHdvcmtTZXNzaW9uIHR3
byBkZWxlZ2F0ZXMsIG9uZSBmb3IgZWFjaCBOU1VSTFNlc3Npb24uCisgICAgICAgIC0gTWFkZSBl
YWNoIGRlbGVnYXRlIGhhdmUgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBOZXR3b3JrU2Vzc2lv
biB0aGF0IGdldHMgY2xlYXJlZCBvdXQgaW4gdGhlCisgICAgICAgICAgbmV3bHkgaW1wbGVtZW50
ZWQgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9yOiBtZXRob2QuCisgICAgICAg
IC0gQ2hhbmdlZCBmcm9tIHNpbXBseSBkZXN0cm95aW5nIHRoZSBOZXR3b3JrU2Vzc2lvbiBpbiBT
ZXNzaW9uVHJhY2tlcjo6ZGVzdHJveVNlc3Npb24oKSwgdG8gZGVyZWZpbmcKKyAgICAgICAgICBp
dCBhbmQgZXhwbGljaXRseSBjYWxsaW5nIGludmFsaWRhdGVBbmRDYW5jZWwgb24gdGhlIHR3byBh
c3NvY2lhdGVkIE5TVVJMU2Vzc2lvbnMgKHdoaWNoIGluIHR1cm4gCisgICAgICAgICAgZXZlbnR1
YWxseSBjYXVzZSB0aGUgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9yOiB0byBm
aXJlKS4KKyAgICAgICAgLSBUbyBlbnN1cmUgdGhlIGNvcnJlY3QgbGlmZXRpbWUgb2YgdGhlIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgSSBtYWRlIGl0IGEgbWVtYmVyIG9mIHRoZQor
ICAgICAgICAgIE5ldHdvcmtTZXNzaW9uLiBUaGlzIGFsc28gYWxsb3dlZCBzb21lIHNpbXBsaWZp
Y2F0aW9uIGluc2lkZSBTZXNzaW9uVHJhY2tlci4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtEYXRhVGFzay5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNl
dFBlbmRpbmdEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVu
ZGluZ0Rvd25sb2FkTG9jYXRpb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtM
b2FkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6c2Vzc2lvbklEKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrOjpOZXR3b3JrRGF0YVRhc2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6On5OZXR3b3JrRGF0YVRhc2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6
OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrOjp0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24pOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgICgtW1dLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOl0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOl0pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6Y2xlYXJDcmVkZW50aWFscyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbik6Cisg
ICAgICAgICogU2hhcmVkL1Nlc3Npb25UcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aWRl
bnRpZmllckJhc2UpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRp
ZmllckJhc2UpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0SWRlbnRpZmll
ckJhc2UpOgorICAgICAgICAoV2ViS2l0OjpzdGF0aWNTZXNzaW9uTWFwKToKKyAgICAgICAgKFdl
YktpdDo6U2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6c3RhdGlj
U3RvcmFnZVNlc3Npb25NYXApOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2Vz
c2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24pOgor
ICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6ZGVzdHJveVNlc3Npb24pOgorICAgICAg
ICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OnN0b3JhZ2VTZXNzaW9uVG9JRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbk1hcCk6IERlbGV0ZWQuCisg
ICAgICAgICogU2hhcmVkL1Nlc3Npb25UcmFja2VyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNl
dENvb2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxlZFJ1
bkxvb3BQYWlycyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5
Rm9yQWxsQ29udGV4dHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KToKKwogMjAxNi0wMy0xMiAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGV0ZSBkZWFkIFNW
RyBGb250IGNvZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtEYXRhVGFzay5oCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEy
MSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlv
bihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
KTsKICAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkgeyByZXR1cm4g
bV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsgfQorCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IGN1cnJlbnRSZXF1ZXN0KCk7CiAgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCk7CiAg
ICAgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29tcGxldGlv
bkhhbmRsZXIpOwpAQCAtMTQxLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmYWlsdXJl
VGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlKTsKICAg
ICAKLSAgICBOZXR3b3JrU2Vzc2lvbiYgbV9zZXNzaW9uOworICAgIFJlZlB0cjxOZXR3b3JrU2Vz
c2lvbj4gbV9zZXNzaW9uOwogICAgIE5ldHdvcmtEYXRhVGFza0NsaWVudCogbV9jbGllbnQ7CiAg
ICAgUGVuZGluZ0Rvd25sb2FkKiBtX3BlbmRpbmdEb3dubG9hZCB7IG51bGxwdHIgfTsKICAgICBE
b3dubG9hZElEIG1fcGVuZGluZ0Rvd25sb2FkSUQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDcgQEAgTmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKE5ldHdvcmtMb2FkQ2xp
ZQogICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVmZXJzTG9hZGluZykKICAgICAgICAgICAgIG1f
dGFzay0+cmVzdW1lKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBXVEZMb2dBbHdheXMoIkF0dGVtcHRlZCB0byBjcmVhdGUgYSBOZXR3b3JrTG9h
ZCB3aXRoIGEgc2Vzc2lvbiAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwg
cGFyYW1ldGVycy5zZXNzaW9uSUQuc2Vzc2lvbklEKCkpOwogI2Vsc2UKICAgICBtX2hhbmRsZSA9
IFJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgcGFyYW1l
dGVycy5yZXF1ZXN0LCB0aGlzLCBwYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcsIHBhcmFtZXRlcnMu
Y29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudCk7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAkocmV2aXNp
b24gMTk4MDc0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTkgKzQ3LDI1IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXI7CiAKLWNsYXNzIE5ldHdvcmtTZXNzaW9u
IHsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Nlc3Np
b24+IHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgogICAgIGVu
dW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vcm1hbCwKICAgICAgICAgRXBoZW1lcmFsCiAgICAg
fTsKLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVBy
b3RvY29sTWFuYWdlciosIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiopOworCisgICAg
c3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlKFR5cGUsIFdlYkNvcmU6OlNlc3Npb25J
RCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4pOworICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiYgZGVmYXVsdFNl
c3Npb24oKTsKICAgICB+TmV0d29ya1Nlc3Npb24oKTsKIAotICAgIFdlYkNvcmU6OlNlc3Npb25J
RCBzZXNzaW9uSUQoKSB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQorICAgIHZvaWQgaW52YWxpZGF0
ZUFuZENhbmNlbCgpOworCisgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CisgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKKwogICAgIHN0YXRpYyB2b2lkIHNldEN1c3Rv
bVByb3RvY29sTWFuYWdlcihDdXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKLSAgICBzdGF0aWMgTmV0
d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7CisKICNpZiAhVVNFKENSRURFTlRJQUxfU1RP
UkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikKICAgICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsK
ICNlbmRpZgpAQCAtNzEsMTQgKzc3LDIwIEBAIHB1YmxpYzoKICAgICBEb3dubG9hZElEIHRha2VE
b3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIpOwogICAgIAogcHJpdmF0
ZToKKyAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVBy
b3RvY29sTWFuYWdlciosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KTsKKwogICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX25ldHdvcmtTdG9y
YWdlU2Vzc2lvbjsKKwogICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmll
ciwgTmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKICAgICBI
YXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+
IG1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHM7CiAgICAgSGFzaE1hcDxOZXR3b3JrRGF0
YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOworCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0
aENyZWRlbnRpYWxTdG9yYWdlOworICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOwogICAgIFJldGFpblB0
cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKLSAgICBS
ZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25EZWxlZ2F0ZTsKKyAg
ICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EubW0JKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGUKIAogTmV0
d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5l
dHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0
b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29u
dGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qp
CiAgICAgOiBtX2ZhaWx1cmVUaW1lcigqdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6ZmFpbHVyZVRp
bWVyRmlyZWQpCi0gICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKKyAgICAsIG1fc2Vzc2lvbigmc2Vz
c2lvbikKICAgICAsIG1fY2xpZW50KCZjbGllbnQpCiAgICAgLCBtX3N0b3JlZENyZWRlbnRpYWxz
KHN0b3JlZENyZWRlbnRpYWxzKQogICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0aENy
ZWRlbnRpYWxzLmh0dHBNZXRob2QoKSkKQEAgLTc5LDEzICs3OSwxMCBAQCBOZXR3b3JrRGF0YVRh
c2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrCiAgICAgICAgIHVybCA9IHJlcXVlc3QudXJsKCk7
CiAgICAgCiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikK
LSAgICAgICAgaWYgKGF1dG8gc3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFn
ZVNlc3Npb24obV9zZXNzaW9uLnNlc3Npb25JRCgpKSkgewotICAgICAgICAgICAgaWYgKG1fdXNl
ci5pc0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9p
bml0aWFsQ3JlZGVudGlhbCA9IHN0b3JhZ2VTZXNzaW9uLT5jcmVkZW50aWFsU3RvcmFnZSgpLmdl
dCh1cmwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JhZ2VTZXNzaW9u
LT5jcmVkZW50aWFsU3RvcmFnZSgpLnNldChXZWJDb3JlOjpDcmVkZW50aWFsKG1fdXNlciwgbV9w
YXNzd29yZCwgV2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHVybCk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGlm
IChtX3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzc3dvcmQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
bV9pbml0aWFsQ3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCku
Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQodXJsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLnNl
dChXZWJDb3JlOjpDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzd29yZCwgV2ViQ29yZTo6Q3JlZGVu
dGlhbFBlcnNpc3RlbmNlTm9uZSksIHVybCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEwNCwxMyAr
MTAxLDEzIEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmsKICAgICB9
CiAKICAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6QWxsb3dTdG9yZWRDcmVk
ZW50aWFscykgewotICAgICAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVk
ZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgICAgIEFT
U0VSVCghbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuY29udGFpbnMoW21f
dGFzayB0YXNrSWRlbnRpZmllcl0pKTsKLSAgICAgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXBX
aXRoQ3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICAg
ICAgbV90YXNrID0gW21fc2Vzc2lvbi0+bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGRh
dGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKKyAgICAgICAgQVNTRVJUKCFtX3Nlc3Npb24t
Pm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRp
Zmllcl0pKTsKKyAgICAgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxz
LmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbV90YXNrID0gW21fc2Vzc2lvbi5tX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Ug
ZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwotICAgICAgICBBU1NFUlQoIW1fc2Vzc2lv
bi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmNvbnRhaW5zKFttX3Rhc2sgdGFza0lk
ZW50aWZpZXJdKSk7Ci0gICAgICAgIG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRl
bnRpYWxzLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CisgICAgICAgIG1fdGFz
ayA9IFttX3Nlc3Npb24tPm1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZSBkYXRhVGFz
a1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07CisgICAgICAgIEFTU0VSVCghbV9zZXNzaW9uLT5tX2Rh
dGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmNvbnRhaW5zKFttX3Rhc2sgdGFza0lkZW50aWZp
ZXJdKSk7CisgICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFs
cy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOwogICAgIH0KIAogI2lmIEhBVkUo
Q0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQpAQCAtMTI1LDExICsxMjIsMTEgQEAgTmV0
d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIGlmIChtX3Rhc2spIHsKICAgICAgICAgaWYgKG1fc3RvcmVkQ3JlZGVudGlhbHMg
PT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3Nlc3Npb24ubV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFs
cy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOwotICAgICAgICAgICAgbV9z
ZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lk
ZW50aWZpZXJdKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBX
aXRoQ3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAg
ICAgICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5yZW1vdmUo
W21fdGFzayB0YXNrSWRlbnRpZmllcl0pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmdldChbbV90
YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX3Nlc3Npb24ubV9k
YXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmll
cl0pOworICAgICAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhvdXRD
cmVkZW50aWFscy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAgICAg
ICAgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLnJlbW92ZShb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMjEsMTYg
KzIxOCwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1IVFRQUmVkCiAgICAg
ICAgIC8vIE9ubHkgY29uc2lkZXIgYXBwbHlpbmcgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMg
aWYgdGhpcyBpcyBhY3R1YWxseSBhIHJlZGlyZWN0IGFuZCB0aGUgcmVkaXJlY3QKICAgICAgICAg
Ly8gVVJMIGRpZG4ndCBpbmNsdWRlIGNyZWRlbnRpYWxzIG9mIGl0cyBvd24uCiAgICAgICAgIGlm
IChtX3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzc3dvcmQuaXNFbXB0eSgpICYmICFyZWRpcmVjdFJl
c3BvbnNlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vzc2lvbiA9
IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb24uc2Vzc2lvbklEKCkpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBjcmVkZW50aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRl
bnRpYWxTdG9yYWdlKCkuZ2V0KHJlcXVlc3QudXJsKCkpOwotICAgICAgICAgICAgICAgIGlmICgh
Y3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbml0aWFsQ3Jl
ZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBtX3Nl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHJl
cXVlc3QudXJsKCkpOworICAgICAgICAgICAgaWYgKCFjcmVkZW50aWFsLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgIG1faW5pdGlhbENyZWRlbnRpYWwgPSBjcmVkZW50aWFsOwogCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IERpZ2VzdCBhdXRoZW50aWNhdGlvbiwg
YW5kIFByb3h5LUF1dGhvcml6YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGFwcGx5QmFzaWNB
dXRob3JpemF0aW9uSGVhZGVyKHJlcXVlc3QsIG1faW5pdGlhbENyZWRlbnRpYWwpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IERpZ2VzdCBh
dXRoZW50aWNhdGlvbiwgYW5kIFByb3h5LUF1dGhvcml6YXRpb24uCisgICAgICAgICAgICAgICAg
YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIocmVxdWVzdCwgbV9pbml0aWFsQ3JlZGVudGlh
bCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTI5OCwyOCAr
MjkyLDI1IEBAIGJvb2wgTmV0d29ya0RhdGFUYXNrOjp0cnlQYXNzd29yZEJhc2VkQXUKIAogI2lm
IFVTRShDUkVERU5USUFMX1NUT1JBR0VfV0lUSF9ORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1f
c3RvcmVkQ3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6QWxsb3dTdG9yZWRDcmVkZW50aWFscykgewot
ICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdl
U2Vzc2lvbihtX3Nlc3Npb24uc2Vzc2lvbklEKCkpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faW5p
dGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpIHx8IGNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3Vu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHN0b3JlZCBjcmVkZW50aWFsIHdhc24ndCBh
Y2NlcHRlZCwgc3RvcCB1c2luZyBpdC4KLSAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHJh
Y2UgY29uZGl0aW9uIGhlcmUsIHNpbmNlIGEgZGlmZmVyZW50IGNyZWRlbnRpYWwgbWlnaHQgaGF2
ZSBhbHJlYWR5IGJlZW4gc3RvcmVkIGJ5IGFub3RoZXIgUmVzb3VyY2VIYW5kbGUsCi0gICAgICAg
ICAgICAgICAgLy8gYnV0IHRoZSBvYnNlcnZhYmxlIGVmZmVjdCBzaG91bGQgYmUgdmVyeSBtaW5v
ciwgaWYgYW55LgotICAgICAgICAgICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5jcmVkZW50aWFsU3Rv
cmFnZSgpLnJlbW92ZShjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOwotICAgICAgICAgICAg
fQorICAgICAgICBpZiAoIW1faW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpIHx8IGNoYWxsZW5n
ZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgc3RvcmVkIGNy
ZWRlbnRpYWwgd2Fzbid0IGFjY2VwdGVkLCBzdG9wIHVzaW5nIGl0LgorICAgICAgICAgICAgLy8g
VGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBhIGRpZmZlcmVudCBjcmVkZW50
aWFsIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHN0b3JlZCBieSBhbm90aGVyIFJlc291cmNlSGFu
ZGxlLAorICAgICAgICAgICAgLy8gYnV0IHRoZSBvYnNlcnZhYmxlIGVmZmVjdCBzaG91bGQgYmUg
dmVyeSBtaW5vciwgaWYgYW55LgorICAgICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFn
ZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLnJlbW92ZShjaGFsbGVuZ2UucHJvdGVjdGlv
blNwYWNlKCkpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghY2hhbGxlbmdlLnByZXZp
b3VzRmFpbHVyZUNvdW50KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBz
dG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQoY2hhbGxlbmdlLnByb3RlY3Rp
b25TcGFjZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpICYm
IGNyZWRlbnRpYWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IFdlYkNvcmU6OkNyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZU5vbmUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbGxlbmdlLmZhaWx1
cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBhZGRpbmcgaXQg
YXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2VTZXNzaW9uLT5jcmVkZW50aWFsU3RvcmFnZSgpLnNldChjcmVkZW50aWFsLCBjaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlh
bCwgY3JlZGVudGlhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIWNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpKSB7CisgICAgICAgICAgICBh
dXRvIGNyZWRlbnRpYWwgPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRl
bnRpYWxTdG9yYWdlKCkuZ2V0KGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7CisgICAgICAg
ICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpICYmIGNyZWRlbnRpYWwgIT0gbV9pbml0aWFs
Q3JlZGVudGlhbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChjcmVkZW50aWFsLnBlcnNpc3Rl
bmNlKCkgPT0gV2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7CisgICAgICAgICAg
ICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID09
IDQwMSkgeworICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNr
LCBwb3NzaWJseSBhZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KKyAg
ICAgICAgICAgICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVk
ZW50aWFsU3RvcmFnZSgpLnNldChjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
KCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKSk7CiAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwsIGNyZWRlbnRpYWwpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbQkocmV2aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNzcsNyArNzcsOCBAQCBzdGF0aWMgTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURp
c3Bvc2l0CiB9CiAKIEBpbnRlcmZhY2UgV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIDogTlNPYmpl
Y3QgPE5TVVJMU2Vzc2lvbkRhdGFEZWxlZ2F0ZT4gewotICAgIFdlYktpdDo6TmV0d29ya1Nlc3Np
b24qIF9zZXNzaW9uOworICAgIFJlZlB0cjxXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uPiBfc2Vzc2lv
bjsKKyAgICBib29sIF9zZXNzaW9uRGVzdHJveWVkOwogfQogCiAtIChpZClpbml0V2l0aE5ldHdv
cmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uJilzZXNzaW9uOwpAQCAtOTcsNiArOTgs
MTEgQEAgLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZQogICAgIHJldHVy
biBzZWxmOwogfQogCistICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24g
ZGlkQmVjb21lSW52YWxpZFdpdGhFcnJvcjoobnVsbGFibGUgTlNFcnJvciAqKWVycm9yCit7Cisg
ICAgX3Nlc3Npb24gPSBudWxscHRyOworfQorCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vz
c2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkU2VuZEJvZHlE
YXRhOihpbnQ2NF90KWJ5dGVzU2VudCB0b3RhbEJ5dGVzU2VudDooaW50NjRfdCl0b3RhbEJ5dGVz
U2VudCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQ6KGludDY0X3QpdG90YWxCeXRlc0V4cGVjdGVk
VG9TZW5kCiB7CiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFscyA9IHNlc3Npb24uY29uZmlndXJh
dGlvbi5VUkxDcmVkZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzOjpB
bGxvd1N0b3JlZENyZWRlbnRpYWxzIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkRvTm90
QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKQEAgLTI2NSwxNyArMjcxLDIzIEBAIHZvaWQgTmV0d29y
a1Nlc3Npb246OnNldEN1c3RvbVByb3RvY29sTWEKICAgICBnbG9iYWxDdXN0b21Qcm90b2NvbE1h
bmFnZXIoKSA9IGN1c3RvbVByb3RvY29sTWFuYWdlcjsKIH0KIAorUmVmPE5ldHdvcmtTZXNzaW9u
PiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIsIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ldHdvcmtTdG9y
YWdlU2Vzc2lvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvbih0
eXBlLCBzZXNzaW9uSUQsIGN1c3RvbVByb3RvY29sTWFuYWdlciwgV1RGTW92ZShuZXR3b3JrU3Rv
cmFnZVNlc3Npb24pKSk7Cit9CisKIE5ldHdvcmtTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6ZGVm
YXVsdFNlc3Npb24oKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE5ldHdvcmtTZXNzaW9uPiBzZXNzaW9uKE5ldHdvcmtTZXNzaW9uOjpU
eXBlOjpOb3JtYWwsIFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBnbG9i
YWxDdXN0b21Qcm90b2NvbE1hbmFnZXIoKS5nZXQoKSwgJldlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwotICAgIHJldHVybiBzZXNzaW9uOwor
ICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZOZXR3b3JrU2Vzc2lvbjo6Y3Jl
YXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpLCBnbG9iYWxDdXN0b21Qcm90b2NvbE1hbmFnZXIoKS5nZXQoKSwgbnVs
bHB0cikubGVha1JlZigpOworICAgIHJldHVybiAqc2Vzc2lvbjsKIH0KIAotTmV0d29ya1Nlc3Np
b246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIsIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogbmV0d29ya1N0b3JhZ2VTZXNzaW9uKQorTmV0d29ya1Nl
c3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIsIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbikKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKKyAgICAsIG1fbmV0d29ya1N0
b3JhZ2VTZXNzaW9uKFdURk1vdmUobmV0d29ya1N0b3JhZ2VTZXNzaW9uKSkKIHsKLSAgICBtX3Nl
c3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXNdKTsKKyAgICByZWxheEFkb3B0aW9uUmVxdWly
ZW1lbnQoKTsKIAogICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24g
PSBjb25maWd1cmF0aW9uRm9yVHlwZSh0eXBlKTsKIApAQCAtMjg4LDIxICszMDAsNDIgQEAgTmV0
d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZQogICAgIHNldENvbGxlY3RzVGlt
aW5nRGF0YSgpOwogI2VuZGlmCiAKLSAgICBpZiAobmV0d29ya1N0b3JhZ2VTZXNzaW9uKSB7Ci0g
ICAgICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIHN0b3JhZ2UgPSBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKKyAgICBpZiAobV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb24pIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6RXBoZW1lcmFsKTsKKyAg
ICAgICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IG1fbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLT5jb29raWVTdG9yYWdlKCkuZ2V0KCkpCisgICAgICAgICAgICBjb25maWd1cmF0
aW9uLkhUVFBDb29raWVTdG9yYWdlID0gW1tbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2lu
aXRXaXRoQ0ZIVFRQQ29va2llU3RvcmFnZTpzdG9yYWdlXSBhdXRvcmVsZWFzZV07CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6Tm9ybWFsKTsKKyAgICAgICAgaWYg
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llU3RvcmFnZSgpLmdldCgpKQog
ICAgICAgICAgICAgY29uZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IFtbW05TSFRUUENv
b2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZV0g
YXV0b3JlbGVhc2VdOwogICAgIH0KLSAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Ug
PSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRl
bGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVR
dWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKworICAgIG1fc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZURlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpc10pOworICAgIG1fc2Vzc2lv
bldpdGhDcmVkZW50aWFsU3RvcmFnZSA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJh
dGlvblF1ZXVlIG1haW5RdWV1ZV1dOworCiAgICAgY29uZmlndXJhdGlvbi5VUkxDcmVkZW50aWFs
U3RvcmFnZSA9IG5pbDsKLSAgICBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgPSBb
TlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVn
YXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1
ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXNdKTsKKyAgICBtX3Nlc3Npb25X
aXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25X
aXRob3V0Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNP
cGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKIH0KIAogTmV0d29ya1Nlc3Npb246On5OZXR3b3Jr
U2Vzc2lvbigpCiB7Cit9CisKK3ZvaWQgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5j
ZWwoKQorewogICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgaW52YWxpZGF0ZUFu
ZENhbmNlbF07CiAgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlk
YXRlQW5kQ2FuY2VsXTsKIH0KIAorCitXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5l
dHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKQoreworICAgIGlmICghbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOworICAgIHJldHVybiAqbV9uZXR3b3Jr
U3RvcmFnZVNlc3Npb247Cit9CisKICNpZiAhVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05F
VFdPUktfU0VTU0lPTikKIHZvaWQgTmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMoKQog
ewpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTk4MDc0KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTUgKzEwMCwxNCBAQCB2b2lkIFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVQcml2CiAgICAgZWxzZQogICAgICAgICBiYXNlID0gU2Vzc2lvblRy
YWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCk7CiAKLSAgICBhdXRvIG5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lv
bihiYXNlICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7Ci0j
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxOZXR3b3JrU2Vzc2lvbj4oTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJh
bCwgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxDdXN0
b21Qcm90b2NvbE1hbmFnZXI+KCksIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5nZXQoKSk7Ci0jZW5k
aWYKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0
d29ya1N0b3JhZ2VTZXNzaW9uKQorICAgIGF1dG8gbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25J
RCwgYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOwor
CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgLCBXVEZNb3ZlKG5ldHdvcmtTZXNz
aW9uKQorICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5l
dHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpLCBXVEZNb3Zl
KG5ldHdvcmtTdG9yYWdlU2Vzc2lvbikpOworICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9u
KHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3JrU2Vzc2lvbikpOworI2Vsc2UKKyAgICBTZXNzaW9u
VHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1N0b3JhZ2VTZXNz
aW9uKSk7CiAjZW5kaWYKLSAgICApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2Vzc2lvblRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9TZXNzaW9uVHJhY2tlci5jcHAJKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TZXNzaW9uVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwNSArMzUs
MTA3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
c3RhdGljIEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uPj4mIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkKK3N0YXRpYyBTdHJpbmcmIGlkZW50
aWZpZXJCYXNlKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPj4+IG1hcDsKLSAgICByZXR1cm4gbWFwOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGJhc2U7CisgICAgcmV0dXJuIGJhc2U7CiB9CiAKLXN0YXRp
YyBIYXNoTWFwPGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiosIFNlc3Npb25JRD4mIHN0b3Jh
Z2VTZXNzaW9uVG9JRCgpCitjb25zdCBTdHJpbmcmIFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlm
aWVyQmFzZSgpCiB7Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiosIFNl
c3Npb25JRD4+IG1hcDsKLSAgICByZXR1cm4gbWFwOworICAgIHJldHVybiBpZGVudGlmaWVyQmFz
ZSgpOwogfQogCi1zdGF0aWMgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSgpCit2b2lkIFNlc3Npb25U
cmFja2VyOjpzZXRJZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGJhc2U7Ci0gICAgcmV0dXJuIGJhc2U7CisgICAgaWRlbnRpZmllckJhc2UoKSA9
IGlkZW50aWZpZXI7CiB9CiAKLWNvbnN0IEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lv
bk1hcCgpCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKK3N0YXRpYyBIYXNoTWFwPFNlc3Npb25J
RCwgUmVmUHRyPE5ldHdvcmtTZXNzaW9uPj4mIHN0YXRpY1Nlc3Npb25NYXAoKQogewotICAgIHJl
dHVybiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpOwotfQorICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKLWNvbnN0IFN0cmluZyYgU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJC
YXNlKCkKLXsKLSAgICByZXR1cm4gaWRlbnRpZmllckJhc2UoKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxTZXNzaW9uSUQsIFJlZlB0cjxOZXR3b3JrU2Vzc2lvbj4+PiBtYXA7
CisgICAgcmV0dXJuIG1hcDsKIH0KIAotTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBTZXNzaW9uVHJh
Y2tlcjo6c3RvcmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtTZXNzaW9u
KiBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
ICAgICBpZiAoc2Vzc2lvbklEID09IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAg
ICAgICByZXR1cm4gJk5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7Ci0gICAgcmV0dXJuIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuZ2V0KHNlc3Npb25JRCk7
CisgICAgICAgIHJldHVybiAmTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCk7CisgICAg
cmV0dXJuIHN0YXRpY1Nlc3Npb25NYXAoKS5nZXQoc2Vzc2lvbklEKTsKIH0KIAotI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCi1zdGF0aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrU2Vzc2lvbj4+JiBzdGF0aWNTZXNzaW9uTWFwKCkKK05ldHdvcmtTdG9yYWdlU2Vz
c2lvbiogU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQp
Cit7ICAgIAorICAgIGF1dG8gc2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lv
bihzZXNzaW9uSUQpOworICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuICZzZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKK30KKyNlbHNl
CitzdGF0aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+PiYgc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8
U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+Pj4gbWFwOworCisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCi1OZXR3
b3JrU2Vzc2lvbiogU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKFNlc3Npb25JRCBzZXNz
aW9uSUQpCitOZXR3b3JrU3RvcmFnZVNlc3Npb24qIFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vz
c2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNzaW9uSUQgPT0gU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVybiAmTmV0d29ya1Nlc3Npb246
OmRlZmF1bHRTZXNzaW9uKCk7Ci0gICAgcmV0dXJuIHN0YXRpY1Nlc3Npb25NYXAoKS5nZXQoc2Vz
c2lvbklEKTsKKyAgICAgICAgcmV0dXJuICZOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpOworICAgIHJldHVybiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLmdl
dChzZXNzaW9uSUQpOwogfQogI2VuZGlmCiAKIFNlc3Npb25JRCBTZXNzaW9uVHJhY2tlcjo6c2Vz
c2lvbklEKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKIHsKLSAgICBpZiAo
JnNlc3Npb24gPT0gJk5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkpCi0gICAgICAgIHJldHVybiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICBy
ZXR1cm4gc3RvcmFnZVNlc3Npb25Ub0lEKCkuZ2V0KCZzZXNzaW9uKTsKKyAgICByZXR1cm4gc2Vz
c2lvbi5zZXNzaW9uSUQoKTsKIH0KIAotdm9pZCBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihT
ZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PiBzdG9yYWdlU2Vzc2lvbgogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLCBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+IHNlc3Npb24KLSNlbmRpZgotKQordm9pZCBTZXNzaW9u
VHJhY2tlcjo6c2V0U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBSZWY8TmV0d29ya1Nlc3Np
b24+JiYgc2Vzc2lvbikKK3sKKyAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKKyAgICBzdGF0aWNTZXNzaW9uTWFwKCkuc2V0KHNlc3Npb25JRCwg
V1RGTW92ZShzZXNzaW9uKSk7Cit9CisjZWxzZQordm9pZCBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vz
c2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uPiBzdG9yYWdlU2Vzc2lvbikKIHsKICAgICBBU1NFUlQoc3RvcmFnZVNlc3Npb24pOwog
ICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwot
ICAgIHN0b3JhZ2VTZXNzaW9uVG9JRCgpLnNldChzdG9yYWdlU2Vzc2lvbi5nZXQoKSwgc2Vzc2lv
bklEKTsKICAgICBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLnNldChzZXNzaW9uSUQsIFdURk1v
dmUoc3RvcmFnZVNlc3Npb24pKTsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VS
VChzZXNzaW9uKTsKLSAgICBzdGF0aWNTZXNzaW9uTWFwKCkuc2V0KHNlc3Npb25JRCwgV1RGTW92
ZShzZXNzaW9uKSk7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkIFNlc3Npb25UcmFja2VyOjpk
ZXN0cm95U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgaWYgKHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuY29udGFpbnMo
c2Vzc2lvbklEKSkgewogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0Uoc3RhdGljU2Vzc2lvbk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCksICJOZXR3
b3JrU2Vzc2lvbnMgYW5kIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbnMgc2hvdWxkIGFsd2F5cyBiZSBj
cmVhdGVkLCBkZWxldGVkLCBhbmQgbWFuYWdlZCBhcyBwYWlycyIpOwotICAgICAgICBzdGF0aWNT
ZXNzaW9uTWFwKCkucmVtb3ZlKHNlc3Npb25JRCk7CisgICAgYXV0byBzZXNzaW9uID0gc3RhdGlj
U2Vzc2lvbk1hcCgpLnRha2Uoc2Vzc2lvbklEKTsKKyAgICBzZXNzaW9uLT5pbnZhbGlkYXRlQW5k
Q2FuY2VsKCk7CisjZWxzZQorICAgIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkucmVtb3ZlKHNl
c3Npb25JRCk7CiAjZW5kaWYKLSAgICAgICAgc3RvcmFnZVNlc3Npb25Ub0lEKCkucmVtb3ZlKHN0
b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpOwotICAgICAgICBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1h
cCgpLnJlbW92ZShzZXNzaW9uSUQpOwotICAgIH0KIH0KIAotdm9pZCBTZXNzaW9uVHJhY2tlcjo6
c2V0SWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQordm9pZCBTZXNzaW9u
VHJhY2tlcjo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihzdGQ6OmZ1bmN0aW9uPHZvaWQo
Y29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+IGZ1bmN0b3IpCiB7Ci0gICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlkZW50aWZpZXJCYXNlKCkgPSBpZGVu
dGlmaWVyOworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgZm9yIChhdXRvJiBzZXNzaW9u
IDogc3RhdGljU2Vzc2lvbk1hcCgpLnZhbHVlcygpKQorICAgICAgICBmdW5jdG9yKHNlc3Npb24t
Pm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKTsKKyNlbHNlCisgICAgZm9yIChhdXRvJiBuZXR3b3Jr
U3RvcmFnZVNlc3Npb24gOiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLnZhbHVlcygpKQorICAg
ICAgICBmdW5jdG9yKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOworI2VuZGlmCiB9CiAKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblRy
YWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblRyYWNr
ZXIuaAkocmV2aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25U
cmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDI0ICs0MiwyOCBAQCBjbGFzcyBOZXR3b3Jr
U2Vzc2lvbjsKIGNsYXNzIFNlc3Npb25UcmFja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTZXNzaW9uVHJhY2tlcik7CiBwdWJsaWM6Ci0gICAgLy8gRklYTUU6IHN0b3JhZ2VTZXNzaW9u
TWFwKCkncyByZXR1cm5lZCBtYXAgZG9lcyBub3QgaW5jbHVkZSBkZWZhdWx0IHNlc3Npb24uCi0g
ICAgc3RhdGljIGNvbnN0IEhhc2hNYXA8V2ViQ29yZTo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIHN0b3JhZ2VTZXNzaW9uTWFwKCk7
Ci0KICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBnZXRJZGVudGlmaWVyQmFzZSgpOworICAgIHN0
YXRpYyB2b2lkIHNldElkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOworCiAgICAgc3RhdGlj
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oV2ViQ29yZTo6
U2Vzc2lvbklEKTsKKyAgICAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHVzZXMgb2YgdGhpcyBhcyBp
dCBpcyBqdXN0IGEgbWVtYmVyIGFjY2VzcyBpbnRvIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbi4KICAg
ICBzdGF0aWMgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRChjb25zdCBXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTZXNzaW9uKFdlYkNvcmU6
OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4KKwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgICwgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtTZXNzaW9uPgorICAgIHN0YXRpYyB2b2lkIHNldFNlc3Npb24oV2ViQ29yZTo6U2Vz
c2lvbklELCBSZWY8TmV0d29ya1Nlc3Npb24+JiYpOworI2Vsc2UKKyAgICBzdGF0aWMgdm9pZCBz
ZXRTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4pOwogI2VuZGlmCi0gICAgKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95U2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQpOwotICAgIHN0YXRpYyB2b2lkIHNldElk
ZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOwogICAgIAogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCiAgICAgLy8gRklYTUU6IEEgTmV0d29ya1Nlc3Npb24gYW5kIGEgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uIHNob3VsZCBiZSB0aGUgc2FtZSBvYmplY3Qgb25jZSBORVRXT1JLX1NFU1NJT04gaXMg
dXNlZCBieSBkZWZhdWx0LgogICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogbmV0d29ya1Nlc3Np
b24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKICNlbmRpZgorCisgICAgLy8gRklYTUU6IFRoaXMgZG9l
cyBub3QgaW5jbHVkZSB0aGUgZGVmYXVsdCBuZXR3b3JrIHN0b3JhZ2Ugc2VzaW9uIGluIGl0J3Mg
aXRlcmF0aW9uLgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24o
c3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYp
Pik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTk4MDc0KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsMTUgKzU4LDEzIEBAIHZvaWQgV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHIKICAgICBlbHNlCiAgICAgICAgIGJhc2Ug
PSBTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKTsKIAotICAgIGF1dG8gbmV0d29y
a1N0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJv
d3NpbmdTZXNzaW9uKGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lv
bklEKCkpKTsKKyAgICBhdXRvIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIGJhc2UgKyAn
LicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKICNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQotICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVl
PE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9u
SUQsIG51bGxwdHIsIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5nZXQoKSk7Ci0jZW5kaWYKLSAgICBT
ZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgICwgV1RGTW92ZShu
ZXR3b3JrU2Vzc2lvbikKKyAgICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gTmV0d29ya1Nlc3Npb246
OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQsIG51bGxw
dHIsIFdURk1vdmUobmV0d29ya1N0b3JhZ2VTZXNzaW9uKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6
OnNldFNlc3Npb24oc2Vzc2lvbklELCBXVEZNb3ZlKG5ldHdvcmtTZXNzaW9uKSk7CisjZWxzZQor
ICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3Jr
U3RvcmFnZVNlc3Npb24pKTsKICNlbmRpZgotICAgICk7CiB9CiAKIHZvaWQgV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxsQ29udGV4dHMoSFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCkBAIC03NiwxMCArNzQsOSBAQCB2b2lkIFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpCiAgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5
KTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lvbiA6IFNlc3Npb25UcmFja2VyOjpzdG9y
YWdlU2Vzc2lvbk1hcCgpLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uKQotICAgICAg
ICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uLT5j
b29raWVTdG9yYWdlKCkuZ2V0KCksIHBvbGljeSk7Ci0gICAgfQorICAgIFNlc3Npb25UcmFja2Vy
Ojpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFsmXSAoY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24pIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llU3Rv
cmFnZVNldENvb2tpZUFjY2VwdFBvbGljeShuZXR3b3JrU3RvcmFnZVNlc3Npb24uY29va2llU3Rv
cmFnZSgpLmdldCgpLCBwb2xpY3kpOworICAgIH0pOwogfQogICAgIAogYm9vbCBXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QK
QEAgLTkwLDcgKzg3LDcgQEAgYm9vbCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZp
bAogU2NoZWR1bGVQYWlySGFzaFNldCogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2NoZWR1
bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QKIHsKICAgICBpZiAoIWZyYW1lKCkgfHwgIWZyYW1lKCkt
PnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiBmcmFtZSgpLT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3Bw
CShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQ
cgogICAgIGlmIChTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklE
LCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU3Ry
aW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSkpOworICAgIFNlc3Npb25UcmFja2Vy
OjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNl
c3Npb25JRCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENv
b2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5KQpAQCAtNzIsMTAgKzcyLDkgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
ZXRDb29raQogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cFNlc3Npb24gPSBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigp
OwogICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShzb3VwU2Vzc2lvbi5jb29r
aWVKYXIoKSwgc291cFBvbGljeSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb24gOiBT
ZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb25NYXAoKS52YWx1ZXMoKSkgewotICAgICAgICBp
ZiAoc2Vzc2lvbikKLSAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGlj
eShzZXNzaW9uLT5zb3VwTmV0d29ya1Nlc3Npb24oKS5jb29raWVKYXIoKSwgc291cFBvbGljeSk7
Ci0gICAgfQorICAgIFNlc3Npb25UcmFja2VyOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KFsmXSAoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgIHNv
dXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShzZXNzaW9uLT5zb3VwTmV0d29ya1Nlc3Np
b24oKS5jb29raWVKYXIoKSwgc291cFBvbGljeSk7CisgICAgfSk7CiB9CiAKIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoV2ViRnJhbWUqIGZyYW1l
KQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDMt
MTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBXZWJLaXQgY2FuIGVh
c2lseSBjcmFzaCBiZWxvdyBOZXR3b3JrU2Vzc2lvbjo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKCkg
d2l0aCBOU1VSTFNlc3Npb24gZW5hYmxlZAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjUxMjk5
NDY+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0
MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAg
ICAgICAgUGFzcyBhIFNlc3Npb25JRCB0byBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVBy
aXZhdGVCcm93c2luZ1Nlc3Npb24oKS4KKwogMjAxNi0wMy0xMiAgTXlsZXMgQy4gTWF4ZmllbGQg
IDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGV0ZSBkZWFkIFNWRyBGb250IGNv
ZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTk4MDc0KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Nlc3Npb25JRC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAKQEAgLTU2LDcgKzU3LDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVQcgogICAgIGlmIChwcml2YXRlU2Vzc2lvbigpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBwcml2YXRlU2Vzc2lvbigpID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmll
cl0pOworICAgIHByaXZhdGVTZXNzaW9uKCkgPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEOjpsZWdhY3lQcml2YXRlU2Vzc2lvbklE
KCksIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0pOwogfQogCiB2b2lk
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9u
KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODA3NSkKKysrIFNvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAz
LTEyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgV2ViS2l0IGNhbiBl
YXNpbHkgY3Jhc2ggYmVsb3cgTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcigp
IHdpdGggTlNVUkxTZXNzaW9uIGVuYWJsZWQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI1MTI5
OTQ2PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1
NDAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgor
ICAgICAgICBQYXNzIGEgU2Vzc2lvbklEIHRvIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRl
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpLgorCiAyMDE2LTAzLTEwICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIx
OTc5NTM7IGNvcnJlY3QgdGhlIHNldHRpbmdzIGFkZGVkIGluIHIxOTc5NTMuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVQcgogICAgIH0gZWxzZQogICAgICAgICBiYXNlID0gaWRlbnRpZmllckJhc2UoKTsK
IAotICAgIHByaXZhdGVTZXNzaW9uKCkgPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVBy
aXZhdGVCcm93c2luZ1Nlc3Npb24oYmFzZSk7CisgICAgcHJpdmF0ZVNlc3Npb24oKSA9IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQ6
OmxlZ2FjeVByaXZhdGVTZXNzaW9uSUQoKSwgYmFzZSk7CiAjZW5kaWYKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273863</attachid>
            <date>2016-03-12 18:09:31 -0800</date>
            <delta_ts>2016-03-12 18:37:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155401-20160312180918.patch</filename>
            <type>text/plain</type>
            <size>49978</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE2LTAzLTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgV2ViS2l0IGNhbiBlYXNpbHkgY3Jhc2gg
YmVsb3cgTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcigpIHdpdGggTlNVUkxT
ZXNzaW9uIGVuYWJsZWQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI1MTI5OTQ2PgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDAxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgU2Vzc2lvbklE
IGFzIGEgbWVtYmVyIG9mIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbi4gVGhpcyBhbGxvd3MgdXMgdG8g
YXZvaWQgaGF2aW5nIEhhc2hNYXBzCisgICAgICAgIHRvIG1hcCBiZXR3ZWVuIHRoZSB0d28gdHlw
ZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXNzaW9uSUQpOgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVkZW50aWFsU3RvcmFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnBsYXRmb3JtU2Vz
c2lvbik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25T
dHViLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNy
ZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFNl
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0
U3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Ojpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdl
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN3aXRj
aFRvTmV3VGVzdGluZ1Nlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpzb3VwTmV0d29ya1Nlc3Npb24pOgorCiAyMDE2LTAzLTEyICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgRGVsZXRlIGRlYWQgU1ZHIEZv
bnQgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKICNkZWZpbmUgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
X2gKIAogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSAiU2Vzc2lvbklELmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKICNpbmNs
dWRlICJDRk5ldHdvcmtTUEkuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMzEgKzQ1LDM2IEBAIGNsYXNzIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+IGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyQmFzZSA9IFN0cmluZygpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gY3JlYXRlUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbihTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJhc2UgPSBTdHJpbmco
KSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzd2l0Y2hUb05ld1Rlc3RpbmdT
ZXNzaW9uKCk7CiAKKyAgICBTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXNzaW9uSUQ7IH0KICAgICBDcmVkZW50aWFsU3RvcmFnZSYgY3JlZGVudGlhbFN0b3JhZ2UoKSB7
IHJldHVybiBtX2NyZWRlbnRpYWxTdG9yYWdlOyB9CiAKICNpZiBQTEFURk9STShDT0NPQSkgfHwg
VVNFKENGTkVUV09SSykKLSAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24oUmV0YWluUHRyPENGVVJM
U3RvcmFnZVNlc3Npb25SZWY+KTsKKyAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24oU2Vzc2lvbklE
LCBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4pOworCiAgICAgLy8gTWF5IGJlIG51
bGwsIGluIHdoaWNoIGNhc2UgYSBGb3VuZGF0aW9uIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuCiAg
ICAgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBwbGF0Zm9ybVNlc3Npb24oKSB7IHJldHVybiBtX3Bs
YXRmb3JtU2Vzc2lvbi5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlKCkgY29uc3Q7CiAjZWxpZiBVU0UoU09V
UCkKLSAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb24oc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3Jr
U2Vzc2lvbj4pOworICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+KTsKICAgICB+TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCk7CisKICAgICBTb3VwTmV0d29ya1Nlc3Npb24mIHNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0
OwogICAgIHZvaWQgc2V0U291cE5ldHdvcmtTZXNzaW9uKHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0
d29ya1Nlc3Npb24+KTsKICNlbHNlCi0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKE5ldHdvcmtp
bmdDb250ZXh0Kik7CisgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCwgTmV0d29y
a2luZ0NvbnRleHQqKTsKICAgICB+TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CisKICAgICBOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CisgICAg
U2Vzc2lvbklEIG1fc2Vzc2lvbklEOworCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRk5F
VFdPUkspCi0gICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CiAgICAgUmV0YWluUHRyPENGVVJM
U3RvcmFnZVNlc3Npb25SZWY+IG1fcGxhdGZvcm1TZXNzaW9uOwogI2VsaWYgVVNFKFNPVVApCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHVi
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdv
cmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTMgQEAKICNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNl
c3Npb24uaCIKIAogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKK05ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0KQorICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCiB7CiB9CiAKQEAgLTQ3LDE4ICs0OSwyNSBAQCBOZXR3b3JraW5nQ29udGV4dCog
TmV0d29ya1N0b3JhZ2VTZXNzaW9uCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGNvbnN0IFN0cmluZyYpCitzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNy
ZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4mIGRlZmF1bHRTZXNzaW9uKCkKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoTmV0d29ya1N0b3JhZ2VTZXNzaW9uLCBzZXNzaW9uLCAoMCkpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4g
c2Vzc2lvbjsKICAgICByZXR1cm4gc2Vzc2lvbjsKIH0KIAorTmV0d29ya1N0b3JhZ2VTZXNzaW9u
JiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpCit7CisgICAg
aWYgKCFkZWZhdWx0U2Vzc2lvbigpKQorICAgICAgICBkZWZhdWx0U2Vzc2lvbigpID0gc3RkOjpt
YWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gKmRlZmF1bHRTZXNzaW9uKCk7Cit9CisKIHZv
aWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCShyZXZpc2lvbiAxOTgw
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBwbGF0Zm9ybVNlc3Npb24p
Ci0gICAgOiBtX3BsYXRmb3JtU2Vzc2lvbihwbGF0Zm9ybVNlc3Npb24pCitOZXR3b3JrU3RvcmFn
ZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBSZXRh
aW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gcGxhdGZvcm1TZXNzaW9uKQorICAgIDogbV9z
ZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9wbGF0Zm9ybVNlc3Npb24ocGxhdGZvcm1TZXNz
aW9uKQogewogfQogCkBAIC01OCwyNyArNTksMjcgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OnN3aXRjaFRvTmV3VAogICAgIC8vIFNlc3Npb24gbmFtZSBzaG91bGQgYmUgc2hvcnQgZW5v
dWdoIGZvciBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBuYW1lIHRvIGJlIHVuZGVyIHRoZSBsaW1pdCwg
b3RlaHJ3aXNlIHNhbmRib3ggcnVsZXMgd29uJ3Qgd29yayAoc2VlIDxyZGFyOi8vcHJvYmxlbS8x
MzY0Mjg1Mj4pLgogICAgIFN0cmluZyBzZXNzaW9uTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJXZWJL
aXQgVGVzdC0ldSIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihnZXRDdXJyZW50UHJvY2Vzc0lEKCkp
KTsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBkZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oYWRvcHRDRih3a0Ny
ZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihzZXNzaW9uTmFtZS5jcmVhdGVDRlN0cmluZygpLmdl
dCgpKSkpOworICAgIGRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKSA9IHN0ZDo6bWFrZV91
bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSwgYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihzZXNzaW9uTmFtZS5jcmVh
dGVDRlN0cmluZygpLmdldCgpKSkpOwogI2Vsc2UKLSAgICBkZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oYWRvcHRD
Rih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihzZXNzaW9uTmFtZS5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpLCBkZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnBsYXRmb3JtU2Vzc2lv
bigpKSkpOworICAgIGRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKSA9IHN0ZDo6bWFrZV91
bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSwgYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihzZXNzaW9uTmFtZS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCBkZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnBsYXRm
b3JtU2Vzc2lvbigpKSkpOwogI2VuZGlmCiB9CiAKIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQogewogICAgIGlmICgh
ZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKQotICAgICAgICBkZWZhdWx0TmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4o
bnVsbHB0cik7CisgICAgICAgIGRlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24oKSA9IHN0ZDo6
bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSwgbnVsbHB0cik7CiAgICAgcmV0dXJuICpkZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXJCYXNlKQorc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJhc2UpCiB7CiAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZpZXIgPSBTdHJpbmcoaWRlbnRpZmllckJh
c2UgKyAiLlByaXZhdGVCcm93c2luZyIpLmNyZWF0ZUNGU3RyaW5nKCk7CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBhdXRvIHNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4oYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50
aWZpZXIuZ2V0KCkpKSk7CisgICAgYXV0byBzZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgYWRvcHRDRih3a0NyZWF0ZVByaXZhdGVTdG9y
YWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKSk7CiAjZWxzZQotICAgIGF1dG8gc2Vzc2lv
biA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihhZG9wdENGKHdrQ3Jl
YXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSwgZGVmYXVsdE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpLT5wbGF0Zm9ybVNlc3Npb24oKSkpKTsKKyAgICBhdXRvIHNlc3Np
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBh
ZG9wdENGKHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSwg
ZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLT5wbGF0Zm9ybVNlc3Npb24oKSkpKTsKICNl
bmRpZgogCiAgICAgcmV0dXJuIHNlc3Npb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vz
c2lvblNvdXAuY3BwCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDggKzM2LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3Rv
cmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihzdGQ6OnVuaXF1ZV9wdHI8U291cE5l
dHdvcmtTZXNzaW9uPiBzZXNzaW9uKQotICAgIDogbV9zZXNzaW9uKFdURk1vdmUoc2Vzc2lvbikp
CitOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQg
c2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiBzZXNzaW9uKQor
ICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9zZXNzaW9uKFdURk1vdmUoc2Vz
c2lvbikpCiB7CiB9CiAKQEAgLTU1LDE5ICs1NiwxOSBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtTdG9yYWdlU2VzCiBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKIHsKICAgICBpZiAoIWRlZmF1bHRTZXNz
aW9uKCkpCi0gICAgICAgIGRlZmF1bHRTZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4obnVsbHB0cik7CisgICAgICAgIGRlZmF1bHRTZXNzaW9uKCkgPSBz
dGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oU2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIHJldHVybiAqZGVmYXVsdFNlc3Npb24oKTsKIH0K
IAotc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKGNvbnN0IFN0cmluZyYpCitzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBhdXRvIHNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4oU291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKCkpOworICAgIGF1dG8gc2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0
b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQsIFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0
ZUJyb3dzaW5nU2Vzc2lvbigpKTsKICAgICByZXR1cm4gc2Vzc2lvbjsKIH0KIAogdm9pZCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQogewotICAgIGRl
ZmF1bHRTZXNzaW9uKCkgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4o
U291cE5ldHdvcmtTZXNzaW9uOjpjcmVhdGVUZXN0aW5nU2Vzc2lvbigpKTsKKyAgICBkZWZhdWx0
U2Vzc2lvbigpID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBTb3VwTmV0d29ya1Nlc3Npb246OmNyZWF0ZVRlc3Rp
bmdTZXNzaW9uKCkpOwogfQogCiBTb3VwTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE5ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDc2IEBACisyMDE2LTAzLTEyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgV2ViS2l0IGNhbiBlYXNpbHkgY3Jhc2ggYmVsb3cgTmV0d29ya1Nlc3Npb246OmRh
dGFUYXNrRm9ySWRlbnRpZmllcigpIHdpdGggTlNVUkxTZXNzaW9uIGVuYWJsZWQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI1MTI5OTQ2PgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIGlzc3VlIHdhcyB0aGF0IE5TVVJMU2Vzc2lvbkRhdGFUYXNr
cyBjYW4gY29udGludWUgdG8gaW52b2tlIHRoZWlyIE5TVVJMU2Vzc2lvbidzIGRlbGVnYXRlIG1l
dGhvZHMKKyAgICAgICAgYWZ0ZXIgLVtOU1VSTFNlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF0g
aXMgY2FsbGVkLiBTbywgd2hlbiB0aGUgTmV0d29ya1Nlc3Npb24gd2FzIGRlc3Ryb3llZCwgYW5k
CisgICAgICAgIHN0aWxsIGhhZCBvdXRzdGFuZGluZyBkYXRhIHRhc2tzLCB0aGUgc2Vzc2lvbiBk
ZWxlZ2F0ZSB3b3VsZCBnZXQgY2FsbGVkLCB0cnkgdG8gdXNlIHRoZSBzZXNzaW9uLCBhbmQKKyAg
ICAgICAgY3Jhc2guIFRvIGZpeCB0aGlzIEk6CisgICAgICAgIAorICAgICAgICAtIE1hZGUgTmV0
d29ya1Nlc3Npb24gUmVmQ291bnRlZC4KKyAgICAgICAgLSBHYXZlIE5ldHdvcmtTZXNzaW9uIHR3
byBkZWxlZ2F0ZXMsIG9uZSBmb3IgZWFjaCBOU1VSTFNlc3Npb24uCisgICAgICAgIC0gTWFkZSBl
YWNoIGRlbGVnYXRlIGhhdmUgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBOZXR3b3JrU2Vzc2lv
biB0aGF0IGdldHMgY2xlYXJlZCBvdXQgaW4gdGhlCisgICAgICAgICAgbmV3bHkgaW1wbGVtZW50
ZWQgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9yOiBtZXRob2QuCisgICAgICAg
IC0gQ2hhbmdlZCBmcm9tIHNpbXBseSBkZXN0cm95aW5nIHRoZSBOZXR3b3JrU2Vzc2lvbiBpbiBT
ZXNzaW9uVHJhY2tlcjo6ZGVzdHJveVNlc3Npb24oKSwgdG8gZGVyZWZpbmcKKyAgICAgICAgICBp
dCBhbmQgZXhwbGljaXRseSBjYWxsaW5nIGludmFsaWRhdGVBbmRDYW5jZWwgb24gdGhlIHR3byBh
c3NvY2lhdGVkIE5TVVJMU2Vzc2lvbnMgKHdoaWNoIGluIHR1cm4gCisgICAgICAgICAgZXZlbnR1
YWxseSBjYXVzZSB0aGUgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9yOiB0byBm
aXJlKS4KKyAgICAgICAgLSBUbyBlbnN1cmUgdGhlIGNvcnJlY3QgbGlmZXRpbWUgb2YgdGhlIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiwgSSBtYWRlIGl0IGEgbWVtYmVyIG9mIHRoZQor
ICAgICAgICAgIE5ldHdvcmtTZXNzaW9uLiBUaGlzIGFsc28gYWxsb3dlZCBzb21lIHNpbXBsaWZp
Y2F0aW9uIGluc2lkZSBTZXNzaW9uVHJhY2tlci4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtEYXRhVGFzay5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNl
dFBlbmRpbmdEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVu
ZGluZ0Rvd25sb2FkTG9jYXRpb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtM
b2FkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6c2Vzc2lvbklEKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrOjpOZXR3b3JrRGF0YVRhc2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6On5OZXR3b3JrRGF0YVRhc2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6
OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrOjp0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24pOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgICgtW1dLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOl0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOl0pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6Y2xlYXJDcmVkZW50aWFscyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbik6Cisg
ICAgICAgICogU2hhcmVkL1Nlc3Npb25UcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aWRl
bnRpZmllckJhc2UpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRp
ZmllckJhc2UpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2V0SWRlbnRpZmll
ckJhc2UpOgorICAgICAgICAoV2ViS2l0OjpzdGF0aWNTZXNzaW9uTWFwKToKKyAgICAgICAgKFdl
YktpdDo6U2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6
U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6c3RhdGlj
U3RvcmFnZVNlc3Npb25NYXApOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6c2Vz
c2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24pOgor
ICAgICAgICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6ZGVzdHJveVNlc3Npb24pOgorICAgICAg
ICAoV2ViS2l0OjpTZXNzaW9uVHJhY2tlcjo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6OnN0b3JhZ2VTZXNzaW9uVG9JRCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbk1hcCk6IERlbGV0ZWQuCisg
ICAgICAgICogU2hhcmVkL1Nlc3Npb25UcmFja2VyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNl
dENvb2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxlZFJ1
bkxvb3BQYWlycyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5
Rm9yQWxsQ29udGV4dHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KToKKwogMjAxNi0wMy0xMiAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGV0ZSBkZWFkIFNW
RyBGb250IGNvZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtEYXRhVGFzay5oCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEy
MSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlv
bihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
KTsKICAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkgeyByZXR1cm4g
bV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsgfQorCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IGN1cnJlbnRSZXF1ZXN0KCk7CiAgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCk7CiAg
ICAgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29tcGxldGlv
bkhhbmRsZXIpOwpAQCAtMTQxLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmYWlsdXJl
VGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlKTsKICAg
ICAKLSAgICBOZXR3b3JrU2Vzc2lvbiYgbV9zZXNzaW9uOworICAgIFJlZlB0cjxOZXR3b3JrU2Vz
c2lvbj4gbV9zZXNzaW9uOwogICAgIE5ldHdvcmtEYXRhVGFza0NsaWVudCogbV9jbGllbnQ7CiAg
ICAgUGVuZGluZ0Rvd25sb2FkKiBtX3BlbmRpbmdEb3dubG9hZCB7IG51bGxwdHIgfTsKICAgICBE
b3dubG9hZElEIG1fcGVuZGluZ0Rvd25sb2FkSUQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDcgQEAgTmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKE5ldHdvcmtMb2FkQ2xp
ZQogICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVmZXJzTG9hZGluZykKICAgICAgICAgICAgIG1f
dGFzay0+cmVzdW1lKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBXVEZMb2dBbHdheXMoIkF0dGVtcHRlZCB0byBjcmVhdGUgYSBOZXR3b3JrTG9h
ZCB3aXRoIGEgc2Vzc2lvbiAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwg
cGFyYW1ldGVycy5zZXNzaW9uSUQuc2Vzc2lvbklEKCkpOwogI2Vsc2UKICAgICBtX2hhbmRsZSA9
IFJlc291cmNlSGFuZGxlOjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgcGFyYW1l
dGVycy5yZXF1ZXN0LCB0aGlzLCBwYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcsIHBhcmFtZXRlcnMu
Y29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudCk7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAkocmV2aXNp
b24gMTk4MDc0KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTkgKzQ3LDI1IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXI7CiAKLWNsYXNzIE5ldHdvcmtTZXNzaW9u
IHsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Nlc3Np
b24+IHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgogICAgIGVu
dW0gY2xhc3MgVHlwZSB7CiAgICAgICAgIE5vcm1hbCwKICAgICAgICAgRXBoZW1lcmFsCiAgICAg
fTsKLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVBy
b3RvY29sTWFuYWdlciosIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiopOworCisgICAg
c3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlKFR5cGUsIFdlYkNvcmU6OlNlc3Npb25J
RCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4pOworICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiYgZGVmYXVsdFNl
c3Npb24oKTsKICAgICB+TmV0d29ya1Nlc3Npb24oKTsKIAotICAgIFdlYkNvcmU6OlNlc3Npb25J
RCBzZXNzaW9uSUQoKSB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQorICAgIHZvaWQgaW52YWxpZGF0
ZUFuZENhbmNlbCgpOworCisgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CisgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKKwogICAgIHN0YXRpYyB2b2lkIHNldEN1c3Rv
bVByb3RvY29sTWFuYWdlcihDdXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKLSAgICBzdGF0aWMgTmV0
d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7CisKICNpZiAhVVNFKENSRURFTlRJQUxfU1RP
UkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikKICAgICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsK
ICNlbmRpZgpAQCAtNzEsMTQgKzc3LDIwIEBAIHB1YmxpYzoKICAgICBEb3dubG9hZElEIHRha2VE
b3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIpOwogICAgIAogcHJpdmF0
ZToKKyAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVBy
b3RvY29sTWFuYWdlciosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+KTsKKwogICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX25ldHdvcmtTdG9y
YWdlU2Vzc2lvbjsKKwogICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmll
ciwgTmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKICAgICBI
YXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+
IG1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHM7CiAgICAgSGFzaE1hcDxOZXR3b3JrRGF0
YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOworCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0
aENyZWRlbnRpYWxTdG9yYWdlOworICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOwogICAgIFJldGFpblB0
cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKLSAgICBS
ZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25EZWxlZ2F0ZTsKKyAg
ICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EubW0JKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRob3JpemF0aW9uSGVhZGUKIAogTmV0
d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5l
dHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0
b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29u
dGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qp
CiAgICAgOiBtX2ZhaWx1cmVUaW1lcigqdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6ZmFpbHVyZVRp
bWVyRmlyZWQpCi0gICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKKyAgICAsIG1fc2Vzc2lvbigmc2Vz
c2lvbikKICAgICAsIG1fY2xpZW50KCZjbGllbnQpCiAgICAgLCBtX3N0b3JlZENyZWRlbnRpYWxz
KHN0b3JlZENyZWRlbnRpYWxzKQogICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0aENy
ZWRlbnRpYWxzLmh0dHBNZXRob2QoKSkKQEAgLTc5LDEzICs3OSwxMCBAQCBOZXR3b3JrRGF0YVRh
c2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrCiAgICAgICAgIHVybCA9IHJlcXVlc3QudXJsKCk7
CiAgICAgCiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikK
LSAgICAgICAgaWYgKGF1dG8gc3RvcmFnZVNlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6c3RvcmFn
ZVNlc3Npb24obV9zZXNzaW9uLnNlc3Npb25JRCgpKSkgewotICAgICAgICAgICAgaWYgKG1fdXNl
ci5pc0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9p
bml0aWFsQ3JlZGVudGlhbCA9IHN0b3JhZ2VTZXNzaW9uLT5jcmVkZW50aWFsU3RvcmFnZSgpLmdl
dCh1cmwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JhZ2VTZXNzaW9u
LT5jcmVkZW50aWFsU3RvcmFnZSgpLnNldChXZWJDb3JlOjpDcmVkZW50aWFsKG1fdXNlciwgbV9w
YXNzd29yZCwgV2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHVybCk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGlm
IChtX3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzc3dvcmQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
bV9pbml0aWFsQ3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCku
Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQodXJsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLnNl
dChXZWJDb3JlOjpDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzd29yZCwgV2ViQ29yZTo6Q3JlZGVu
dGlhbFBlcnNpc3RlbmNlTm9uZSksIHVybCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEwNCwxMyAr
MTAxLDEzIEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmsKICAgICB9
CiAKICAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6QWxsb3dTdG9yZWRDcmVk
ZW50aWFscykgewotICAgICAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVk
ZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgICAgIEFT
U0VSVCghbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuY29udGFpbnMoW21f
dGFzayB0YXNrSWRlbnRpZmllcl0pKTsKLSAgICAgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXBX
aXRoQ3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICAg
ICAgbV90YXNrID0gW21fc2Vzc2lvbi0+bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGRh
dGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKKyAgICAgICAgQVNTRVJUKCFtX3Nlc3Npb24t
Pm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRp
Zmllcl0pKTsKKyAgICAgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxz
LmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbV90YXNrID0gW21fc2Vzc2lvbi5tX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Ug
ZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwotICAgICAgICBBU1NFUlQoIW1fc2Vzc2lv
bi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmNvbnRhaW5zKFttX3Rhc2sgdGFza0lk
ZW50aWZpZXJdKSk7Ci0gICAgICAgIG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRl
bnRpYWxzLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CisgICAgICAgIG1fdGFz
ayA9IFttX3Nlc3Npb24tPm1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZSBkYXRhVGFz
a1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07CisgICAgICAgIEFTU0VSVCghbV9zZXNzaW9uLT5tX2Rh
dGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmNvbnRhaW5zKFttX3Rhc2sgdGFza0lkZW50aWZp
ZXJdKSk7CisgICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFs
cy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOwogICAgIH0KIAogI2lmIEhBVkUo
Q0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQpAQCAtMTI1LDExICsxMjIsMTEgQEAgTmV0
d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIGlmIChtX3Rhc2spIHsKICAgICAgICAgaWYgKG1fc3RvcmVkQ3JlZGVudGlhbHMg
PT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3Nlc3Npb24ubV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFs
cy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOwotICAgICAgICAgICAgbV9z
ZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lk
ZW50aWZpZXJdKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBX
aXRoQ3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAg
ICAgICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5yZW1vdmUo
W21fdGFzayB0YXNrSWRlbnRpZmllcl0pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmdldChbbV90
YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX3Nlc3Npb24ubV9k
YXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmll
cl0pOworICAgICAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhvdXRD
cmVkZW50aWFscy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAgICAg
ICAgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLnJlbW92ZShb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMjEsMTYg
KzIxOCwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1IVFRQUmVkCiAgICAg
ICAgIC8vIE9ubHkgY29uc2lkZXIgYXBwbHlpbmcgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMg
aWYgdGhpcyBpcyBhY3R1YWxseSBhIHJlZGlyZWN0IGFuZCB0aGUgcmVkaXJlY3QKICAgICAgICAg
Ly8gVVJMIGRpZG4ndCBpbmNsdWRlIGNyZWRlbnRpYWxzIG9mIGl0cyBvd24uCiAgICAgICAgIGlm
IChtX3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzc3dvcmQuaXNFbXB0eSgpICYmICFyZWRpcmVjdFJl
c3BvbnNlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vzc2lvbiA9
IFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb24uc2Vzc2lvbklEKCkpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBjcmVkZW50aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRl
bnRpYWxTdG9yYWdlKCkuZ2V0KHJlcXVlc3QudXJsKCkpOwotICAgICAgICAgICAgICAgIGlmICgh
Y3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbml0aWFsQ3Jl
ZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBtX3Nl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHJl
cXVlc3QudXJsKCkpOworICAgICAgICAgICAgaWYgKCFjcmVkZW50aWFsLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgIG1faW5pdGlhbENyZWRlbnRpYWwgPSBjcmVkZW50aWFsOwogCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IERpZ2VzdCBhdXRoZW50aWNhdGlvbiwg
YW5kIFByb3h5LUF1dGhvcml6YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGFwcGx5QmFzaWNB
dXRob3JpemF0aW9uSGVhZGVyKHJlcXVlc3QsIG1faW5pdGlhbENyZWRlbnRpYWwpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IERpZ2VzdCBh
dXRoZW50aWNhdGlvbiwgYW5kIFByb3h5LUF1dGhvcml6YXRpb24uCisgICAgICAgICAgICAgICAg
YXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIocmVxdWVzdCwgbV9pbml0aWFsQ3JlZGVudGlh
bCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTI5OCwyOCAr
MjkyLDI1IEBAIGJvb2wgTmV0d29ya0RhdGFUYXNrOjp0cnlQYXNzd29yZEJhc2VkQXUKIAogI2lm
IFVTRShDUkVERU5USUFMX1NUT1JBR0VfV0lUSF9ORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1f
c3RvcmVkQ3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6QWxsb3dTdG9yZWRDcmVkZW50aWFscykgewot
ICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpzdG9yYWdl
U2Vzc2lvbihtX3Nlc3Npb24uc2Vzc2lvbklEKCkpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faW5p
dGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpIHx8IGNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3Vu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHN0b3JlZCBjcmVkZW50aWFsIHdhc24ndCBh
Y2NlcHRlZCwgc3RvcCB1c2luZyBpdC4KLSAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHJh
Y2UgY29uZGl0aW9uIGhlcmUsIHNpbmNlIGEgZGlmZmVyZW50IGNyZWRlbnRpYWwgbWlnaHQgaGF2
ZSBhbHJlYWR5IGJlZW4gc3RvcmVkIGJ5IGFub3RoZXIgUmVzb3VyY2VIYW5kbGUsCi0gICAgICAg
ICAgICAgICAgLy8gYnV0IHRoZSBvYnNlcnZhYmxlIGVmZmVjdCBzaG91bGQgYmUgdmVyeSBtaW5v
ciwgaWYgYW55LgotICAgICAgICAgICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5jcmVkZW50aWFsU3Rv
cmFnZSgpLnJlbW92ZShjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOwotICAgICAgICAgICAg
fQorICAgICAgICBpZiAoIW1faW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpIHx8IGNoYWxsZW5n
ZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgc3RvcmVkIGNy
ZWRlbnRpYWwgd2Fzbid0IGFjY2VwdGVkLCBzdG9wIHVzaW5nIGl0LgorICAgICAgICAgICAgLy8g
VGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBhIGRpZmZlcmVudCBjcmVkZW50
aWFsIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHN0b3JlZCBieSBhbm90aGVyIFJlc291cmNlSGFu
ZGxlLAorICAgICAgICAgICAgLy8gYnV0IHRoZSBvYnNlcnZhYmxlIGVmZmVjdCBzaG91bGQgYmUg
dmVyeSBtaW5vciwgaWYgYW55LgorICAgICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFn
ZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLnJlbW92ZShjaGFsbGVuZ2UucHJvdGVjdGlv
blNwYWNlKCkpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghY2hhbGxlbmdlLnByZXZp
b3VzRmFpbHVyZUNvdW50KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBz
dG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQoY2hhbGxlbmdlLnByb3RlY3Rp
b25TcGFjZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpICYm
IGNyZWRlbnRpYWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IFdlYkNvcmU6OkNyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZU5vbmUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbGxlbmdlLmZhaWx1
cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBhZGRpbmcgaXQg
YXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2VTZXNzaW9uLT5jcmVkZW50aWFsU3RvcmFnZSgpLnNldChjcmVkZW50aWFsLCBjaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlh
bCwgY3JlZGVudGlhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIWNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpKSB7CisgICAgICAgICAgICBh
dXRvIGNyZWRlbnRpYWwgPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRl
bnRpYWxTdG9yYWdlKCkuZ2V0KGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7CisgICAgICAg
ICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpICYmIGNyZWRlbnRpYWwgIT0gbV9pbml0aWFs
Q3JlZGVudGlhbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChjcmVkZW50aWFsLnBlcnNpc3Rl
bmNlKCkgPT0gV2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7CisgICAgICAgICAg
ICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID09
IDQwMSkgeworICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNr
LCBwb3NzaWJseSBhZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KKyAg
ICAgICAgICAgICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVk
ZW50aWFsU3RvcmFnZSgpLnNldChjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
KCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKSk7CiAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwsIGNyZWRlbnRpYWwpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbQkocmV2aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNzcsNyArNzcsOCBAQCBzdGF0aWMgTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURp
c3Bvc2l0CiB9CiAKIEBpbnRlcmZhY2UgV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIDogTlNPYmpl
Y3QgPE5TVVJMU2Vzc2lvbkRhdGFEZWxlZ2F0ZT4gewotICAgIFdlYktpdDo6TmV0d29ya1Nlc3Np
b24qIF9zZXNzaW9uOworICAgIFJlZlB0cjxXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uPiBfc2Vzc2lv
bjsKKyAgICBib29sIF9zZXNzaW9uRGVzdHJveWVkOwogfQogCiAtIChpZClpbml0V2l0aE5ldHdv
cmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uJilzZXNzaW9uOwpAQCAtOTcsNiArOTgs
MTEgQEAgLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZQogICAgIHJldHVy
biBzZWxmOwogfQogCistICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24g
ZGlkQmVjb21lSW52YWxpZFdpdGhFcnJvcjoobnVsbGFibGUgTlNFcnJvciAqKWVycm9yCit7Cisg
ICAgX3Nlc3Npb24gPSBudWxscHRyOworfQorCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vz
c2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkU2VuZEJvZHlE
YXRhOihpbnQ2NF90KWJ5dGVzU2VudCB0b3RhbEJ5dGVzU2VudDooaW50NjRfdCl0b3RhbEJ5dGVz
U2VudCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQ6KGludDY0X3QpdG90YWxCeXRlc0V4cGVjdGVk
VG9TZW5kCiB7CiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFscyA9IHNlc3Npb24uY29uZmlndXJh
dGlvbi5VUkxDcmVkZW50aWFsU3RvcmFnZSA/IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzOjpB
bGxvd1N0b3JlZENyZWRlbnRpYWxzIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkRvTm90
QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKQEAgLTI2NSwxNyArMjcxLDIzIEBAIHZvaWQgTmV0d29y
a1Nlc3Npb246OnNldEN1c3RvbVByb3RvY29sTWEKICAgICBnbG9iYWxDdXN0b21Qcm90b2NvbE1h
bmFnZXIoKSA9IGN1c3RvbVByb3RvY29sTWFuYWdlcjsKIH0KIAorUmVmPE5ldHdvcmtTZXNzaW9u
PiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIsIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ldHdvcmtTdG9y
YWdlU2Vzc2lvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvbih0
eXBlLCBzZXNzaW9uSUQsIGN1c3RvbVByb3RvY29sTWFuYWdlciwgV1RGTW92ZShuZXR3b3JrU3Rv
cmFnZVNlc3Npb24pKSk7Cit9CisKIE5ldHdvcmtTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6ZGVm
YXVsdFNlc3Npb24oKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE5ldHdvcmtTZXNzaW9uPiBzZXNzaW9uKE5ldHdvcmtTZXNzaW9uOjpU
eXBlOjpOb3JtYWwsIFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBnbG9i
YWxDdXN0b21Qcm90b2NvbE1hbmFnZXIoKS5nZXQoKSwgJldlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwotICAgIHJldHVybiBzZXNzaW9uOwor
ICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZOZXR3b3JrU2Vzc2lvbjo6Y3Jl
YXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpLCBnbG9iYWxDdXN0b21Qcm90b2NvbE1hbmFnZXIoKS5nZXQoKSwgbnVs
bHB0cikubGVha1JlZigpOworICAgIHJldHVybiAqc2Vzc2lvbjsKIH0KIAotTmV0d29ya1Nlc3Np
b246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIsIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogbmV0d29ya1N0b3JhZ2VTZXNzaW9uKQorTmV0d29ya1Nl
c3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIsIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbikKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKKyAgICAsIG1fbmV0d29ya1N0
b3JhZ2VTZXNzaW9uKFdURk1vdmUobmV0d29ya1N0b3JhZ2VTZXNzaW9uKSkKIHsKLSAgICBtX3Nl
c3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXNdKTsKKyAgICByZWxheEFkb3B0aW9uUmVxdWly
ZW1lbnQoKTsKIAogICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24g
PSBjb25maWd1cmF0aW9uRm9yVHlwZSh0eXBlKTsKIApAQCAtMjg4LDIxICszMDAsNDIgQEAgTmV0
d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZQogICAgIHNldENvbGxlY3RzVGlt
aW5nRGF0YSgpOwogI2VuZGlmCiAKLSAgICBpZiAobmV0d29ya1N0b3JhZ2VTZXNzaW9uKSB7Ci0g
ICAgICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIHN0b3JhZ2UgPSBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKKyAgICBpZiAobV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb24pIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6RXBoZW1lcmFsKTsKKyAg
ICAgICAgaWYgKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IG1fbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLT5jb29raWVTdG9yYWdlKCkuZ2V0KCkpCisgICAgICAgICAgICBjb25maWd1cmF0
aW9uLkhUVFBDb29raWVTdG9yYWdlID0gW1tbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxvY10gX2lu
aXRXaXRoQ0ZIVFRQQ29va2llU3RvcmFnZTpzdG9yYWdlXSBhdXRvcmVsZWFzZV07CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6Tm9ybWFsKTsKKyAgICAgICAgaWYg
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llU3RvcmFnZSgpLmdldCgpKQog
ICAgICAgICAgICAgY29uZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IFtbW05TSFRUUENv
b2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZV0g
YXV0b3JlbGVhc2VdOwogICAgIH0KLSAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Ug
PSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRl
bGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVR
dWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKworICAgIG1fc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZURlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpc10pOworICAgIG1fc2Vzc2lv
bldpdGhDcmVkZW50aWFsU3RvcmFnZSA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJh
dGlvblF1ZXVlIG1haW5RdWV1ZV1dOworCiAgICAgY29uZmlndXJhdGlvbi5VUkxDcmVkZW50aWFs
U3RvcmFnZSA9IG5pbDsKLSAgICBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgPSBb
TlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVn
YXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1
ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXNdKTsKKyAgICBtX3Nlc3Npb25X
aXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25X
aXRob3V0Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNP
cGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKIH0KIAogTmV0d29ya1Nlc3Npb246On5OZXR3b3Jr
U2Vzc2lvbigpCiB7Cit9CisKK3ZvaWQgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5j
ZWwoKQorewogICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgaW52YWxpZGF0ZUFu
ZENhbmNlbF07CiAgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlk
YXRlQW5kQ2FuY2VsXTsKIH0KIAorCitXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5l
dHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKQoreworICAgIGlmICghbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOworICAgIHJldHVybiAqbV9uZXR3b3Jr
U3RvcmFnZVNlc3Npb247Cit9CisKICNpZiAhVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05F
VFdPUktfU0VTU0lPTikKIHZvaWQgTmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMoKQog
ewpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTk4MDc0KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTUgKzEwMCwxNCBAQCB2b2lkIFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVQcml2CiAgICAgZWxzZQogICAgICAgICBiYXNlID0gU2Vzc2lvblRy
YWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCk7CiAKLSAgICBhdXRvIG5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lv
bihiYXNlICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7Ci0j
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxOZXR3b3JrU2Vzc2lvbj4oTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJh
bCwgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxDdXN0
b21Qcm90b2NvbE1hbmFnZXI+KCksIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5nZXQoKSk7Ci0jZW5k
aWYKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0
d29ya1N0b3JhZ2VTZXNzaW9uKQorICAgIGF1dG8gbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25J
RCwgYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOwor
CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgLCBXVEZNb3ZlKG5ldHdvcmtTZXNz
aW9uKQorICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5l
dHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpLCBXVEZNb3Zl
KG5ldHdvcmtTdG9yYWdlU2Vzc2lvbikpOworICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9u
KHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3JrU2Vzc2lvbikpOworI2Vsc2UKKyAgICBTZXNzaW9u
VHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1N0b3JhZ2VTZXNz
aW9uKSk7CiAjZW5kaWYKLSAgICApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2Vzc2lvblRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9TZXNzaW9uVHJhY2tlci5jcHAJKHJldmlzaW9uIDE5ODA3NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TZXNzaW9uVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwNSArMzUs
MTA3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
c3RhdGljIEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uPj4mIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkKK3N0YXRpYyBTdHJpbmcmIGlkZW50
aWZpZXJCYXNlKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPj4+IG1hcDsKLSAgICByZXR1cm4gbWFwOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGJhc2U7CisgICAgcmV0dXJuIGJhc2U7CiB9CiAKLXN0YXRp
YyBIYXNoTWFwPGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiosIFNlc3Npb25JRD4mIHN0b3Jh
Z2VTZXNzaW9uVG9JRCgpCitjb25zdCBTdHJpbmcmIFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlm
aWVyQmFzZSgpCiB7Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiosIFNl
c3Npb25JRD4+IG1hcDsKLSAgICByZXR1cm4gbWFwOworICAgIHJldHVybiBpZGVudGlmaWVyQmFz
ZSgpOwogfQogCi1zdGF0aWMgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSgpCit2b2lkIFNlc3Npb25U
cmFja2VyOjpzZXRJZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGJhc2U7Ci0gICAgcmV0dXJuIGJhc2U7CisgICAgaWRlbnRpZmllckJhc2UoKSA9
IGlkZW50aWZpZXI7CiB9CiAKLWNvbnN0IEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vzc2lv
bk1hcCgpCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKK3N0YXRpYyBIYXNoTWFwPFNlc3Npb25J
RCwgUmVmUHRyPE5ldHdvcmtTZXNzaW9uPj4mIHN0YXRpY1Nlc3Npb25NYXAoKQogewotICAgIHJl
dHVybiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpOwotfQorICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKLWNvbnN0IFN0cmluZyYgU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJC
YXNlKCkKLXsKLSAgICByZXR1cm4gaWRlbnRpZmllckJhc2UoKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxTZXNzaW9uSUQsIFJlZlB0cjxOZXR3b3JrU2Vzc2lvbj4+PiBtYXA7
CisgICAgcmV0dXJuIG1hcDsKIH0KIAotTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBTZXNzaW9uVHJh
Y2tlcjo6c3RvcmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKK05ldHdvcmtTZXNzaW9u
KiBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
ICAgICBpZiAoc2Vzc2lvbklEID09IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAg
ICAgICByZXR1cm4gJk5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7Ci0gICAgcmV0dXJuIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuZ2V0KHNlc3Npb25JRCk7
CisgICAgICAgIHJldHVybiAmTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCk7CisgICAg
cmV0dXJuIHN0YXRpY1Nlc3Npb25NYXAoKS5nZXQoc2Vzc2lvbklEKTsKIH0KIAotI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCi1zdGF0aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrU2Vzc2lvbj4+JiBzdGF0aWNTZXNzaW9uTWFwKCkKK05ldHdvcmtTdG9yYWdlU2Vz
c2lvbiogU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQp
Cit7ICAgIAorICAgIGF1dG8gc2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lv
bihzZXNzaW9uSUQpOworICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuICZzZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKK30KKyNlbHNl
CitzdGF0aWMgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+PiYgc3RhdGljU3RvcmFnZVNlc3Npb25NYXAoKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8
U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+Pj4gbWFwOworCisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCi1OZXR3
b3JrU2Vzc2lvbiogU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKFNlc3Npb25JRCBzZXNz
aW9uSUQpCitOZXR3b3JrU3RvcmFnZVNlc3Npb24qIFNlc3Npb25UcmFja2VyOjpzdG9yYWdlU2Vz
c2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNzaW9uSUQgPT0gU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVybiAmTmV0d29ya1Nlc3Npb246
OmRlZmF1bHRTZXNzaW9uKCk7Ci0gICAgcmV0dXJuIHN0YXRpY1Nlc3Npb25NYXAoKS5nZXQoc2Vz
c2lvbklEKTsKKyAgICAgICAgcmV0dXJuICZOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpOworICAgIHJldHVybiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLmdl
dChzZXNzaW9uSUQpOwogfQogI2VuZGlmCiAKIFNlc3Npb25JRCBTZXNzaW9uVHJhY2tlcjo6c2Vz
c2lvbklEKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbikKIHsKLSAgICBpZiAo
JnNlc3Npb24gPT0gJk5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkpCi0gICAgICAgIHJldHVybiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICBy
ZXR1cm4gc3RvcmFnZVNlc3Npb25Ub0lEKCkuZ2V0KCZzZXNzaW9uKTsKKyAgICByZXR1cm4gc2Vz
c2lvbi5zZXNzaW9uSUQoKTsKIH0KIAotdm9pZCBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihT
ZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PiBzdG9yYWdlU2Vzc2lvbgogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLCBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+IHNlc3Npb24KLSNlbmRpZgotKQordm9pZCBTZXNzaW9u
VHJhY2tlcjo6c2V0U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBSZWY8TmV0d29ya1Nlc3Np
b24+JiYgc2Vzc2lvbikKK3sKKyAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKTsKKyAgICBzdGF0aWNTZXNzaW9uTWFwKCkuc2V0KHNlc3Npb25JRCwg
V1RGTW92ZShzZXNzaW9uKSk7Cit9CisjZWxzZQordm9pZCBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vz
c2lvbihTZXNzaW9uSUQgc2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uPiBzdG9yYWdlU2Vzc2lvbikKIHsKICAgICBBU1NFUlQoc3RvcmFnZVNlc3Npb24pOwog
ICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwot
ICAgIHN0b3JhZ2VTZXNzaW9uVG9JRCgpLnNldChzdG9yYWdlU2Vzc2lvbi5nZXQoKSwgc2Vzc2lv
bklEKTsKICAgICBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLnNldChzZXNzaW9uSUQsIFdURk1v
dmUoc3RvcmFnZVNlc3Npb24pKTsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VS
VChzZXNzaW9uKTsKLSAgICBzdGF0aWNTZXNzaW9uTWFwKCkuc2V0KHNlc3Npb25JRCwgV1RGTW92
ZShzZXNzaW9uKSk7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkIFNlc3Npb25UcmFja2VyOjpk
ZXN0cm95U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgaWYgKHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkuY29udGFpbnMo
c2Vzc2lvbklEKSkgewogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0Uoc3RhdGljU2Vzc2lvbk1hcCgpLmNvbnRhaW5zKHNlc3Npb25JRCksICJOZXR3
b3JrU2Vzc2lvbnMgYW5kIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbnMgc2hvdWxkIGFsd2F5cyBiZSBj
cmVhdGVkLCBkZWxldGVkLCBhbmQgbWFuYWdlZCBhcyBwYWlycyIpOwotICAgICAgICBzdGF0aWNT
ZXNzaW9uTWFwKCkucmVtb3ZlKHNlc3Npb25JRCk7CisgICAgYXV0byBzZXNzaW9uID0gc3RhdGlj
U2Vzc2lvbk1hcCgpLnRha2Uoc2Vzc2lvbklEKTsKKyAgICBzZXNzaW9uLT5pbnZhbGlkYXRlQW5k
Q2FuY2VsKCk7CisjZWxzZQorICAgIHN0YXRpY1N0b3JhZ2VTZXNzaW9uTWFwKCkucmVtb3ZlKHNl
c3Npb25JRCk7CiAjZW5kaWYKLSAgICAgICAgc3RvcmFnZVNlc3Npb25Ub0lEKCkucmVtb3ZlKHN0
b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpOwotICAgICAgICBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1h
cCgpLnJlbW92ZShzZXNzaW9uSUQpOwotICAgIH0KIH0KIAotdm9pZCBTZXNzaW9uVHJhY2tlcjo6
c2V0SWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQordm9pZCBTZXNzaW9u
VHJhY2tlcjo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihzdGQ6OmZ1bmN0aW9uPHZvaWQo
Y29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+IGZ1bmN0b3IpCiB7Ci0gICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlkZW50aWZpZXJCYXNlKCkgPSBpZGVu
dGlmaWVyOworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgZm9yIChhdXRvJiBzZXNzaW9u
IDogc3RhdGljU2Vzc2lvbk1hcCgpLnZhbHVlcygpKQorICAgICAgICBmdW5jdG9yKHNlc3Npb24t
Pm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKTsKKyNlbHNlCisgICAgZm9yIChhdXRvJiBuZXR3b3Jr
U3RvcmFnZVNlc3Npb24gOiBzdGF0aWNTdG9yYWdlU2Vzc2lvbk1hcCgpLnZhbHVlcygpKQorICAg
ICAgICBmdW5jdG9yKCpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOworI2VuZGlmCiB9CiAKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblRy
YWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblRyYWNr
ZXIuaAkocmV2aXNpb24gMTk4MDc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25U
cmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDI0ICs0MiwyOCBAQCBjbGFzcyBOZXR3b3Jr
U2Vzc2lvbjsKIGNsYXNzIFNlc3Npb25UcmFja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTZXNzaW9uVHJhY2tlcik7CiBwdWJsaWM6Ci0gICAgLy8gRklYTUU6IHN0b3JhZ2VTZXNzaW9u
TWFwKCkncyByZXR1cm5lZCBtYXAgZG9lcyBub3QgaW5jbHVkZSBkZWZhdWx0IHNlc3Npb24uCi0g
ICAgc3RhdGljIGNvbnN0IEhhc2hNYXA8V2ViQ29yZTo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4mIHN0b3JhZ2VTZXNzaW9uTWFwKCk7
Ci0KICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBnZXRJZGVudGlmaWVyQmFzZSgpOworICAgIHN0
YXRpYyB2b2lkIHNldElkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOworCiAgICAgc3RhdGlj
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oV2ViQ29yZTo6
U2Vzc2lvbklEKTsKKyAgICAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHVzZXMgb2YgdGhpcyBhcyBp
dCBpcyBqdXN0IGEgbWVtYmVyIGFjY2VzcyBpbnRvIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbi4KICAg
ICBzdGF0aWMgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRChjb25zdCBXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTZXNzaW9uKFdlYkNvcmU6
OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4KKwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgICwgc3RkOjp1bmlxdWVfcHRy
PE5ldHdvcmtTZXNzaW9uPgorICAgIHN0YXRpYyB2b2lkIHNldFNlc3Npb24oV2ViQ29yZTo6U2Vz
c2lvbklELCBSZWY8TmV0d29ya1Nlc3Npb24+JiYpOworI2Vsc2UKKyAgICBzdGF0aWMgdm9pZCBz
ZXRTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4pOwogI2VuZGlmCi0gICAgKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95U2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQpOwotICAgIHN0YXRpYyB2b2lkIHNldElk
ZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOwogICAgIAogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCiAgICAgLy8gRklYTUU6IEEgTmV0d29ya1Nlc3Npb24gYW5kIGEgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uIHNob3VsZCBiZSB0aGUgc2FtZSBvYmplY3Qgb25jZSBORVRXT1JLX1NFU1NJT04gaXMg
dXNlZCBieSBkZWZhdWx0LgogICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogbmV0d29ya1Nlc3Np
b24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKICNlbmRpZgorCisgICAgLy8gRklYTUU6IFRoaXMgZG9l
cyBub3QgaW5jbHVkZSB0aGUgZGVmYXVsdCBuZXR3b3JrIHN0b3JhZ2Ugc2VzaW9uIGluIGl0J3Mg
aXRlcmF0aW9uLgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24o
c3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYp
Pik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTk4MDc0KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsMTUgKzU4LDEzIEBAIHZvaWQgV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHIKICAgICBlbHNlCiAgICAgICAgIGJhc2Ug
PSBTZXNzaW9uVHJhY2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKTsKIAotICAgIGF1dG8gbmV0d29y
a1N0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJv
d3NpbmdTZXNzaW9uKGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lv
bklEKCkpKTsKKyAgICBhdXRvIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIGJhc2UgKyAn
LicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKICNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQotICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVl
PE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9u
SUQsIG51bGxwdHIsIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5nZXQoKSk7Ci0jZW5kaWYKLSAgICBT
ZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgICwgV1RGTW92ZShu
ZXR3b3JrU2Vzc2lvbikKKyAgICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gTmV0d29ya1Nlc3Npb246
OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQsIG51bGxw
dHIsIFdURk1vdmUobmV0d29ya1N0b3JhZ2VTZXNzaW9uKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6
OnNldFNlc3Npb24oc2Vzc2lvbklELCBXVEZNb3ZlKG5ldHdvcmtTZXNzaW9uKSk7CisjZWxzZQor
ICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3Jr
U3RvcmFnZVNlc3Npb24pKTsKICNlbmRpZgotICAgICk7CiB9CiAKIHZvaWQgV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxsQ29udGV4dHMoSFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCkBAIC03NiwxMCArNzQsOSBAQCB2b2lkIFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpCiAgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpCiAgICAgICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5
KTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lvbiA6IFNlc3Npb25UcmFja2VyOjpzdG9y
YWdlU2Vzc2lvbk1hcCgpLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uKQotICAgICAg
ICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZUFjY2VwdFBvbGljeShzZXNzaW9uLT5j
b29raWVTdG9yYWdlKCkuZ2V0KCksIHBvbGljeSk7Ci0gICAgfQorICAgIFNlc3Npb25UcmFja2Vy
Ojpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFsmXSAoY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24pIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llU3Rv
cmFnZVNldENvb2tpZUFjY2VwdFBvbGljeShuZXR3b3JrU3RvcmFnZVNlc3Npb24uY29va2llU3Rv
cmFnZSgpLmdldCgpLCBwb2xpY3kpOworICAgIH0pOwogfQogICAgIAogYm9vbCBXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QK
QEAgLTkwLDcgKzg3LDcgQEAgYm9vbCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZp
bAogU2NoZWR1bGVQYWlySGFzaFNldCogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2NoZWR1
bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QKIHsKICAgICBpZiAoIWZyYW1lKCkgfHwgIWZyYW1lKCkt
PnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiBmcmFtZSgpLT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3Bw
CShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQ
cgogICAgIGlmIChTZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklE
LCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU3Ry
aW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSkpOworICAgIFNlc3Npb25UcmFja2Vy
OjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNl
c3Npb25JRCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENv
b2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5KQpAQCAtNzIsMTAgKzcyLDkgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
ZXRDb29raQogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cFNlc3Npb24gPSBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigp
OwogICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShzb3VwU2Vzc2lvbi5jb29r
aWVKYXIoKSwgc291cFBvbGljeSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb24gOiBT
ZXNzaW9uVHJhY2tlcjo6c3RvcmFnZVNlc3Npb25NYXAoKS52YWx1ZXMoKSkgewotICAgICAgICBp
ZiAoc2Vzc2lvbikKLSAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGlj
eShzZXNzaW9uLT5zb3VwTmV0d29ya1Nlc3Npb24oKS5jb29raWVKYXIoKSwgc291cFBvbGljeSk7
Ci0gICAgfQorICAgIFNlc3Npb25UcmFja2VyOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KFsmXSAoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgIHNv
dXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShzZXNzaW9uLnNvdXBOZXR3b3JrU2Vzc2lv
bigpLmNvb2tpZUphcigpLCBzb3VwUG9saWN5KTsKKyAgICB9KTsKIH0KIAogV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dChXZWJGcmFtZSogZnJhbWUp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMy0x
MiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFdlYktpdCBjYW4gZWFz
aWx5IGNyYXNoIGJlbG93IE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIoKSB3
aXRoIE5TVVJMU2Vzc2lvbiBlbmFibGVkCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNTEyOTk0
Nj4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTQw
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAg
ICAgICBQYXNzIGEgU2Vzc2lvbklEIHRvIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbigpLgorCiAyMDE2LTAzLTEyICBNeWxlcyBDLiBNYXhmaWVsZCAg
PG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgRGVsZXRlIGRlYWQgU1ZHIEZvbnQgY29k
ZQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAxOTgwNzQpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Vzc2lvbklELmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KIApAQCAtNTYsNyArNTcsNyBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6
OmVuc3VyZVByCiAgICAgaWYgKHByaXZhdGVTZXNzaW9uKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHByaXZhdGVTZXNzaW9uKCkgPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVByaXZh
dGVCcm93c2luZ1Nlc3Npb24oW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVy
XSk7CisgICAgcHJpdmF0ZVNlc3Npb24oKSA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRl
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQ6OmxlZ2FjeVByaXZhdGVTZXNzaW9uSUQo
KSwgW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSk7CiB9CiAKIHZvaWQg
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Npb24o
KQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MDc1KQorKysgU291cmNlL1dlYktp
dC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDMt
MTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBXZWJLaXQgY2FuIGVh
c2lseSBjcmFzaCBiZWxvdyBOZXR3b3JrU2Vzc2lvbjo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKCkg
d2l0aCBOU1VSTFNlc3Npb24gZW5hYmxlZAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjUxMjk5
NDY+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0
MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbik6Cisg
ICAgICAgIFBhc3MgYSBTZXNzaW9uSUQgdG8gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQ
cml2YXRlQnJvd3NpbmdTZXNzaW9uKCkuCisKIDIwMTYtMDMtMTAgIEplciBOb2JsZSAgPGplci5u
b2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcjE5
Nzk1MzsgY29ycmVjdCB0aGUgc2V0dGluZ3MgYWRkZWQgaW4gcjE5Nzk1My4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxOTgwNzQpCisrKyBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6
OmVuc3VyZVByCiAgICAgfSBlbHNlCiAgICAgICAgIGJhc2UgPSBpZGVudGlmaWVyQmFzZSgpOwog
Ci0gICAgcHJpdmF0ZVNlc3Npb24oKSA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlUHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbihiYXNlKTsKKyAgICBwcml2YXRlU2Vzc2lvbigpID0gTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRDo6
bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpLCBiYXNlKTsKICNlbmRpZgogfQogCg==
</data>
<flag name="review"
          id="298398"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>