<?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>154110</bug_id>
          
          <creation_ts>2016-02-11 09:25:37 -0800</creation_ts>
          <short_desc>Modern IDB: Ref cycle between IDBObjectStore and IDBIndex</short_desc>
          <delta_ts>2016-02-12 12:54:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>Safari 9</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>154015</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1163755</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-11 09:25:37 -0800</bug_when>
    <thetext>Modern IDB: Ref cycle between IDBObjectStore and IDBIndex

If one is reachable, the other has to remain reachable.

Currently they do this by Ref&apos;ing each other.

Let&apos;s make that work another way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163784</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-11 10:40:09 -0800</bug_when>
    <thetext>This patch is going to be interesting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163955</commentid>
    <comment_count>2</comment_count>
      <attachid>271111</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-11 17:24:05 -0800</bug_when>
    <thetext>Created attachment 271111
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163965</commentid>
    <comment_count>3</comment_count>
      <attachid>271111</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-11 17:51:29 -0800</bug_when>
    <thetext>Comment on attachment 271111
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/IDBIndex.h:82
&gt; +    // We use our own ref/deref methods because Legacy IDB and Modern IDB have very different

Nitpick: These are functions, not methods.

&gt; Source/WebCore/Modules/indexeddb/client/IDBIndexImpl.cpp:114
&gt; +    Ref&lt;IDBRequest&gt; request = m_objectStore.modernTransaction().requestOpenCursor(*context, *this, info);
&gt;      return WTFMove(request);

Just return it on the same line where we create it, and no need for WTFMove then.

&gt; Source/WebCore/Modules/indexeddb/client/IDBIndexImpl.cpp:220
&gt; +    Ref&lt;IDBRequest&gt; request = m_objectStore.modernTransaction().requestOpenCursor(*context, *this, info);
&gt;      return WTFMove(request);

Ditto.

&gt; Source/WebCore/Modules/indexeddb/client/IDBIndexImpl.cpp:362
&gt; +    // And then it must undo all of the refs it had already given its IDBObjectStore when the lifetimes were intertwined.
&gt; +    for (unsigned i = 0; i &lt; m_refCount; ++i)
&gt; +        m_objectStore.deref();

This kind of thing is so horrible. I know we have it elsewhere. But it’s actually a loop to implement subtraction! Please tell me its temporary.

&gt; Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.cpp:528
&gt; +    RefPtr&lt;IDBIndex&gt; refIndex = index.get();

Why not use Ref instead of RefPtr?

&gt; Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.cpp:531
&gt; -    return WTFMove(index);
&gt; +    return refIndex;

Why the change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164021</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-11 21:47:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 271111 [details]

All comments I don&apos;t address in this reply have been addressed in the path.

&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBIndexImpl.cpp:362
&gt; &gt; +    // And then it must undo all of the refs it had already given its IDBObjectStore when the lifetimes were intertwined.
&gt; &gt; +    for (unsigned i = 0; i &lt; m_refCount; ++i)
&gt; &gt; +        m_objectStore.deref();
&gt; 
&gt; This kind of thing is so horrible. I know we have it elsewhere. But it’s
&gt; actually a loop to implement subtraction! Please tell me its temporary.

This is not temporary. This is required as part of this very custom lifecycle management.

Is your complaint that the loop counts from 0 to N-1, but is derefing? And resolving that could be looping from N-1 to 0, derefing?

Or is your complaint that this is just gross and weird?

I&apos;ll change for the former right now.

I don&apos;t know of a way to fix the latter!

&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.cpp:528
&gt; &gt; +    RefPtr&lt;IDBIndex&gt; refIndex = index.get();
&gt; 
&gt; Why not use Ref instead of RefPtr?
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.cpp:531
&gt; &gt; -    return WTFMove(index);
&gt; &gt; +    return refIndex;
&gt; 
&gt; Why the change?

These two taken together:

Previously, the IDBIndex created *was* a Ref&lt;&gt;. But the method returns a RefPtr&lt;&gt;. Hence, the WTFMove was how we converted the Ref to a RefPtr, which cannot happen automatically.

With the new model, it just made sense to keep the local smart pointer as a RefPtr - instead of a Ref - since that was the return value for the method and would not require a WTFMove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164023</commentid>
    <comment_count>5</comment_count>
      <attachid>271135</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-11 21:58:37 -0800</bug_when>
    <thetext>Created attachment 271135
Patch v2

Even though Darin already r+&apos;ed this, I&apos;m going to hold off landing it until at least one other set of eyes takes a look (I&apos;ve emailed them)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164175</commentid>
    <comment_count>6</comment_count>
      <attachid>271135</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-12 09:40:11 -0800</bug_when>
    <thetext>Comment on attachment 271135
Patch v2

This not being in the tree is holding up my progress fixing additional leaks/ref cycles.
So on second thought, I will cq+ this, but just make sure it gets looked at retroactively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164193</commentid>
    <comment_count>7</comment_count>
      <attachid>271135</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-12 10:30:45 -0800</bug_when>
    <thetext>Comment on attachment 271135
Patch v2

Clearing flags on attachment: 271135

Committed r196482: &lt;http://trac.webkit.org/changeset/196482&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164198</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-12 10:43:50 -0800</bug_when>
    <thetext>I think you can do better, depending on the expected behavior.

Is it possible to create an IDBIndex without first creating an IDBObjectStore?

After creating an IDBObjectStore and an IDBIndex, and calling IDBObjectStore.deleteIndex():

	Is it still possible to reference the IDBIndex from JavaScript (or elsewhere)?

	Is it still possible to retrieve the IDBObjectStore from the IDBIndex?

	Is it possible to create a new IDBIndex for the same IDBObjectStore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164213</commentid>
    <comment_count>9</comment_count>
      <attachid>271135</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-12 11:05:58 -0800</bug_when>
    <thetext>Comment on attachment 271135
Patch v2

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

&gt; Source/WebCore/Modules/indexeddb/client/IDBIndexImpl.cpp:360
&gt; +    // It must undo all of the refs it had previously given its IDBObjectStore when the lifetimes were intertwined.
&gt; +    for (unsigned i = m_refCount; i &gt; 0; --i)
&gt; +        m_objectStore.deref();

I think Darin&apos;s complaint is that this does m_refCount operations to achieve what could be done with one operation if we had an m_objectStore.derefThisManyTimesGuaranteedToLeaveAtLeastOneRef(m_refCount).  We could also assert that m_objectStore has at least that many refs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164283</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-12 12:51:05 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 271135 [details]
&gt; Patch v2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271135&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBIndexImpl.cpp:360
&gt; &gt; +    // It must undo all of the refs it had previously given its IDBObjectStore when the lifetimes were intertwined.
&gt; &gt; +    for (unsigned i = m_refCount; i &gt; 0; --i)
&gt; &gt; +        m_objectStore.deref();
&gt; 
&gt; I think Darin&apos;s complaint is that this does m_refCount operations to achieve
&gt; what could be done with one operation if we had an
&gt; m_objectStore.derefThisManyTimesGuaranteedToLeaveAtLeastOneRef(m_refCount). 
&gt; We could also assert that m_objectStore has at least that many refs.

Based on our email conversation, I think the direction we&apos;re headed is simplifying this by not allowing the detach behavior, at the expense of having to hang on to all IDBIndexes until the IDBObjectStore goes away.

Which is probably an okay tradeoff.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271111</attachid>
            <date>2016-02-11 17:24:05 -0800</date>
            <delta_ts>2016-02-11 21:58:45 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32268</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggN2I1MjMwNi4uOWVkNGY0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExODAsNiArMTE4MCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5k
aW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0lEQkN1cnNv
cldpdGhWYWx1ZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9t
LmNwcAorICAgIGJpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0ltYWdlQ29u
c3RydWN0b3IuY3BwCiAgICAgYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYWVkNjU1Ny4uMjY1YzJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisy
MDE2LTAyLTExICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm4gSURCOiBSZWYgY3ljbGUgYmV0d2VlbiBJREJPYmplY3RTdG9yZSBhbmQgSURCSW5kZXgu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQxMTAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMgKEN1cnJlbnRseSB1bnRlc3RhYmxlKS4KKworICAgICAgICBUaGUgbGlmZXRpbWUgb2Yg
SURCT2JqZWN0U3RvcmUgYW5kIElEQkluZGV4IGFyZSBjbG9zZWx5IGludGVydHdpbmVkLCBidXQg
d2UgaGF2ZSB0byBicmVhayB0aGUgcmVmIGN5Y2xlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBw
YXRjaCBkb2VzIGEgZmV3IHNlbWktZ25hcmx5IHRoaW5nczoKKyAgICAgICAgMSAtIE1ha2VzIGJv
dGggSURCSW5kZXggYW5kIElEQk9iamVjdFN0b3JlIGhhdmUgYSBjdXN0b20gbWFya2luZyBmdW5j
dGlvbiBzbyB0aGV5IGNhbiBhZGQgZWFjaCBvdGhlciBhcyAKKyAgICAgICAgICAgIG9wYXF1ZSBy
b290cy4KKyAgICAgICAgMiAtIEFkZHMgYSBsb2NrIHRvIHByb3RlY3QgSURCT2JqZWN0U3RvcmUn
cyBjb2xsZWN0aW9uIG9mIHJlZmVyZW5jZWQgaW5kZXhlcyB0byBzdXBwb3J0ICMxLCBhcyBHQyBt
YXJraW5nCisgICAgICAgICAgICBjYW4gaGFwcGVuIG9uIGFueSB0aHJlYWQuCisgICAgICAgIDMg
LSBNYWtlcyBJREJJbmRleCBub3QgYmUgdHJhZGl0aW9uYWxseSBSZWZDb3VudGVkOyBJbnN0ZWFk
LCBJREJJbmRleDo6cmVmKCkvZGVyZWYoKSBzaW1wbHkgcmVmKCkvZGVyZWYoKQorICAgICAgICAg
ICAgdGhlIG93bmluZyBJREJPYmplY3RTdG9yZS4KKyAgICAgICAgNCAtIC4uLkV4Y2VwdCB3aGVu
IHNvbWVib2R5IGRlbGV0ZXMgYW4gSURCSW5kZXggZnJvbSBpdHMgSURCT2JqZWN0U3RvcmUuIE9u
Y2UgdGhhdCBoYXBwZW5zLCB0aGUgb2JqZWN0CisgICAgICAgICAgICBzdG9yZSBubyBsb25nZXIg
aGFzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGluZGV4LCBidXQgdGhlIGluZGV4IHN0aWxsIG5l
ZWRzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlCisgICAgICAgICAgICBvYmplY3Qgc3RvcmUuIFRv
IHN1cHBvcnQgdGhpcywgdGhlIElEQkluZGV4IGJlY29tZXMgInRyYWRpdGlvbmFsbHkgUmVmQ291
bnRlZCIgYW5kIGhvbGRzIGEgcmVmIHRvCisgICAgICAgICAgICBpdHMgSURCT2JqZWN0U3RvcmUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmlzTW9kZXJuKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGw6CisgICAgICAgIAorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZTo6aXNNb2Rlcm4pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmlkbDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkluZGV4SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkluZGV4
OjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkluZGV4Ojpv
cGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCSW5kZXg6OmRvQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6b3BlbktleUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkluZGV4Ojpkb0dldCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkluZGV4Ojpkb0dldEtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDbGllbnQ6OklEQkluZGV4OjptYXJrQXNEZWxldGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkNsaWVudDo6SURCSW5kZXg6OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpJREJD
bGllbnQ6OklEQkluZGV4OjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklE
QkluZGV4OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJJbmRleEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCSW5k
ZXg6Om1vZGVybk9iamVjdFN0b3JlKToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmg6Cisg
ICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlv
bkltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6
Y3JlYXRlSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFu
c2FjdGlvbkltcGwuaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeUluZGV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUluZGV4OjpyZWYp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5kZXg6OmRlcmVmKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5SW5kZXguaDoKKyAgICAgICAgCisgICAgICAgICog
YmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKwogMjAx
Ni0wMi0xMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVu
YW1lIEVsZW1lbnQ6OnN0eWxlKCkgdG8gRWxlbWVudDo6Y3Nzb21TdHlsZSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaAppbmRleCA0YzUxZDQwLi5iY2ViYzdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKQEAgLTQz
LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJPYmplY3RTdG9yZTsK
IAotY2xhc3MgSURCSW5kZXggOiBwdWJsaWMgUmVmQ291bnRlZDxJREJJbmRleD4geworY2xhc3Mg
SURCSW5kZXggewogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkluZGV4KCkgeyB9CiAKQEAgLTc3
LDYgKzc3LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXRL
ZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGdldEtleShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwogCisgICAgdmlydHVhbCBib29sIGlz
TW9kZXJuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIFdlIHVzZSBvdXIgb3du
IHJlZi9kZXJlZiBtZXRob2RzIGJlY2F1c2UgTGVnYWN5IElEQiBhbmQgTW9kZXJuIElEQiBoYXZl
IHZlcnkgZGlmZmVyZW50CisgICAgLy8gbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB0aGVpciBpbmRl
eGVzLgorICAgIC8vIFRoaXMgd2lsbCBnbyBhd2F5IG9uY2UgTGVnYWN5IElEQiBpcyBkcm9wcGVk
LgorICAgIHZpcnR1YWwgdm9pZCByZWYoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcmVmKCkg
PSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgSURCSW5kZXgoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwKaW5kZXggMGU2MGZmNi4uZTUwMmEyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbApAQCAt
MjcsNiArMjcsOCBAQAogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgRW5h
YmxlZEF0UnVudGltZT1JbmRleGVkREIsCiAgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24sCisgICAg
SlNDdXN0b21NYXJrRnVuY3Rpb24sCisgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAogXSBp
bnRlcmZhY2UgSURCSW5kZXggewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFt
ZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCT2JqZWN0U3RvcmUgb2JqZWN0U3RvcmU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApp
bmRleCA0ZGJkNzI1Li4yYzRiNGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTkyLDYgKzkyLDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKICAgICB2aXJ0
dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JikgPSAwOwogCisgICAgdmlydHVhbCBib29sIGlzTW9kZXJuKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKwogcHJvdGVjdGVkOgogICAgIElEQk9iamVjdFN0b3JlKCk7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4
IDkzY2NiNzEuLjQ5MGNjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTI3LDYgKzI3LDggQEAKICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9SW5kZXhlZERCLAog
ICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAorICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAg
IEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKIF0gaW50ZXJmYWNlIElEQk9iamVjdFN0b3JlIHsK
ICAgICBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIG5hbWU7CiAgICAgW0ltcGxlbWVudGVkQXM9a2V5UGF0aEFueV0gcmVhZG9ubHkg
YXR0cmlidXRlIElEQkFueSBrZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNwcAppbmRleCA1OGI1ZmVkLi5j
MDY4MmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCSW5kZXhJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCSW5kZXhJbXBsLmNwcApAQCAtNDEsMTEgKzQxLDYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJDbGllbnQgewogCi1SZWY8SURCSW5kZXg+IElEQkluZGV4
OjpjcmVhdGUoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0
U3RvcmUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCSW5kZXgoaW5mbywgb2JqZWN0
U3RvcmUpKTsKLX0KLQogSURCSW5kZXg6OklEQkluZGV4KGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bywgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAg
LCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQpAQCAtNjMsNyArNTgsNyBAQCBjb25zdCBTdHJp
bmcmIElEQkluZGV4OjpuYW1lKCkgY29uc3QKIAogUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlPiBJREJJbmRleDo6b2JqZWN0U3RvcmUoKQogewotICAgIHJldHVybiAmbV9vYmplY3RTdG9y
ZS5nZXQoKTsKKyAgICByZXR1cm4gJm1fb2JqZWN0U3RvcmU7CiB9CiAKIFJlZlB0cjxXZWJDb3Jl
OjpJREJBbnk+IElEQkluZGV4OjprZXlQYXRoQW55KCkgY29uc3QKQEAgLTkwLDEzICs4NSwxMyBA
QCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogewogICAgIExPRyhJbmRleGVkREIsICJJREJJbmRl
eDo6b3BlbkN1cnNvciIpOwogCi0gICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLT5p
c0RlbGV0ZWQoKSkgeworICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0
ZWQoKSkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRT
dGF0ZUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
ZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmpl
Y3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCi0gICAgaWYgKCFtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpLmlzQWN0
aXZlKCkpIHsKKyAgICBpZiAoIW1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5pc0Fj
dGl2ZSgpKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNh
Y3Rpb25JbmFjdGl2ZUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0
aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTExNCw4ICsxMDksOCBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6
Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgIGlmIChyYW5n
ZURhdGEudXBwZXJLZXkuaXNOdWxsKCkpCiAgICAgICAgIHJhbmdlRGF0YS51cHBlcktleSA9IElE
QktleURhdGE6Om1heGltdW0oKTsKIAotICAgIGF1dG8gaW5mbyA9IElEQkN1cnNvckluZm86Omlu
ZGV4Q3Vyc29yKG1fb2JqZWN0U3RvcmUtPm1vZGVyblRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3Rv
cmUtPmluZm8oKS5pZGVudGlmaWVyKCksIG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlRGF0YSwg
ZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlKTsKLSAgICBSZWY8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fb2JqZWN0U3RvcmUtPm1vZGVyblRyYW5zYWN0aW9uKCku
cmVxdWVzdE9wZW5DdXJzb3IoKmNvbnRleHQsICp0aGlzLCBpbmZvKTsKKyAgICBhdXRvIGluZm8g
PSBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcihtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0
aW9uKCksIG1fb2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZpZXIoKSwgbV9pbmZvLmlkZW50aWZp
ZXIoKSwgcmFuZ2VEYXRhLCBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5k
VmFsdWUpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV9vYmplY3RTdG9yZS5tb2Rl
cm5UcmFuc2FjdGlvbigpLnJlcXVlc3RPcGVuQ3Vyc29yKCpjb250ZXh0LCAqdGhpcywgaW5mbyk7
CiAgICAgcmV0dXJuIFdURk1vdmUocmVxdWVzdCk7CiB9CiAKQEAgLTE3Nyw3ICsxNzIsNyBAQCBS
ZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbgogCiBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURC
SW5kZXg6OmRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKLSAg
ICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUtPmlzRGVsZXRlZCgpKSB7CisgICAgaWYg
KG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKSB7CiAgICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CiAgICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lE
QkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4i
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xODgsNyArMTgzLDcgQEAgUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0NvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGMKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0
byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpOworICAg
IGF1dG8mIHRyYW5zYWN0aW9uID0gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpOwog
ICAgIGlmICghdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkgewogICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKICAgICAgICAgZWMu
bWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURC
SW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CkBAIC0y
MDIsMTMgKzE5NywxMyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9w
ZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogewogICAgIExPRyhJbmRl
eGVkREIsICJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOwogCi0gICAgaWYgKG1fZGVsZXRlZCB8
fCBtX29iamVjdFN0b3JlLT5pc0RlbGV0ZWQoKSkgeworICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9v
YmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQkluZGV4Jzog
VGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFtX29iamVjdFN0b3JlLT5tb2Rl
cm5UcmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKKyAgICBpZiAoIW1fb2JqZWN0U3RvcmUubW9k
ZXJuVHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwogICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24g
J0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIyMCw4ICsyMTUsOCBAQCBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGlu
Zm8gPSBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcihtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFu
c2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5pbmZvKCkuaWRlbnRpZmllcigpLCBtX2luZm8uaWRl
bnRpZmllcigpLCByYW5nZSwgZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9u
bHkpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV9vYmplY3RTdG9yZS0+bW9kZXJu
VHJhbnNhY3Rpb24oKS5yZXF1ZXN0T3BlbkN1cnNvcigqY29udGV4dCwgKnRoaXMsIGluZm8pOwor
ICAgIGF1dG8gaW5mbyA9IElEQkN1cnNvckluZm86OmluZGV4Q3Vyc29yKG1fb2JqZWN0U3RvcmUu
bW9kZXJuVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS5pbmZvKCkuaWRlbnRpZmllcigpLCBt
X2luZm8uaWRlbnRpZmllcigpLCByYW5nZSwgZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5
cGU6OktleU9ubHkpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV9vYmplY3RTdG9y
ZS5tb2Rlcm5UcmFuc2FjdGlvbigpLnJlcXVlc3RPcGVuQ3Vyc29yKCpjb250ZXh0LCAqdGhpcywg
aW5mbyk7CiAgICAgcmV0dXJuIFdURk1vdmUocmVxdWVzdCk7CiB9CiAKQEAgLTI3MCw3ICsyNjUs
NyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdAogCiBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gSURCSW5kZXg6OmRvR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7
Ci0gICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLT5pc0RlbGV0ZWQoKSkgeworICAg
IGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewogICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwogICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAn
SURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVk
LiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI4MSw3ICsyNzYsNyBAQCBSZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmRvR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBh
dXRvJiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0U3RvcmUtPm1vZGVyblRyYW5zYWN0aW9uKCk7Cisg
ICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCk7
CiAgICAgaWYgKCF0cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwogICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURC
SW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CkBAIC0z
MjUsNyArMzIwLDcgQEAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRL
ZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY28KIAogUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQogewotICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS0+aXNEZWxl
dGVkKCkpIHsKKyAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkp
IHsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2dldEtleScgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUg
aGFzIGJlZW4gZGVsZXRlZC4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zMzYsNyAr
MzMxLDcgQEAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LAogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKLSAgICBhdXRvJiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0U3RvcmUtPm1vZGVyblRy
YW5zYWN0aW9uKCk7CisgICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLm1vZGVy
blRyYW5zYWN0aW9uKCk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7CiAgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVy
cm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3Ig
ZmluaXNoZWQuIik7CkBAIC0zNDYsMTEgKzM0MSw1MSBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVx
dWVzdD4gSURCSW5kZXg6OmRvR2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlcXVlc3RHZXRLZXkoY29udGV4dCwgKnRoaXMsIHJh
bmdlKTsKIH0KIAotdm9pZCBJREJJbmRleDo6bWFya0FzRGVsZXRlZCgpCit2b2lkIElEQkluZGV4
OjptYXJrQXNEZWxldGVkKHN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4mJiBpbmRleE93bmVyKQog
eworICAgIEFTU0VSVCghbV9kZWxldGVkKTsKKyAgICBBU1NFUlQoIW1fc2VsZk93bmVyKTsKKyAg
ICBBU1NFUlQoaW5kZXhPd25lci5nZXQoKSA9PSB0aGlzKTsKKworICAgIC8vIElmIG5vYm9keSB3
YXMga2VlcGluZyBhIHJlZiB0byB0aGlzIElEQkluZGV4IHdoaWxlIHVuZGVyIElEQk9iamVjdFN0
b3JlIG93bmVyc2hpcCwKKyAgICAvLyBpdCBjYW4gYmUgZGVsZXRlZCBub3cgYnkgbGV0dGluZyBp
bmRleE93bmVyIGdvIG91dCBvZiBzY29wZS4KKyAgICBpZiAoIW1fcmVmQ291bnQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc2VsZk93bmVyID0gV1RGTW92ZShpbmRleE93bmVyKTsKKworICAg
IC8vIE5vdyB0aGF0IHRoZSBJREJJbmRleCBpcyBtYW5hZ2luZyBpdHMgb3duIGxpZmV0aW1lLCBp
dCBtdXN0IGZpcnN0IHJlZiBpdHMgSURCT2JqZWN0U3RvcmUgdG8ga2VlcCBpdCBhbGl2ZS4KKyAg
ICBtX29iamVjdFN0b3JlUmVmID0gJm1fb2JqZWN0U3RvcmU7CisKKyAgICAvLyBBbmQgdGhlbiBp
dCBtdXN0IHVuZG8gYWxsIG9mIHRoZSByZWZzIGl0IGhhZCBhbHJlYWR5IGdpdmVuIGl0cyBJREJP
YmplY3RTdG9yZSB3aGVuIHRoZSBsaWZldGltZXMgd2VyZSBpbnRlcnR3aW5lZC4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZWZDb3VudDsgKytpKQorICAgICAgICBtX29iamVjdFN0
b3JlLmRlcmVmKCk7CisKICAgICBtX2RlbGV0ZWQgPSB0cnVlOwogfQogCit2b2lkIElEQkluZGV4
OjpyZWYoKQoreworICAgICsrbV9yZWZDb3VudDsKKworICAgIGlmICghbV9kZWxldGVkKQorICAg
ICAgICBtX29iamVjdFN0b3JlLnJlZigpOworfQorCit2b2lkIElEQkluZGV4OjpkZXJlZigpCit7
CisgICAgLS1tX3JlZkNvdW50OworCisgICAgaWYgKCFtX2RlbGV0ZWQpCisgICAgICAgIG1fb2Jq
ZWN0U3RvcmUuZGVyZWYoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhpcyBJREJJbmRl
eCBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIGl0cyBJREJPYmplY3RTdG9yZSAqYW5kKiBpdHMgUmVm
Q291bnQganVzdCB3ZW50IHRvIDAsCisgICAgICAgIC8vIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQu
CisgICAgICAgIGlmICghbV9yZWZDb3VudCkKKyAgICAgICAgICAgIG1fc2VsZk93bmVyID0gbnVs
bHB0cjsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCSW5kZXhJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCSW5kZXhJbXBsLmgKaW5kZXggYjE4MGE2NC4uMzI5YTIzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJbmRleElt
cGwuaApAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBJREJPYmplY3RTdG9yZTsKIAogY2xhc3MgSURC
SW5kZXggOiBwdWJsaWMgV2ViQ29yZTo6SURCSW5kZXggewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8SURCSW5kZXg+IGNyZWF0ZShjb25zdCBJREJJbmRleEluZm8mLCBJREJPYmplY3RTdG9yZSYp
OworICAgIElEQkluZGV4KGNvbnN0IElEQkluZGV4SW5mbyYsIElEQk9iamVjdFN0b3JlJik7CiAK
ICAgICB2aXJ0dWFsIH5JREJJbmRleCgpOwogCkBAIC03NywyMiArNzcsMzkgQEAgcHVibGljOgog
CiAgICAgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9
CiAKLSAgICBJREJPYmplY3RTdG9yZSYgbW9kZXJuT2JqZWN0U3RvcmUoKSB7IHJldHVybiBtX29i
amVjdFN0b3JlLmdldCgpOyB9CisgICAgSURCT2JqZWN0U3RvcmUmIG1vZGVybk9iamVjdFN0b3Jl
KCkgeyByZXR1cm4gbV9vYmplY3RTdG9yZTsgfQogCi0gICAgdm9pZCBtYXJrQXNEZWxldGVkKCk7
CisgICAgdm9pZCBtYXJrQXNEZWxldGVkKHN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4mJik7CiAg
ICAgYm9vbCBpc0RlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KIAotcHJpdmF0
ZToKLSAgICBJREJJbmRleChjb25zdCBJREJJbmRleEluZm8mLCBJREJPYmplY3RTdG9yZSYpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc01vZGVybigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIAorICAgIHZvaWQgcmVmKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXJlZigpIG92ZXJyaWRl
OworCitwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0NvdW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZG9HZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0dl
dEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CiAKICAgICBJREJJbmRleEluZm8gbV9pbmZvOwotICAg
IFJlZjxJREJPYmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKIAogICAgIGJvb2wgbV9kZWxldGVk
IHsgZmFsc2UgfTsKKworICAgIC8vIE1vc3Qgb2YgdGhlIHRpbWUsIGFuIElEQk9iamVjdFN0b3Jl
IG93bnMgYW4gSURCSW5kZXggdGhyb3VnaCBhIHN0ZDo6dW5pcXVlX3B0ci4KKyAgICAvLyBJbiB0
aGF0IHNjZW5hcmlvLCBhdHRlbXB0cyB0byByZWYoKSB0aGUgSURCSW5kZXggZGlyZWN0bHkgcmVm
IHRoZSBJREJPYmplY3RTdG9yZSwKKyAgICAvLyBhbmQgaXQgaXMgb2theSB0byBrZWVwIGEgcmF3
IHBvaW50ZXIgdG8gdGhlIElEQk9iamVjdFN0b3JlIGJlY2F1c2UgaXQgd2lsbCBhbHdheXMKKyAg
ICAvLyBvdXRsaXZlIHRoZSBJREJJbmRleC4KKyAgICBJREJPYmplY3RTdG9yZSYgbV9vYmplY3RT
dG9yZTsKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50IHsgMCB9OworCisgICAgLy8gQnV0IHdoZW4g
YW4gSURCSW5kZXggaXMgZGVsZXRlZCBmcm9tIGl0cyBJREJPYmplY3RTdG9yZSwgdGhhdCBvd25l
cnNoaXAgbGlmZXRpbWUKKyAgICAvLyBpcyBubyBsb25nZXIgZ3VhcmFudGVlZC4gV2hlbiB0aGF0
IGhhcHBlbnMsIHRoZSBmb2xsb3dpbmcgbmVlZHMgdG8gY2hhbmdlOgorICAgIC8vIDEgLSBUaGUg
SURCSW5kZXggbXVzdCBkaXJlY3RseSByZWYgaXRzIElEQk9iamVjdFN0b3JlIHRvIGtlZXAgaXQg
YWxpdmUKKyAgICAvLyAyIC0gVGhlIElEQkluZGV4IGhvbGRzIGl0cyBvd24gc3RkOjp1bmlxdWVf
cHRyLCB3aGljaCBpdCB3aWxsIGNsZWFyIG91dCB3aGVuIGl0cworICAgIC8vICAgICBSZWZDb3Vu
dCBiZWNvbWVzIDA7CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBtX3NlbGZPd25lcjsK
KyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmVSZWY7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBJREJDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXggODVm
NjcyNS4uMmEyZDM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKQEAgLTQxLDYgKzQx
LDcgQEAKICNpbmNsdWRlICJJbmRleGVkREIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKQEAgLTQ4NiwxMCAr
NDg3LDEzIEBAIFJlZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5kaWRDcmVhdGVJbmRleEluZm8oaW5mbyk7CiAKICAgICAvLyBDcmVhdGUgdGhlIGFj
dHVhbCBJREJPYmplY3RTdG9yZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiwgd2hpY2ggYWxzbyBzY2hl
ZHVsZXMgdGhlIG9wZXJhdGlvbiBzZXJ2ZXIgc2lkZS4KLSAgICBSZWY8SURCSW5kZXg+IGluZGV4
ID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSW5kZXgoKnRoaXMsIGluZm8pOwotICAgIG1fcmVmZXJl
bmNlZEluZGV4ZXMuc2V0KG5hbWUsICZpbmRleC5nZXQoKSk7CisgICAgYXV0byBpbmRleCA9IG1f
dHJhbnNhY3Rpb24tPmNyZWF0ZUluZGV4KCp0aGlzLCBpbmZvKTsKKyAgICBSZWZQdHI8SURCSW5k
ZXg+IHJlZkluZGV4ID0gaW5kZXguZ2V0KCk7CiAKLSAgICByZXR1cm4gV1RGTW92ZShpbmRleCk7
CisgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExvY2spOworICAgIG1f
cmVmZXJlbmNlZEluZGV4ZXMuc2V0KG5hbWUsIFdURk1vdmUoaW5kZXgpKTsKKworICAgIHJldHVy
biBXVEZNb3ZlKHJlZkluZGV4KTsKIH0KIAogUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4PiBJREJP
YmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCkBAIC01MDgsOSArNTEyLDEwIEBAIFJlZlB0cjxXZWJDb3JlOjpJREJJ
bmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBFeGNl
cHRpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIExvY2tlcjxMb2NrPiBs
b2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZl
cmVuY2VkSW5kZXhlcy5maW5kKGluZGV4TmFtZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcmVm
ZXJlbmNlZEluZGV4ZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cisg
ICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAKICAgICBhdXRvKiBpbmZvID0g
bV9pbmZvLmluZm9Gb3JFeGlzdGluZ0luZGV4KGluZGV4TmFtZSk7CiAgICAgaWYgKCFpbmZvKSB7
CkBAIC01MTksMTAgKzUyNCwxMSBAQCBSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVj
dFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXhjZXB0aQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGluZGV4ID0gSURCSW5kZXg6OmNyZWF0
ZSgqaW5mbywgKnRoaXMpOwotICAgIG1fcmVmZXJlbmNlZEluZGV4ZXMuc2V0KGluZGV4TmFtZSwg
JmluZGV4LmdldCgpKTsKKyAgICBhdXRvIGluZGV4ID0gc3RkOjptYWtlX3VuaXF1ZTxJREJJbmRl
eD4oKmluZm8sICp0aGlzKTsKKyAgICBSZWZQdHI8SURCSW5kZXg+IHJlZkluZGV4ID0gaW5kZXgu
Z2V0KCk7CisgICAgbV9yZWZlcmVuY2VkSW5kZXhlcy5zZXQoaW5kZXhOYW1lLCBXVEZNb3ZlKGlu
ZGV4KSk7CiAKLSAgICByZXR1cm4gV1RGTW92ZShpbmRleCk7CisgICAgcmV0dXJuIHJlZkluZGV4
OwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCkBAIC01NTksOCArNTY1LDExIEBAIHZv
aWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlCiAKICAgICBtX2luZm8uZGVsZXRlSW5kZXgobmFtZSk7CiAK
LSAgICBpZiAoYXV0byBpbmRleCA9IG1fcmVmZXJlbmNlZEluZGV4ZXMudGFrZShuYW1lKSkKLSAg
ICAgICAgaW5kZXgtPm1hcmtBc0RlbGV0ZWQoKTsKKyAgICB7CisgICAgICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKKyAgICAgICAgaWYgKGF1dG8gaW5kZXgg
PSBtX3JlZmVyZW5jZWRJbmRleGVzLnRha2UobmFtZSkpCisgICAgICAgICAgICBpbmRleC0+bWFy
a0FzRGVsZXRlZChXVEZNb3ZlKGluZGV4KSk7CisgICAgfQogCiAgICAgbV90cmFuc2FjdGlvbi0+
ZGVsZXRlSW5kZXgobV9pbmZvLmlkZW50aWZpZXIoKSwgbmFtZSk7CiB9CkBAIC02NDYsNiArNjU1
LDEzIEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VB
Ym9ydCgpCiAgICAgbV9pbmZvID0gbV9vcmlnaW5hbEluZm87CiB9CiAKK3ZvaWQgSURCT2JqZWN0
U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikg
Y29uc3QKK3sKKyAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7
CisgICAgZm9yIChhdXRvJiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCisg
ICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIElEQkNsaWVudAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3Rv
cmVJbXBsLmgKaW5kZXggOGIwMmRlMC4uNjA5NmFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwu
aApAQCAtOTMsNiArOTMsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCByb2xsYmFja0luZm9Gb3JW
ZXJzaW9uQ2hhbmdlQWJvcnQoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc01vZGVybigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5k
ZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgSURCT2JqZWN0
U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgSURCVHJhbnNhY3Rpb24mKTsKIApAQCAt
MTExLDcgKzExNSw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07
CiAKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkluZGV4Pj4gbV9yZWZlcmVuY2VkSW5k
ZXhlczsKKyAgICBtdXRhYmxlIExvY2sgbV9yZWZlcmVuY2VkSW5kZXhMb2NrOworICAgIEhhc2hN
YXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SURCSW5kZXg+PiBtX3JlZmVyZW5jZWRJbmRleGVz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwu
Y3BwCmluZGV4IGVjYzM3MGUuLjY3YjAwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3Bw
CkBAIC00OTMsMTcgKzQ5MywxNSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVPYmpl
Y3RTdG9yZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdAogICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0RGF0YSwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6
Q3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzIHx8IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3Vs
dFR5cGU6OkVycm9yKTsKIH0KIAotUmVmPElEQkluZGV4PiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRl
SW5kZXgoSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8pCitzdGQ6OnVuaXF1ZV9wdHI8SURCSW5kZXg+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRl
eChJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4Iik7CiAg
ICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKIAotICAgIFJlZjxJREJJbmRleD4gaW5kZXgg
PSBJREJJbmRleDo6Y3JlYXRlKGluZm8sIG9iamVjdFN0b3JlKTsKLQogICAgIGF1dG8gb3BlcmF0
aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICZJREJUcmFuc2FjdGlvbjo6
ZGlkQ3JlYXRlSW5kZXhPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleE9uU2Vy
dmVyLCBpbmZvKTsKICAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOwog
Ci0gICAgcmV0dXJuIGluZGV4OworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPElEQkluZGV4
PihpbmZvLCBvYmplY3RTdG9yZSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OmNyZWF0ZUlu
ZGV4T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IGVkMGIzODQuLjQ0Mzhj
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKIAogICAgIFJlZjxJREJPYmplY3RTdG9yZT4gY3Jl
YXRlT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7Ci0gICAgUmVmPElEQklu
ZGV4PiBjcmVhdGVJbmRleChJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQkluZGV4SW5mbyYpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoSURCT2JqZWN0U3RvcmUm
LCBjb25zdCBJREJJbmRleEluZm8mKTsKIAogICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0UHV0
T3JBZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgSURCS2V5Kiwg
U2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGUpOwogICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0UmVjb3JkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUlu
ZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJ
bmRleC5jcHAKaW5kZXggNTI5YzZlMy4uMzdhMDkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5SW5kZXguY3BwCkBAIC01NCw2
ICs1NCwxOSBAQCBMZWdhY3lJbmRleDo6fkxlZ2FjeUluZGV4KCkKIHsKIH0KIAordm9pZCBMZWdh
Y3lJbmRleDo6cmVmKCkKK3sKKyAgICArK21fcmVmQ291bnQ7Cit9CisKK3ZvaWQgTGVnYWN5SW5k
ZXg6OmRlcmVmKCkKK3sKKyAgICBpZiAoLS1tX3JlZkNvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBkZWxldGUgdGhpczsKK30KKwogUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUluZGV4Ojpv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQktleVJhbmdlKiBr
ZXlSYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYgZWMpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lJbmRleDo6b3BlbkN1
cnNvciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeUluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5SW5kZXguaAppbmRleCBiZGI4MGM5Li44YjcxMzFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5SW5kZXguaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5SW5kZXguaApAQCAt
ODksNiArODksOSBAQCBwdWJsaWM6CiAKICAgICBJREJEYXRhYmFzZUJhY2tlbmQqIGJhY2tlbmRE
QigpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIHJlZigpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkZXJlZigpIG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIExlZ2FjeUluZGV4KGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmLCBMZWdhY3lPYmplY3RTdG9yZSosIExlZ2FjeVRyYW5zYWN0
aW9uKik7CiAKQEAgLTk2LDYgKzk5LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TGVnYWN5T2Jq
ZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CiAgICAgUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiBt
X3RyYW5zYWN0aW9uOwogICAgIGJvb2wgbV9kZWxldGVkOworCisgICAgdW5zaWduZWQgbV9yZWZD
b3VudCB7IDEgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyN2NhMWRhLi44
NGJmNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xOTgxLDYgKzE5ODEsNyBAQAogCQk1MTQxMjk5MDFDNjAxQUNDMDA1OUU3
MTQgLyogU2NvcGVHdWFyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE0MTI5OEYxQzYwMUE4OTAwNTlFNzE0IC8qIFNjb3BlR3VhcmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTQxMjk5ODFDNjk3
NjkwMDA1OUU3MTQgLyogSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQxMjk5NjFDNjk3NjE1MDA1OUU3
MTQgLyogSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5jcHAgKi87IH07CiAJCTUxNDEyOTk5MUM2
OTc2OTAwMDU5RTcxNCAvKiBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQxMjk5NzFDNjk3NjE1MDA1OUU3
MTQgLyogSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5oICovOyB9OworCQk1MTQxMjk5QjFDNkMx
Njc0MDA1OUU3MTQgLyogSlNJREJJbmRleEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQxMjk5QTFDNkMxNjZEMDA1OUU3MTQgLyogSlNJ
REJJbmRleEN1c3RvbS5jcHAgKi87IH07CiAJCTUxNDVCMTA5MUJDNDhFMkUwMEU4NjIxOSAvKiBJ
REJSZXNvdXJjZUlkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE0NUIxMDcxQkM0ODkwQjAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRl
bnRpZmllci5jcHAgKi87IH07CiAJCTUxNDVCMTBBMUJDNDhFMkUwMEU4NjIxOSAvKiBJREJSZXNv
dXJjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNDVCMTA4MUJDNDg5MEIwMEU4NjIxOSAvKiBJREJSZXNvdXJjZUlkZW50aWZpZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTQ4
NDUzRTFCQjlEMDdFMDA2QTcyRUQgLyogSURCRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0ODQ1M0MxQkI5RDA3NjAwNkE3MkVEIC8qIElE
QkVycm9yLmNwcCAqLzsgfTsKQEAgLTk0ODksNiArOTQ5MCw3IEBACiAJCTUxNDEyOThGMUM2MDFB
ODkwMDU5RTcxNCAvKiBTY29wZUd1YXJkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjb3BlR3VhcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0MTI5OTYx
QzY5NzYxNTAwNTlFNzE0IC8qIElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDEyOTk3MUM2OTc2MTUwMDU5RTcx
NCAvKiBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTE0MTI5OUExQzZDMTY2RDAwNTlFNzE0IC8qIEpTSURCSW5kZXhDdXN0b20u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJJbmRleEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDVCMTA3MUJDNDg5MEIwMEU4
NjIxOSAvKiBJREJSZXNvdXJjZUlkZW50aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE0NUIxMDgxQkM0ODkwQjAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJSZXNvdXJjZUlk
ZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0ODQ1M0MxQkI5RDA3
NjAwNkE3MkVEIC8qIElEQkVycm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQkVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMzUy
LDYgKzIyMzU0LDcgQEAKIAkJCQk1MTJCREI0QzFDNDZCMEZGMDA2NDk0REYgLyogSlNJREJDdXJz
b3JDdXN0b20uY3BwICovLAogCQkJCTUxNDEyOThEMUM1RkQ3RTkwMDU5RTcxNCAvKiBKU0lEQkN1
cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAgKi8sCiAJCQkJNTExRUYyQ0QxN0YwRkRGMTAwRTRGQTE2
IC8qIEpTSURCRGF0YWJhc2VDdXN0b20uY3BwICovLAorCQkJCTUxNDEyOTlBMUM2QzE2NkQwMDU5
RTcxNCAvKiBKU0lEQkluZGV4Q3VzdG9tLmNwcCAqLywKIAkJCQk1MTFFRjJDRTE3RjBGREYxMDBF
NEZBMTYgLyogSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgKi8sCiAJCQkJQTdEMDMxOEQwRTkz
NTQwMzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCAqLywKIAkJCQk3QTc0RUNCQzEw
MTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwICovLApA
QCAtMjk0MjYsNiArMjk0MjksNyBAQAogCQkJCTNGMkIzM0VDMTY1QUYxNTYwMEUzOTg3QyAvKiBE
T01XZWJLaXRDU1NWaWV3cG9ydFJ1bGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk4QTE5NTkzMzE0
N0VBMTZFMDBEMUVBNjEgLyogRE9NV2ViS2l0TmFtZWRGbG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzFDMEZGNEQwRTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTUxNDEyOTlCMUM2QzE2NzQwMDU5RTcxNCAvKiBKU0lEQklu
ZGV4Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1QzdGNUU4MEFBRkJBRkIwMDQwMTRE
RCAvKiBET01XaGVlbEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwM0I5OTgwOUVCMTNB
RjAwNzk3QzdGIC8qIERPTVdpbmRvdy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDY3NzczODE5
NUNBRjNEMDA3MkUwRDMgLyogRE9NV2luZG93Q1NTLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmMyY2NlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0lEQklu
ZGV4LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIklEQklu
ZGV4SW1wbC5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgSlNJREJJbmRleDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgaWYgKCF3cmFwcGVkKCkuaXNNb2Rlcm4oKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZzdGF0aWNfY2FzdDxJREJDbGllbnQ6
OklEQkluZGV4Jj4od3JhcHBlZCgpKS5tb2Rlcm5PYmplY3RTdG9yZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwCmluZGV4IDQ2MjI3MGMuLmZhNjgzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCkBAIC0zNCw3ICszNCw3
IEBACiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQk9i
amVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJbXBsLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNJREJJbmRleC5oIgogI2luY2x1ZGUgIkpTSURC
UmVxdWVzdC5oIgpAQCAtNDUsNiArNDUsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICghd3JhcHBlZCgpLmlz
TW9kZXJuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpY19jYXN0PElEQkNsaWVudDo6
SURCT2JqZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRv
cik7Cit9CisKIHN0YXRpYyBKU1ZhbHVlIHB1dE9yQWRkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Ym9vbCBvdmVyd3JpdGUpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFs
dWUoKTsK
</data>
<flag name="review"
          id="295946"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271135</attachid>
            <date>2016-02-11 21:58:37 -0800</date>
            <delta_ts>2016-02-12 10:30:45 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32617</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggN2I1MjMwNi4uOWVkNGY0OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExODAsNiArMTE4MCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5k
aW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0lEQkN1cnNv
cldpdGhWYWx1ZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9t
LmNwcAorICAgIGJpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0ltYWdlQ29u
c3RydWN0b3IuY3BwCiAgICAgYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZjg5ZWUwMC4uMjljNzRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisy
MDE2LTAyLTExICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm4gSURCOiBSZWYgY3ljbGUgYmV0d2VlbiBJREJPYmplY3RTdG9yZSBhbmQgSURCSW5kZXgu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQxMTAK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVz
dHMgKEN1cnJlbnRseSB1bnRlc3RhYmxlKS4KKworICAgICAgICBUaGUgbGlmZXRpbWUgb2YgSURC
T2JqZWN0U3RvcmUgYW5kIElEQkluZGV4IGFyZSBjbG9zZWx5IGludGVydHdpbmVkLCBidXQgd2Ug
aGF2ZSB0byBicmVhayB0aGUgcmVmIGN5Y2xlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBkb2VzIGEgZmV3IHNlbWktZ25hcmx5IHRoaW5nczoKKyAgICAgICAgMSAtIE1ha2VzIGJvdGgg
SURCSW5kZXggYW5kIElEQk9iamVjdFN0b3JlIGhhdmUgYSBjdXN0b20gbWFya2luZyBmdW5jdGlv
biBzbyB0aGV5IGNhbiBhZGQgZWFjaCBvdGhlciBhcyAKKyAgICAgICAgICAgIG9wYXF1ZSByb290
cy4KKyAgICAgICAgMiAtIEFkZHMgYSBsb2NrIHRvIHByb3RlY3QgSURCT2JqZWN0U3RvcmUncyBj
b2xsZWN0aW9uIG9mIHJlZmVyZW5jZWQgaW5kZXhlcyB0byBzdXBwb3J0ICMxLCBhcyBHQyBtYXJr
aW5nCisgICAgICAgICAgICBjYW4gaGFwcGVuIG9uIGFueSB0aHJlYWQuCisgICAgICAgIDMgLSBN
YWtlcyBJREJJbmRleCBub3QgYmUgdHJhZGl0aW9uYWxseSBSZWZDb3VudGVkOyBJbnN0ZWFkLCBJ
REJJbmRleDo6cmVmKCkvZGVyZWYoKSBzaW1wbHkgcmVmKCkvZGVyZWYoKQorICAgICAgICAgICAg
dGhlIG93bmluZyBJREJPYmplY3RTdG9yZS4KKyAgICAgICAgNCAtIC4uLkV4Y2VwdCB3aGVuIHNv
bWVib2R5IGRlbGV0ZXMgYW4gSURCSW5kZXggZnJvbSBpdHMgSURCT2JqZWN0U3RvcmUuIE9uY2Ug
dGhhdCBoYXBwZW5zLCB0aGUgb2JqZWN0CisgICAgICAgICAgICBzdG9yZSBubyBsb25nZXIgaGFz
IGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGluZGV4LCBidXQgdGhlIGluZGV4IHN0aWxsIG5lZWRz
IGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlCisgICAgICAgICAgICBvYmplY3Qgc3RvcmUuIFRvIHN1
cHBvcnQgdGhpcywgdGhlIElEQkluZGV4IGJlY29tZXMgInRyYWRpdGlvbmFsbHkgUmVmQ291bnRl
ZCIgd2hpbGUgaG9sZGluZyBhIHJlZiB0bworICAgICAgICAgICAgaXRzIElEQk9iamVjdFN0b3Jl
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXguaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojppc01vZGVybik6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmlzTW9kZXJuKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5pZGw6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJJbmRleEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRl
eDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6
b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkluZGV4Ojpkb0Nv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCSW5kZXg6Om9wZW5LZXlDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6ZG9HZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6ZG9HZXRLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ2xpZW50OjpJREJJbmRleDo6bWFya0FzRGVsZXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDbGllbnQ6OklEQkluZGV4OjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpJREJJbmRleDo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJ
REJJbmRleDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCSW5kZXhJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQklu
ZGV4Ojptb2Rlcm5PYmplY3RTdG9yZSk6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oOgor
ICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rp
b25JbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246
OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJh
bnNhY3Rpb25JbXBsLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lJbmRleC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmRleDo6cmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUluZGV4OjpkZXJlZik6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4Lmg6CisgICAgICAgIAorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisKIDIw
MTYtMDItMTEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
T3B0aW1pemUgdGV4dHVyZS1jb21wbGV0ZSBjaGVja3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleC5oCmluZGV4IDRjNTFkNDAuLmYyNTNkYzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaApAQCAtNDMsNyArNDMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQk9iamVjdFN0b3JlOwogCi1jbGFzcyBJREJJ
bmRleCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkluZGV4PiB7CitjbGFzcyBJREJJbmRleCB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+SURCSW5kZXgoKSB7IH0KIApAQCAtNzcsNiArNzcsMTQgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGdldEtleShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9
IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb2Rlcm4oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gV2UgdXNlIG91ciBvd24gcmVmL2RlcmVmIGZ1
bmN0aW9uIGJlY2F1c2UgTGVnYWN5IElEQiBhbmQgTW9kZXJuIElEQiBoYXZlIHZlcnkgZGlmZmVy
ZW50CisgICAgLy8gbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB0aGVpciBpbmRleGVzLgorICAgIC8v
IFRoaXMgd2lsbCBnbyBhd2F5IG9uY2UgTGVnYWN5IElEQiBpcyBkcm9wcGVkLgorICAgIHZpcnR1
YWwgdm9pZCByZWYoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgPSAwOworCiBwcm90
ZWN0ZWQ6CiAgICAgSURCSW5kZXgoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5pZGwKaW5kZXggMGU2MGZmNi4uZTUwMmEyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbApAQCAtMjcsNiArMjcsOCBA
QAogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgRW5hYmxlZEF0UnVudGlt
ZT1JbmRleGVkREIsCiAgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24sCisgICAgSlNDdXN0b21NYXJr
RnVuY3Rpb24sCisgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAogXSBpbnRlcmZhY2UgSURC
SW5kZXggewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgSURCT2JqZWN0U3RvcmUgb2JqZWN0U3RvcmU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA0ZGJkNzI1
Li4yYzRiNGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmgKQEAgLTkyLDYgKzkyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVm
UHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJLZXlSYW5n
ZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKICAgICB2aXJ0dWFsIFJlZlB0cjxJ
REJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwogCisg
ICAgdmlydHVhbCBib29sIGlzTW9kZXJuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogcHJv
dGVjdGVkOgogICAgIElEQk9iamVjdFN0b3JlKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4IDkzY2NiNzEuLjQ5
MGNjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5pZGwKQEAgLTI3LDYgKzI3LDggQEAKICAgICBDb25kaXRpb25hbD1JTkRFWEVE
X0RBVEFCQVNFLAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9SW5kZXhlZERCLAogICAgIFNraXBWVGFi
bGVWYWxpZGF0aW9uLAorICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgIEdlbmVyYXRlSXNS
ZWFjaGFibGU9SW1wbCwKIF0gaW50ZXJmYWNlIElEQk9iamVjdFN0b3JlIHsKICAgICBbVHJlYXRS
ZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5h
bWU7CiAgICAgW0ltcGxlbWVudGVkQXM9a2V5UGF0aEFueV0gcmVhZG9ubHkgYXR0cmlidXRlIElE
QkFueSBrZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNwcAppbmRleCA1OGI1ZmVkLi5jZjJlNmUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
SW5kZXhJbXBsLmNwcApAQCAtNDEsMTEgKzQxLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBJREJDbGllbnQgewogCi1SZWY8SURCSW5kZXg+IElEQkluZGV4OjpjcmVhdGUoY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCSW5kZXgoaW5mbywgb2JqZWN0U3RvcmUpKTsKLX0K
LQogSURCSW5kZXg6OklEQkluZGV4KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgSURCT2JqZWN0
U3RvcmUmIG9iamVjdFN0b3JlKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX29iamVjdFN0
b3JlKG9iamVjdFN0b3JlKQpAQCAtNjMsNyArNTgsNyBAQCBjb25zdCBTdHJpbmcmIElEQkluZGV4
OjpuYW1lKCkgY29uc3QKIAogUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlPiBJREJJbmRl
eDo6b2JqZWN0U3RvcmUoKQogewotICAgIHJldHVybiAmbV9vYmplY3RTdG9yZS5nZXQoKTsKKyAg
ICByZXR1cm4gJm1fb2JqZWN0U3RvcmU7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IElE
QkluZGV4OjprZXlQYXRoQW55KCkgY29uc3QKQEAgLTkwLDEzICs4NSwxMyBAQCBSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dAogewogICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbkN1cnNv
ciIpOwogCi0gICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLT5pc0RlbGV0ZWQoKSkg
eworICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewogICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwog
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3Bl
bkN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFz
IGJlZW4gZGVsZXRlZC4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAg
aWYgKCFtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKKyAg
ICBpZiAoIW1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7CiAg
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0
aXZlIG9yIGZpbmlzaGVkLiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTExNCw5ICsx
MDksOCBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgIGlmIChyYW5nZURhdGEudXBwZXJL
ZXkuaXNOdWxsKCkpCiAgICAgICAgIHJhbmdlRGF0YS51cHBlcktleSA9IElEQktleURhdGE6Om1h
eGltdW0oKTsKIAotICAgIGF1dG8gaW5mbyA9IElEQkN1cnNvckluZm86OmluZGV4Q3Vyc29yKG1f
b2JqZWN0U3RvcmUtPm1vZGVyblRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmluZm8oKS5p
ZGVudGlmaWVyKCksIG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlRGF0YSwgZGlyZWN0aW9uLCBJ
bmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlKTsKLSAgICBSZWY8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IG1fb2JqZWN0U3RvcmUtPm1vZGVyblRyYW5zYWN0aW9uKCkucmVxdWVzdE9wZW5D
dXJzb3IoKmNvbnRleHQsICp0aGlzLCBpbmZvKTsKLSAgICByZXR1cm4gV1RGTW92ZShyZXF1ZXN0
KTsKKyAgICBhdXRvIGluZm8gPSBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcihtX29iamVjdFN0
b3JlLm1vZGVyblRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZpZXIo
KSwgbV9pbmZvLmlkZW50aWZpZXIoKSwgcmFuZ2VEYXRhLCBkaXJlY3Rpb24sIEluZGV4ZWREQjo6
Q3Vyc29yVHlwZTo6S2V5QW5kVmFsdWUpOworICAgIHJldHVybiBtX29iamVjdFN0b3JlLm1vZGVy
blRyYW5zYWN0aW9uKCkucmVxdWVzdE9wZW5DdXJzb3IoKmNvbnRleHQsICp0aGlzLCBpbmZvKTsK
IH0KIAogUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmIGVjKQpAQCAtMTc3LDcgKzE3MSw3IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJ
REJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uCiAKIFJl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6ZG9Db3VudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewotICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RT
dG9yZS0+aXNEZWxldGVkKCkpIHsKKyAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUu
aXNEZWxldGVkKCkpIHsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9i
amVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTE4OCw3ICsxODIsNyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6
OmRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgYwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvJiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0U3Rv
cmUtPm1vZGVyblRyYW5zYWN0aW9uKCk7CisgICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVj
dFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi5pc0FjdGl2
ZSgpKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rp
b25JbmFjdGl2ZUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBp
bmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKQEAgLTIwMiwxMyArMTk2LDEzIEBAIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpvcGVuS2V5Q3Vy
c29yIik7CiAKLSAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUtPmlzRGVsZXRlZCgp
KSB7CisgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKSB7CiAg
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7
CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdv
cGVuS2V5Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9y
ZSBoYXMgYmVlbiBkZWxldGVkLiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBpZiAoIW1fb2JqZWN0U3RvcmUtPm1vZGVyblRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkg
eworICAgIGlmICghbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLmlzQWN0aXZlKCkp
IHsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbklu
YWN0aXZlRXJyb3I7CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdvcGVuS2V5Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24g
aXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MjIwLDkgKzIxNCw4IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6b3Bl
bktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAotICAgIGF1dG8gaW5mbyA9IElEQkN1cnNvckluZm86OmluZGV4Q3Vy
c29yKG1fb2JqZWN0U3RvcmUtPm1vZGVyblRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmlu
Zm8oKS5pZGVudGlmaWVyKCksIG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlLCBkaXJlY3Rpb24s
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSk7Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpLnJlcXVlc3RPcGVuQ3Vy
c29yKCpjb250ZXh0LCAqdGhpcywgaW5mbyk7Ci0gICAgcmV0dXJuIFdURk1vdmUocmVxdWVzdCk7
CisgICAgYXV0byBpbmZvID0gSURCQ3Vyc29ySW5mbzo6aW5kZXhDdXJzb3IobV9vYmplY3RTdG9y
ZS5tb2Rlcm5UcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCks
IG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlLCBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29y
VHlwZTo6S2V5T25seSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rp
b24oKS5yZXF1ZXN0T3BlbkN1cnNvcigqY29udGV4dCwgKnRoaXMsIGluZm8pOwogfQogCiBSZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
CkBAIC0yNzAsNyArMjYzLDcgQEAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4
OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QKIAogUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKQogewotICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS0+aXNE
ZWxldGVkKCkpIHsKKyAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVk
KCkpIHsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3Rh
dGVFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2dldCcgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUg
aGFzIGJlZW4gZGVsZXRlZC4iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yODEsNyAr
Mjc0LDcgQEAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb24KICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLT5tb2Rlcm5U
cmFuc2FjdGlvbigpOworICAgIGF1dG8mIHRyYW5zYWN0aW9uID0gbV9vYmplY3RTdG9yZS5tb2Rl
cm5UcmFuc2FjdGlvbigpOwogICAgIGlmICghdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkgewogICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2dldCcgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZp
bmlzaGVkLiIpOwpAQCAtMzI1LDcgKzMxOCw3IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvCiAK
IFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6ZG9HZXRLZXkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKLSAgICBpZiAobV9kZWxldGVkIHx8IG1fb2Jq
ZWN0U3RvcmUtPmlzRGVsZXRlZCgpKSB7CisgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0
b3JlLmlzRGVsZXRlZCgpKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SW52YWxpZFN0YXRlRXJyb3I7CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBp
dHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMzM2LDcgKzMyOSw3IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJ
bmRleDo6ZG9HZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVj
dFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpOworICAgIGF1dG8mIHRyYW5zYWN0aW9uID0gbV9v
YmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpOwogICAgIGlmICghdHJhbnNhY3Rpb24uaXNB
Y3RpdmUoKSkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5z
YWN0aW9uSW5hY3RpdmVFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9u
IGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwpAQCAtMzQ2LDExICszMzksNTEgQEAgUmVmUHRy
PFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LAogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0R2V0S2V5KGNv
bnRleHQsICp0aGlzLCByYW5nZSk7CiB9CiAKLXZvaWQgSURCSW5kZXg6Om1hcmtBc0RlbGV0ZWQo
KQordm9pZCBJREJJbmRleDo6bWFya0FzRGVsZXRlZChzdGQ6OnVuaXF1ZV9wdHI8SURCSW5kZXg+
JiYgaW5kZXhPd25lcikKIHsKKyAgICBBU1NFUlQoIW1fZGVsZXRlZCk7CisgICAgQVNTRVJUKCFt
X3NlbGZPd25lcik7CisgICAgQVNTRVJUKGluZGV4T3duZXIuZ2V0KCkgPT0gdGhpcyk7CisKKyAg
ICAvLyBJZiBub2JvZHkgd2FzIGtlZXBpbmcgYSByZWYgdG8gdGhpcyBJREJJbmRleCB3aGlsZSB1
bmRlciBJREJPYmplY3RTdG9yZSBvd25lcnNoaXAsCisgICAgLy8gaXQgY2FuIGJlIGRlbGV0ZWQg
bm93IGJ5IGxldHRpbmcgaW5kZXhPd25lciBnbyBvdXQgb2Ygc2NvcGUuCisgICAgaWYgKCFtX3Jl
ZkNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NlbGZPd25lciA9IFdURk1vdmUoaW5k
ZXhPd25lcik7CisKKyAgICAvLyBOb3cgdGhhdCB0aGUgSURCSW5kZXggaXMgbWFuYWdpbmcgaXRz
IG93biBsaWZldGltZSwgaXQgbXVzdCByZWYoKSBpdHMgSURCT2JqZWN0U3RvcmUgdG8ga2VlcCBp
dCBhbGl2ZS4KKyAgICBtX29iamVjdFN0b3JlUmVmID0gJm1fb2JqZWN0U3RvcmU7CisKKyAgICAv
LyBJdCBtdXN0IHVuZG8gYWxsIG9mIHRoZSByZWZzIGl0IGhhZCBwcmV2aW91c2x5IGdpdmVuIGl0
cyBJREJPYmplY3RTdG9yZSB3aGVuIHRoZSBsaWZldGltZXMgd2VyZSBpbnRlcnR3aW5lZC4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZkNvdW50OyBpID4gMDsgLS1pKQorICAgICAgICBtX29i
amVjdFN0b3JlLmRlcmVmKCk7CisKICAgICBtX2RlbGV0ZWQgPSB0cnVlOwogfQogCit2b2lkIElE
QkluZGV4OjpyZWYoKQoreworICAgICsrbV9yZWZDb3VudDsKKworICAgIGlmICghbV9kZWxldGVk
KQorICAgICAgICBtX29iamVjdFN0b3JlLnJlZigpOworfQorCit2b2lkIElEQkluZGV4OjpkZXJl
ZigpCit7CisgICAgLS1tX3JlZkNvdW50OworCisgICAgaWYgKCFtX2RlbGV0ZWQpCisgICAgICAg
IG1fb2JqZWN0U3RvcmUuZGVyZWYoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gVGhpcyBJREJJ
bmRleCBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIGl0cyBJREJPYmplY3RTdG9yZSBzbyBpZiBpdHMg
UmVmQ291bnQKKyAgICAgICAgLy8ganVzdCB3ZW50IHRvIDAgaXQgc2hvdWxkIGJlIGRlc3Ryb3ll
ZC4KKyAgICAgICAgaWYgKCFtX3JlZkNvdW50KQorICAgICAgICAgICAgbV9zZWxmT3duZXIgPSBu
dWxscHRyOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJJbmRleEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJJbmRleEltcGwuaAppbmRleCBiMTgwYTY0Li5iMDgyZjY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4
SW1wbC5oCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIElEQk9iamVjdFN0b3JlOwogCiBjbGFzcyBJ
REJJbmRleCA6IHB1YmxpYyBXZWJDb3JlOjpJREJJbmRleCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxJREJJbmRleD4gY3JlYXRlKGNvbnN0IElEQkluZGV4SW5mbyYsIElEQk9iamVjdFN0b3Jl
Jik7CisgICAgSURCSW5kZXgoY29uc3QgSURCSW5kZXhJbmZvJiwgSURCT2JqZWN0U3RvcmUmKTsK
IAogICAgIHZpcnR1YWwgfklEQkluZGV4KCk7CiAKQEAgLTc3LDIyICs3NywzOCBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBJREJJbmRleEluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87
IH0KIAotICAgIElEQk9iamVjdFN0b3JlJiBtb2Rlcm5PYmplY3RTdG9yZSgpIHsgcmV0dXJuIG1f
b2JqZWN0U3RvcmUuZ2V0KCk7IH0KKyAgICBJREJPYmplY3RTdG9yZSYgbW9kZXJuT2JqZWN0U3Rv
cmUoKSB7IHJldHVybiBtX29iamVjdFN0b3JlOyB9CiAKLSAgICB2b2lkIG1hcmtBc0RlbGV0ZWQo
KTsKKyAgICB2b2lkIG1hcmtBc0RlbGV0ZWQoc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiYmKTsK
ICAgICBib29sIGlzRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQogCi1wcml2
YXRlOgotICAgIElEQkluZGV4KGNvbnN0IElEQkluZGV4SW5mbyYsIElEQk9iamVjdFN0b3JlJik7
CisgICAgdmlydHVhbCBib29sIGlzTW9kZXJuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogCisgICAgdm9pZCByZWYoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlcmVmKCkgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRvQ291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0dl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJik7CiAgICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRv
R2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKIAogICAgIElEQkluZGV4SW5mbyBtX2luZm87Ci0g
ICAgUmVmPElEQk9iamVjdFN0b3JlPiBtX29iamVjdFN0b3JlOwogCiAgICAgYm9vbCBtX2RlbGV0
ZWQgeyBmYWxzZSB9OworCisgICAgLy8gTW9zdCBvZiB0aGUgdGltZSwgYW4gSURCT2JqZWN0U3Rv
cmUgb3ducyBhbiBJREJJbmRleCB0aHJvdWdoIGEgc3RkOjp1bmlxdWVfcHRyLgorICAgIC8vIElu
IHRoYXQgc2NlbmFyaW8sIGF0dGVtcHRzIHRvIHJlZigpIHRoZSBJREJJbmRleCBkaXJlY3RseSBy
ZWYgdGhlIElEQk9iamVjdFN0b3JlLCBzbyBpdCBpcyBva2F5IHRvCisgICAgLy8ga2VlcCBhIHJh
dyByZWZlcmVuY2UgdG8gdGhlIElEQk9iamVjdFN0b3JlIGJlY2F1c2UgaXQgd2lsbCBhbHdheXMg
b3V0bGl2ZSB0aGUgSURCSW5kZXguCisgICAgSURCT2JqZWN0U3RvcmUmIG1fb2JqZWN0U3RvcmU7
CisKKyAgICAvLyBCdXQgd2hlbiBhbiBJREJJbmRleCBpcyBkZWxldGVkIGZyb20gaXRzIElEQk9i
amVjdFN0b3JlIHRoYXQgbGlmZXRpbWUgaXMgbm8gbG9uZ2VyIGd1YXJhbnRlZWQuCisgICAgLy8g
VGhlIElEQk9iamVjdFN0b3JlIG5vIGxvbmdlciBvd25zIHRoZSBJREJJbmRleCwgc28gdGhlIGZv
bGxvd2luZyBuZWVkcyB0byBjaGFuZ2U6CisgICAgLy8gMSAtIFRoZSBJREJJbmRleCBtdXN0IGRp
cmVjdGx5IHJlZiBpdHMgSURCT2JqZWN0U3RvcmUgdG8ga2VlcCBpdCBhbGl2ZS4KKyAgICAvLyAy
IC0gVGhlIElEQkluZGV4IGJlY29tZXMgdHJhZGl0aW9uYWxseSBSZWZDb3VudGVkLgorICAgIC8v
IDIgLSBUaGUgSURCSW5kZXggaG9sZHMgaXRzIG93biBzdGQ6OnVuaXF1ZV9wdHIsIHdoaWNoIGl0
IHdpbGwgY2xlYXIgb3V0IHdoZW4gaXRzIFJlZkNvdW50IHJlYWNoZXMgMC4KKyAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmVSZWY7CisgICAgdW5zaWduZWQgbV9yZWZDb3Vu
dCB7IDAgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCSW5kZXg+IG1fc2VsZk93bmVyOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwCmlu
ZGV4IDg1ZjY3MjUuLjJhMmQzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwCkBAIC00
MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiSW5kZXhlZERCLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElEQkNsaWVudCB7CkBAIC00
ODYsMTAgKzQ4NywxMyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgIG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuZGlkQ3JlYXRlSW5kZXhJbmZvKGluZm8pOwogCiAgICAgLy8gQ3JlYXRl
IHRoZSBhY3R1YWwgSURCT2JqZWN0U3RvcmUgZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdoaWNoIGFs
c28gc2NoZWR1bGVzIHRoZSBvcGVyYXRpb24gc2VydmVyIHNpZGUuCi0gICAgUmVmPElEQkluZGV4
PiBpbmRleCA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUluZGV4KCp0aGlzLCBpbmZvKTsKLSAgICBt
X3JlZmVyZW5jZWRJbmRleGVzLnNldChuYW1lLCAmaW5kZXguZ2V0KCkpOworICAgIGF1dG8gaW5k
ZXggPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJbmRleCgqdGhpcywgaW5mbyk7CisgICAgUmVmUHRy
PElEQkluZGV4PiByZWZJbmRleCA9IGluZGV4LmdldCgpOwogCi0gICAgcmV0dXJuIFdURk1vdmUo
aW5kZXgpOworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsK
KyAgICBtX3JlZmVyZW5jZWRJbmRleGVzLnNldChuYW1lLCBXVEZNb3ZlKGluZGV4KSk7CisKKyAg
ICByZXR1cm4gV1RGTW92ZShyZWZJbmRleCk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJJbmRl
eD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmIGVjKQpAQCAtNTA4LDkgKzUxMiwxMCBAQCBSZWZQdHI8V2ViQ29y
ZTo6SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFt
ZSwgRXhjZXB0aQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBMb2NrZXI8
TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CiAgICAgYXV0byBpdGVyYXRvciA9
IG1fcmVmZXJlbmNlZEluZGV4ZXMuZmluZChpbmRleE5hbWUpOwogICAgIGlmIChpdGVyYXRvciAh
PSBtX3JlZmVyZW5jZWRJbmRleGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZh
bHVlOworICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogCiAgICAgYXV0byog
aW5mbyA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdJbmRleChpbmRleE5hbWUpOwogICAgIGlmICgh
aW5mbykgewpAQCAtNTE5LDEwICs1MjQsMTEgQEAgUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4PiBJ
REJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEV4Y2VwdGkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0byBpbmRleCA9IElEQkluZGV4
OjpjcmVhdGUoKmluZm8sICp0aGlzKTsKLSAgICBtX3JlZmVyZW5jZWRJbmRleGVzLnNldChpbmRl
eE5hbWUsICZpbmRleC5nZXQoKSk7CisgICAgYXV0byBpbmRleCA9IHN0ZDo6bWFrZV91bmlxdWU8
SURCSW5kZXg+KCppbmZvLCAqdGhpcyk7CisgICAgUmVmUHRyPElEQkluZGV4PiByZWZJbmRleCA9
IGluZGV4LmdldCgpOworICAgIG1fcmVmZXJlbmNlZEluZGV4ZXMuc2V0KGluZGV4TmFtZSwgV1RG
TW92ZShpbmRleCkpOwogCi0gICAgcmV0dXJuIFdURk1vdmUoaW5kZXgpOworICAgIHJldHVybiBy
ZWZJbmRleDsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQpAQCAtNTU5LDggKzU2NSwx
MSBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZQogCiAgICAgbV9pbmZvLmRlbGV0ZUluZGV4KG5h
bWUpOwogCi0gICAgaWYgKGF1dG8gaW5kZXggPSBtX3JlZmVyZW5jZWRJbmRleGVzLnRha2UobmFt
ZSkpCi0gICAgICAgIGluZGV4LT5tYXJrQXNEZWxldGVkKCk7CisgICAgeworICAgICAgICBMb2Nr
ZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CisgICAgICAgIGlmIChhdXRv
IGluZGV4ID0gbV9yZWZlcmVuY2VkSW5kZXhlcy50YWtlKG5hbWUpKQorICAgICAgICAgICAgaW5k
ZXgtPm1hcmtBc0RlbGV0ZWQoV1RGTW92ZShpbmRleCkpOworICAgIH0KIAogICAgIG1fdHJhbnNh
Y3Rpb24tPmRlbGV0ZUluZGV4KG1faW5mby5pZGVudGlmaWVyKCksIG5hbWUpOwogfQpAQCAtNjQ2
LDYgKzY1NSwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0luZm9Gb3JWZXJzaW9u
Q2hhbmdlQWJvcnQoKQogICAgIG1faW5mbyA9IG1fb3JpZ2luYWxJbmZvOwogfQogCit2b2lkIElE
Qk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0Cit7CisgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRl
eExvY2spOworICAgIGZvciAoYXV0byYgaW5kZXggOiBtX3JlZmVyZW5jZWRJbmRleGVzLnZhbHVl
cygpKQorICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0
b3JlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9i
amVjdFN0b3JlSW1wbC5oCmluZGV4IDhiMDJkZTAuLjYwOTZhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3Rv
cmVJbXBsLmgKQEAgLTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcm9sbGJhY2tJ
bmZvRm9yVmVyc2lvbkNoYW5nZUFib3J0KCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb2Rlcm4o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIHZpc2l0UmVmZXJl
bmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYpIGNvbnN0OworCiBwcml2YXRlOgogICAgIElE
Qk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIElEQlRyYW5zYWN0aW9uJik7
CiAKQEAgLTExMSw3ICsxMTUsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2RlbGV0ZWQgeyBm
YWxzZSB9OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleD4+IG1fcmVmZXJl
bmNlZEluZGV4ZXM7CisgICAgbXV0YWJsZSBMb2NrIG1fcmVmZXJlbmNlZEluZGV4TG9jazsKKyAg
ICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4Pj4gbV9yZWZlcmVuY2Vk
SW5kZXhlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rp
b25JbXBsLmNwcAppbmRleCAzOGNjMzFkLi44MmE5YmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25J
bXBsLmNwcApAQCAtNDk0LDE3ICs0OTQsMTUgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQ3Jl
YXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXQKICAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3Vs
dFR5cGU6OkNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJ
REJSZXN1bHRUeXBlOjpFcnJvcik7CiB9CiAKLVJlZjxJREJJbmRleD4gSURCVHJhbnNhY3Rpb246
OmNyZWF0ZUluZGV4KElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCSW5kZXhJ
bmZvJiBpbmZvKQorc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBJREJUcmFuc2FjdGlvbjo6Y3Jl
YXRlSW5kZXgoSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJJbmRleEluZm8m
IGluZm8pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRl
eCIpOwogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAKLSAgICBSZWY8SURCSW5kZXg+
IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0ZShpbmZvLCBvYmplY3RTdG9yZSk7Ci0KICAgICBhdXRv
IG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAmSURCVHJhbnNh
Y3Rpb246OmRpZENyZWF0ZUluZGV4T25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5k
ZXhPblNlcnZlciwgaW5mbyk7CiAgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRp
b24pKTsKIAotICAgIHJldHVybiBpbmRleDsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJ
REJJbmRleD4oaW5mbywgb2JqZWN0U3RvcmUpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpj
cmVhdGVJbmRleE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0
IElEQkluZGV4SW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAppbmRleCBlZDBiMzg0
Li40NDM4Yzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCkBAIC05Nyw3ICs5Nyw3IEBAIHB1
YmxpYzoKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAKICAgICBSZWY8SURCT2JqZWN0U3Rv
cmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwotICAgIFJl
ZjxJREJJbmRleD4gY3JlYXRlSW5kZXgoSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJJbmRleElu
Zm8mKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KElEQk9iamVj
dFN0b3JlJiwgY29uc3QgSURCSW5kZXhJbmZvJik7CiAKICAgICBSZWY8SURCUmVxdWVzdD4gcmVx
dWVzdFB1dE9yQWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIElE
QktleSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVy
d3JpdGVNb2RlKTsKICAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEdldFJlY29yZChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9M
ZWdhY3lJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5SW5kZXguY3BwCmluZGV4IDUyOWM2ZTMuLjM3YTA5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmNwcApA
QCAtNTQsNiArNTQsMTkgQEAgTGVnYWN5SW5kZXg6On5MZWdhY3lJbmRleCgpCiB7CiB9CiAKK3Zv
aWQgTGVnYWN5SW5kZXg6OnJlZigpCit7CisgICAgKyttX3JlZkNvdW50OworfQorCit2b2lkIExl
Z2FjeUluZGV4OjpkZXJlZigpCit7CisgICAgaWYgKC0tbV9yZWZDb3VudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZGVsZXRlIHRoaXM7Cit9CisKIFJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJ
bmRleDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlS
YW5nZSoga2V5UmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmIGVjKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5SW5kZXg6
Om9wZW5DdXJzb3IiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmgKaW5kZXggYmRiODBjOS4uOGI3MTMxYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4
LmgKQEAgLTg5LDYgKzg5LDkgQEAgcHVibGljOgogCiAgICAgSURCRGF0YWJhc2VCYWNrZW5kKiBi
YWNrZW5kREIoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCByZWYoKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAgICBMZWdhY3lJ
bmRleChjb25zdCBJREJJbmRleE1ldGFkYXRhJiwgTGVnYWN5T2JqZWN0U3RvcmUqLCBMZWdhY3lU
cmFuc2FjdGlvbiopOwogCkBAIC05Niw2ICs5OSw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPExl
Z2FjeU9iamVjdFN0b3JlPiBtX29iamVjdFN0b3JlOwogICAgIFJlZlB0cjxMZWdhY3lUcmFuc2Fj
dGlvbj4gbV90cmFuc2FjdGlvbjsKICAgICBib29sIG1fZGVsZXRlZDsKKworICAgIHVuc2lnbmVk
IG1fcmVmQ291bnQgeyAxIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjdj
YTFkYS4uODRiZjY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTk4MSw2ICsxOTgxLDcgQEAKIAkJNTE0MTI5OTAxQzYwMUFD
QzAwNTlFNzE0IC8qIFNjb3BlR3VhcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNDEyOThGMUM2MDFBODkwMDU5RTcxNCAvKiBTY29wZUd1YXJkLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0MTI5
OTgxQzY5NzY5MDAwNTlFNzE0IC8qIElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MTI5OTYxQzY5NzYx
NTAwNTlFNzE0IC8qIElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwICovOyB9OwogCQk1MTQx
Mjk5OTFDNjk3NjkwMDA1OUU3MTQgLyogSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MTI5OTcxQzY5NzYx
NTAwNTlFNzE0IC8qIElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaCAqLzsgfTsKKwkJNTE0MTI5
OUIxQzZDMTY3NDAwNTlFNzE0IC8qIEpTSURCSW5kZXhDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MTI5OUExQzZDMTY2RDAwNTlFNzE0
IC8qIEpTSURCSW5kZXhDdXN0b20uY3BwICovOyB9OwogCQk1MTQ1QjEwOTFCQzQ4RTJFMDBFODYy
MTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNDVCMTA3MUJDNDg5MEIwMEU4NjIxOSAvKiBJREJSZXNv
dXJjZUlkZW50aWZpZXIuY3BwICovOyB9OwogCQk1MTQ1QjEwQTFCQzQ4RTJFMDBFODYyMTkgLyog
SURCUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTQ1QjEwODFCQzQ4OTBCMDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVu
dGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTE0ODQ1M0UxQkI5RDA3RTAwNkE3MkVEIC8qIElEQkVycm9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNDg0NTNDMUJCOUQwNzYwMDZBNzJF
RCAvKiBJREJFcnJvci5jcHAgKi87IH07CkBAIC05NDg5LDYgKzk0OTAsNyBAQAogCQk1MTQxMjk4
RjFDNjAxQTg5MDA1OUU3MTQgLyogU2NvcGVHdWFyZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY29wZUd1YXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NDEyOTk2MUM2OTc2MTUwMDU5RTcxNCAvKiBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlJlcXVlc3RDb21wbGV0aW9u
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTQxMjk5NzFDNjk3NjE1
MDA1OUU3MTQgLyogSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxNDEyOTlBMUM2QzE2NkQwMDU5RTcxNCAvKiBKU0lEQkluZGV4
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCSW5k
ZXhDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTQ1QjEwNzFCQzQ4
OTBCMDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlJlc291cmNlSWRlbnRpZmllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDVCMTA4MUJDNDg5MEIwMEU4NjIxOSAvKiBJREJSZXNv
dXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUmVz
b3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDg0NTND
MUJCOUQwNzYwMDZBNzJFRCAvKiBJREJFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJREJFcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMjM1Miw2ICsyMjM1NCw3IEBACiAJCQkJNTEyQkRCNEMxQzQ2QjBGRjAwNjQ5NERGIC8qIEpT
SURCQ3Vyc29yQ3VzdG9tLmNwcCAqLywKIAkJCQk1MTQxMjk4RDFDNUZEN0U5MDA1OUU3MTQgLyog
SlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwICovLAogCQkJCTUxMUVGMkNEMTdGMEZERjEw
MEU0RkExNiAvKiBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcCAqLywKKwkJCQk1MTQxMjk5QTFDNkMx
NjZEMDA1OUU3MTQgLyogSlNJREJJbmRleEN1c3RvbS5jcHAgKi8sCiAJCQkJNTExRUYyQ0UxN0Yw
RkRGMTAwRTRGQTE2IC8qIEpTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwICovLAogCQkJCUE3RDAz
MThEMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0ltYWdlRGF0YUN1c3RvbS5jcHAgKi8sCiAJCQkJN0E3
NEVDQkMxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNw
cCAqLywKQEAgLTI5NDI2LDYgKzI5NDI5LDcgQEAKIAkJCQkzRjJCMzNFQzE2NUFGMTU2MDBFMzk4
N0MgLyogRE9NV2ViS2l0Q1NTVmlld3BvcnRSdWxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOEEx
OTU5MzMxNDdFQTE2RTAwRDFFQTYxIC8qIERPTVdlYktpdE5hbWVkRmxvdy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxQzBGRjREMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRUcmFuc2l0aW9u
RXZlbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTQxMjk5QjFDNkMxNjc0MDA1OUU3MTQgLyog
SlNJREJJbmRleEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUM3RjVFODBBQUZCQUZC
MDA0MDE0REQgLyogRE9NV2hlZWxFdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MDNCOTk4
MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ2
Nzc3MzgxOTVDQUYzRDAwNzJFMEQzIC8qIERPTVdpbmRvd0NTUy5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjMmNjZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNJREJJbmRleC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRl
ICJJREJJbmRleEltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICghd3JhcHBlZCgpLmlzTW9kZXJuKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmc3RhdGljX2Nhc3Q8SURC
Q2xpZW50OjpJREJJbmRleCY+KHdyYXBwZWQoKSkubW9kZXJuT2JqZWN0U3RvcmUoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RT
dG9yZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0
b3JlQ3VzdG9tLmNwcAppbmRleCA0NjIyNzBjLi5mYTY4M2NhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcApAQCAtMzQs
NyArMzQsNyBAQAogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRl
ICJJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW1wbC5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTSURCSW5kZXguaCIKICNpbmNsdWRl
ICJKU0lEQlJlcXVlc3QuaCIKQEAgLTQ1LDYgKzQ1LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordm9pZCBKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAoIXdyYXBw
ZWQoKS5pc01vZGVybigpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWNfY2FzdDxJREJD
bGllbnQ6OklEQk9iamVjdFN0b3JlJj4od3JhcHBlZCgpKS52aXNpdFJlZmVyZW5jZWRJbmRleGVz
KHZpc2l0b3IpOworfQorCiBzdGF0aWMgSlNWYWx1ZSBwdXRPckFkZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGJvb2wgb3ZlcndyaXRlKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUu
dGhpc1ZhbHVlKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>