<?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>150147</bug_id>
          
          <creation_ts>2015-10-14 16:14:31 -0700</creation_ts>
          <short_desc>Modern IDB: Add basic transaction committing</short_desc>
          <delta_ts>2025-10-11 12:12:27 -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>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
    
    <blocked>150149</blocked>
    
    <blocked>300559</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1133296</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-14 16:14:31 -0700</bug_when>
    <thetext>Modern IDB: Add basic transaction committing

The only transaction that can be created right now is the version change transaction, and the only thing it can change right now is the version itself. So let&apos;s add committing of the version change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133308</commentid>
    <comment_count>1</comment_count>
      <attachid>263122</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-14 16:40:21 -0700</bug_when>
    <thetext>Created attachment 263122
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133319</commentid>
    <comment_count>2</comment_count>
      <attachid>263122</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-14 17:16:50 -0700</bug_when>
    <thetext>Comment on attachment 263122
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.h:64
&gt; -    virtual IDBDatabase* db() const = 0;
&gt; +    virtual IDBDatabase* db() = 0;

Why no const?

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:62
&gt; -Ref&lt;UniqueIDBDatabaseTransaction&gt; UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)
&gt; +UniqueIDBDatabaseTransaction* UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)

Why are you making this a raw pointer?

&gt; Source/WebCore/Modules/indexeddb/shared/IDBError.cpp:63
&gt; +    result.m_code = m_code;
&gt; +    result.m_message = m_message.isolatedCopy();

Would return { m_code, m_message.isolatedCopy() }; work here?  Setting members individually is annoying, and we forget one sometimes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133321</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-14 17:19:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 263122 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263122&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransaction.h:64
&gt; &gt; -    virtual IDBDatabase* db() const = 0;
&gt; &gt; +    virtual IDBDatabase* db() = 0;
&gt; 
&gt; Why no const?

Modern version - that keeps a Ref&lt;&gt; instead of a RefPtr&lt;&gt; - can&apos;t cope with the const.

No real advantage, in practice.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:62
&gt; &gt; -Ref&lt;UniqueIDBDatabaseTransaction&gt; UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)
&gt; &gt; +UniqueIDBDatabaseTransaction* UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)
&gt; 
&gt; Why are you making this a raw pointer?

Because the connection itself now owns the object, and the object handles cleaning itself up.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/shared/IDBError.cpp:63
&gt; &gt; +    result.m_code = m_code;
&gt; &gt; +    result.m_message = m_message.isolatedCopy();
&gt; 
&gt; Would return { m_code, m_message.isolatedCopy() }; work here? 

Maybe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133349</commentid>
    <comment_count>4</comment_count>
      <attachid>263122</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-14 18:31:38 -0700</bug_when>
    <thetext>Comment on attachment 263122
Patch v1

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

r=me with comments:

&gt; Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:75
&gt; +    Ref&lt;IDBDatabase&gt; database = IDBDatabase::create(*scriptExecutionContext(), connection(), resultData);

Early return if (!scriptExecutionContext())
There should at least be an ASSERT(scriptExecutionContext())

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:62
&gt;&gt;&gt; +UniqueIDBDatabaseTransaction* UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)
&gt;&gt; 
&gt;&gt; Why are you making this a raw pointer?
&gt; 
&gt; Because the connection itself now owns the object, and the object handles cleaning itself up.

I really think this is a step in the wrong direction.  UniqueIDBDatabase::startVersionChangeTransaction sets m_versionChangeTransaction as the result of this and then dereferences it without checking it (a separate issue that should be addressed), but I don&apos;t think this stays inside of UniqueIDBDatabaseConnection, and I think it should stay a Ref to be safe so we don&apos;t accidentally use anything after freeing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133490</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-15 09:34:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt;&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:62
&gt; &gt;&gt;&gt; +UniqueIDBDatabaseTransaction* UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)
&gt; &gt;&gt; 
&gt; &gt;&gt; Why are you making this a raw pointer?
&gt; &gt; 
&gt; &gt; Because the connection itself now owns the object, and the object handles cleaning itself up.
&gt; 
&gt; I really think this is a step in the wrong direction. 

I disagree.

&gt; UniqueIDBDatabase::startVersionChangeTransaction sets
&gt; m_versionChangeTransaction as the result of this and then dereferences it
&gt; without checking it (a separate issue that should be addressed)

When we use &quot;create&quot; in naming, we&apos;re guaranteeing the return of a valid object. So using it right away in UniqueIDBDatabase is a non-issue.

The corollary you&apos;re alluding to is the &quot;maybeCreate&quot; pattern.

To make it more clear what &quot;create&quot; means in established style in WebCore, I&apos;ll change it to return a c++ reference.

&gt; but I don&apos;t think this stays inside of UniqueIDBDatabaseConnection, and I think it
&gt; should stay a Ref to be safe so we don&apos;t accidentally use anything after
&gt; freeing.

There&apos;s a lot of objects with references to things here, and I think it would harder to correctly make sure everybody releases their Ref and objects don&apos;t leak indefinitely than it would be to clean up appropriately.

I&apos;ll add addition cleanup in the UniqueIDBDatabaseTransaction d&apos;tor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133495</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-15 09:48:26 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/191114</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263122</attachid>
            <date>2015-10-14 16:40:21 -0700</date>
            <delta_ts>2015-10-14 18:31:38 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55575</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiYmUzZTQ4Li40ZTFhN2YyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMTAt
MTQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IEFkZCBiYXNpYyB0cmFuc2FjdGlvbiBjb21taXR0aW5nLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMTQ3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
b3BlbmRhdGFiYXNlLXZlcnNpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL29wZW5kYXRhYmFzZS12ZXJzaW9ucy5odG1sOiBBZGRlZC4K
KwogMjAxNS0xMC0xNCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgcGFnZXMgd2l0aCB1bnNjYWxhYmxlIHZpZXdwb3J0cyBzaG91bGRuJ3QgaGF2
ZSBhIHNpbmdsZSB0YXAgZGVsYXkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2UtdmVyc2lvbnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL29wZW5kYXRhYmFzZS12ZXJzaW9ucy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjYzE2MwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vcGVu
ZGF0YWJhc2UtdmVyc2lvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorQUxFUlQ6IFtv
YmplY3QgSURCT3BlbkRCUmVxdWVzdF0gKGZpcnN0UGhhc2UpCitBTEVSVDogdXBncmFkZW5lZWRl
ZCAoZmlyc3RQaGFzZSk6IG9sZCB2ZXJzaW9uIC0gMCBuZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBb
b2JqZWN0IElEQlRyYW5zYWN0aW9uXQorQUxFUlQ6IFZlcnNpb24gY2hhbmdlIGNvbXBsZXRlIChm
aXJzdFBoYXNlKS4gRGF0YWJhc2UgdmVyc2lvbiBpcyBub3cgLSAxCitBTEVSVDogW29iamVjdCBJ
REJPcGVuREJSZXF1ZXN0XSAoc2Vjb25kUGhhc2UpCitBTEVSVDogU3VjY2Vzc2Z1bGx5IG9wZW5l
ZCBkYXRhYmFzZSBhdCB2ZXJzaW9uIDEgKHNlY29uZFBoYXNlKQorQUxFUlQ6IERvbmUKK1RoaXMg
dGVzdCBjcmVhdGVzIGEgbmV3IGRhdGFiYXNlIHdpdGggdGhlIGRlZmF1bHQgdmVyc2lvbiwgY29t
bWl0cyB0aGF0IHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24sIGFuZCB0aGVuIHJlb3BlbnMgaXQg
YXQgZGlmZmVyZW50IHZlcnNpb25zIHRvIG1ha2Ugc3VyZSB0aGUgSURCT3BlbkRCUmVxdWVzdHMg
YmVoYXZlIGFwcHJvcHJpYXRlbHkuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2UtdmVyc2lvbnMuaHRtbCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2UtdmVyc2lvbnMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmU5MzRjCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL29wZW5kYXRhYmFzZS12ZXJz
aW9ucy5odG1sCkBAIC0wLDAgKzEsMTIyIEBACitUaGlzIHRlc3QgY3JlYXRlcyBhIG5ldyBkYXRh
YmFzZSB3aXRoIHRoZSBkZWZhdWx0IHZlcnNpb24sIGNvbW1pdHMgdGhhdCB2ZXJzaW9uY2hhbmdl
IHRyYW5zYWN0aW9uLCBhbmQgdGhlbiByZW9wZW5zIGl0IGF0IGRpZmZlcmVudCB2ZXJzaW9ucyB0
byBtYWtlIHN1cmUgdGhlIElEQk9wZW5EQlJlcXVlc3RzIGJlaGF2ZSBhcHByb3ByaWF0ZWx5Ljxi
cj4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworfQorCitmdW5j
dGlvbiBkb25lKCkKK3sKKyAgICBhbGVydCgiRG9uZSIpOworICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3ZhciByZXF1ZXN0
ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJWZXJzaW9uVGVzdERhdGFiYXNlIik7CithbGVydChy
ZXF1ZXN0ICsgIiAoZmlyc3RQaGFzZSkiKTsKKworcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlv
bigpCit7CisgICAgYWxlcnQoIlVuZXhwZWN0ZWQgc3VjY2VzcyAoZmlyc3RQaGFzZSkiKTsKKwlk
b25lKCk7Cit9CityZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlKQoreworICAgIGFsZXJ0KCJV
bmV4cGVjdGVkIGVycm9yIChmaXJzdFBoYXNlKSIpOworCWRvbmUoKTsKK30KKworcmVxdWVzdC5v
bnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihlKQoreworICAgIGFsZXJ0KCJ1cGdyYWRlbmVlZGVk
IChmaXJzdFBoYXNlKTogb2xkIHZlcnNpb24gLSAiICsgZS5vbGRWZXJzaW9uICsgIiBuZXcgdmVy
c2lvbiAtICIgKyBlLm5ld1ZlcnNpb24pOworICAgIGFsZXJ0KHJlcXVlc3QudHJhbnNhY3Rpb24p
OworICAgIHJlcXVlc3QudHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIGFsZXJ0KCJWZXJzaW9uIGNoYW5nZSBjb21wbGV0ZSAoZmlyc3RQaGFzZSkuIERh
dGFiYXNlIHZlcnNpb24gaXMgbm93IC0gIiArIHJlcXVlc3QudHJhbnNhY3Rpb24uZGIudmVyc2lv
bik7CisgICAgICAgIHNlY29uZFBoYXNlKCk7CisgICAgfQorICAgIHJlcXVlc3QudHJhbnNhY3Rp
b24ub25hYm9ydCA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGFsZXJ0KCJWZXJzaW9uIGNo
YW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0ISAoZmlyc3RQaGFzZSkiKTsKKyAgICAg
ICAgZG9uZSgpOworICAgIH0KKyAgICByZXF1ZXN0LnRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBhbGVydCgiVmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24g
dW5leHBlY3RlZCBlcnJvciEgKGZpcnN0UGhhc2UpIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHNlY29uZFBoYXNlKCkKK3sKKyAgICB2YXIgcmVxdWVzdCA9IHdpbmRv
dy5pbmRleGVkREIub3BlbigiVmVyc2lvblRlc3REYXRhYmFzZSIsIDEpOworICAgIGFsZXJ0KHJl
cXVlc3QgKyAiIChzZWNvbmRQaGFzZSkiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIGFsZXJ0KCJTdWNjZXNzZnVsbHkgb3BlbmVkIGRhdGFiYXNl
IGF0IHZlcnNpb24gMSAoc2Vjb25kUGhhc2UpIik7CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBm
b2xsb3dpbmcgY2FsbCB3aWxsIGJlIHVzZWQgb25jZSBidWdzIDE1MDE0Ny0xNTAxNTAgYXJlIHJl
c29sdmVkLgorICAgICAgICAvLyB0aGlyZFBoYXNlKCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9
CisgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICAgIGFsZXJ0
KCJVbmV4cGVjdGVkIGVycm9yIChzZWNvbmRQaGFzZSkiICsgZSk7CisgICAgICAgIGRvbmUoKTsK
KyAgICB9CisgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihlKQorICAgIHsK
KyAgICAJYWxlcnQoIlVuZXhwZWN0ZWQgdXBncmFkZSBuZWVkZWQgKHNlY29uZFBoYXNlKSIgKyBl
KTsKKyAgICAJZG9uZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gdGhpcmRQaGFzZSgpCit7Cisg
ICAgdmFyIHJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9wZW4oIlZlcnNpb25UZXN0RGF0YWJh
c2UiLCAyKTsKKyAgICBhbGVydChyZXF1ZXN0ICsgIiAodGhpcmRQaGFzZSkiKTsKKyAgICByZXF1
ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgIGFsZXJ0KCJVbmV4cGVjdGVk
IHN1Y2Nlc3MgKHRoaXJkUGhhc2UpIik7CisgICAgIGRvbmUoKTsKKyAgICB9CisgICAgcmVxdWVz
dC5vbmVycm9yID0gZnVuY3Rpb24oZSkKKyAgICB7CisgICAgIGFsZXJ0KCJVbmV4cGVjdGVkIGVy
cm9yICh0aGlyZFBoYXNlKSIpOworICAgICBkb25lKCk7CisgICAgfQorICAgIHJlcXVlc3Qub251
cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICAgIGFsZXJ0KCJ1cGdyYWRl
bmVlZGVkICh0aGlyZFBoYXNlKTogb2xkIHZlcnNpb24gLSAiICsgZS5vbGRWZXJzaW9uICsgIiBu
ZXcgdmVyc2lvbiAtICIgKyBlLm5ld1ZlcnNpb24pOworICAgICAgICBhbGVydChyZXF1ZXN0LnRy
YW5zYWN0aW9uKTsKKyAgICAgICAgcmVxdWVzdC50cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVu
Y3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBhbGVydCgiVmVyc2lvbiBjaGFuZ2UgY29t
cGxldGUgKHRoaXJkUGhhc2UpLiBEYXRhYmFzZSB2ZXJzaW9uIGlzIG5vdyAtICIgKyByZXF1ZXN0
LnRyYW5zYWN0aW9uLmRiLnZlcnNpb24pOworICAgICAgICAgICAgZm91cnRoUGhhc2UoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGFsZXJ0KCJWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlv
biB1bmV4cGVjdGVkIGFib3J0ISAodGhpcmRQaGFzZSkiKTsKKyAgICAgICAgICAgIGRvbmUoKTsK
KyAgICAgICAgfQorICAgICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlv
bigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFsZXJ0KCJWZXJzaW9uIGNoYW5nZSB0cmFuc2Fj
dGlvbiB1bmV4cGVjdGVkIGVycm9yISAodGhpcmRQaGFzZSkiKTsKKyAgICAgICAgICAgIGRvbmUo
KTsKKyAgICAgICAgfQorICAgIH0gCit9CisKK2Z1bmN0aW9uIGZvdXJ0aFBoYXNlKCkKK3sKKyAg
ICB0cnkgeworICAgICAgICAvLyBXZSd2ZSB1cGdyYWRlZCB0byB2ZXJzaW9uIDIsIHNvIHZlcnNp
b24gMSBzaG91bGQgbm90IGJlIG9wZW5hYmxlLgorICAgICAgICB3aW5kb3cuaW5kZXhlZERCLm9w
ZW4oIlZlcnNpb25UZXN0RGF0YWJhc2UiLCAxKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGFsZXJ0KCJDYXVnaHQgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9CisgICAgZG9uZSgpOworfQor
Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlNjkwMTJmLi4xMzJjNmU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTE1IEBACisyMDE1LTEwLTE0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxl
LmNvbT4KKworICAgICAgICBNb2Rlcm4gSURCOiBBZGQgYmFzaWMgdHJhbnNhY3Rpb24gY29tbWl0
dGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2UtdmVyc2lvbnMuaHRtbAor
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oOgorCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y29tbWl0VHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRp
ZENvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ29ubmVjdGlvblRvU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmg6CisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkNsaWVudDo6SURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCRGF0YWJhc2U6OmRpZENvbW1p
dFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCRGF0YWJhc2U6
OmRpZEFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJE
YXRhYmFzZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmg6CisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCRmFjdG9yeUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ2xpZW50OjpJREJGYWN0b3J5OjpvcGVuKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmg6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmRiKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246Omhhc1BlbmRpbmdBY3Rpdml0eSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjppc0FjdGl2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9w
ZXJhdGlvblRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rp
b246Om9wZXJhdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJ
REJUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
VHJhbnNhY3Rpb246OmRpZENvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklE
QlRyYW5zYWN0aW9uOjpmaXJlT25Db21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGll
bnQ6OklEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJD
bGllbnQ6OklEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6ZGF0YWJhc2UpOgorICAgICAgICAKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VHJhbnNhY3Rpb246OmRiKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaDoKKyAgICAgICAgCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlk
Q29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJDb25uZWN0aW9uVG9DbGllbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaDoKKyAgICAgICAgCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6cmVnaXN0ZXJUcmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6dW5yZWdpc3RlclRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21taXRUcmFuc2FjdGlvbik6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAg
ICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNr
SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpzdG9yZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
c2VydmVyKToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y3JlYXRlVmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VD
b25uZWN0aW9uOjpkaWRDb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oOgorICAgICAgICAKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjp+VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VJbmZvOjpzZXRWZXJzaW9uKToKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkVycm9yOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQlJlcXVlc3REYXRhLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
c291cmNlSWRlbnRpZmllcjo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmg6CisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oOgorCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzb3Vy
Y2VJZGVudGlmaWVyPjo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcj46OmNvcHkp
OgorICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmg6CisKIDIwMTUtMTAtMTQg
IEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBQb3N0cG9uZSBt
dXRhdGlvbiBldmVudHMgYmVmb3JlIGludm9rZSBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZChEb2N1
bWVudCosIGNvbnN0IFN0cmluZyYsIGJvb2wpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggNWE4NzUxOC4uZWQ5Nzc0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5o
CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEltcGxlbWVudCB0aGUgSURCVHJh
bnNhY3Rpb24gSURMCiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBJREJEYXRhYmFzZSogZGIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJ
REJEYXRhYmFzZSogZGIoKSA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8RE9NRXJyb3I+IGVycm9y
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JbmRleGVkREIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCmluZGV4IGE2YTlmMTAuLjcxNmVmYTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCkBAIC0zOSw2ICszOSwx
MyBAQCBlbnVtIGNsYXNzIFRyYW5zYWN0aW9uTW9kZSB7CiB9OwogY29uc3QgdW5zaWduZWQgVHJh
bnNhY3Rpb25Nb2RlTWF4aW11bSA9IDI7CiAKK2VudW0gY2xhc3MgVHJhbnNhY3Rpb25TdGF0ZSB7
CisgICAgVW5zdGFydGVkLAorICAgIFJ1bm5pbmcsCisgICAgQ29tbWl0dGluZywKKyAgICBGaW5p
c2hlZCwKK307CisKIGVudW0gY2xhc3MgQ3Vyc29yRGlyZWN0aW9uIHsKICAgICBOZXh0ID0gMCwK
ICAgICBOZXh0Tm9EdXBsaWNhdGUgPSAxLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNw
cAppbmRleCAwNjM4Zjg3Li4wMThmYzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVy
LmNwcApAQCAtOTMsNiArOTMsMjYgQEAgdm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZE9w
ZW5EYXRhYmFzZShjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogICAgIHJlcXVlc3Qt
PnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7CiB9CiAKK3ZvaWQgSURCQ29ubmVjdGlvblRv
U2VydmVyOjpjb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y29tbWl0VHJhbnNh
Y3Rpb24iKTsKKyAgICBBU1NFUlQoIW1fY29tbWl0dGluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CisgICAgbV9jb21taXR0aW5nVHJhbnNh
Y3Rpb25zLnNldCh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCAmdHJhbnNhY3Rpb24p
OworCisgICAgYXV0byBpZGVudGlmaWVyID0gdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIo
KTsKKyAgICBtX2RlbGVnYXRlLT5jb21taXRUcmFuc2FjdGlvbihpZGVudGlmaWVyKTsKK30KKwor
dm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZENvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYgZXJyb3IpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6
ZGlkQ29tbWl0VHJhbnNhY3Rpb24iKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX2NvbW1p
dHRpbmdUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIEFTU0VS
VCh0cmFuc2FjdGlvbik7CisKKyAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tbWl0KGVycm9yKTsKK30K
Kwogdm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQodWlu
dDY0X3QgLypkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKi8gLCB1aW50NjRfdCAvKnJlcXVl
c3RlZFZlcnNpb24qLykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2Vy
dmVyOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVy
LmgKaW5kZXggODFkOGZlMy4uNDQ2OGY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIu
aApAQCAtMzcsMTIgKzM3LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURC
RXJyb3I7CiBjbGFzcyBJREJSZXN1bHREYXRhOwogCiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIAog
Y2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJPcGVuREJSZXF1ZXN0OworY2xhc3MgSURCVHJh
bnNhY3Rpb247CiAKIGNsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPElEQkNvbm5lY3Rpb25Ub1NlcnZlcj4gewogcHVibGljOgpAQCAtNTYsNiArNTgsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBvcGVuRGF0YWJhc2UoSURCT3BlbkRCUmVxdWVzdCYpOwogICAgIHZv
aWQgZGlkT3BlbkRhdGFiYXNlKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKIAorICAgIHZvaWQgY29t
bWl0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKKyAgICB2b2lkIGRpZENvbW1pdFRyYW5z
YWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYpOworCiAgICAgdm9pZCBmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVp
bnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZl
cnNpb24pOwogCiAgICAgdm9pZCByZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbihJREJEYXRhYmFz
ZSYpOwpAQCAtNjgsNiArNzMsNyBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxJREJSZXNvdXJj
ZUlkZW50aWZpZXIsIFJlZlB0cjxJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3Q+PiBtX29wZW5E
QlJlcXVlc3RNYXA7CiAgICAgSGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2U+PiBtX2RhdGFiYXNl
Q29ubmVjdGlvbnM7CisgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbj4+IG1fY29tbWl0dGluZ1RyYW5zYWN0aW9uczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIElEQkNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdh
dGUuaAppbmRleCA4ZTFlZmM0Li42ZDIyODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlv
blRvU2VydmVyRGVsZWdhdGUuaApAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBJREJSZXF1ZXN0RGF0YTsKK2NsYXNzIElEQlJlc291cmNlSWRlbnRpZmllcjsK
IAogbmFtZXNwYWNlIElEQkNsaWVudCB7CiAKQEAgLTQxLDYgKzQyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRGF0YWJhc2UoSURCUmVxdWVzdERhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IG9wZW5EYXRhYmFzZShJREJSZXF1ZXN0RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0VHJhbnNhY3Rpb24oSURCUmVzb3VyY2VJZGVudGlmaWVyJikgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIHJlZigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRh
YmFzZUltcGwuY3BwCmluZGV4IGFiNGVlZGYuLjYwMzRiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwu
Y3BwCkBAIC0xMjgsMTEgKzEyOCw1MiBAQCBSZWY8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNl
OjpzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdAogCiAgICAg
UmVmPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUo
KnRoaXMsIGluZm8pOwogICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gJnRyYW5zYWN0
aW9uLmdldCgpOworCiAgICAgbV9hY3RpdmVUcmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uLT5p
bmZvKCkuaWRlbnRpZmllcigpLCAmdHJhbnNhY3Rpb24uZ2V0KCkpOwogCiAgICAgcmV0dXJuIFdU
Rjo6bW92ZSh0cmFuc2FjdGlvbik7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5z
YWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBMT0coSW5kZXhlZERC
LCAiSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uIik7CisKKyAgICBhdXRvIHJlZlRyYW5z
YWN0aW9uID0gbV9hY3RpdmVUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpKTsKKyAgICBBU1NFUlQocmVmVHJhbnNhY3Rpb24pOworICAgIG1fY29tbWl0dGlu
Z1RyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgV1RGOjpt
b3ZlKHJlZlRyYW5zYWN0aW9uKSk7CisKKyAgICBtX2Nvbm5lY3Rpb24tPmNvbW1pdFRyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6ZGlkQ29tbWl0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIExPRyhJbmRleGVkREIs
ICJJREJEYXRhYmFzZTo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24iKTsKKworICAgIGlmIChtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24pCisgICAgICAgIG1faW5mby5zZXRW
ZXJzaW9uKHRyYW5zYWN0aW9uLmluZm8oKS5uZXdWZXJzaW9uKCkpOworCisgICAgZGlkQ29tbWl0
T3JBYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6
ZGlkQWJvcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAg
TE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRBYm9ydFRyYW5zYWN0aW9uIik7CisgICAg
ZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZENvbW1pdE9y
QWJvcnRUcmFuc2FjdGlvbiIpOworCisgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
ID09ICZ0cmFuc2FjdGlvbikKKyAgICAgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSBu
dWxscHRyOworICAgIAorICAgIEFTU0VSVChtX2FjdGl2ZVRyYW5zYWN0aW9ucy5jb250YWlucyh0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSB8fCBtX2NvbW1pdHRpbmdUcmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpOworCisgICAgbV9h
Y3RpdmVUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkp
OworICAgIG1fY29tbWl0dGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmgKaW5kZXggNWYyMmI2OC4uZmUzMWMyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRh
dGFiYXNlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJEYXRhYmFzZUltcGwuaApAQCAtNzIsMTUgKzcyLDIxIEBAIHB1YmxpYzoKICAgICBjb25z
dCBJREJEYXRhYmFzZUluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KIAogICAg
IFJlZjxJREJUcmFuc2FjdGlvbj4gc3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY29uc3Qg
SURCVHJhbnNhY3Rpb25JbmZvJik7CisgICAgdm9pZCBjb21taXRUcmFuc2FjdGlvbihJREJUcmFu
c2FjdGlvbiYpOworICAgIHZvaWQgZGlkQ29tbWl0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24m
KTsKKyAgICB2b2lkIGRpZEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKIAogcHJp
dmF0ZToKICAgICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCQ29ubmVj
dGlvblRvU2VydmVyJiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwogCisgICAgdm9pZCBkaWRDb21t
aXRPckFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKKyAgICAKICAgICBSZWY8SURC
Q29ubmVjdGlvblRvU2VydmVyPiBtX2Nvbm5lY3Rpb247CiAgICAgSURCRGF0YWJhc2VJbmZvIG1f
aW5mbzsKIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb247CiAgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJREJUcmFu
c2FjdGlvbj4+IG1fYWN0aXZlVHJhbnNhY3Rpb25zOworICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJ
ZGVudGlmaWVyLCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+PiBtX2NvbW1pdHRpbmdUcmFuc2FjdGlv
bnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRmFjdG9yeUltcGwuY3BwCmlu
ZGV4IDJkMTBmZTAuLmZmZTY3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkZhY3RvcnlJbXBsLmNwcApAQCAtOTEsNyArOTEs
NyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICByZXR1cm4gb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIDAsIGVjKS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBl
YykucmVsZWFzZSgpOwogfQogCiBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURCRmFjdG9yeTo6
b3BlbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9w
ZW5EQlJlcXVlc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAKaW5kZXggYzJkYjZmNC4uZTI1MDJlYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9wZW5E
QlJlcXVlc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwCkBAIC02MiwxNiArNjIsMjEgQEAgSURCT3Bl
bkRCUmVxdWVzdDo6fklEQk9wZW5EQlJlcXVlc3QoKQogewogfQogCi0KIHZvaWQgSURCT3BlbkRC
UmVxdWVzdDo6b25FcnJvcihjb25zdCBJREJSZXN1bHREYXRhJiBkYXRhKQogewogICAgIG1fZG9t
RXJyb3IgPSBET01FcnJvcjo6Y3JlYXRlKGRhdGEuZXJyb3IoKS5uYW1lKCkpOwogICAgIGVucXVl
dWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVl
KSk7CiB9CiAKLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKGNvbnN0IElEQlJlc3Vs
dERhdGEmKQordm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblN1Y2Nlc3MoY29uc3QgSURCUmVzdWx0
RGF0YSYgcmVzdWx0RGF0YSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2VzcygpIik7CisKKyAgICBSZWY8SURC
RGF0YWJhc2U+IGRhdGFiYXNlID0gSURCRGF0YWJhc2U6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBjb25uZWN0aW9uKCksIHJlc3VsdERhdGEpOworICAgIG1fcmVzdWx0ID0gSURC
QW55OjpjcmVhdGUoV1RGOjptb3ZlKGRhdGFiYXNlKSk7CisgICAgbV9yZWFkeVN0YXRlID0gSURC
UmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7CisKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogdm9pZCBJ
REJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVz
dWx0RGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmgKaW5kZXggYTZhZGJjYi4uYTA2ZGFl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
Qk9wZW5EQlJlcXVlc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmgKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIG9uVXBncmFkZU5lZWRlZChjb25zdCBJREJSZXN1bHREYXRhJik7CiAKICAg
ICBJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9kYXRhYmFzZUlkZW50aWZpZXI7Ci0gICAgdWludDY0
X3QgbV92ZXJzaW9uOworICAgIHVpbnQ2NF90IG1fdmVyc2lvbiB7IDAgfTsKICAgICBSZWZQdHI8
RE9NRXJyb3I+IG1fZG9tRXJyb3I7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmlu
ZGV4IDZmYjhiZGYuLmQ5MzdhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC0y
OSw4ICsyOSwxMiBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAi
RE9NRXJyb3IuaCIKKyNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VJbXBsLmgiCisjaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCQ2xp
ZW50IHsKQEAgLTQyLDkgKzQ2LDE0IEBAIFJlZjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rp
b246OmNyZWF0ZShJREJEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IElEQlRyYW5zCiAKIElEQlRy
YW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihJREJEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IElE
QlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICA6IFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uKGRh
dGFiYXNlLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fZGF0YWJhc2UoZGF0YWJh
c2UpCiAgICAgLCBtX2luZm8oaW5mbykKKyAgICAsIG1fb3BlcmF0aW9uVGltZXIoKnRoaXMsICZJ
REJUcmFuc2FjdGlvbjo6b3BlcmF0aW9uVGltZXJGaXJlZCkKKwogewogICAgIHN1c3BlbmRJZk5l
ZWRlZCgpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsKKyAgICBtX3N0YXRlID0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpSdW5uaW5nOwogfQogCiBJREJUcmFuc2FjdGlvbjo6
fklEQlRyYW5zYWN0aW9uKCkKQEAgLTY1LDEwICs3NCw5IEBAIGNvbnN0IFN0cmluZyYgSURCVHJh
bnNhY3Rpb246Om1vZGUoKSBjb25zdAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLVdlYkNvcmU6OklEQkRhdGFiYXNlKiBJREJUcmFuc2FjdGlvbjo6ZGIoKSBjb25zdAor
V2ViQ29yZTo6SURCRGF0YWJhc2UqIElEQlRyYW5zYWN0aW9uOjpkYigpCiB7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICZtX2RhdGFi
YXNlLmdldCgpOwogfQogCiBSZWZQdHI8RE9NRXJyb3I+IElEQlRyYW5zYWN0aW9uOjplcnJvcigp
IGNvbnN0CkBAIC05OCw2ICsxMDYsMTA3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb246OmNhblN1c3Bl
bmRGb3JQYWdlQ2FjaGUoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBJREJU
cmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
dGF0ZSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkOworfQorCitib29s
IElEQlRyYW5zYWN0aW9uOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpSdW5uaW5nOworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCkKK3sKKyAgICBpZiAoIW1fb3BlcmF0
aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9vcGVyYXRpb25UaW1lci5zdGFydE9uZVNo
b3QoMCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVyRmlyZWQoKQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6b3BlcmF0aW9uVGltZXJGaXJl
ZCIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpV
bnN0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5zYWN0
aW9ucyBjYW4gZG8gdGhpbmdzLCBsaWtlIGNvbmZpZ3VyZSB0aGUgZGF0YWJhc2Ugb3IgaW5zZXJ0
IGRhdGEgaW50byBpdCwKKyAgICAvLyB0aG9zZSBvcGVyYXRpb25zIHdpbGwgYmUgaGFuZGxlZCBo
ZXJlLCBhbmQgd2lsbCBwcmV2ZW50IHRoZSB0cmFuc2FjdGlvbiBmcm9tIGNvbW1pdHRpbmcKKyAg
ICAvLyBhcyBsb25nIGFzIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMgZXhpc3QuCisKKyAgICBpZiAo
aXNBY3RpdmUoKSkKKyAgICAgICAgY29tbWl0KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246
OmNvbW1pdCgpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXQi
KTsKKworICAgIGlmIChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6UnVu
bmluZykgeworICAgICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpG
aW5pc2hlZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RhdGUgPSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uU3RhdGU6OkNvbW1pdHRpbmc7CisKKyAgICBtX2RhdGFiYXNlLT5jb21t
aXRUcmFuc2FjdGlvbigqdGhpcyk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENvbW1p
dChjb25zdCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpkaWRDb21taXQiKTsKKworICAgIEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6Q29tbWl0dGluZyk7CisKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
IHsKKyAgICAgICAgbV9kYXRhYmFzZS0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24oKnRoaXMpOworICAg
ICAgICBmaXJlT25Db21wbGV0ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZGF0YWJhc2Ut
PmRpZEFib3J0VHJhbnNhY3Rpb24oKnRoaXMpOworICAgICAgICBtX2lkYkVycm9yID0gZXJyb3I7
CisgICAgICAgIGZpcmVPbkFib3J0KCk7CisgICAgfQorCisgICAgbV9zdGF0ZSA9IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246
OmZpcmVPbkNvbXBsZXRlKCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmZpcmVPbkNvbXBsZXRlIik7CisgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmNvbXBsZXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uOjpmaXJlT25BYm9ydCgpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpmaXJlT25BYm9ydCIpOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxzZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiBldmVudCkKK3sKKyAgICBBU1NFUlQobV9zdGF0
ZSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkKTsKKworICAgIGlmICgh
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOworfQorCitib29sIElEQlRyYW5zYWN0aW9u
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQoreworICAgIExPRyhJbmRl
eGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOworCisgICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0
aGlzKTsKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVF
dmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKKworICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOworICAgIHRhcmdldHMuYXBwZW5k
KHRoaXMpOworICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOworCisgICAgcmV0dXJuIElEQkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0
aW9uSW1wbC5oCmluZGV4IGQ1NWEwZDYuLjBkMzYwNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBs
LmgKQEAgLTI4LDggKzI4LDEyIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAor
I2luY2x1ZGUgIklEQkVycm9yLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKICNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkluZm8uaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5saW5lcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKQEAgLTQ0LDcgKzQ4LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gSURCVHJhbnNhY3Rpb24gSURMCiAgICAgdmlydHVhbCBjb25zdCBTdHJp
bmcmIG1vZGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OklE
QkRhdGFiYXNlKiBkYigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SURCRGF0YWJhc2UqIGRiKCkgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBSZWZQdHI8
RE9NRXJyb3I+IGVycm9yKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChFeGNlcHRp
b25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CkBAIC01MywxNiArNTcsMzkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3Zl
cnJpZGUgZmluYWwgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0
KCkgb3ZlcnJpZGUgZmluYWwgeyBkZXJlZigpOyB9CisgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRp
c3BhdGNoRXZlbnQ7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4pIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBhY3RpdmVE
T01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBib29sIGNh
blN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAKICAgICBj
b25zdCBJREJUcmFuc2FjdGlvbkluZm8gaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQor
ICAgIElEQkRhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0K
KyAgICBjb25zdCBJREJEYXRhYmFzZSYgZGF0YWJhc2UoKSBjb25zdCB7IHJldHVybiBtX2RhdGFi
YXNlLmdldCgpOyB9CisKKyAgICB2b2lkIGRpZENvbW1pdChjb25zdCBJREJFcnJvciYpOwogCiBw
cml2YXRlOgogICAgIElEQlRyYW5zYWN0aW9uKElEQkRhdGFiYXNlJiwgY29uc3QgSURCVHJhbnNh
Y3Rpb25JbmZvJik7CiAKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBjb21t
aXQoKTsKKworICAgIHZvaWQgc2NoZWR1bGVPcGVyYXRpb25UaW1lcigpOworICAgIHZvaWQgb3Bl
cmF0aW9uVGltZXJGaXJlZCgpOworCisgICAgdm9pZCBmaXJlT25Db21wbGV0ZSgpOworICAgIHZv
aWQgZmlyZU9uQWJvcnQoKTsKKyAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+KTsKKwor
ICAgIFJlZjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICBJREJUcmFuc2FjdGlvbkluZm8g
bV9pbmZvOworCisgICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlIG1fc3RhdGUgeyBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OlVuc3RhcnRlZCB9OworICAgIElEQkVycm9yIG1faWRi
RXJyb3I7CisKKyAgICBUaW1lciBtX29wZXJhdGlvblRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSURCQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcAppbmRleCAwODlhZDNkLi5mMGIz
NGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5VHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgY29uc3Qg
U3RyaW5nJiBMZWdhY3lUcmFuc2FjdGlvbjo6bW9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1vZGVU
b1N0cmluZyhtX21vZGUpOwogfQogCi1JREJEYXRhYmFzZSogTGVnYWN5VHJhbnNhY3Rpb246OmRi
KCkgY29uc3QKK0lEQkRhdGFiYXNlKiBMZWdhY3lUcmFuc2FjdGlvbjo6ZGIoKQogewogICAgIHJl
dHVybiBtX2RhdGFiYXNlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaAppbmRleCBmNTlh
MjcyLi44M2I3OTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaApAQCAtNjYsNyArNjYsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX21vZGUg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U7IH0KIAogICAgIHZp
cnR1YWwgY29uc3QgU3RyaW5nJiBtb2RlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmly
dHVhbCBJREJEYXRhYmFzZSogZGIoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFs
IElEQkRhdGFiYXNlKiBkYigpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgUmVmUHRyPERP
TUVycm9yPiBlcnJvcigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fZXJyb3I7IH0K
ICAgICB2aXJ0dWFsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2
b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGll
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5l
Y3Rpb25Ub0NsaWVudC5jcHAKaW5kZXggZWVkODI0NS4uNGNmMzZmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNv
bm5lY3Rpb25Ub0NsaWVudC5jcHAKQEAgLTU4LDYgKzU4LDExIEBAIHZvaWQgSURCQ29ubmVjdGlv
blRvQ2xpZW50OjpkaWRPcGVuRGF0YWJhc2UoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0KQog
ICAgIG1fZGVsZWdhdGUtPmRpZE9wZW5EYXRhYmFzZShyZXN1bHQpOwogfQogCit2b2lkIElEQkNv
bm5lY3Rpb25Ub0NsaWVudDo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikK
K3sKKyAgICBtX2RlbGVnYXRlLT5kaWRDb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGVycm9yKTsKK30KKwogdm9pZCBJREJDb25uZWN0aW9uVG9DbGllbnQ6OmZpcmVWZXJz
aW9uQ2hhbmdlRXZlbnQoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1
aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQogewogICAgIG1fZGVsZWdhdGUtPmZpcmVWZXJzaW9u
Q2hhbmdlRXZlbnQoY29ubmVjdGlvbiwgcmVxdWVzdGVkVmVyc2lvbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVj
dGlvblRvQ2xpZW50LmgKaW5kZXggODc2Y2I2My4uMWYwZTUzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0
aW9uVG9DbGllbnQuaApAQCAtMzQsNiArMzQsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIElEQkVycm9yOworY2xhc3MgSURCUmVzb3VyY2VJZGVudGlmaWVyOwogY2xhc3MgSURC
UmVzdWx0RGF0YTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CkBAIC00OCw2ICs1MCw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZGlkRGVsZXRlRGF0YWJhc2UoY29uc3QgSURCUmVzdWx0RGF0YSYp
OwogICAgIHZvaWQgZGlkT3BlbkRhdGFiYXNlKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2
b2lkIGRpZENvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOwogCiAgICAgdm9pZCBmaXJlVmVy
c2lvbkNoYW5nZUV2ZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIHVpbnQ2NF90IHJl
cXVlc3RlZFZlcnNpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxl
Z2F0ZS5oCmluZGV4IDc0MThmYWIuLjI4ZWNjYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0
aW9uVG9DbGllbnREZWxlZ2F0ZS5oCkBAIC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSURCRXJyb3I7CitjbGFzcyBJREJSZXNvdXJjZUlkZW50aWZpZXI7CiBj
bGFzcyBJREJSZXN1bHREYXRhOwogCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKQEAgLTQ0LDYgKzQ2
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZURhdGFiYXNlKGNvbnN0
IElEQlJlc3VsdERhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZE9wZW5EYXRhYmFzZShj
b25zdCBJREJSZXN1bHREYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRUcmFu
c2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZmlyZVZlcnNpb25D
aGFuZ2VFdmVudChVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCB1aW50NjRfdCByZXF1ZXN0
ZWRWZXJzaW9uKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggMTExNmExMC4uNmU5MTI4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHAKQEAgLTYzLDYgKzYzLDIwIEBAIHZvaWQgSURCU2VydmVyOjp1bnJlZ2lzdGVyQ29ubmVj
dGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rpb24pCiAgICAgbV9jb25uZWN0aW9u
TWFwLnJlbW92ZShjb25uZWN0aW9uLmlkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgSURCU2VydmVy
OjpyZWdpc3RlclRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uKQoreworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSkpOworICAgIG1fdHJhbnNhY3Rpb25zLnNldCh0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCAmdHJhbnNhY3Rpb24pOworfQorCit2b2lkIElEQlNl
cnZlcjo6dW5yZWdpc3RlclRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFu
c2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSA9PSAmdHJhbnNhY3Rpb24pOwor
CisgICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCkpOworfQorCiB2b2lkIElEQlNlcnZlcjo6cmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uKQogewogICAgIEFTU0VSVCghbV9k
YXRhYmFzZUNvbm5lY3Rpb25zLmNvbnRhaW5zKGNvbm5lY3Rpb24uaWRlbnRpZmllcigpKSk7CkBA
IC0xMjgsNiArMTQyLDIwIEBAIHZvaWQgSURCU2VydmVyOjpkZWxldGVEYXRhYmFzZShjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEpCiAgICAgY29ubmVjdGlvbi0+ZGlkRGVsZXRlRGF0
YWJhc2UocmVzdWx0KTsKIH0KIAordm9pZCBJREJTZXJ2ZXI6OmNvbW1pdFRyYW5zYWN0aW9uKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQoreworICAg
IExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXI6OmNvbW1pdFRyYW5zYWN0aW9uIik7CisKKyAgICBh
dXRvIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CisgICAgaWYgKCF0cmFuc2FjdGlvbikgeworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyB0
cmFuc2FjdGlvbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbW1pdC4KKyAgICAgICAgLy8gV2UgYWxz
byBoYXZlIG5vIGFjY2VzcyB0byBhIGNvbm5lY3Rpb24gb3ZlciB3aGljaCB0byBtZXNzYWdlIGZh
aWx1cmUtdG8tY29tbWl0LgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHJhbnNhY3Rp
b24tPmNvbW1pdCgpOworfQorCiB2b2lkIElEQlNlcnZlcjo6cG9zdERhdGFiYXNlVGFzayhzdGQ6
OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiYmIHRhc2spCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuaAppbmRleCBjYTAzNDBhLi4wMGQ3MWFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC01Nywx
MiArNTcsMTUgQEAgcHVibGljOgogICAgIC8vIE9wZXJhdGlvbnMgcmVxdWVzdGVkIGJ5IHRoZSBj
bGllbnQuCiAgICAgdm9pZCBvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmKTsKICAg
ICB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJik7CisgICAgdm9pZCBj
b21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKTsKIAogICAgIHZv
aWQgcG9zdERhdGFiYXNlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiYmKTsK
ICAgICB2b2lkIHBvc3REYXRhYmFzZVRhc2tSZXBseShzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJl
YWRUYXNrPiYmKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRGF0YWJhc2VDb25u
ZWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYpOworICAgIHZvaWQgcmVnaXN0ZXJU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyVHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYpOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwogCkBAIC04Nyw2ICs5MCw3IEBAIHByaXZhdGU6CiAg
ICAgTWVzc2FnZVF1ZXVlPENyb3NzVGhyZWFkVGFzaz4gbV9kYXRhYmFzZVJlcGx5UXVldWU7CiAK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24qPiBtX2Rh
dGFiYXNlQ29ubmVjdGlvbnM7CisgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24qPiBtX3RyYW5zYWN0aW9uczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggMWVhYTZm
NC4uZjM3OWQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xMjQsNiArMTI0LDIw
IEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2U6Omhhc0FueU9wZW5Db25uZWN0aW9ucygpIGNvbnN0
CiAgICAgcmV0dXJuICFtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmlzRW1wdHkoKTsKIH0KIAor
c3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyB1aW50NjRfdCBjdXJyZW50SUQg
PSAwOworICAgIHJldHVybiArK2N1cnJlbnRJRDsKK30KKwordWludDY0X3QgVW5pcXVlSURCRGF0
YWJhc2U6OnN0b3JlQ2FsbGJhY2soRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAgICB1aW50
NjRfdCBpZGVudGlmaWVyID0gZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKKyAg
ICBtX2Vycm9yQ2FsbGJhY2tzLnNldChpZGVudGlmaWVyLCBjYWxsYmFjayk7CisgICAgcmV0dXJu
IGlkZW50aWZpZXI7Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiIpOwpAQCAtMTQyLDcgKzE1
Niw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uKCkKICAgICBhZGRPcGVuRGF0YWJhc2VDb25uZWN0aW9uKCptX3ZlcnNpb25DaGFuZ2VEYXRh
YmFzZUNvbm5lY3Rpb24pOwogCiAgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSBtX3Zl
cnNpb25DaGFuZ2VEYXRhYmFzZUNvbm5lY3Rpb24tPmNyZWF0ZVZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbihyZXF1ZXN0ZWRWZXJzaW9uKTsKLSAgICBtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMuc2V0
KG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pbmZvKCkuaWRlbnRpZmllcigpLCBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbik7CiAKICAgICBhdXRvIHJlc3VsdCA9IElEQlJlc3VsdERhdGE6
Om9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQob3BlcmF0aW9uLT5yZXF1ZXN0RGF0YSgpLnJlcXVl
c3RJZGVudGlmaWVyKCksICptX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CiAgICAgb3BlcmF0
aW9uLT5jb25uZWN0aW9uKCkuZGlkT3BlbkRhdGFiYXNlKHJlc3VsdCk7CkBAIC0xOTYsNiArMjA5
LDQ5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJbmZvJiBpbmZvKQogICAgIGhhbmRsZU9wZW5EYXRhYmFzZU9wZXJhdGlvbnMo
KTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24oVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9yQ2FsbGJhY2sgY2FsbGJh
Y2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbiIpOworCisgICAgaWYg
KG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID09ICZ0cmFuc2FjdGlvbikgeworICAgICAgICBB
U1NFUlQoJm1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5kYXRhYmFzZUNvbm5lY3Rpb24oKSA9
PSBtX3ZlcnNpb25DaGFuZ2VEYXRhYmFzZUNvbm5lY3Rpb24pOworICAgICAgICBtX2RhdGFiYXNl
SW5mby0+c2V0VmVyc2lvbih0cmFuc2FjdGlvbi5pbmZvKCkubmV3VmVyc2lvbigpKTsKKyAgICAg
ICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSBudWxscHRyOworICAgICAgICBtX3ZlcnNp
b25DaGFuZ2VEYXRhYmFzZUNvbm5lY3Rpb24gPSBudWxscHRyOworICAgIH0KKworICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICBtX3NlcnZlci5w
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCkpKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KyAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1p
dFRyYW5zYWN0aW9uIik7CisKKyAgICAvLyBGSVhNRTogQ29tbWl0IHRyYW5zYWN0aW9uIGluIGJh
Y2tpbmcgc3RvcmUsIG9uY2UgdGhhdCBleGlzdHMuCisKKyAgICBJREJFcnJvciBlcnJvcjsKKyAg
ICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvcikpOworCit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1D
b21taXRUcmFuc2FjdGlvbiIpOworCisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvcik7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1F
cnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
IGVycm9yKQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tzLnRha2UoY2Fs
bGJhY2tJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoY2FsbGJhY2spOworICAgIGNhbGxiYWNrKGVy
cm9yKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggOGM0ODcxNWYuLmMwODYwNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCkBAIC00MSw2ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgSURCRXJyb3I7CiBjbGFzcyBJREJSZXF1ZXN0RGF0YTsKIAogbmFtZXNwYWNl
IElEQlNlcnZlciB7CkBAIC00OCw2ICs0OSw4IEBAIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogY2xh
c3MgSURCQ29ubmVjdGlvblRvQ2xpZW50OwogY2xhc3MgSURCU2VydmVyOwogCit0eXBlZGVmIHN0
ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBJREJFcnJvciYpPiBFcnJvckNhbGxiYWNrOworCiBjbGFz
cyBVbmlxdWVJREJEYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxVbmlxdWVJ
REJEYXRhYmFzZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8VW5pcXVlSURCRGF0YWJhc2U+
IGNyZWF0ZShJREJTZXJ2ZXImIHNlcnZlciwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQpAQCAtNTgsNiArNjEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVuRGF0YWJh
c2VDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYsIGNvbnN0IElEQlJlcXVlc3REYXRh
Jik7CiAKICAgICBjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8oKSBjb25zdDsKKyAgICBJREJT
ZXJ2ZXImIHNlcnZlcigpIHsgcmV0dXJuIG1fc2VydmVyOyB9CisKKyAgICB2b2lkIGNvbW1pdFRy
YW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsK
IAogcHJpdmF0ZToKICAgICBVbmlxdWVJREJEYXRhYmFzZShJREJTZXJ2ZXImLCBjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImKTsKQEAgLTY4LDEyICs3NCwxOCBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbigpOwogICAgIHZvaWQgbm90aWZ5Q29u
bmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UoKTsKKworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2so
RXJyb3JDYWxsYmFjayk7CiAgICAgCiAgICAgLy8gRGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMK
ICAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7
CisgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxsYmFja3MKICAgICB2b2lkIGRpZE9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJik7CisgICAgdm9pZCBkaWRQZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYpOworCisgICAgdm9pZCBwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAKICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwog
ICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CkBAIC04NCwxMiArOTYsMTIg
QEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJTZXJ2ZXJPcGVyYXRpb24+IG1fdmVyc2lvbkNo
YW5nZU9wZXJhdGlvbjsKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uPiBt
X3ZlcnNpb25DaGFuZ2VEYXRhYmFzZUNvbm5lY3Rpb247Ci0KLSAgICBSZWZQdHI8VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbj4gbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247Ci0gICAgSGFz
aE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uPj4gbV9pblByb2dyZXNzVHJhbnNhY3Rpb25zOworICAgIFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24qIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHsgbnVsbHB0ciB9OwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9kYXRhYmFzZUluZm87CisKKyAgICBI
YXNoTWFwPHVpbnQ2NF90LCBFcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24uY3BwCmluZGV4IDI3NDY4YzYuLjFkZDUxMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVpbnQ2NF90IHJl
cXVlc3RlZFZlcnNpCiAgICAgbV9jb25uZWN0aW9uVG9DbGllbnQuZmlyZVZlcnNpb25DaGFuZ2VF
dmVudCgqdGhpcywgcmVxdWVzdGVkVmVyc2lvbik7CiB9CiAKLVJlZjxVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uPiBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmNyZWF0ZVZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbih1aW50NjRfdCBuZXdWZXJzaW9uKQorVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiogVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24odWludDY0X3QgbmV3VmVyc2lvbikKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24iKTsKICAgICBBU1NFUlQoIW1fY2xvc2VQZW5kaW5nKTsKQEAgLTY3LDkgKzY3LDIyIEBA
IFJlZjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmNyZWF0ZVZlcnNpb25DaGFuCiAgICAgSURCVHJhbnNhY3Rpb25JbmZvIGluZm8gPSBJ
REJUcmFuc2FjdGlvbkluZm86OnZlcnNpb25DaGFuZ2UobV9jb25uZWN0aW9uVG9DbGllbnQsIG5l
d1ZlcnNpb24pOwogCiAgICAgUmVmPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5z
YWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZv
KTsKKyAgICBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKiByYXdUcmFuc2FjdGlvbiA9ICZ0
cmFuc2FjdGlvbi5nZXQoKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNldCh0cmFuc2FjdGlvbi0+
aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsKIAotICAgIHJldHVybiBX
VEY6Om1vdmUodHJhbnNhY3Rpb24pOworICAgIHJldHVybiByYXdUcmFuc2FjdGlvbjsKK30KKwor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZENvbW1pdFRyYW5zYWN0aW9uKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJFcnJvciYg
ZXJyb3IpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bjo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24iKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25JZGVudGlm
aWVyID0gdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKTsKKworICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOworICAgIG1fdHJh
bnNhY3Rpb25NYXAucmVtb3ZlKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisKKyAgICBtX2Nvbm5l
Y3Rpb25Ub0NsaWVudC5kaWRDb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uLmgKaW5kZXggZmY3MzVlZS4uMzFkNzYzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaApAQCAtMzQsNiArMzQsOSBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SURCRXJyb3I7CisKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCiBjbGFzcyBJREJDb25uZWN0aW9u
VG9DbGllbnQ7CkBAIC01MSw3ICs1NCw5IEBAIHB1YmxpYzoKICAgICBib29sIGNsb3NlUGVuZGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VQZW5kaW5nOyB9CiAKICAgICB2b2lkIGZpcmVWZXJz
aW9uQ2hhbmdlRXZlbnQodWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7Ci0gICAgUmVmPFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IGNyZWF0ZVZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbih1
aW50NjRfdCBuZXdWZXJzaW9uKTsKKyAgICBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKiBj
cmVhdGVWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24odWludDY0X3QgbmV3VmVyc2lvbik7CisKKyAg
ICB2b2lkIGRpZENvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCBjb25zdCBJREJFcnJvciYpOwogCiBwcml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbihVbmlxdWVJREJEYXRhYmFzZSYsIElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4IDQ3M2E2MmQu
Ljk2ZDE0Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5j
cHAKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAor
I2luY2x1ZGUgIklEQlNlcnZlci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJV
bmlxdWVJREJEYXRhYmFzZS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURC
U2VydmVyIHsKIApAQCAtNDAsNiArNDQsMjMgQEAgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZUNvbm4KICAg
ICA6IG1fZGF0YWJhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pCiAgICAgLCBtX3RyYW5zYWN0aW9u
SW5mbyhpbmZvKQogeworICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
cigpLnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOworfQorCitVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjp+VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbigpCit7CisgICAgbV9kYXRh
YmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyKCkudW5yZWdpc3RlclRyYW5zYWN0aW9u
KCp0aGlzKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQo
KQoreworICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpj
b21taXQiKTsKKworICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBzZWxm
KHRoaXMpOworICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmNvbW1pdFRyYW5z
YWN0aW9uKCp0aGlzLCBbdGhpcywgc2VsZl0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CisgICAg
ICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQg
KGNhbGxiYWNrKSIpOworICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkQ29tbWl0VHJh
bnNhY3Rpb24oKnRoaXMsIGVycm9yKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSURC
U2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaAppbmRleCA2
NTM0MzFhLi5iMmNhY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uLmgKQEAgLTQyLDkgKzQyLDEzIEBAIGNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24gOiBwdWJsaWMgUmVmQ291bnRlZDxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBjcmVhdGUoVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiwgSURCVHJhbnNhY3Rpb25JbmZvJik7CiAKKyAgICB+
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbigpOworCiAgICAgVW5pcXVlSURCRGF0YWJhc2VD
b25uZWN0aW9uJiBkYXRhYmFzZUNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2RhdGFiYXNlQ29ubmVj
dGlvbi5nZXQoKTsgfQogICAgIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbygpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JbmZvOyB9CiAKKyAgICB2b2lkIGNvbW1pdCgpOworCiBw
cml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uJiwgSURCVHJhbnNhY3Rpb25JbmZvJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaApp
bmRleCA0ZTU4NTlhLi5kNmM1NmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oCkBAIC0zOSw2ICszOSw4
IEBAIHB1YmxpYzoKICAgICBJREJEYXRhYmFzZUluZm8gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAK
ICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworICAg
IHZvaWQgc2V0VmVyc2lvbih1aW50NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9IHZlcnNpb247
IH0KICAgICB1aW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRXJyb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkVycm9yLmNwcAppbmRleCBiOGUxNmFiLi5hYTI0Zjc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKQEAgLTU1
LDYgKzU1LDE2IEBAIElEQkVycm9yOjpJREJFcnJvcihJREJFeGNlcHRpb25Db2RlIGNvZGUsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKIH0KIAorSURCRXJyb3IgSURCRXJyb3I6Omlzb2xhdGVk
Q29weSgpIGNvbnN0Cit7CisgICAgSURCRXJyb3IgcmVzdWx0OworCisgICAgcmVzdWx0Lm1fY29k
ZSA9IG1fY29kZTsKKyAgICByZXN1bHQubV9tZXNzYWdlID0gbV9tZXNzYWdlLmlzb2xhdGVkQ29w
eSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSURCRXJyb3ImIElEQkVycm9yOjpvcGVy
YXRvcj0oY29uc3QgSURCRXJyb3ImIG90aGVyKQogewogICAgIG1fY29kZSA9IG90aGVyLm1fY29k
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJFcnJvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVy
cm9yLmgKaW5kZXggYjJkNzIzYS4uNDA3MDM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKQEAgLTUxLDYgKzUxLDggQEAgcHVi
bGljOgogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2NvZGUgPT0gSURCRXhj
ZXB0aW9uQ29kZTo6Tm9uZTsgfQogCisgICAgSURCRXJyb3IgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgSURCRXhjZXB0aW9uQ29kZSBtX2NvZGUgeyBJREJFeGNlcHRpb25D
b2RlOjpOb25lIH07CiAgICAgU3RyaW5nIG1fbWVzc2FnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgKaW5kZXgg
YTFmODAyYS4uMjk3MzkyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElEQkNsaWVudCB7CiBjbGFzcyBJREJDb25uZWN0
aW9uVG9TZXJ2ZXI7CiBjbGFzcyBJREJPcGVuREJSZXF1ZXN0OworY2xhc3MgSURCVHJhbnNhY3Rp
b247CiB9CiAKIGNsYXNzIElEQlJlcXVlc3REYXRhIHsKQEAgLTUxLDcgKzUyLDcgQEAgcHJpdmF0
ZToKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9yZXF1ZXN0SWRlbnRpZmllcjsKICAgICBJ
REJEYXRhYmFzZUlkZW50aWZpZXIgbV9kYXRhYmFzZUlkZW50aWZpZXI7CiAKLSAgICB1aW50NjRf
dCBtX3JlcXVlc3RlZFZlcnNpb247CisgICAgdWludDY0X3QgbV9yZXF1ZXN0ZWRWZXJzaW9uIHsg
MCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVu
dGlmaWVyLmNwcAppbmRleCAxOTcxMjQ3Li4xN2UwMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJ
ZGVudGlmaWVyLmNwcApAQCAtNzMsNiArNzMsMTEgQEAgSURCUmVzb3VyY2VJZGVudGlmaWVyOjpJ
REJSZXNvdXJjZUlkZW50aWZpZXIoY29uc3QgSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGkK
IHsKIH0KIAorSURCUmVzb3VyY2VJZGVudGlmaWVyIElEQlJlc291cmNlSWRlbnRpZmllcjo6aXNv
bGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSURCUmVzb3VyY2VJZGVudGlmaWVyKG1f
aWRiQ29ubmVjdGlvbklkZW50aWZpZXIsIG1fcmVzb3VyY2VOdW1iZXIpOworfQorCiBJREJSZXNv
dXJjZUlkZW50aWZpZXIgSURCUmVzb3VyY2VJZGVudGlmaWVyOjplbXB0eVZhbHVlKCkKIHsKICAg
ICByZXR1cm4gSURCUmVzb3VyY2VJZGVudGlmaWVyKDAsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRl
bnRpZmllci5oCmluZGV4IGQ4N2M0Y2EuLjkzNTQ2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVu
dGlmaWVyLmgKQEAgLTY5LDcgKzY5LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB1aW50
NjRfdCBjb25uZWN0aW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRiQ29ubmVjdGlv
bklkZW50aWZpZXI7IH0KLSAgICAKKworICAgIElEQlJlc291cmNlSWRlbnRpZmllciBpc29sYXRl
ZENvcHkoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIoKSA9
IGRlbGV0ZTsKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIodWludDY0X3QgY29ubmVjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJT
ZXJ2ZXIuY3BwCmluZGV4IDcyOTIyZGQuLjA4MGExODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2
ZXIuY3BwCkBAIC0xMDIsNiArMTAyLDIyIEBAIHZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpkaWRP
cGVuRGF0YWJhc2UoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKICAgICB9KTsKIH0K
IAordm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZENvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYgZXJyb3IpCit7CisgICAgUmVmUHRyPEluUHJvY2Vzc0lEQlNlcnZlcj4gc2VsZih0aGlzKTsK
KyAgICBSdW5Mb29wOjpjdXJyZW50KCkuZGlzcGF0Y2goW3RoaXMsIHNlbGYsIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgZXJyb3JdIHsKKyAgICAgICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXItPmRpZENv
bW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOworICAgIH0pOwor
fQorCit2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6Y29tbWl0VHJhbnNhY3Rpb24oSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiByZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgUmVmUHRyPEluUHJvY2Vz
c0lEQlNlcnZlcj4gc2VsZih0aGlzKTsKKyAgICBSdW5Mb29wOjpjdXJyZW50KCkuZGlzcGF0Y2go
W3RoaXMsIHNlbGYsIHJlc291cmNlSWRlbnRpZmllcl0geworICAgICAgICBtX3NlcnZlci0+Y29t
bWl0VHJhbnNhY3Rpb24ocmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB9KTsKK30KKwogdm9pZCBJ
blByb2Nlc3NJREJTZXJ2ZXI6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoSURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHJlcXVlc3RlZFZl
cnNpb24pCiB7CiAgICAgUmVmUHRyPEluUHJvY2Vzc0lEQlNlcnZlcj4gc2VsZih0aGlzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
blByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCAwNTM2OWEyLi4wZjFjMzkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vz
c0lEQlNlcnZlci5oCkBAIC01NiwxMSArNTYsMTMgQEAgcHVibGljOgogICAgIC8vIElEQkNvbm5l
Y3Rpb25Ub1NlcnZlcgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShJREJSZXF1ZXN0
RGF0YSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuRGF0YWJhc2UoSURC
UmVxdWVzdERhdGEmKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJh
bnNhY3Rpb24oSURCUmVzb3VyY2VJZGVudGlmaWVyJikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICAv
LyBJREJDb25uZWN0aW9uVG9DbGllbnQKICAgICB2aXJ0dWFsIHVpbnQ2NF90IGlkZW50aWZpZXIo
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRGVsZXRlRGF0YWJhc2UoY29u
c3QgSURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBkaWRP
cGVuRGF0YWJhc2UoY29uc3QgSURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKSBvdmVycmlkZSBmaW5h
bDsKICAgICB2aXJ0dWFsIHZvaWQgZmlyZVZlcnNpb25DaGFuZ2VFdmVudChJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pIG92
ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCB2b2lkIHJlZigpIG92ZXJyaWRlIHsgUmVmQ291
bnRlZDxJblByb2Nlc3NJREJTZXJ2ZXI+OjpyZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAyNzdmYjguLjRjZjk1NmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTE5NjQsNyArMTk2NCw3IEBACiAJCTUxNDVCMTA5MUJDNDhFMkUwMEU4NjIxOSAvKiBJ
REJSZXNvdXJjZUlkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE0NUIxMDcxQkM0ODkwQjAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRl
bnRpZmllci5jcHAgKi87IH07CiAJCTUxNDVCMTBBMUJDNDhFMkUwMEU4NjIxOSAvKiBJREJSZXNv
dXJjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNDVCMTA4MUJDNDg5MEIwMEU4NjIxOSAvKiBJREJSZXNvdXJjZUlkZW50aWZpZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTQ4
NDUzRTFCQjlEMDdFMDA2QTcyRUQgLyogSURCRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0ODQ1M0MxQkI5RDA3NjAwNkE3MkVEIC8qIElE
QkVycm9yLmNwcCAqLzsgfTsKLQkJNTE0ODQ1M0YxQkI5RDA3RTAwNkE3MkVEIC8qIElEQkVycm9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQ4NDUz
RDFCQjlEMDc2MDA2QTcyRUQgLyogSURCRXJyb3IuaCAqLzsgfTsKKwkJNTE0ODQ1M0YxQkI5RDA3
RTAwNkE3MkVEIC8qIElEQkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTQ4NDUzRDFCQjlEMDc2MDA2QTcyRUQgLyogSURCRXJyb3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTRCM0Y3MzBD
NzIyMDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0QjNGNzIwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0
ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MTRCM0Y3NjBDNzIyMDU1MDAwNTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEIzRjc1MEM3MjIwNTUwMDA1MzBE
RiAvKiBGaWxlU3lzdGVtTWFjLm1tICovOyB9OwogCQk1MTRDNzYzNzBDRTkyMjVFMDA3RUYzQ0Qg
LyogSlNTUUxFcnJvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTRDNzYzNTBDRTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxFcnJvci5jcHAgKi87IH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKaW5kZXgg
NmEzMTkzOS4uMmFhNDBjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhy
ZWFkQ29waWVyLmNwcApAQCAtNDUsOSArNDUsMTEgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUlk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUluZm8uaCIKICNpbmNsdWRlICJJREJE
YXRhYmFzZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSURCRXJyb3IuaCIKICNpbmNsdWRlICJJREJH
ZXRSZXN1bHQuaCIKICNpbmNsdWRlICJJREJLZXlEYXRhLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFu
Z2VEYXRhLmgiCisjaW5jbHVkZSAiSURCUmVzb3VyY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25JbmZvLmgiCiAjZW5kaWYKIApAQCAtMTQ1LDYgKzE0NywxNiBAQCBDcm9z
c1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJUcmFuc2FjdGlvbkluZm8+OjpUeXBl
IENyb3NzVGhyZWFkQ29waWVyQgogICAgIHJldHVybiBpbmZvLmlzb2xhdGVkQ29weSgpOwogfQog
CitDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJSZXNvdXJjZUlkZW50aWZp
ZXI+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQlJlc291cmNl
SWRlbnRpZmllcj46OmNvcHkoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQoreworICAgIHJldHVybiBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpOworfQorCitDcm9zc1Ro
cmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJFcnJvcj46OlR5cGUgQ3Jvc3NUaHJlYWRD
b3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRXJyb3I+Ojpjb3B5KGNvbnN0IElEQkVycm9yJiBl
cnJvcikKK3sKKyAgICByZXR1cm4gZXJyb3IuaXNvbGF0ZWRDb3B5KCk7Cit9CisKICNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogLy8gVGVzdCBDcm9zc1RocmVhZENvcGllciB1
c2luZyBDT01QSUxFX0FTU0VSVC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oCmluZGV4IDdhMmY1MTkuLjQzOTJhYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaApAQCAtMjAzLDYgKzIwMywxOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgSURCRGF0YWJhc2VJZGVu
dGlmaWVyJik7CiAgICAgfTsKIAorICAgIGNsYXNzIElEQkVycm9yOworICAgIHRlbXBsYXRlPD4g
c3RydWN0IFdFQkNPUkVfRVhQT1JUIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2Us
IElEQkVycm9yPiB7CisgICAgICAgIHR5cGVkZWYgSURCRXJyb3IgVHlwZTsKKyAgICAgICAgc3Rh
dGljIFR5cGUgY29weShjb25zdCBJREJFcnJvciYpOworICAgIH07CisKKyAgICBjbGFzcyBJREJS
ZXNvdXJjZUlkZW50aWZpZXI7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQg
Q3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCUmVzb3VyY2VJZGVudGlmaWVy
PiB7CisgICAgICAgIHR5cGVkZWYgSURCUmVzb3VyY2VJZGVudGlmaWVyIFR5cGU7CisgICAgICAg
IHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CisgICAgfTsK
KwogICAgIGNsYXNzIElEQlRyYW5zYWN0aW9uSW5mbzsKICAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBX
RUJDT1JFX0VYUE9SVCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJUcmFu
c2FjdGlvbkluZm8+IHsKICAgICAgICAgdHlwZWRlZiBJREJUcmFuc2FjdGlvbkluZm8gVHlwZTsK
</data>
<flag name="review"
          id="288317"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>