<?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>47245</bug_id>
          
          <creation_ts>2010-10-05 20:56:05 -0700</creation_ts>
          <short_desc>IDBDatabase and IDBObjectStore metadata is not recovered correctly when the setVersion transactions aborts.</short_desc>
          <delta_ts>2010-10-06 16:55:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrei Popescu">andreip</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jorlow</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>290078</commentid>
    <comment_count>0</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-05 20:56:05 -0700</bug_when>
    <thetext>IDBDatabase and IDBObjectStore metadata is not recovered correctly when the setVersion transactions aborts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290082</commentid>
    <comment_count>1</comment_count>
      <attachid>69883</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-05 21:04:03 -0700</bug_when>
    <thetext>Created attachment 69883
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290100</commentid>
    <comment_count>2</comment_count>
      <attachid>69883</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-05 22:50:14 -0700</bug_when>
    <thetext>Comment on attachment 69883
Patch

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

Looks pretty good!

&gt; LayoutTests/storage/indexeddb/objectstore-basics.html:73
&gt; +function createIndex() {

{ on next line

&gt; LayoutTests/storage/indexeddb/resources/shared.js:86
&gt; +    verifyAbortEvent(event);

Verify complete event.

&gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:193
&gt; +                                   createCallbackTask(&amp;IDBDatabaseBackendImpl::removeObjectStoreFromMap, database, objectStore))) {

This should add it, right?  Can you add testing for that?

&gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:256
&gt; +    database-&gt;m_objectStores.remove(objectStore-&gt;name());

What does remove do if it doesn&apos;t exist?  If it doesn&apos;t assert, maybe add one manually?

&gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:261
&gt; +    database-&gt;m_objectStores.set(objectStore-&gt;name(), objectStore);

similarly here

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:414
&gt; +    objectStore-&gt;m_indexes.remove(index-&gt;name());

and here

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:419
&gt; +    objectStore-&gt;m_indexes.set(index-&gt;name(), index);

and here

&gt; WebCore/storage/IDBTransactionBackendImpl.cpp:70
&gt; +        m_abortTaskQueue.prepend(abortTask);

Is this expensive?  If so, maybe you should process the abort task queue in reverse?

And maybe have a layout test that adds removes adds removes and then aborts?

Also maybe add a layout test that double adds then aborts...and double removes then aborts?

&gt; WebCore/storage/IDBTransactionBackendImpl.h:50
&gt; +    virtual bool scheduleTask(PassOwnPtr&lt;ScriptExecutionContext::Task&gt; task, PassOwnPtr&lt;ScriptExecutionContext::Task&gt; abortTaskn);

abortTask minus the n</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290604</commentid>
    <comment_count>3</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-06 15:09:24 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to comment #2)
&gt; (From update of attachment 69883 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69883&amp;action=review
&gt; 
&gt; Looks pretty good!
&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/objectstore-basics.html:73
&gt; &gt; +function createIndex() {
&gt; 
&gt; { on next line
&gt; 

Fixed.

&gt; &gt; LayoutTests/storage/indexeddb/resources/shared.js:86
&gt; &gt; +    verifyAbortEvent(event);
&gt; 
&gt; Verify complete event.
&gt;

Fixed,
 
&gt; &gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:193
&gt; &gt; +                                   createCallbackTask(&amp;IDBDatabaseBackendImpl::removeObjectStoreFromMap, database, objectStore))) {
&gt; 
&gt; This should add it, right?  Can you add testing for that?
&gt;

Fixed.
 
&gt; &gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:256
&gt; &gt; +    database-&gt;m_objectStores.remove(objectStore-&gt;name());
&gt; 
&gt; What does remove do if it doesn&apos;t exist?  If it doesn&apos;t assert, maybe add one manually?
&gt;

Added asserts.
 
&gt; 
&gt; &gt; WebCore/storage/IDBTransactionBackendImpl.cpp:70
&gt; &gt; +        m_abortTaskQueue.prepend(abortTask);
&gt; 
&gt; Is this expensive?  If so, maybe you should process the abort task queue in reverse?
&gt;

It&apos;s not expensive.
 
&gt; And maybe have a layout test that adds removes adds removes and then aborts?
&gt; 
&gt; Also maybe add a layout test that double adds then aborts...and double removes then aborts?
&gt; 

Added.

&gt; &gt; WebCore/storage/IDBTransactionBackendImpl.h:50
&gt; &gt; +    virtual bool scheduleTask(PassOwnPtr&lt;ScriptExecutionContext::Task&gt; task, PassOwnPtr&lt;ScriptExecutionContext::Task&gt; abortTaskn);
&gt; 
&gt; abortTask minus the n

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290610</commentid>
    <comment_count>4</comment_count>
      <attachid>69997</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-06 15:16:56 -0700</bug_when>
    <thetext>Created attachment 69997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290618</commentid>
    <comment_count>5</comment_count>
      <attachid>69997</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-06 15:31:04 -0700</bug_when>
    <thetext>Comment on attachment 69997
Patch

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

r=me

&gt; WebCore/storage/IDBDatabase.cpp:62
&gt; +    if (!objectStore || !m_setVersionTransaction)

Do this before you call the backend function!!

&gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:143
&gt; +                                   createCallbackTask(&amp;IDBDatabaseBackendImpl::removeObjectStoreFromMap, database, objectStore)))

{}

&gt; WebCore/storage/IDBDatabaseBackendImpl.cpp:217
&gt; +                                   createCallbackTask(&amp;IDBDatabaseBackendImpl::resetVersion, database, m_version)))

use {}

&gt; WebCore/storage/IDBObjectStoreBackendImpl.cpp:279
&gt; +                                   createCallbackTask(&amp;IDBObjectStoreBackendImpl::removeIndexFromMap, objectStore, index)))

use {}s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290632</commentid>
    <comment_count>6</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-06 15:52:48 -0700</bug_when>
    <thetext>Committed r69247: &lt;http://trac.webkit.org/changeset/69247&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290692</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-06 16:55:47 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69247 might have broken Chromium Win Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69883</attachid>
            <date>2010-10-05 21:04:03 -0700</date>
            <delta_ts>2010-10-06 15:16:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47245-20101005210401.patch</filename>
            <type>text/plain</type>
            <size>30065</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxNWFhNzk3OWMxZWYzMjE5NTgwOWQxOGYxNzg0ZThlOTU0YzVlOTM0Li4yNjczNTk2
ZWQ0NjQwOTQzNTM4ZjZiZWM0ZDRkNDRhNDAwYzdhNzk4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTAtMDUgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElEQkRhdGFiYXNlIGFu
ZCBJREJPYmplY3RTdG9yZSBtZXRhZGF0YSBpcyBub3QgcmVjb3ZlcmVkIGNvcnJlY3RseSB3aGVu
IHRoZSBzZXRWZXJzaW9uIHRyYW5zYWN0aW9ucyBhYm9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI0NQorCisgICAgICAgICogc3RvcmFnZS9p
bmRleGVkZGIvZGF0YWJhc2UtYmFzaWNzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9kYXRhYmFzZS1iYXNpY3MuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4
ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2Uv
aW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanM6CisgICAgICAgICh1bmV4cGVjdGVkQWJvcnRDYWxs
YmFjayk6CisgICAgICAgICh1bmV4cGVjdGVkQ29tcGxldGVDYWxsYmFjayk6CisKIDIwMTAtMTAt
MDUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2RhdGFiYXNlLWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9kYXRhYmFzZS1iYXNpY3MtZXhwZWN0ZWQudHh0CmluZGV4IGQwNTQ3NzhhN2YxNWQ5Mjdj
YjNkMWY1NjQxZDBhOGZiM2Q0NzE3OTkuLjM3NDE1MGM4NGQ2Yzc1MmYwNzcxMzExYWZlNDQ1NTFl
N2RmZjIzMWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFi
YXNlLWJhc2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZGF0YWJhc2UtYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtODgsNiArODgsMzkgQEAgUEFTUyBk
Yi5vYmplY3RTdG9yZXMubGVuZ3RoIGlzIDEKIFBBU1MgZGIub2JqZWN0U3RvcmVzLmNvbnRhaW5z
KCcnKSBpcyBmYWxzZQogUEFTUyBkYi5vYmplY3RTdG9yZXMuY29udGFpbnMoJ3Rlc3Q0NTYnKSBp
cyBmYWxzZQogUEFTUyBkYi5vYmplY3RTdG9yZXMuY29udGFpbnMoJ3Rlc3QxMjMnKSBpcyB0cnVl
CitkYi5zZXRWZXJzaW9uKCJ2ZXJzaW9uIGMiKQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQg
aXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3Rh
dGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisK
K1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIHRydWUKK1BB
U1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNzYWdlJyBpbiBldmVudCBpcyBm
YWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTIGV2ZW50LnNvdXJjZSAh
PSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUK
K1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRl
JyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBp
cyBldmVudC50YXJnZXQuRE9ORQorCitQQVNTIGRiLnZlcnNpb24gaXMgInZlcnNpb24gYyIKK1BB
U1MgZGIubmFtZSBpcyAibmFtZSIKK1BBU1MgZGIub2JqZWN0U3RvcmVzIGlzIFsndGVzdDEyMydd
CitQQVNTIGRiLm9iamVjdFN0b3Jlcy5sZW5ndGggaXMgMQorUEFTUyBkYi5vYmplY3RTdG9yZXMu
Y29udGFpbnMoJycpIGlzIGZhbHNlCitQQVNTIGRiLm9iamVjdFN0b3Jlcy5jb250YWlucygndGVz
dDQ1NicpIGlzIGZhbHNlCitQQVNTIGRiLm9iamVjdFN0b3Jlcy5jb250YWlucygndGVzdDEyMycp
IGlzIHRydWUKK2RiLmNyZWF0ZU9iamVjdFN0b3JlKCJ0ZXN0NDU2IikKK3NldFZlcnNpb25UcmFu
cyA9IGV2ZW50LnJlc3VsdAorUEFTUyBzZXRWZXJzaW9uVHJhbnMgIT09IG51bGwgaXMgdHJ1ZQor
UEFTUyBkYi52ZXJzaW9uIGlzICJ2ZXJzaW9uIGIiCitQQVNTIGRiLm9iamVjdFN0b3JlcyBpcyBb
J3Rlc3QxMjMnXQorUEFTUyBkYi5vYmplY3RTdG9yZXMubGVuZ3RoIGlzIDEKK1BBU1MgZGIub2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKCcnKSBpcyBmYWxzZQorUEFTUyBkYi5vYmplY3RTdG9yZXMuY29u
dGFpbnMoJ3Rlc3Q0NTYnKSBpcyBmYWxzZQorUEFTUyBkYi5vYmplY3RTdG9yZXMuY29udGFpbnMo
J3Rlc3QxMjMnKSBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRF
U1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2Rh
dGFiYXNlLWJhc2ljcy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJh
c2UtYmFzaWNzLmh0bWwKaW5kZXggMmViY2YwYjc4MmJkZTEzOTk2YjRjODAwYTY5MWU5NzE0MTc2
MzNiMS4uZmUwY2IxOWYyM2ZhNDJiYjIyOTg0NzlmMjUyNzRjMmEwYzNhMTIwMiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtYmFzaWNzLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtYmFzaWNzLmh0bWwKQEAg
LTczLDE4ICs3Myw1MiBAQCBmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZSgpCiAgICAgc2hvdWxk
QmUoImRiLm9iamVjdFN0b3Jlcy5jb250YWlucygnJykiLCAiZmFsc2UiKTsKIAogICAgIG9iamVj
dFN0b3JlID0gZXZhbEFuZExvZygnZGIuY3JlYXRlT2JqZWN0U3RvcmUoInRlc3QxMjMiKScpOw0K
LSAgICBjaGVja09iamVjdFN0b3JlKG9iamVjdFN0b3JlKTsKKyAgICBjaGVja09iamVjdFN0b3Jl
KCk7DQorICAgIGNvbW1pdEFuZENvbnRpbnVlKCk7CiB9CiAKLWZ1bmN0aW9uIGNoZWNrT2JqZWN0
U3RvcmUob2JqZWN0U3RvcmUpCitmdW5jdGlvbiBjaGVja09iamVjdFN0b3JlKCkKIHsKICAgICBz
aG91bGRCZSgiZGIub2JqZWN0U3RvcmVzIiwgIlsndGVzdDEyMyddIik7CiAgICAgc2hvdWxkQmUo
ImRiLm9iamVjdFN0b3Jlcy5sZW5ndGgiLCAiMSIpOwogICAgIHNob3VsZEJlKCJkYi5vYmplY3RT
dG9yZXMuY29udGFpbnMoJycpIiwgImZhbHNlIik7CiAgICAgc2hvdWxkQmUoImRiLm9iamVjdFN0
b3Jlcy5jb250YWlucygndGVzdDQ1NicpIiwgImZhbHNlIik7Ci0gICAgc2hvdWxkQmUoImRiLm9i
amVjdFN0b3Jlcy5jb250YWlucygndGVzdDEyMycpIiwgInRydWUiKTsKLQotICAgIGRvbmUoKTsK
KyAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVzLmNvbnRhaW5zKCd0ZXN0MTIzJykiLCAidHJ1
ZSIpOw0KK30NCisNCitmdW5jdGlvbiBjb21taXRBbmRDb250aW51ZSgpDQorew0KKyAgICB3aW5k
b3cuc2V0VGltZW91dCh0ZXN0U2V0VmVyc2lvbkFib3J0LCAwKTsKK30NCisNCitmdW5jdGlvbiB0
ZXN0U2V0VmVyc2lvbkFib3J0KCkNCit7DQorICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coJ2RiLnNl
dFZlcnNpb24oInZlcnNpb24gYyIpJyk7DQorICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOw0KKyAg
ICByZXN1bHQub25zdWNjZXNzID0gY3JlYXRlQW5vdGhlck9iamVjdFN0b3JlOw0KKyAgICByZXN1
bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOw0KK30NCisNCitmdW5jdGlvbiBj
cmVhdGVBbm90aGVyT2JqZWN0U3RvcmUoKQ0KK3sNCisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2
ZW50KTsNCisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkYi52ZXJzaW9uIiwgInZlcnNpb24g
YyIpOw0KKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRiLm5hbWUiLCAibmFtZSIpOw0KKyAg
ICBjaGVja09iamVjdFN0b3JlKCk7DQorDQorICAgIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygn
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoInRlc3Q0NTYiKScpOw0KKyAgICB2YXIgc2V0VmVyc2lvblRy
YW5zID0gZXZhbEFuZExvZygic2V0VmVyc2lvblRyYW5zID0gZXZlbnQucmVzdWx0Iik7DQorICAg
IHNob3VsZEJlVHJ1ZSgic2V0VmVyc2lvblRyYW5zICE9PSBudWxsIik7DQorICAgIHNldFZlcnNp
b25UcmFucy5vbmNvbXBsZXRlID0gdW5leHBlY3RlZENvbXBsZXRlQ2FsbGJhY2s7DQorICAgIHNl
dFZlcnNpb25UcmFucy5vbmFib3J0ID0gY2hlY2tNZXRhZGF0YTsNCisgICAgc2V0VmVyc2lvblRy
YW5zLmFib3J0KCk7DQorfQ0KKw0KK2Z1bmN0aW9uIGNoZWNrTWV0YWRhdGEoKQ0KK3sNCisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkYi52ZXJzaW9uIiwgInZlcnNpb24gYiIpOw0KKyAgICBj
aGVja09iamVjdFN0b3JlKCk7DQorICAgIGRvbmUoKTsNCiB9CiAKIHRlc3QoKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNp
Y3MtZXhwZWN0ZWQudHh0CmluZGV4IDlmMjFkZTA5MWNjYjE2YTZiZmM4ZTljMmQxYTJjMTcyNWUx
YTMyMzkuLjZmZjg3Yzg2OGE5NTM3YmQ3NDM5OGQ1MmI4MmNmMzgyODVmYjg0YjIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUt
YmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtNTAsMjAgKzUwLDUwIEBAIFBBU1Mgc3RvcmUubmFtZSBp
cyAic3RvcmVOYW1lIgogUEFTUyBzdG9yZS5rZXlQYXRoIGlzIG51bGwKIFBBU1Mgc3RvcmVOYW1l
cy5jb250YWlucygnc3RvcmVOYW1lJykgaXMgdHJ1ZQogUEFTUyBzdG9yZU5hbWVzLmxlbmd0aCBp
cyAxCi1Bc2sgZm9yIGEgc3RvcmUgdGhhdCBkb2Vzbid0IGV4aXN0OgorQXNrIGZvciBhbiBpbmRl
eCB0aGF0IGRvZXNuJ3QgZXhpc3Q6CiBpbmRleCA9IHN0b3JlLmluZGV4KCdhc2RmJykKIFBBU1Mg
aW5kZXggaXMgbnVsbAogUEFTUyBpbmRleCBpcyBudWxsCiBjcmVhdGVJbmRleCgpOgotc3RvcmUu
Y3JlYXRlSW5kZXgoJ2luZGV4TmFtZScsICd4JywgdHJ1ZSkKK2luZGV4ID0gc3RvcmUuY3JlYXRl
SW5kZXgoJ2luZGV4TmFtZScsICd4JywgdHJ1ZSkKIFBBU1MgaW5kZXggIT09IG51bGwgaXMgdHJ1
ZQogUEFTUyBzdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdpbmRleE5hbWUnKSBpcyB0cnVlCiBp
bmRleCA9IHN0b3JlLmluZGV4KCdpbmRleE5hbWUnKQogUEFTUyBpbmRleCAhPT0gbnVsbCBpcyB0
cnVlCi1Bc2sgZm9yIGEgc3RvcmUgdGhhdCBkb2Vzbid0IGV4aXN0OgorQXNrIGZvciBhbiBpbmRl
eCB0aGF0IGRvZXNuJ3QgZXhpc3Q6CiBpbmRleCA9IHN0b3JlLmluZGV4KCdhc2RmJykKIFBBU1Mg
aW5kZXggaXMgbnVsbAogUEFTUyBpbmRleCBpcyBudWxsLgorZGIuc2V0VmVyc2lvbigidmVyc2lv
biBmYWlsIikKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJy
b3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1
ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitTdWNjZXNzIGV2ZW50IGZpcmVk
OgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBp
cyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScg
aW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNT
ICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBl
dmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlz
IHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUK
KworUEFTUyBkYi52ZXJzaW9uIGlzICJ2ZXJzaW9uIGZhaWwiCitzZXRWZXJzaW9uVHJhbnMgPSBl
dmVudC5yZXN1bHQKK1BBU1Mgc2V0VmVyc2lvblRyYW5zICE9PSBudWxsIGlzIHRydWUKK3N0b3Jl
ID0gc2V0VmVyc2lvblRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQoraW5kZXggPSBzdG9y
ZS5jcmVhdGVJbmRleCgnaW5kZXhGYWlsJywgJ3gnKQorUEFTUyBkYi52ZXJzaW9uIGlzICJuZXcg
dmVyc2lvbiIKK1BBU1Mgc3RvcmUuaW5kZXhOYW1lcyBpcyBbJ2luZGV4TmFtZSddCitQQVNTIHN0
b3JlLmluZGV4TmFtZXMubGVuZ3RoIGlzIDEKK1BBU1Mgc3RvcmUuaW5kZXhOYW1lcy5jb250YWlu
cygnJykgaXMgZmFsc2UKK1BBU1Mgc3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhGYWls
JykgaXMgZmFsc2UKK1BBU1Mgc3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1lJykg
aXMgdHJ1ZQordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbigpCitzdG9yZSA9IHRyYW5zYWN0
aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQogc3RvcmUuYWRkKHt4OiAndmFsdWUnfSwgJ2tl
eScpCiBQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCiBQQVNTICdvbmVycm9yJyBp
biByZXN1bHQgaXMgdHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vYmplY3RzdG9yZS1iYXNpY3MuaHRtbAppbmRleCBkOTMwZjRiZjY1OGM0OTdiYjdiMDc3ZDZk
NGEyMTZlYmYyMTI0MzhkLi5mZWNmNWI1YWNkMTZhYjc4YTQyNTIzMzgxNjdiMTBkNDE2NDBjMTIw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1i
YXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9y
ZS1iYXNpY3MuaHRtbApAQCAtNDgsNyArNDgsNyBAQCBmdW5jdGlvbiBzZXRWZXJzaW9uU3VjY2Vz
cygpCiBmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZSgpCiB7DQogICAgIGRlYnVnKCJjcmVhdE9i
amVjdFN0b3JlKCk6Iik7DQotICAgIHZhciBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZGIu
Y3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScsIG51bGwpIik7CisgICAgd2luZG93LnN0b3Jl
ID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywg
bnVsbCkiKTsKICAgICB2YXIgc3RvcmVOYW1lcyA9IGV2YWxBbmRMb2coInN0b3JlTmFtZXMgPSBk
Yi5vYmplY3RTdG9yZXMiKTsKIAogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygic3RvcmUubmFt
ZSIsICJzdG9yZU5hbWUiKTsKQEAgLTU3LDcgKzU3LDcgQEAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0
U3RvcmUoKQogICAgIHNob3VsZEJlKCJzdG9yZU5hbWVzLmxlbmd0aCIsICIxIik7CiAgICAgLy8g
RklYTUU6IHRlc3QgYWxsIG9mIG9iamVjdCBzdG9yZSdzIG1ldGhvZHMuCiAKLSAgICBkZWJ1Zygi
QXNrIGZvciBhIHN0b3JlIHRoYXQgZG9lc24ndCBleGlzdDoiKTsKKyAgICBkZWJ1ZygiQXNrIGZv
ciBhbiBpbmRleCB0aGF0IGRvZXNuJ3QgZXhpc3Q6Iik7CiAgICAgdHJ5IHsKICAgICAgICAgaW5k
ZXggPSBldmFsQW5kTG9nKCJpbmRleCA9IHN0b3JlLmluZGV4KCdhc2RmJykiKTsNCiAgICAgICAg
IHNob3VsZEJlTnVsbCgiaW5kZXgiKTsgLy8gUmV0dXJuaW5nIG51bGwgaXMgd3JvbmcsIGJ1dCBs
ZXNzIHdyb25nIHRoYW4gcmV0dXJuaW5nIGFuIGFjdHVhbCBvYmplY3QhDQpAQCAtNjgsMjcgKzY4
LDczIEBAIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3JlKCkKICAgICB9DQogDQogICAgIGNyZWF0
ZUluZGV4KCk7Cit9DQorDQorZnVuY3Rpb24gY3JlYXRlSW5kZXgoKSB7DQorICAgIGRlYnVnKCJj
cmVhdGVJbmRleCgpOiIpOw0KKyAgICB2YXIgaW5kZXggPSBldmFsQW5kTG9nKCJpbmRleCA9IHN0
b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5hbWUnLCAneCcsIHRydWUpIik7IC8vIHRydWUgPT0gdW5p
cXVlIHJlcXVpcmVtZW50Lg0KKyAgICBzaG91bGRCZVRydWUoImluZGV4ICE9PSBudWxsIik7DQor
ICAgIHNob3VsZEJlVHJ1ZSgic3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1lJyki
KTsNCisgICAgaW5kZXggPSBldmFsQW5kTG9nKCJpbmRleCA9IHN0b3JlLmluZGV4KCdpbmRleE5h
bWUnKSIpOw0KKyAgICBzaG91bGRCZVRydWUoImluZGV4ICE9PSBudWxsIik7DQorDQorICAgIGRl
YnVnKCJBc2sgZm9yIGFuIGluZGV4IHRoYXQgZG9lc24ndCBleGlzdDoiKTsNCisgICAgdHJ5IHsN
CisgICAgICAgIGluZGV4ID0gZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5pbmRleCgnYXNkZicp
Iik7DQorICAgICAgICBzaG91bGRCZU51bGwoImluZGV4Iik7IC8vIFJldHVybmluZyBudWxsIGlz
IHdyb25nLCBidXQgbGVzcyB3cm9uZyB0aGFuIHJldHVybmluZyBhbiBhY3R1YWwgb2JqZWN0IQ0K
KyAgICAgICAgdGVzdFBhc3NlZCgiaW5kZXggaXMgbnVsbC4iKTsNCisgICAgICAgIC8vIEZJWE1F
OiB0ZXN0RmFpbGVkKCJBc2tpbmcgZm9yIGEgc3RvcmUgdGhhdCBkb2Vzbid0IGV4aXN0IHNob3Vs
ZCBoYXZlIHRocm93bi4iKTsNCisgICAgfSBjYXRjaCAoZXJyKSB7DQorICAgICAgICAvLyBGSVhN
RTogVmVyaWZ5IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiB0aHJvd24uDQorICAgIH0NCisgICAgY29t
bWl0QW5kQ29udGludWUoKTsgICAgDQogfQogCi1mdW5jdGlvbiBjcmVhdGVJbmRleCgpCitmdW5j
dGlvbiBjb21taXRBbmRDb250aW51ZSgpDQogew0KLSAgICBkZWJ1ZygiY3JlYXRlSW5kZXgoKToi
KTsNCi0gICAgd2luZG93LmluZGV4ID0gZXZhbEFuZExvZygic3RvcmUuY3JlYXRlSW5kZXgoJ2lu
ZGV4TmFtZScsICd4JywgdHJ1ZSkiKTsgLy8gdHJ1ZSA9PSB1bmlxdWUgcmVxdWlyZW1lbnQuCi0g
ICAgc2hvdWxkQmVUcnVlKCJpbmRleCAhPT0gbnVsbCIpOwotICAgIHNob3VsZEJlVHJ1ZSgic3Rv
cmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1lJykiKTsKLSAgICBpbmRleCA9IGV2YWxB
bmRMb2coImluZGV4ID0gc3RvcmUuaW5kZXgoJ2luZGV4TmFtZScpIik7Ci0gICAgc2hvdWxkQmVU
cnVlKCJpbmRleCAhPT0gbnVsbCIpOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KHRlc3RTZXRWZXJz
aW9uQWJvcnQsIDApOw0KK30KIAotICAgIGRlYnVnKCJBc2sgZm9yIGEgc3RvcmUgdGhhdCBkb2Vz
bid0IGV4aXN0OiIpOwotICAgIHRyeSB7Ci0gICAgICAgIGluZGV4ID0gZXZhbEFuZExvZygiaW5k
ZXggPSBzdG9yZS5pbmRleCgnYXNkZicpIik7DQotICAgICAgICBzaG91bGRCZU51bGwoImluZGV4
Iik7IC8vIFJldHVybmluZyBudWxsIGlzIHdyb25nLCBidXQgbGVzcyB3cm9uZyB0aGFuIHJldHVy
bmluZyBhbiBhY3R1YWwgb2JqZWN0IQ0KLSAgICAgICAgdGVzdFBhc3NlZCgiaW5kZXggaXMgbnVs
bC4iKTsKLSAgICAgICAgLy8gRklYTUU6IHRlc3RGYWlsZWQoIkFza2luZyBmb3IgYSBzdG9yZSB0
aGF0IGRvZXNuJ3QgZXhpc3Qgc2hvdWxkIGhhdmUgdGhyb3duLiIpOwotICAgIH0gY2F0Y2ggKGVy
cikgewotICAgICAgICAvLyBGSVhNRTogVmVyaWZ5IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiB0aHJv
d24uCi0gICAgfQorZnVuY3Rpb24gdGVzdFNldFZlcnNpb25BYm9ydCgpDQorew0KKyAgICByZXN1
bHQgPSBldmFsQW5kTG9nKCdkYi5zZXRWZXJzaW9uKCJ2ZXJzaW9uIGZhaWwiKScpOw0KKyAgICB2
ZXJpZnlSZXN1bHQocmVzdWx0KTsNCisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGNyZWF0ZUFub3Ro
ZXJJbmRleDsNCisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsN
Cit9DQorDQorZnVuY3Rpb24gY3JlYXRlQW5vdGhlckluZGV4KCkNCit7DQorICAgIHZlcmlmeVN1
Y2Nlc3NFdmVudChldmVudCk7DQorICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZGIudmVyc2lv
biIsICJ2ZXJzaW9uIGZhaWwiKTsNCisNCisgICAgdmFyIHNldFZlcnNpb25UcmFucyA9IGV2YWxB
bmRMb2coInNldFZlcnNpb25UcmFucyA9IGV2ZW50LnJlc3VsdCIpOw0KKyAgICBzaG91bGRCZVRy
dWUoInNldFZlcnNpb25UcmFucyAhPT0gbnVsbCIpOw0KKyAgICBzZXRWZXJzaW9uVHJhbnMub25j
b21wbGV0ZSA9IHVuZXhwZWN0ZWRDb21wbGV0ZUNhbGxiYWNrOw0KKyAgICBzZXRWZXJzaW9uVHJh
bnMub25hYm9ydCA9IGNoZWNrTWV0YWRhdGE7DQorICAgIHdpbmRvdy5zdG9yZSA9IGV2YWxBbmRM
b2coInN0b3JlID0gc2V0VmVyc2lvblRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKSIpOw0K
KyAgICB2YXIgaW5kZXggPSBldmFsQW5kTG9nKCJpbmRleCA9IHN0b3JlLmNyZWF0ZUluZGV4KCdp
bmRleEZhaWwnLCAneCcpIik7DQorDQorICAgIHNldFZlcnNpb25UcmFucy5hYm9ydCgpOw0KK30N
CisNCitmdW5jdGlvbiBjaGVja01ldGFkYXRhKCkNCit7DQorICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygiZGIudmVyc2lvbiIsICJuZXcgdmVyc2lvbiIpOw0KKyAgICBzaG91bGRCZSgic3RvcmUu
aW5kZXhOYW1lcyIsICJbJ2luZGV4TmFtZSddIik7DQorICAgIHNob3VsZEJlKCJzdG9yZS5pbmRl
eE5hbWVzLmxlbmd0aCIsICIxIik7DQorICAgIHNob3VsZEJlKCJzdG9yZS5pbmRleE5hbWVzLmNv
bnRhaW5zKCcnKSIsICJmYWxzZSIpOw0KKyAgICBzaG91bGRCZSgic3RvcmUuaW5kZXhOYW1lcy5j
b250YWlucygnaW5kZXhGYWlsJykiLCAiZmFsc2UiKTsNCisgICAgc2hvdWxkQmUoInN0b3JlLmlu
ZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4TmFtZScpIiwgInRydWUiKTsNCisgICAgYWRkRGF0YSgp
Ow0KK30NCiAKKworZnVuY3Rpb24gYWRkRGF0YSgpCit7CisgICAgdmFyIHRyYW5zYWN0aW9uID0g
ZXZhbEFuZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbigpIik7DQorICAgIHRyYW5z
YWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICB3aW5kb3cuc3Rv
cmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5h
bWUnKSIpOwogICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInN0b3JlLmFkZCh7eDogJ3ZhbHVlJ30s
ICdrZXknKSIpOwogICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwogICAgIHJlc3VsdC5vbnN1Y2Nl
c3MgPSBhZGRTdWNjZXNzOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvcmVzb3VyY2VzL3NoYXJlZC5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jl
c291cmNlcy9zaGFyZWQuanMKaW5kZXggZTY5NWJjNDczNDRjYWRjMjhhODIyYzFjYWRmNTllZTQy
YWM3NGRmOS4uZDlkYTFiMmI0ODQyNzY2Mjc1MTg1NGVjY2ZkMTdkYWQ4N2Y3ZTMxYSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwor
KysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCkBA
IC03Niw3ICs3NiwxNSBAQCBmdW5jdGlvbiB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjaygpCiAgICAg
dGVzdEZhaWxlZCgiQWJvcnQgZnVuY3Rpb24gY2FsbGVkIHVuZXhwZWN0ZWRseSEiKTsKICAgICBk
ZWJ1ZygiIik7CiAgICAgdmVyaWZ5QWJvcnRFdmVudChldmVudCk7Ci0gICAgZG9uZSgpOworICAg
IGRvbmUoKTsNCit9DQorDQorZnVuY3Rpb24gdW5leHBlY3RlZENvbXBsZXRlQ2FsbGJhY2soKQ0K
K3sNCisgICAgdGVzdEZhaWxlZCgib25jb21wbGV0ZSBmdW5jdGlvbiBjYWxsZWQgdW5leHBlY3Rl
ZGx5ISIpOw0KKyAgICBkZWJ1ZygiIik7DQorICAgIHZlcmlmeUFib3J0RXZlbnQoZXZlbnQpOw0K
KyAgICBkb25lKCk7DQogfQogCiAvLyBGSVhNRTogcmVtb3ZlIHRoZSBvbmZpbmlzaGVkIHBhcmFt
ZXRlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggYzZhZmNhODZmMWI4NTFlMmQ5ZTZkYzBmNGUzOTkwZTBkMDAxNWY3My4uOWU3YzdlMDQz
ZDE5NzlhZWM1NmRlNmM3MzUzNTQxYWU0ZjRhM2RjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0xMC0w
NSAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSURCRGF0YWJhc2UgYW5kIElEQk9iamVj
dFN0b3JlIG1ldGFkYXRhIGlzIG5vdCByZWNvdmVyZWQgY29ycmVjdGx5IHdoZW4gdGhlIHNldFZl
cnNpb24gdHJhbnNhY3Rpb25zIGFib3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ3MjQ1CisKKyAgICAgICAgUmVjb3ZlciBtZXRhZGF0YSBwcm9w
ZXJseSBieSBhZGRpbmcgYWJvcnQgdGFza3MgdGhhdAorICAgICAgICBhcmUgcnVuIHdoZW4gYSB0
cmFuc2FjdGlvbiBhYm9ydHMuCisKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3Jl
YXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6cmVtb3ZlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUZyb21NYXApOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24pOgorICAgICAgICAqIHN0
b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZyb21NYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01hcCk6CisgICAgICAgICog
c3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCk6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaDoKKwogMjAxMC0xMC0wNSAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggNjc2NDRiMTE0OGQ2MzRk
NjY2MzA0YTQyNGRkYmMzMDNkZGNmNTlmOS4uMGQ3NTcxY2VjMDc1MjBjMzYwNWVkMDQ5OWViN2Zj
MjdhYjU3ZDk2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNw
cApAQCAtMTM2LDEzICsxMzYsMTQgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+ICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3QKIAogICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50
KTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKLSAgICBtX29iamVj
dFN0b3Jlcy5zZXQobmFtZSwgb2JqZWN0U3RvcmUpOwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvblB0ciA9IHRyYW5zYWN0aW9uOwotICAgIGlmICgh
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RT
dG9yZSwgdHJhbnNhY3Rpb25QdHIpKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmpl
Y3RTdG9yZUludGVybmFsLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uUHRyKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUZyb21NYXAsIGRhdGFiYXNl
LCBvYmplY3RTdG9yZSkpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIG1fb2JqZWN0U3RvcmVz
LnNldChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2Uo
KTsKIH0KIApAQCAtMTg2LDExICsxODcsMTQgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpyZW1vdmVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW8KICAg
ICAgICAgLy8gRklYTUU6IFJhaXNlIE5PVF9GT1VORF9FUlIuCiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbV9vYmplY3RTdG9yZXMucmVtb3ZlKG5hbWUpOwogICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKLSAgICB0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0
b3JlLCB0cmFuc2FjdGlvblB0cikpOwotICAgIC8vIEZJWE1FOiBSYWlzZSBOT1RfQUxMT1dFRF9F
UlIgaWYgdGhlIGFib3ZlIGZhaWxzLiAgICAKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVP
YmplY3RTdG9yZUludGVybmFsLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uUHRy
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUZyb21NYXAsIGRhdGFi
YXNlLCBvYmplY3RTdG9yZSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBSYWlzZSBOT1RfQUxMT1dF
RF9FUlIgaWYgdGhlIGFib3ZlIGZhaWxzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
b2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpyZW1vdmVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCkBAIC0yMDksNyArMjEzLDggQEAg
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVy
c2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3Jl
cyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLT5j
cmVhdGVUcmFuc2FjdGlvbihvYmplY3RTdG9yZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpWRVJT
SU9OX0NIQU5HRSwgMCwgdGhpcyk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbklu
dGVybmFsLCBkYXRhYmFzZSwgdmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwgZGF0YWJhc2UsIHZlcnNpb24s
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVy
c2lvbiwgZGF0YWJhc2UsIG1fdmVyc2lvbikpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dF
RF9FUlIsICJzZXRWZXJzaW9uIG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgc2V0VmVyc2lv
biB0cmFuc2FjdGlvbi4iKSk7CiB9CiAKQEAgLTI0Niw2ICsyNTEsMjIgQEAgdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKICAgICB9CiB9CiAKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQorewor
ICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmUtPm5hbWUoKSk7
Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSkKK3sKKyAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLT5u
YW1lKCksIG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpy
ZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBk
YXRhYmFzZS0+bV92ZXJzaW9uID0gdmVyc2lvbjsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IDBjYjQ4M2RlZWU0ZjQ4M2M4YzQ3NTg2ZTNk
OGE3MDE2ZjQ3NWNlMzQuLjg0YmQ0MmMzM2E4YzQzNmE2NzMzZTI5YTdkNWIzMzMxZWU5N2FmZmYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNzMsNiArNzMs
MTEgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RTdG9yZUludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogICAgIHN0YXRpYyB2b2lkIHNldFZlcnNp
b25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAKKyAg
ICAvLyBUaGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tz
LgorICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgYWRkT2JqZWN0
U3RvcmVUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7Cisg
ICAgc3RhdGljIHZvaWQgcmVzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwor
CiAgICAgT3duUHRyPFNRTGl0ZURhdGFiYXNlPiBtX3NxbGl0ZURhdGFiYXNlOwogICAgIFN0cmlu
ZyBtX25hbWU7CiAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggY2ZkOGE5NWZkZmM2ZjU1M2I2Zjcy
MWIyYWI2M2NjNTIwNDRjNDk5Ni4uN2Y5MzJjMDU2ZTdmMTIxMzRmZGNmYjA3NDY0ZmQ3NjJiOWEy
ZWM2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cApAQCAtMjcyLDEzICsyNzIsMTQgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnMKIAogICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNy
ZWF0ZSh0aGlzLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUpOwogICAgIEFTU0VSVChpbmRleC0+bmFt
ZSgpID09IG5hbWUpOwotICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgpOwogCiAgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvblB0ciA9IHRy
YW5zYWN0aW9uOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWws
IG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpjcmVhdGVJbmRleEludGVybmFsLCBvYmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9u
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZyb21NYXAsIG9iamVjdFN0
b3JlLCBpbmRleCkpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIG1faW5kZXhlcy5zZXQobmFt
ZSwgaW5kZXgpOwogICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CiAKQEAgLTMyMCwxMSAr
MzIxLDE1IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhCiAgICAgICAgIC8vIEZJWE1FOiBSYWlz
ZSBOT1RfRk9VTkRfRVJSLgogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1faW5kZXhlcy5y
ZW1vdmUobmFtZSk7CisKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUgPSB0aGlzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uUHRyID0gdHJhbnNhY3Rpb247Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJl
bW92ZUluZGV4SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpKTsK
LSAgICAvLyBGSVhNRTogUmFpc2UgTk9UX0FMTE9XRURfRVJSIGlmIHRoZSBhYm92ZSBzdGF0ZW1l
bnQgZmFpbHMuCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhJbnRlcm5hbCwg
b2JqZWN0U3RvcmUsIGluZGV4LCB0cmFuc2FjdGlvblB0ciksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6YWRkSW5kZXhUb01hcCwgb2JqZWN0U3RvcmUsIGluZGV4KSkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFJhaXNlIE5PVF9BTExPV0VEX0VSUiBpZiB0aGUgYWJvdmUgc3RhdGVtZW50IGZhaWxz
LgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW5kZXhlcy5yZW1vdmUobmFtZSk7CiB9
CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQpA
QCAtNDA0LDYgKzQwOSwxNyBAQCBTUUxpdGVEYXRhYmFzZSYgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c3FsaXRlRGF0YWJhc2UoKSBjb25zdAogICAgIHJldHVybiBtX2RhdGFiYXNlLT5zcWxp
dGVEYXRhYmFzZSgpOwogfQogCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92
ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCkKK3sKKyAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRl
eC0+bmFtZSgpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRl
eFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4KQoreworICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4LT5uYW1lKCks
IGluZGV4KTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1dlYkNv
cmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggNzRmYzBkZGE5N2Vh
NmVmMWNiMWJhOWZlZWVmOWRlOTRjMzJiODkzYy4uMzFmOTkwODA1MjE1MjVkZTNmMWI4ZDNjOThk
MWVhZWEyNGFmODZmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oCkBAIC04OSw2ICs4OSwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92
ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgc3RhdGljIHZv
aWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5n
ZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAKKyAgICAvLyBUaGVz
ZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgorICAgIHN0
YXRpYyB2b2lkIHJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZvaWQgYWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CisKICAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJ
bnZhbGlkSWQgPSAwOwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0
YWJhc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAK
aW5kZXggMGFkNzdmNzk5ZDkxZmQxMjZlOTk4YTFlNDliZTgyNzIzYjAyMzg3YS4uM2VjM2JiNDkz
ZDk5N2Y5YTY1NDdkNWZiYTA3ZmE2NDAwMjRkOGU0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtNjAsMTIgKzYwLDE1IEBAIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpvYmplY3RTdG9yCiAgICAgcmV0dXJuIG1fZGF0YWJhc2UtPm9iamVjdFN0b3JlKG5hbWUs
IDApOyAvLyBGSVhNRTogcmVtb3ZlIG1vZGUgcGFyYW0uCiB9CiAKLWJvb2wgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4gdGFzaykKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1
bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2spCiB7CiAgICAg
aWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1f
dGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBpZiAoYWJvcnRUYXNrKQorICAgICAgICBtX2Fi
b3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNrKTsKKwogICAgIGlmIChtX3N0YXRlID09IFVu
dXNlZCkKICAgICAgICAgc3RhcnQoKTsKIApAQCAtODEsNiArODQsMTQgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAgICAgbV90YXNrVGltZXIuc3RvcCgpOwogICAg
IG1fdGFza0V2ZW50VGltZXIuc3RvcCgpOwogICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7
CisKKyAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBpZiBhbnkuCisgICAgd2hpbGUgKCFtX2Fi
b3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzayhtX2Fib3J0VGFza1F1ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsK
KyAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICB0YXNrLT5w
ZXJmb3JtVGFzaygwKTsKKyAgICB9CisKICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydCgpOwogICAg
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rp
b24odGhpcyk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aAppbmRleCBjZjQwZWJhN2MxODg1ZWVkMzZhMzU0MzUxNWE4ZTI4NGE1NjZjM2JjLi4zYTlhMWU3
ODFjNjI0NzVhZWY5NTZiN2Q5ZDY0NmUzYWJhOTRiMmMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1
bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOworICAgIHZp
cnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFi
b3J0VGFza24pOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KQEAgLTgyLDYgKzgyLDcgQEAgcHJpdmF0ZToKIAogICAgIHR5cGVkZWYgRGVx
dWU8T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gVGFza1F1ZXVlOwogICAg
IFRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKKyAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsK
IAogICAgIE93blB0cjxTUUxpdGVUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCmluZGV4IGRi
OTVkMDM4MmZiNzc4NjhhMTg0ZDk4ZTE0ZTEzZGQzYTU3ZmZkZTguLjY1YjA5N2Q2NTdkYjBhNWQ0
ZTNhYmVjNzQxYWQyMDIyNWIzNDM3NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBz
aG9ydCBtb2RlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFz
ayA9IDApID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKICAgICB2aXJ0dWFsIGludCBpZCgpIGNv
bnN0ID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCmlu
ZGV4IDVlNTRhYjQ4YTFiMjY1OWM0NThhN2JiZjkxNGRkZjI5YzgzNjVlOWEuLmZkZGIwMDM1MGY4
ZjcwOTgxNWE2ZTUzZGM0YTkyY2ZjYWJiY2MwMzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaApAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIC8v
IFRoaXMgbWFwIG93bnMgYWxsIHRyYW5zYWN0aW9ucyBrbm93biB0byB0aGUgY29vcmRpbmF0b3Iu
CiAgICAgSGFzaE1hcDxpbnQsIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiA+IG1f
dHJhbnNhY3Rpb25zOwogICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZmZXJlbnQgc3RhdGVzIGFy
ZSBncm91cGVkIGJlbG93LgotICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqID4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwotICAgIEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCogPiBtX3J1bm5pbmdUcmFuc2FjdGlvbnM7CisgICAgTGlzdEhhc2hTZXQ8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+IG1fc3RhcnRlZFRyYW5zYWN0aW9uczsKKyAgICBIYXNo
U2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPiBtX3J1bm5pbmdUcmFuc2FjdGlvbnM7CiAg
ICAgaW50IG1fbmV4dElEOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDg4NGFiNjBhY2Q3ZjdiN2Zi
NzBhMjgxMmFmMDkwYmQ1MjMyYmZjZS4uMTIyNzAwOWFiY2U0MDA0Y2M0NDEyY2U0ZTIyY2YzNWI2
NDNhYTg1NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTAtMDUgIEFuZHJl
aSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIElEQkRhdGFiYXNlIGFuZCBJREJPYmplY3RTdG9yZSBt
ZXRhZGF0YSBpcyBub3QgcmVjb3ZlcmVkIGNvcnJlY3RseSB3aGVuIHRoZSBzZXRWZXJzaW9uIHRy
YW5zYWN0aW9ucyBhYm9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NzI0NQorCisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Ojpz
Y2hlZHVsZVRhc2spOgorICAgICAgICAqIHNyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5o
OgorCiAyMDEwLTA5LTI5ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwCmluZGV4IDgxYjdjZWVhZWY3YzQ0YzZi
Y2VmZjA3NGNhNGUzMGZlZDI1MWZkNjcuLjRiMTllZTQxZjFmZjk4ZTEwMjM0ZTdkZjM3YmQwZDg0
ZGMzZjEwNGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHkuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHkuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kUHJveHk6OmFib3J0KCkKICAgICBtX3dlYklEQlRyYW5zYWN0aW9uLT5hYm9ydCgpOwogfQog
Ci1ib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpzY2hlZHVsZVRhc2soUGFzc093blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPikKK2Jvb2wgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kUHJveHk6OnNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+LCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KQogewogICAg
IC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQgYXMgaXQncyB0aGUgaW1wbCBvYmplY3Rz
IHdobyBnZXQgdG8KICAgICAvLyBleGVjdXRlIHRhc2tzIGluIHRoZSBicm93c2VyIHByb2Nlc3Mu
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmgK
aW5kZXggM2RhZjczZWIzYzkxY2UyODg4MzJiODczMGNkNzhmNzVjZGFhM2I0My4uMGM1NmYxOTVh
ZGY3YzQ5NzI4OGZhYjQ1YTY1NWVhOWRkYjE2MDQ4ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IHNob3J0IG1vZGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4pOworICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogICAg
IHZpcnR1YWwgaW50IGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhJ
REJUcmFuc2FjdGlvbkNhbGxiYWNrcyopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69997</attachid>
            <date>2010-10-06 15:16:56 -0700</date>
            <delta_ts>2010-10-06 15:31:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47245-20101006151655.patch</filename>
            <type>text/plain</type>
            <size>43131</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkYjZmMzUzMGI1ZTZiMTk3NjVmZWQxODYzMWM0M2E2MDEzMWYyODUxLi45MzE4MzNk
YjhlMWYzYzRkYzgxNzY2NjM5MDA4OGMwOWM2MDMyNzE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTAtMDYgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElEQkRhdGFiYXNlIGFu
ZCBJREJPYmplY3RTdG9yZSBtZXRhZGF0YSBpcyBub3QgcmVjb3ZlcmVkIGNvcnJlY3RseSB3aGVu
IHRoZSBzZXRWZXJzaW9uIHRyYW5zYWN0aW9ucyBhYm9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI0NQorCisgICAgICAgICogc3RvcmFnZS9p
bmRleGVkZGIvZGF0YWJhc2UtYmFzaWNzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9kYXRhYmFzZS1iYXNpY3MuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4
ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2Uv
aW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanM6CisgICAgICAgICh1bmV4cGVjdGVkQWJvcnRDYWxs
YmFjayk6CisgICAgICAgICh1bmV4cGVjdGVkQ29tcGxldGVDYWxsYmFjayk6CisgICAgICAgIChk
ZWxldGVBbGxPYmplY3RTdG9yZXMpOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5z
YWN0aW9uLWJhc2ljcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
dHJhbnNhY3Rpb24tYmFzaWNzLmh0bWw6CisKIDIwMTAtMTAtMDYgIERhdmlkIEh5YXR0ICA8aHlh
dHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1iYXNpY3MtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtYmFzaWNz
LWV4cGVjdGVkLnR4dAppbmRleCBkMDU0Nzc4YTdmMTVkOTI3Y2IzZDFmNTY0MWQwYThmYjNkNDcx
Nzk5Li4zNzQxNTBjODRkNmM3NTJmMDc3MTMxMWFmZTQ0NTUxZTdkZmYyMzFlIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1iYXNpY3MtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJhc2ljcy1l
eHBlY3RlZC50eHQKQEAgLTg4LDYgKzg4LDM5IEBAIFBBU1MgZGIub2JqZWN0U3RvcmVzLmxlbmd0
aCBpcyAxCiBQQVNTIGRiLm9iamVjdFN0b3Jlcy5jb250YWlucygnJykgaXMgZmFsc2UKIFBBU1Mg
ZGIub2JqZWN0U3RvcmVzLmNvbnRhaW5zKCd0ZXN0NDU2JykgaXMgZmFsc2UKIFBBU1MgZGIub2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKCd0ZXN0MTIzJykgaXMgdHJ1ZQorZGIuc2V0VmVyc2lvbigidmVy
c2lvbiBjIikKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJy
b3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1
ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitTdWNjZXNzIGV2ZW50IGZpcmVk
OgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBp
cyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScg
aW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNT
ICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBl
dmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlz
IHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUK
KworUEFTUyBkYi52ZXJzaW9uIGlzICJ2ZXJzaW9uIGMiCitQQVNTIGRiLm5hbWUgaXMgIm5hbWUi
CitQQVNTIGRiLm9iamVjdFN0b3JlcyBpcyBbJ3Rlc3QxMjMnXQorUEFTUyBkYi5vYmplY3RTdG9y
ZXMubGVuZ3RoIGlzIDEKK1BBU1MgZGIub2JqZWN0U3RvcmVzLmNvbnRhaW5zKCcnKSBpcyBmYWxz
ZQorUEFTUyBkYi5vYmplY3RTdG9yZXMuY29udGFpbnMoJ3Rlc3Q0NTYnKSBpcyBmYWxzZQorUEFT
UyBkYi5vYmplY3RTdG9yZXMuY29udGFpbnMoJ3Rlc3QxMjMnKSBpcyB0cnVlCitkYi5jcmVhdGVP
YmplY3RTdG9yZSgidGVzdDQ1NiIpCitzZXRWZXJzaW9uVHJhbnMgPSBldmVudC5yZXN1bHQKK1BB
U1Mgc2V0VmVyc2lvblRyYW5zICE9PSBudWxsIGlzIHRydWUKK1BBU1MgZGIudmVyc2lvbiBpcyAi
dmVyc2lvbiBiIgorUEFTUyBkYi5vYmplY3RTdG9yZXMgaXMgWyd0ZXN0MTIzJ10KK1BBU1MgZGIu
b2JqZWN0U3RvcmVzLmxlbmd0aCBpcyAxCitQQVNTIGRiLm9iamVjdFN0b3Jlcy5jb250YWlucygn
JykgaXMgZmFsc2UKK1BBU1MgZGIub2JqZWN0U3RvcmVzLmNvbnRhaW5zKCd0ZXN0NDU2JykgaXMg
ZmFsc2UKK1BBU1MgZGIub2JqZWN0U3RvcmVzLmNvbnRhaW5zKCd0ZXN0MTIzJykgaXMgdHJ1ZQog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1iYXNpY3MuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJhc2ljcy5odG1sCmluZGV4
IDJlYmNmMGI3ODJiZGUxMzk5NmI0YzgwMGE2OTFlOTcxNDE3NjMzYjEuLmZlMGNiMTlmMjNmYTQy
YmIyMjk4NDc5ZjI1Mjc0YzJhMGMzYTEyMDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJhc2ljcy5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJhc2ljcy5odG1sCkBAIC03MywxOCArNzMsNTIgQEAgZnVu
Y3Rpb24gY3JlYXRlT2JqZWN0U3RvcmUoKQogICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZXMu
Y29udGFpbnMoJycpIiwgImZhbHNlIik7CiAKICAgICBvYmplY3RTdG9yZSA9IGV2YWxBbmRMb2co
J2RiLmNyZWF0ZU9iamVjdFN0b3JlKCJ0ZXN0MTIzIiknKTsNCi0gICAgY2hlY2tPYmplY3RTdG9y
ZShvYmplY3RTdG9yZSk7CisgICAgY2hlY2tPYmplY3RTdG9yZSgpOw0KKyAgICBjb21taXRBbmRD
b250aW51ZSgpOwogfQogCi1mdW5jdGlvbiBjaGVja09iamVjdFN0b3JlKG9iamVjdFN0b3JlKQor
ZnVuY3Rpb24gY2hlY2tPYmplY3RTdG9yZSgpCiB7CiAgICAgc2hvdWxkQmUoImRiLm9iamVjdFN0
b3JlcyIsICJbJ3Rlc3QxMjMnXSIpOwogICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZXMubGVu
Z3RoIiwgIjEiKTsKICAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVzLmNvbnRhaW5zKCcnKSIs
ICJmYWxzZSIpOwogICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZXMuY29udGFpbnMoJ3Rlc3Q0
NTYnKSIsICJmYWxzZSIpOwotICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZXMuY29udGFpbnMo
J3Rlc3QxMjMnKSIsICJ0cnVlIik7Ci0KLSAgICBkb25lKCk7CisgICAgc2hvdWxkQmUoImRiLm9i
amVjdFN0b3Jlcy5jb250YWlucygndGVzdDEyMycpIiwgInRydWUiKTsNCit9DQorDQorZnVuY3Rp
b24gY29tbWl0QW5kQ29udGludWUoKQ0KK3sNCisgICAgd2luZG93LnNldFRpbWVvdXQodGVzdFNl
dFZlcnNpb25BYm9ydCwgMCk7Cit9DQorDQorZnVuY3Rpb24gdGVzdFNldFZlcnNpb25BYm9ydCgp
DQorew0KKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCdkYi5zZXRWZXJzaW9uKCJ2ZXJzaW9uIGMi
KScpOw0KKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsNCisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9
IGNyZWF0ZUFub3RoZXJPYmplY3RTdG9yZTsNCisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsNCit9DQorDQorZnVuY3Rpb24gY3JlYXRlQW5vdGhlck9iamVjdFN0
b3JlKCkNCit7DQorICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7DQorICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiZGIudmVyc2lvbiIsICJ2ZXJzaW9uIGMiKTsNCisgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJkYi5uYW1lIiwgIm5hbWUiKTsNCisgICAgY2hlY2tPYmplY3RTdG9yZSgp
Ow0KKw0KKyAgICBvYmplY3RTdG9yZSA9IGV2YWxBbmRMb2coJ2RiLmNyZWF0ZU9iamVjdFN0b3Jl
KCJ0ZXN0NDU2IiknKTsNCisgICAgdmFyIHNldFZlcnNpb25UcmFucyA9IGV2YWxBbmRMb2coInNl
dFZlcnNpb25UcmFucyA9IGV2ZW50LnJlc3VsdCIpOw0KKyAgICBzaG91bGRCZVRydWUoInNldFZl
cnNpb25UcmFucyAhPT0gbnVsbCIpOw0KKyAgICBzZXRWZXJzaW9uVHJhbnMub25jb21wbGV0ZSA9
IHVuZXhwZWN0ZWRDb21wbGV0ZUNhbGxiYWNrOw0KKyAgICBzZXRWZXJzaW9uVHJhbnMub25hYm9y
dCA9IGNoZWNrTWV0YWRhdGE7DQorICAgIHNldFZlcnNpb25UcmFucy5hYm9ydCgpOw0KK30NCisN
CitmdW5jdGlvbiBjaGVja01ldGFkYXRhKCkNCit7DQorICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygiZGIudmVyc2lvbiIsICJ2ZXJzaW9uIGIiKTsNCisgICAgY2hlY2tPYmplY3RTdG9yZSgpOw0K
KyAgICBkb25lKCk7DQogfQogCiB0ZXN0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4cGVjdGVkLnR4dAppbmRl
eCA5ZjIxZGUwOTFjY2IxNmE2YmZjOGU5YzJkMWEyYzE3MjVlMWEzMjM5Li42ZmY4N2M4NjhhOTUz
N2JkNzQzOThkNTJiODJjZjM4Mjg1ZmI4NGIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQK
QEAgLTUwLDIwICs1MCw1MCBAQCBQQVNTIHN0b3JlLm5hbWUgaXMgInN0b3JlTmFtZSIKIFBBU1Mg
c3RvcmUua2V5UGF0aCBpcyBudWxsCiBQQVNTIHN0b3JlTmFtZXMuY29udGFpbnMoJ3N0b3JlTmFt
ZScpIGlzIHRydWUKIFBBU1Mgc3RvcmVOYW1lcy5sZW5ndGggaXMgMQotQXNrIGZvciBhIHN0b3Jl
IHRoYXQgZG9lc24ndCBleGlzdDoKK0FzayBmb3IgYW4gaW5kZXggdGhhdCBkb2Vzbid0IGV4aXN0
OgogaW5kZXggPSBzdG9yZS5pbmRleCgnYXNkZicpCiBQQVNTIGluZGV4IGlzIG51bGwKIFBBU1Mg
aW5kZXggaXMgbnVsbAogY3JlYXRlSW5kZXgoKToKLXN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5h
bWUnLCAneCcsIHRydWUpCitpbmRleCA9IHN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5hbWUnLCAn
eCcsIHRydWUpCiBQQVNTIGluZGV4ICE9PSBudWxsIGlzIHRydWUKIFBBU1Mgc3RvcmUuaW5kZXhO
YW1lcy5jb250YWlucygnaW5kZXhOYW1lJykgaXMgdHJ1ZQogaW5kZXggPSBzdG9yZS5pbmRleCgn
aW5kZXhOYW1lJykKIFBBU1MgaW5kZXggIT09IG51bGwgaXMgdHJ1ZQotQXNrIGZvciBhIHN0b3Jl
IHRoYXQgZG9lc24ndCBleGlzdDoKK0FzayBmb3IgYW4gaW5kZXggdGhhdCBkb2Vzbid0IGV4aXN0
OgogaW5kZXggPSBzdG9yZS5pbmRleCgnYXNkZicpCiBQQVNTIGluZGV4IGlzIG51bGwKIFBBU1Mg
aW5kZXggaXMgbnVsbC4KK2RiLnNldFZlcnNpb24oInZlcnNpb24gZmFpbCIpCitQQVNTICdvbnN1
Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1
ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBm
aXJlIHNob3J0bHkuLi4KKworU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4g
ZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3Nh
Z2UnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BB
U1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVu
dC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUK
K1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRh
cmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK1BBU1MgZGIudmVyc2lvbiBp
cyAidmVyc2lvbiBmYWlsIgorc2V0VmVyc2lvblRyYW5zID0gZXZlbnQucmVzdWx0CitQQVNTIHNl
dFZlcnNpb25UcmFucyAhPT0gbnVsbCBpcyB0cnVlCitzdG9yZSA9IHNldFZlcnNpb25UcmFucy5v
YmplY3RTdG9yZSgnc3RvcmVOYW1lJykKK2luZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4
RmFpbCcsICd4JykKK1BBU1MgZGIudmVyc2lvbiBpcyAibmV3IHZlcnNpb24iCitQQVNTIHN0b3Jl
LmluZGV4TmFtZXMgaXMgWydpbmRleE5hbWUnXQorUEFTUyBzdG9yZS5pbmRleE5hbWVzLmxlbmd0
aCBpcyAxCitQQVNTIHN0b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJycpIGlzIGZhbHNlCitQQVNT
IHN0b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4RmFpbCcpIGlzIGZhbHNlCitQQVNTIHN0
b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4TmFtZScpIGlzIHRydWUKK3RyYW5zYWN0aW9u
ID0gZGIudHJhbnNhY3Rpb24oKQorc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJykKIHN0b3JlLmFkZCh7eDogJ3ZhbHVlJ30sICdrZXknKQogUEFTUyAnb25zdWNjZXNz
JyBpbiByZXN1bHQgaXMgdHJ1ZQogUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2lj
cy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNz
Lmh0bWwKaW5kZXggZDkzMGY0YmY2NThjNDk3YmI3YjA3N2Q2ZDRhMjE2ZWJmMjEyNDM4ZC4uMTMw
ZjgyYWM2ZmJmZTQxZThhNGQ0MjQyOGJhYWFlMDU5OTQ1N2ZkMiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwKQEAgLTQ4
LDcgKzQ4LDcgQEAgZnVuY3Rpb24gc2V0VmVyc2lvblN1Y2Nlc3MoKQogZnVuY3Rpb24gY3JlYXRl
T2JqZWN0U3RvcmUoKQogew0KICAgICBkZWJ1ZygiY3JlYXRPYmplY3RTdG9yZSgpOiIpOw0KLSAg
ICB2YXIgc3RvcmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdz
dG9yZU5hbWUnLCBudWxsKSIpOworICAgIHdpbmRvdy5zdG9yZSA9IGV2YWxBbmRMb2coInN0b3Jl
ID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScsIG51bGwpIik7CiAgICAgdmFyIHN0
b3JlTmFtZXMgPSBldmFsQW5kTG9nKCJzdG9yZU5hbWVzID0gZGIub2JqZWN0U3RvcmVzIik7CiAK
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInN0b3JlLm5hbWUiLCAic3RvcmVOYW1lIik7CkBA
IC01Nyw3ICs1Nyw3IEBAIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3JlKCkKICAgICBzaG91bGRC
ZSgic3RvcmVOYW1lcy5sZW5ndGgiLCAiMSIpOwogICAgIC8vIEZJWE1FOiB0ZXN0IGFsbCBvZiBv
YmplY3Qgc3RvcmUncyBtZXRob2RzLgogCi0gICAgZGVidWcoIkFzayBmb3IgYSBzdG9yZSB0aGF0
IGRvZXNuJ3QgZXhpc3Q6Iik7CisgICAgZGVidWcoIkFzayBmb3IgYW4gaW5kZXggdGhhdCBkb2Vz
bid0IGV4aXN0OiIpOwogICAgIHRyeSB7CiAgICAgICAgIGluZGV4ID0gZXZhbEFuZExvZygiaW5k
ZXggPSBzdG9yZS5pbmRleCgnYXNkZicpIik7DQogICAgICAgICBzaG91bGRCZU51bGwoImluZGV4
Iik7IC8vIFJldHVybmluZyBudWxsIGlzIHdyb25nLCBidXQgbGVzcyB3cm9uZyB0aGFuIHJldHVy
bmluZyBhbiBhY3R1YWwgb2JqZWN0IQ0KQEAgLTY4LDI3ICs2OCw3NCBAQCBmdW5jdGlvbiBjcmVh
dGVPYmplY3RTdG9yZSgpCiAgICAgfQ0KIA0KICAgICBjcmVhdGVJbmRleCgpOwotfQotCi1mdW5j
dGlvbiBjcmVhdGVJbmRleCgpCit9DQorDQorZnVuY3Rpb24gY3JlYXRlSW5kZXgoKQ0KIHsNCiAg
ICAgZGVidWcoImNyZWF0ZUluZGV4KCk6Iik7DQotICAgIHdpbmRvdy5pbmRleCA9IGV2YWxBbmRM
b2coInN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5hbWUnLCAneCcsIHRydWUpIik7IC8vIHRydWUg
PT0gdW5pcXVlIHJlcXVpcmVtZW50LgotICAgIHNob3VsZEJlVHJ1ZSgiaW5kZXggIT09IG51bGwi
KTsKLSAgICBzaG91bGRCZVRydWUoInN0b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4TmFt
ZScpIik7Ci0gICAgaW5kZXggPSBldmFsQW5kTG9nKCJpbmRleCA9IHN0b3JlLmluZGV4KCdpbmRl
eE5hbWUnKSIpOwotICAgIHNob3VsZEJlVHJ1ZSgiaW5kZXggIT09IG51bGwiKTsKLQotICAgIGRl
YnVnKCJBc2sgZm9yIGEgc3RvcmUgdGhhdCBkb2Vzbid0IGV4aXN0OiIpOwotICAgIHRyeSB7Cisg
ICAgdmFyIGluZGV4ID0gZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnaW5k
ZXhOYW1lJywgJ3gnLCB0cnVlKSIpOyAvLyB0cnVlID09IHVuaXF1ZSByZXF1aXJlbWVudC4NCisg
ICAgc2hvdWxkQmVUcnVlKCJpbmRleCAhPT0gbnVsbCIpOw0KKyAgICBzaG91bGRCZVRydWUoInN0
b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4TmFtZScpIik7DQorICAgIGluZGV4ID0gZXZh
bEFuZExvZygiaW5kZXggPSBzdG9yZS5pbmRleCgnaW5kZXhOYW1lJykiKTsNCisgICAgc2hvdWxk
QmVUcnVlKCJpbmRleCAhPT0gbnVsbCIpOw0KKw0KKyAgICBkZWJ1ZygiQXNrIGZvciBhbiBpbmRl
eCB0aGF0IGRvZXNuJ3QgZXhpc3Q6Iik7DQorICAgIHRyeSB7DQogICAgICAgICBpbmRleCA9IGV2
YWxBbmRMb2coImluZGV4ID0gc3RvcmUuaW5kZXgoJ2FzZGYnKSIpOw0KICAgICAgICAgc2hvdWxk
QmVOdWxsKCJpbmRleCIpOyAvLyBSZXR1cm5pbmcgbnVsbCBpcyB3cm9uZywgYnV0IGxlc3Mgd3Jv
bmcgdGhhbiByZXR1cm5pbmcgYW4gYWN0dWFsIG9iamVjdCENCi0gICAgICAgIHRlc3RQYXNzZWQo
ImluZGV4IGlzIG51bGwuIik7Ci0gICAgICAgIC8vIEZJWE1FOiB0ZXN0RmFpbGVkKCJBc2tpbmcg
Zm9yIGEgc3RvcmUgdGhhdCBkb2Vzbid0IGV4aXN0IHNob3VsZCBoYXZlIHRocm93bi4iKTsKLSAg
ICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgLy8gRklYTUU6IFZlcmlmeSB0aGUgY29ycmVjdCBl
eGNlcHRpb24gdGhyb3duLgotICAgIH0KKyAgICAgICAgdGVzdFBhc3NlZCgiaW5kZXggaXMgbnVs
bC4iKTsNCisgICAgICAgIC8vIEZJWE1FOiB0ZXN0RmFpbGVkKCJBc2tpbmcgZm9yIGEgc3RvcmUg
dGhhdCBkb2Vzbid0IGV4aXN0IHNob3VsZCBoYXZlIHRocm93bi4iKTsNCisgICAgfSBjYXRjaCAo
ZXJyKSB7DQorICAgICAgICAvLyBGSVhNRTogVmVyaWZ5IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiB0
aHJvd24uDQorICAgIH0NCisgICAgY29tbWl0QW5kQ29udGludWUoKTsgICAgDQorfQorCitmdW5j
dGlvbiBjb21taXRBbmRDb250aW51ZSgpDQorew0KKyAgICB3aW5kb3cuc2V0VGltZW91dCh0ZXN0
U2V0VmVyc2lvbkFib3J0LCAwKTsNCit9CisKK2Z1bmN0aW9uIHRlc3RTZXRWZXJzaW9uQWJvcnQo
KQ0KK3sNCisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygnZGIuc2V0VmVyc2lvbigidmVyc2lvbiBm
YWlsIiknKTsNCisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7DQorICAgIHJlc3VsdC5vbnN1Y2Nl
c3MgPSBjcmVhdGVBbm90aGVySW5kZXg7DQorICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7DQorfQ0KKw0KK2Z1bmN0aW9uIGNyZWF0ZUFub3RoZXJJbmRleCgpDQor
ew0KKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOw0KKyAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoImRiLnZlcnNpb24iLCAidmVyc2lvbiBmYWlsIik7DQorDQorICAgIHZhciBzZXRWZXJz
aW9uVHJhbnMgPSBldmFsQW5kTG9nKCJzZXRWZXJzaW9uVHJhbnMgPSBldmVudC5yZXN1bHQiKTsN
CisgICAgc2hvdWxkQmVUcnVlKCJzZXRWZXJzaW9uVHJhbnMgIT09IG51bGwiKTsNCisgICAgc2V0
VmVyc2lvblRyYW5zLm9uY29tcGxldGUgPSB1bmV4cGVjdGVkQ29tcGxldGVDYWxsYmFjazsNCisg
ICAgc2V0VmVyc2lvblRyYW5zLm9uYWJvcnQgPSBjaGVja01ldGFkYXRhOw0KKyAgICB3aW5kb3cu
c3RvcmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IHNldFZlcnNpb25UcmFucy5vYmplY3RTdG9yZSgn
c3RvcmVOYW1lJykiKTsNCisgICAgdmFyIGluZGV4ID0gZXZhbEFuZExvZygiaW5kZXggPSBzdG9y
ZS5jcmVhdGVJbmRleCgnaW5kZXhGYWlsJywgJ3gnKSIpOw0KKw0KKyAgICBzZXRWZXJzaW9uVHJh
bnMuYWJvcnQoKTsNCit9DQorDQorZnVuY3Rpb24gY2hlY2tNZXRhZGF0YSgpDQorew0KKyAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoImRiLnZlcnNpb24iLCAibmV3IHZlcnNpb24iKTsNCisgICAg
c2hvdWxkQmUoInN0b3JlLmluZGV4TmFtZXMiLCAiWydpbmRleE5hbWUnXSIpOw0KKyAgICBzaG91
bGRCZSgic3RvcmUuaW5kZXhOYW1lcy5sZW5ndGgiLCAiMSIpOw0KKyAgICBzaG91bGRCZSgic3Rv
cmUuaW5kZXhOYW1lcy5jb250YWlucygnJykiLCAiZmFsc2UiKTsNCisgICAgc2hvdWxkQmUoInN0
b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4RmFpbCcpIiwgImZhbHNlIik7DQorICAgIHNo
b3VsZEJlKCJzdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdpbmRleE5hbWUnKSIsICJ0cnVlIik7
DQorICAgIGFkZERhdGEoKTsNCit9DQorCiAKK2Z1bmN0aW9uIGFkZERhdGEoKQoreworICAgIHZh
ciB0cmFuc2FjdGlvbiA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24o
KSIpOw0KKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7
CisgICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSB0cmFuc2FjdGlvbi5vYmpl
Y3RTdG9yZSgnc3RvcmVOYW1lJykiKTsKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJzdG9yZS5h
ZGQoe3g6ICd2YWx1ZSd9LCAna2V5JykiKTsKICAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKICAg
ICByZXN1bHQub25zdWNjZXNzID0gYWRkU3VjY2VzczsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCmluZGV4IGU2OTViYzQ3MzQ0Y2FkYzI4
YTgyMmMxY2FkZjU5ZWU0MmFjNzRkZjkuLjVhM2Y1MGZlMjRiZGJhMjI4NjE2N2Q3ZDA3MDZmZGNk
MmRhNDgzODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291
cmNlcy9zaGFyZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3Vy
Y2VzL3NoYXJlZC5qcwpAQCAtNzYsMTQgKzc2LDIyIEBAIGZ1bmN0aW9uIHVuZXhwZWN0ZWRBYm9y
dENhbGxiYWNrKCkKICAgICB0ZXN0RmFpbGVkKCJBYm9ydCBmdW5jdGlvbiBjYWxsZWQgdW5leHBl
Y3RlZGx5ISIpOwogICAgIGRlYnVnKCIiKTsKICAgICB2ZXJpZnlBYm9ydEV2ZW50KGV2ZW50KTsK
LSAgICBkb25lKCk7CisgICAgZG9uZSgpOw0KK30NCisNCitmdW5jdGlvbiB1bmV4cGVjdGVkQ29t
cGxldGVDYWxsYmFjaygpDQorew0KKyAgICB0ZXN0RmFpbGVkKCJvbmNvbXBsZXRlIGZ1bmN0aW9u
IGNhbGxlZCB1bmV4cGVjdGVkbHkhIik7DQorICAgIGRlYnVnKCIiKTsNCisgICAgdmVyaWZ5Q29t
cGxldGVFdmVudChldmVudCk7DQorICAgIGRvbmUoKTsNCiB9CiAKLS8vIEZJWE1FOiByZW1vdmUg
dGhlIG9uZmluaXNoZWQgcGFyYW1ldGVyLgotZnVuY3Rpb24gZGVsZXRlQWxsT2JqZWN0U3RvcmVz
KGRiLCBvbmZpbmlzaGVkKQorLy8gRklYTUU6IHJlbW92ZSB0aGUgb25maW5pc2hlZCBwYXJhbWV0
ZXIuDQorZnVuY3Rpb24gZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiLCBvbmZpbmlzaGVkKQ0KIHsN
Ci0gICAgZm9yIChpID0gMDsgaSA8IGRiLm9iamVjdFN0b3Jlcy5sZW5ndGg7ICsraSkNCi0gICAg
ICAgIGRiLnJlbW92ZU9iamVjdFN0b3JlKGRiLm9iamVjdFN0b3Jlcy5pdGVtKGkpKTsNCisgICAg
d2hpbGUgKGRiLm9iamVjdFN0b3Jlcy5sZW5ndGgpDQorICAgICAgICBkYi5yZW1vdmVPYmplY3RT
dG9yZShkYi5vYmplY3RTdG9yZXMuaXRlbSgwKSk7DQogDQogICAgIGRlYnVnKCJEZWxldGVkIGFs
bCBvYmplY3Qgc3RvcmVzLiIpOw0KICAgICBvbmZpbmlzaGVkKCk7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1iYXNpY3MtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYmFzaWNzLWV4cGVj
dGVkLnR4dAppbmRleCA1YWQzNGExNDkwZWQ4ZTZmMzU1MWFlZWQ4YTYxYzg0YjY1NDRlMDNlLi4x
YTE4ZWVkZTUxMTQ5M2FmM2JmMmNjNzJmYmQ0MjQ2MWU0YzEwZmVhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1iYXNpY3MtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWJhc2ljcy1l
eHBlY3RlZC50eHQKQEAgLTExLDcgKzExLDcgQEAgUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlz
IHRydWUKIFBBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCiBBbiBldmVudCBzaG91
bGQgZmlyZSBzaG9ydGx5Li4uCiAKLWNyZWF0ZU9iamVjdFN0b3JlQ2FsbGJhY2soKToKK29wZW5T
dWNjZXNzKCk6CiBTdWNjZXNzIGV2ZW50IGZpcmVkOgogUEFTUyAncmVzdWx0JyBpbiBldmVudCBp
cyB0cnVlCiBQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQpAQCAtMjQsNiArMjQsMTMyIEBA
IFBBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCiBQQVNTIGV2ZW50LnRh
cmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCiAKIGRiID0gZXZlbnQucmVzdWx0
CityZXN1bHQgPSBkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKQorU3VjY2VzcyBldmVudCBmaXJl
ZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQg
aXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2Un
IGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFT
UyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4g
ZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBp
cyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05F
CisKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitQQVNTIHdpbmRvdy5kYi5vYmplY3RTdG9y
ZXMgaXMgW10KK1BBU1Mgd2luZG93LmRiLm9iamVjdFN0b3Jlcy5sZW5ndGggaXMgMAorUEFTUyB3
aW5kb3cuZGIub2JqZWN0U3RvcmVzLmNvbnRhaW5zKCdzdG9yZUZhaWwnKSBpcyBmYWxzZQorUEFT
UyB3aW5kb3cuZGIub2JqZWN0U3RvcmVzIGlzIFtdCitQQVNTIHdpbmRvdy5kYi5vYmplY3RTdG9y
ZXMubGVuZ3RoIGlzIDAKK1BBU1Mgd2luZG93LmRiLm9iamVjdFN0b3Jlcy5jb250YWlucygnc3Rv
cmVGYWlsJykgaXMgZmFsc2UKK3Jlc3VsdCA9IHN0YXJ0U2V0VmVyc2lvbigndmVyc2lvbiBmYWls
JykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGlu
IHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4g
ZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCithZGRSZW1vdmVJREJPYmplY3RzKCk6CitT
dWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNT
ICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFs
c2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0g
bnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQ
QVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScg
aW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMg
ZXZlbnQudGFyZ2V0LkRPTkUKKwordHJhbnMgPSBldmVudC5yZXN1bHQKK1BBU1MgdHJhbnMgIT09
IG51bGwgaXMgdHJ1ZQorc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVGYWlsJywg
bnVsbCkKK2luZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4RmFpbCcsICd4JywgZmFsc2Up
CitkYi5yZW1vdmVPYmplY3RTdG9yZSgnc3RvcmVGYWlsJykKK3N0b3JlLnJlbW92ZUluZGV4KCdp
bmRleEZhaWwnKQorUEFTUyB3aW5kb3cuZGIub2JqZWN0U3RvcmVzIGlzIFtdCitQQVNTIHdpbmRv
dy5kYi5vYmplY3RTdG9yZXMubGVuZ3RoIGlzIDAKK1BBU1Mgd2luZG93LmRiLm9iamVjdFN0b3Jl
cy5jb250YWlucygnc3RvcmVGYWlsJykgaXMgZmFsc2UKK3Jlc3VsdCA9IHN0YXJ0U2V0VmVyc2lv
bigndmVyc2lvbiBmYWlsJykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BB
U1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1
bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCithZGRSZW1vdmVB
ZGRJREJPYmplY3RzKCk6CitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBl
dmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2Fn
ZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFT
UyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50
LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQor
UEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFy
Z2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKwordHJhbnMgPSBldmVudC5yZXN1
bHQKK1BBU1MgdHJhbnMgIT09IG51bGwgaXMgdHJ1ZQorc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmVGYWlsJywgbnVsbCkKK2luZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4
RmFpbCcsICd4JywgZmFsc2UpCitkYi5yZW1vdmVPYmplY3RTdG9yZSgnc3RvcmVGYWlsJykKK3N0
b3JlLnJlbW92ZUluZGV4KCdpbmRleEZhaWwnKQorc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9y
ZSgnc3RvcmVGYWlsJywgbnVsbCkKK2luZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4RmFp
bCcsICd4JywgZmFsc2UpCitQQVNTIHdpbmRvdy5kYi5vYmplY3RTdG9yZXMgaXMgW10KK1BBU1Mg
d2luZG93LmRiLm9iamVjdFN0b3Jlcy5sZW5ndGggaXMgMAorUEFTUyB3aW5kb3cuZGIub2JqZWN0
U3RvcmVzLmNvbnRhaW5zKCdzdG9yZUZhaWwnKSBpcyBmYWxzZQorcmVzdWx0ID0gc3RhcnRTZXRW
ZXJzaW9uKCd2ZXJzaW9uIGZhaWwnKQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1
ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGlu
IHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK2FkZElE
Qk9iamVjdHMoKToKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50
IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNzYWdlJyBp
biBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTIGV2
ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZlbnQudGFy
Z2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNT
ICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50YXJnZXQu
cmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCit0cmFucyA9IGV2ZW50LnJlc3VsdAor
UEFTUyB0cmFucyAhPT0gbnVsbCBpcyB0cnVlCitzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3Jl
KCdzdG9yZUZhaWwnLCBudWxsKQoraW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXhGYWls
JywgJ3gnLCBmYWxzZSkKK1BBU1MgZGIub2JqZWN0U3RvcmVzIGlzIFsnc3RvcmVGYWlsJ10KK1BB
U1MgZGIub2JqZWN0U3RvcmVzLmxlbmd0aCBpcyAxCitQQVNTIGRiLm9iamVjdFN0b3Jlcy5jb250
YWlucygnc3RvcmVGYWlsJykgaXMgdHJ1ZQorcmVzdWx0ID0gc3RhcnRTZXRWZXJzaW9uKCd2ZXJz
aW9uIGZhaWwnKQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25l
cnJvcicgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0
cnVlCitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK3JlbW92ZUlEQk9iamVjdHMo
KToKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIHRydWUK
K1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNzYWdlJyBpbiBldmVudCBp
cyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTIGV2ZW50LnNvdXJj
ZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZlbnQudGFyZ2V0IGlzIHRy
dWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdyZWFkeVN0
YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0
ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCit0cmFucyA9IGV2ZW50LnJlc3VsdAorUEFTUyB0cmFu
cyAhPT0gbnVsbCBpcyB0cnVlCitzdG9yZSA9IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZUZhaWwn
KQorc3RvcmUucmVtb3ZlSW5kZXgoJ2luZGV4RmFpbCcpCitkYi5yZW1vdmVPYmplY3RTdG9yZSgn
c3RvcmVGYWlsJykKK1BBU1MgZGIub2JqZWN0U3RvcmVzIGlzIFsnc3RvcmVGYWlsJ10KK1BBU1Mg
ZGIub2JqZWN0U3RvcmVzLmxlbmd0aCBpcyAxCitQQVNTIGRiLm9iamVjdFN0b3Jlcy5jb250YWlu
cygnc3RvcmVGYWlsJykgaXMgdHJ1ZQogZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQogUEFT
UyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQogUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0
IGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5z
YWN0aW9uLWJhc2ljcy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNh
Y3Rpb24tYmFzaWNzLmh0bWwKaW5kZXggMDU1NzcwODg4ZmEyZWQyN2ZkMzM2N2NhZWU3YThkYTk1
OWYxODc5My4uMjQ2MWE4YzQzNjU1ZmE5ZmM5ZDUzZDg5MzM4ZjhlNDU3ZjZhYjYyYSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYmFzaWNzLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYmFzaWNz
Lmh0bWwKQEAgLTIzLDE0ICsyMywxNzkgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgdmVyaWZ5UmVz
dWx0KHJlc3VsdCk7CiAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOwogICAgIHJl
c3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9DQorDQorZnVuY3Rpb24g
b3BlblN1Y2Nlc3MoKQ0KK3sNCisgICAgZGVidWcoIm9wZW5TdWNjZXNzKCk6Iik7DQorICAgIHZl
cmlmeVN1Y2Nlc3NFdmVudChldmVudCk7DQorICAgIHdpbmRvdy5kYiA9IGV2YWxBbmRMb2coImRi
ID0gZXZlbnQucmVzdWx0Iik7DQorICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInJlc3VsdCA9IGRi
LnNldFZlcnNpb24oJ3ZlcnNpb24gMScpIik7DQorICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjbGVh
bkRhdGFiYXNlOw0KKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
Ow0KK30NCisNCitmdW5jdGlvbiBjbGVhbkRhdGFiYXNlKCkNCit7DQorICAgIHZlcmlmeVN1Y2Nl
c3NFdmVudChldmVudCk7DQorICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgY2hlY2tNZXRh
ZGF0YUVtcHR5KTsNCisgICAgY29tbWl0QW5kQ29udGludWUodGVzdFNldFZlcnNpb25BYm9ydDEp
Ow0KK30NCisNCitmdW5jdGlvbiB0ZXN0U2V0VmVyc2lvbkFib3J0MSgpDQorew0KKyAgICBjaGVj
a01ldGFkYXRhRW1wdHkoKTsNCisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygicmVzdWx0ID0gc3Rh
cnRTZXRWZXJzaW9uKCd2ZXJzaW9uIGZhaWwnKSIpOw0KKyAgICByZXN1bHQub25zdWNjZXNzID0g
YWRkUmVtb3ZlSURCT2JqZWN0czsNCit9DQorDQorZnVuY3Rpb24gYWRkUmVtb3ZlSURCT2JqZWN0
cygpDQorew0KKyAgICBkZWJ1ZygiYWRkUmVtb3ZlSURCT2JqZWN0cygpOiIpOw0KKyAgICB2ZXJp
ZnlTdWNjZXNzRXZlbnQoZXZlbnQpOw0KKyAgICB2YXIgdHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFu
cyA9IGV2ZW50LnJlc3VsdCIpOw0KKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7
DQorICAgIHRyYW5zLm9uYWJvcnQgPSB0ZXN0U2V0VmVyc2lvbkFib3J0MjsNCisgICAgdHJhbnMu
b25jb21wbGV0ZSA9IHVuZXhwZWN0ZWRDb21wbGV0ZUNhbGxiYWNrOw0KKw0KKyAgICB2YXIgc3Rv
cmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZUZhaWwn
LCBudWxsKSIpOw0KKyAgICB2YXIgaW5kZXggPSBldmFsQW5kTG9nKCJpbmRleCA9IHN0b3JlLmNy
ZWF0ZUluZGV4KCdpbmRleEZhaWwnLCAneCcsIGZhbHNlKSIpOw0KKw0KKyAgICBldmFsQW5kTG9n
KCJkYi5yZW1vdmVPYmplY3RTdG9yZSgnc3RvcmVGYWlsJykiKTsNCisgICAgZXZhbEFuZExvZygi
c3RvcmUucmVtb3ZlSW5kZXgoJ2luZGV4RmFpbCcpIik7DQorDQorICAgIHRyYW5zLmFib3J0KCk7
DQorfQ0KKw0KK2Z1bmN0aW9uIHRlc3RTZXRWZXJzaW9uQWJvcnQyKCkNCit7DQorICAgIGNoZWNr
TWV0YWRhdGFFbXB0eSgpOw0KKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJyZXN1bHQgPSBzdGFy
dFNldFZlcnNpb24oJ3ZlcnNpb24gZmFpbCcpIik7DQorICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBh
ZGRSZW1vdmVBZGRJREJPYmplY3RzOw0KK30NCisNCitmdW5jdGlvbiBhZGRSZW1vdmVBZGRJREJP
YmplY3RzKCkNCit7DQorICAgIGRlYnVnKCJhZGRSZW1vdmVBZGRJREJPYmplY3RzKCk6Iik7DQor
ICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7DQorICAgIHZhciB0cmFucyA9IGV2YWxBbmRM
b2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7DQorICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09
IG51bGwiKTsNCisgICAgdHJhbnMub25hYm9ydCA9IHRlc3RTZXRWZXJzaW9uQWJvcnQzOw0KKyAg
ICB0cmFucy5vbmNvbXBsZXRlID0gdW5leHBlY3RlZENvbXBsZXRlQ2FsbGJhY2s7DQorDQorICAg
IHZhciBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0
b3JlRmFpbCcsIG51bGwpIik7DQorICAgIHZhciBpbmRleCA9IGV2YWxBbmRMb2coImluZGV4ID0g
c3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4RmFpbCcsICd4JywgZmFsc2UpIik7DQorDQorICAgIGV2
YWxBbmRMb2coImRiLnJlbW92ZU9iamVjdFN0b3JlKCdzdG9yZUZhaWwnKSIpOw0KKyAgICBldmFs
QW5kTG9nKCJzdG9yZS5yZW1vdmVJbmRleCgnaW5kZXhGYWlsJykiKTsNCisNCisgICAgdmFyIHN0
b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVGYWls
JywgbnVsbCkiKTsNCisgICAgdmFyIGluZGV4ID0gZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5j
cmVhdGVJbmRleCgnaW5kZXhGYWlsJywgJ3gnLCBmYWxzZSkiKTsNCisNCisgICAgdHJhbnMuYWJv
cnQoKTsNCit9DQorDQorZnVuY3Rpb24gdGVzdFNldFZlcnNpb25BYm9ydDMoKQ0KK3sNCisgICAg
Y2hlY2tNZXRhZGF0YUVtcHR5KCk7DQorICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInJlc3VsdCA9
IHN0YXJ0U2V0VmVyc2lvbigndmVyc2lvbiBmYWlsJykiKTsNCisgICAgcmVzdWx0Lm9uc3VjY2Vz
cyA9IGFkZElEQk9iamVjdHM7DQorfQ0KKw0KK2Z1bmN0aW9uIGFkZElEQk9iamVjdHMoKQ0KK3sN
CisgICAgZGVidWcoImFkZElEQk9iamVjdHMoKToiKTsNCisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50
KGV2ZW50KTsNCisgICAgdmFyIHRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVudC5yZXN1
bHQiKTsNCisgICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOw0KKyAgICB0cmFucy5v
bmFib3J0ID0gdGVzdFNldFZlcnNpb25BYm9ydDQ7DQorICAgIHRyYW5zLm9uY29tcGxldGUgPSB1
bmV4cGVjdGVkQ29tcGxldGVDYWxsYmFjazsNCisNCisgICAgdmFyIHN0b3JlID0gZXZhbEFuZExv
Zygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVGYWlsJywgbnVsbCkiKTsNCisg
ICAgdmFyIGluZGV4ID0gZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnaW5k
ZXhGYWlsJywgJ3gnLCBmYWxzZSkiKTsNCisNCisgICAgdHJhbnMuYWJvcnQoKTsNCit9DQorDQor
ZnVuY3Rpb24gdGVzdFNldFZlcnNpb25BYm9ydDQoKQ0KK3sNCisgICAgY2hlY2tNZXRhZGF0YUVt
cHR5KCk7DQorICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInJlc3VsdCA9IHN0YXJ0U2V0VmVyc2lv
bigndmVyc2lvbiBmYWlsJykiKTsNCisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGFkZElEQk9iamVj
dHNBbmRDb21taXQ7DQorfQ0KKw0KK2Z1bmN0aW9uIGFkZElEQk9iamVjdHMoKQ0KK3sNCisgICAg
ZGVidWcoImFkZElEQk9iamVjdHMoKToiKTsNCisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50
KTsNCisgICAgdmFyIHRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVudC5yZXN1bHQiKTsN
CisgICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOw0KKyAgICB0cmFucy5vbmFib3J0
ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7DQorDQorICAgIHZhciBzdG9yZSA9IGV2YWxBbmRM
b2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlRmFpbCcsIG51bGwpIik7DQor
ICAgIHZhciBpbmRleCA9IGV2YWxBbmRMb2coImluZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2lu
ZGV4RmFpbCcsICd4JywgZmFsc2UpIik7DQorDQorICAgIGNvbW1pdEFuZENvbnRpbnVlKHRlc3RT
ZXRWZXJzaW9uQWJvcnQ1KTsNCit9DQorDQorZnVuY3Rpb24gY29tbWl0QW5kQ29udGludWUoY29u
dGludWVGdW5jdGlvbikNCit7DQorICAgIHdpbmRvdy5zZXRUaW1lb3V0KGNvbnRpbnVlRnVuY3Rp
b24sIDApOw0KK30NCisNCitmdW5jdGlvbiB0ZXN0U2V0VmVyc2lvbkFib3J0NSgpDQorew0KKyAg
ICBjaGVja01ldGFkYXRhRXhpc3RpbmdPYmplY3RTdG9yZSgpOw0KKyAgICByZXN1bHQgPSBldmFs
QW5kTG9nKCJyZXN1bHQgPSBzdGFydFNldFZlcnNpb24oJ3ZlcnNpb24gZmFpbCcpIik7DQorICAg
IHJlc3VsdC5vbnN1Y2Nlc3MgPSByZW1vdmVJREJPYmplY3RzOw0KK30NCisNCitmdW5jdGlvbiBy
ZW1vdmVJREJPYmplY3RzKCkNCit7DQorICAgIGRlYnVnKCJyZW1vdmVJREJPYmplY3RzKCk6Iik7
DQorICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7DQorICAgIHZhciB0cmFucyA9IGV2YWxB
bmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7DQorICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMg
IT09IG51bGwiKTsNCisgICAgdHJhbnMub25hYm9ydCA9IHRlc3RTZXRWZXJzaW9uQWJvcnQ2Ow0K
KyAgICB0cmFucy5vbmNvbXBsZXRlID0gdW5leHBlY3RlZENvbXBsZXRlQ2FsbGJhY2s7DQorDQor
ICAgIHZhciBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0
b3JlRmFpbCcpIik7DQorICAgIGV2YWxBbmRMb2coInN0b3JlLnJlbW92ZUluZGV4KCdpbmRleEZh
aWwnKSIpOw0KKyAgICBldmFsQW5kTG9nKCJkYi5yZW1vdmVPYmplY3RTdG9yZSgnc3RvcmVGYWls
JykiKTsNCisNCisgICAgdHJhbnMuYWJvcnQoKTsNCit9DQorDQorZnVuY3Rpb24gdGVzdFNldFZl
cnNpb25BYm9ydDYoKQ0KK3sNCisgICAgY2hlY2tNZXRhZGF0YUV4aXN0aW5nT2JqZWN0U3RvcmUo
KTsNCisgICAgc2V0TmV3VmVyc2lvbigpOw0KK30NCisNCitmdW5jdGlvbiBzdGFydFNldFZlcnNp
b24odmVyc2lvbk5hbWUpDQorew0KKyAgICByZXN1bHQgPSBkYi5zZXRWZXJzaW9uKHZlcnNpb25O
YW1lKTsNCisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7DQorICAgIHJlc3VsdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7DQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK2Z1
bmN0aW9uIGNoZWNrTWV0YWRhdGFFbXB0eSgpDQorew0KKyAgICBzaG91bGRCZSgid2luZG93LmRi
Lm9iamVjdFN0b3JlcyIsICJbXSIpOw0KKyAgICBzaG91bGRCZSgid2luZG93LmRiLm9iamVjdFN0
b3Jlcy5sZW5ndGgiLCAiMCIpOw0KKyAgICBzaG91bGRCZSgid2luZG93LmRiLm9iamVjdFN0b3Jl
cy5jb250YWlucygnc3RvcmVGYWlsJykiLCAiZmFsc2UiKTsKK30NCisNCitmdW5jdGlvbiBjaGVj
a01ldGFkYXRhRXhpc3RpbmdPYmplY3RTdG9yZSgpDQorew0KKyAgICBzaG91bGRCZSgiZGIub2Jq
ZWN0U3RvcmVzIiwgIlsnc3RvcmVGYWlsJ10iKTsNCisgICAgc2hvdWxkQmUoImRiLm9iamVjdFN0
b3Jlcy5sZW5ndGgiLCAiMSIpOw0KKyAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVzLmNvbnRh
aW5zKCdzdG9yZUZhaWwnKSIsICJ0cnVlIik7DQogfQogCi1mdW5jdGlvbiBvcGVuU3VjY2Vzcygp
CitmdW5jdGlvbiBzZXROZXdWZXJzaW9uKCkKIHsKLSAgICBkZWJ1ZygiY3JlYXRlT2JqZWN0U3Rv
cmVDYWxsYmFjaygpOiIpOwotICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7Ci0gICAgZGIg
PSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnJlc3VsdCIpOwotCiAgICAgcmVzdWx0ID0gZXZhbEFu
ZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOwogICAgIHZlcmlmeVJlc3VsdChy
ZXN1bHQpOwogICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9uU3VjY2VzczsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTcwNTBj
MWU1MGQwNGQ0OTE4NGZiMTc5Y2NmZDIwOTg5NzhlZTY1Ny4uNWI4NGZhYjBkMTBmMDE1ZTQyOGQx
MWE4ZjI0MjMwNjA4Mjc1Zjc1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0xMC0wNiAgQW5kcmVpIFBv
cGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSURCRGF0YWJhc2UgYW5kIElEQk9iamVjdFN0b3JlIG1ldGFk
YXRhIGlzIG5vdCByZWNvdmVyZWQgY29ycmVjdGx5IHdoZW4gdGhlIHNldFZlcnNpb24gdHJhbnNh
Y3Rpb25zIGFib3J0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3MjQ1CisKKyAgICAgICAgUmVjb3ZlciBtZXRhZGF0YSBwcm9wZXJseSBieSBhZGRp
bmcgYWJvcnQgdGFza3MgdGhhdAorICAgICAgICBhcmUgcnVuIHdoZW4gYSB0cmFuc2FjdGlvbiBh
Ym9ydHMuCisgCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2U6OnJlbW92ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUZyb21NYXApOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24p
OgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZyb21NYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01h
cCk6CisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAg
ICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCk6CisgICAgICAgICog
c3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAxMC0xMC0wNiAgQW5kcmFzIEJlY3NpICA8YWJl
Y3NpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcAppbmRleCAwNDZlOWE5ZGM4YmVkZmM1OWNl
OWM1NWVjMDg4MDMwMmZjNzYzMTg5Li5kZTgxZDY2N2M1NGRmOWVlNTQwYWNiMmQyMGEyYjE2MDg2
ZWRiZWU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisrKyBi
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKQEAgLTU5LDEzICs1OSwxNiBAQCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjbwogewogICAgIC8vIEZJWE1FOiBSYWlzZSBhIE5PVF9BTExPV0VE
X0VSUiBpZiBtX3NldFZlcnNpb25UcmFuc2FjdGlvbiBpcyAwLgogICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5jcmVhdGVP
YmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBtX3NldFZlcnNpb25UcmFu
c2FjdGlvbi5nZXQoKSk7Ci0gICAgaWYgKCFvYmplY3RTdG9yZSkKKyAgICBpZiAoIW9iamVjdFN0
b3JlIHx8ICFtX3NldFZlcnNpb25UcmFuc2FjdGlvbikKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
cmV0dXJuIElEQk9iamVjdFN0b3JlOjpjcmVhdGUob2JqZWN0U3RvcmUucmVsZWFzZSgpLCBtX3Nl
dFZlcnNpb25UcmFuc2FjdGlvbi5nZXQoKSk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2U6OnJlbW92
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKKyAgICAvLyBGSVhNRTogUmFpc2Ug
YSBOT1RfQUxMT1dFRF9FUlIgaWYgbV9zZXRWZXJzaW9uVHJhbnNhY3Rpb24gaXMgMC4KKyAgICBp
ZiAoIW1fc2V0VmVyc2lvblRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CiAgICAgbV9iYWNr
ZW5kLT5yZW1vdmVPYmplY3RTdG9yZShuYW1lLCBtX3NldFZlcnNpb25UcmFuc2FjdGlvbi5nZXQo
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRl
eCA2NzY0NGIxMTQ4ZDYzNGQ2NjYzMDRhNDI0ZGRiYzMwM2RkY2Y1OWY5Li5jNzEzNWNhNjg5MzNj
YTJiY2I0OGVhMzNhZDMwM2FiMzYxYzQzZTcxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuY3BwCkBAIC0xMzYsMTMgKzEzNiwxNCBAQCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZU9iamVjdAogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG5hbWUsIGtleVBh
dGgsIGF1dG9JbmNyZW1lbnQpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bmFtZSgpID09IG5h
bWUpOwotICAgIG1fb2JqZWN0U3RvcmVzLnNldChuYW1lLCBvYmplY3RTdG9yZSk7CiAKICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwogICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uUHRyID0gdHJhbnNh
Y3Rpb247Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNr
VGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwg
ZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvblB0cikpKQorICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwg
dHJhbnNhY3Rpb25QdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3Jl
RnJvbU1hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpCiAgICAgICAgIHJldHVybiAwOwogCisg
ICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKICAgICByZXR1cm4gb2Jq
ZWN0U3RvcmUucmVsZWFzZSgpOwogfQogCkBAIC0xODYsMTEgKzE4NywxNCBAQCB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCVHJhbnNhY3RpbwogICAgICAgICAvLyBGSVhNRTogUmFpc2UgTk9UX0ZPVU5EX0VSUi4KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CiAg
ICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKICAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvblB0ciA9IHRy
YW5zYWN0aW9uOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUludGVybmFsLCBk
YXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uUHRyKSk7Ci0gICAgLy8gRklYTUU6IFJh
aXNlIE5PVF9BTExPV0VEX0VSUiBpZiB0aGUgYWJvdmUgZmFpbHMuICAgIAorICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBvYmplY3RTdG9y
ZSwgdHJhbnNhY3Rpb25QdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3Jl
VG9NYXAsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBSYWlz
ZSBOT1RfQUxMT1dFRF9FUlIgaWYgdGhlIGFib3ZlIGZhaWxzLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCkBAIC0yMDks
NyArMjEzLDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IG9iamVjdFN0b3JlcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbkNv
b3JkaW5hdG9yLT5jcmVhdGVUcmFuc2FjdGlvbihvYmplY3RTdG9yZXMuZ2V0KCksIElEQlRyYW5z
YWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgMCwgdGhpcyk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
c2V0VmVyc2lvbkludGVybmFsLCBkYXRhYmFzZSwgdmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwgZGF0YWJh
c2UsIHZlcnNpb24sIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OnJlc2V0VmVyc2lvbiwgZGF0YWJhc2UsIG1fdmVyc2lvbikpKQogICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpOT1RfQUxMT1dFRF9FUlIsICJzZXRWZXJzaW9uIG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGlu
IGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbi4iKSk7CiB9CiAKQEAgLTI0Niw2ICsyNTEsMjUgQEAg
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKICAgICB9CiB9
CiAKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFw
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlKQoreworICAgIEFTU0VSVChkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmUtPm5hbWUoKSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5yZW1v
dmUob2JqZWN0U3RvcmUtPm5hbWUoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6YWRkT2JqZWN0U3RvcmVUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKK3sKKyAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmVQdHIgPSBvYmplY3RTdG9yZTsKKyAgICBBU1NFUlQo
IWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZVB0ci0+bmFtZSgp
KSk7CisgICAgZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZVB0ci0+bmFt
ZSgpLCBvYmplY3RTdG9yZVB0cik7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
cmVzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAg
ZGF0YWJhc2UtPm1fdmVyc2lvbiA9IHZlcnNpb247Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCAwY2I0ODNkZWVlNGY0ODNjOGM0NzU4NmUz
ZDhhNzAxNmY0NzVjZTM0Li44NGJkNDJjMzNhOGM0MzZhNjczM2UyOWE3ZDViMzMzMWVlOTdhZmZm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisr
KyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAgLTczLDYgKzcz
LDExIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICBzdGF0aWMgdm9pZCBzZXRWZXJz
aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogCisg
ICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0YXNr
cy4KKyAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RTdG9yZUZyb21NYXAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOworICAgIHN0YXRpYyB2b2lkIGFkZE9iamVj
dFN0b3JlVG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOwor
ICAgIHN0YXRpYyB2b2lkIHJlc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsK
KwogICAgIE93blB0cjxTUUxpdGVEYXRhYmFzZT4gbV9zcWxpdGVEYXRhYmFzZTsKICAgICBTdHJp
bmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IGNmZDhhOTVmZGZjNmY1NTNiNmY3
MjFiMmFiNjNjYzUyMDQ0YzQ5OTYuLjVjMTE0ZjRlODk3M2NkYzhhY2IxOGY2ZDE2NTUyYTE0N2Y5
YzI4YzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKQEAgLTI3MiwxMyArMjcyLDE0IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChjb25zCiAKICAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpj
cmVhdGUodGhpcywgbmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKICAgICBBU1NFUlQoaW5kZXgtPm5h
bWUoKSA9PSBuYW1lKTsKLSAgICBtX2luZGV4ZXMuc2V0KG5hbWUsIGluZGV4KTsKIAogICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CiAgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0
cmFuc2FjdGlvbjsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFs
LCBvYmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGluZGV4LCB0cmFuc2FjdGlv
biksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhGcm9tTWFwLCBvYmplY3RT
dG9yZSwgaW5kZXgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBtX2luZGV4ZXMuc2V0KG5h
bWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCkBAIC0zMjAsMTEg
KzMyMSwxNSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYQogICAgICAgICAvLyBGSVhNRTogUmFp
c2UgTk9UX0ZPVU5EX0VSUi4KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2luZGV4ZXMu
cmVtb3ZlKG5hbWUpOworCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gdGhpczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvblB0ciA9IHRyYW5zYWN0aW9uOwotICAgIHRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpy
ZW1vdmVJbmRleEludGVybmFsLCBvYmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9uUHRyKSk7
Ci0gICAgLy8gRklYTUU6IFJhaXNlIE5PVF9BTExPV0VEX0VSUiBpZiB0aGUgYWJvdmUgc3RhdGVt
ZW50IGZhaWxzLgorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4SW50ZXJuYWws
IG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmFkZEluZGV4VG9NYXAsIG9iamVjdFN0b3JlLCBpbmRleCkpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBSYWlzZSBOT1RfQUxMT1dFRF9FUlIgaWYgdGhlIGFib3ZlIHN0YXRlbWVudCBmYWls
cy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2luZGV4ZXMucmVtb3ZlKG5hbWUpOwog
fQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikK
QEAgLTQwNCw2ICs0MDksMjAgQEAgU1FMaXRlRGF0YWJhc2UmIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnNxbGl0ZURhdGFiYXNlKCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRhYmFzZS0+c3Fs
aXRlRGF0YWJhc2UoKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1v
dmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgpCit7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29u
dGFpbnMoaW5kZXgtPm5hbWUoKSkpOworICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMucmVtb3Zl
KGluZGV4LT5uYW1lKCkpOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFk
ZEluZGV4VG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXgpCit7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4UHRy
ID0gaW5kZXg7CisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGlu
ZGV4UHRyLT5uYW1lKCkpKTsKKyAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChpbmRleFB0
ci0+bmFtZSgpLCBpbmRleFB0cik7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4
IDc0ZmMwZGRhOTdlYTZlZjFjYjFiYTlmZWVlZjlkZTk0YzMyYjg5M2MuLjMxZjk5MDgwNTIxNTI1
ZGUzZjFiOGQzYzk4ZDFlYWVhMjRhZjg2ZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaApAQCAtODksNiArODksMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCByZW1vdmVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwog
ICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwog
CisgICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0
YXNrcy4KKyAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOworICAgIHN0YXRpYyB2b2lkIGFkZEluZGV4VG9NYXAo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOworCiAgICAgc3RhdGljIGNv
bnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKIAogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBtX2RhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwCmluZGV4IDBhZDc3Zjc5OWQ5MWZkMTI2ZTk5OGExZTQ5YmU4MjcyM2IwMjM4
N2EuLjNlYzNiYjQ5M2Q5OTdmOWE2NTQ3ZDVmYmEwN2ZhNjQwMDI0ZDhlNDkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJD
b3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTYwLDEyICs2MCwx
NSBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcgogICAgIHJldHVybiBtX2RhdGFiYXNlLT5vYmpl
Y3RTdG9yZShuYW1lLCAwKTsgLy8gRklYTUU6IHJlbW92ZSBtb2RlIHBhcmFtLgogfQogCi1ib29s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCitib29sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OnNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRU
YXNrKQogewogICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisgICAgaWYgKGFib3J0VGFzaykK
KyAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7CisKICAgICBpZiAo
bV9zdGF0ZSA9PSBVbnVzZWQpCiAgICAgICAgIHN0YXJ0KCk7CiAKQEAgLTgxLDYgKzg0LDE0IEBA
IHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoKQogICAgIG1fdGFza1RpbWVy
LnN0b3AoKTsKICAgICBtX3Rhc2tFdmVudFRpbWVyLnN0b3AoKTsKICAgICBtX3RyYW5zYWN0aW9u
LT5yb2xsYmFjaygpOworCisgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgorICAg
IHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sobV9hYm9ydFRhc2tRdWV1ZS5maXJzdCgp
LnJlbGVhc2UoKSk7CisgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucmVtb3ZlRmlyc3QoKTsKKyAg
ICAgICAgdGFzay0+cGVyZm9ybVRhc2soMCk7CisgICAgfQorCiAgICAgbV9jYWxsYmFja3MtPm9u
QWJvcnQoKTsKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZp
bmlzaFRyYW5zYWN0aW9uKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmgKaW5kZXggY2Y0MGViYTdjMTg4NWVlZDM2YTM1NDM1MTVhOGUyODRhNTY2
YzNiYy4uNWY3NDA5YjY1ZjQzMDM3YjYwYTgyZTlhYWFhMGUxOTkzZDgzMzVjNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9XZWJD
b3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBzaG9ydCBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgdmlydHVh
bCBib29sIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiBhYm9ydFRhc2spOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tF
dmVudHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIGludCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KQEAgLTgyLDYgKzgyLDcgQEAgcHJpdmF0ZToKIAogICAg
IHR5cGVkZWYgRGVxdWU8T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gVGFz
a1F1ZXVlOwogICAgIFRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKKyAgICBUYXNrUXVldWUgbV9hYm9y
dFRhc2tRdWV1ZTsKIAogICAgIE93blB0cjxTUUxpdGVUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlv
bjsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZS5oCmluZGV4IGRiOTVkMDM4MmZiNzc4NjhhMTg0ZDk4ZTE0ZTEzZGQzYTU3ZmZkZTguLjY1YjA5
N2Q2NTdkYjBhNWQ0ZTNhYmVjNzQxYWQyMDIyNWIzNDM3NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTUwLDcgKzUwLDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CiAgICAgdmlydHVh
bCB1bnNpZ25lZCBzaG9ydCBtb2RlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzY2hl
ZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPikgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGFib3J0VGFzayA9IDApID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNr
RXZlbnRzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKICAgICB2aXJ0dWFs
IGludCBpZCgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oCmluZGV4IDVlNTRhYjQ4YTFiMjY1OWM0NThhN2JiZjkxNGRkZjI5YzgzNjVlOWEu
LmZkZGIwMDM1MGY4ZjcwOTgxNWE2ZTUzZGM0YTkyY2ZjYWJiY2MwMzUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKKysrIGIvV2ViQ29yZS9z
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaApAQCAtNjksOCArNjksOCBAQCBwcml2
YXRlOgogICAgIC8vIFRoaXMgbWFwIG93bnMgYWxsIHRyYW5zYWN0aW9ucyBrbm93biB0byB0aGUg
Y29vcmRpbmF0b3IuCiAgICAgSGFzaE1hcDxpbnQsIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiA+IG1fdHJhbnNhY3Rpb25zOwogICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZmZXJl
bnQgc3RhdGVzIGFyZSBncm91cGVkIGJlbG93LgotICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqID4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwotICAgIEhhc2hTZXQ8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogPiBtX3J1bm5pbmdUcmFuc2FjdGlvbnM7CisgICAgTGlz
dEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+IG1fc3RhcnRlZFRyYW5zYWN0aW9u
czsKKyAgICBIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPiBtX3J1bm5pbmdUcmFu
c2FjdGlvbnM7CiAgICAgaW50IG1fbmV4dElEOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTQ3ODZl
ZWRkZGZkZDgwNDg2Y2FlMThmMDNlNjg0YjlkM2U4OTAwNi4uZjgwOWUwMzkxYzVmNmNlNmU0MWM4
ODBlNWI4NWM5ODg5MzRmZWI2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAt
MTAtMDYgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElEQkRhdGFiYXNlIGFuZCBJREJP
YmplY3RTdG9yZSBtZXRhZGF0YSBpcyBub3QgcmVjb3ZlcmVkIGNvcnJlY3RseSB3aGVuIHRoZSBz
ZXRWZXJzaW9uIHRyYW5zYWN0aW9ucyBhYm9ydHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI0NQorCisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5OjpzY2hlZHVsZVRhc2spOgorICAgICAgICAqIHNyYy9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eS5oOgorCiAyMDEwLTEwLTA1ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcAppbmRleCA4MWI3
Y2VlYWVmN2M0NGM2YmNlZmYwNzRjYTRlMzBmZWQyNTFmZDY3Li40YjE5ZWU0MWYxZmY5OGUxMDIz
NGU3ZGYzN2JkMGQ4NGRjM2YxMDRhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZFByb3h5OjphYm9ydCgpCiAgICAgbV93ZWJJREJUcmFuc2FjdGlvbi0+
YWJvcnQoKTsKIH0KIAotYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6c2NoZWR1bGVU
YXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pCitib29sIElEQlRy
YW5zYWN0aW9uQmFja2VuZFByb3h5OjpzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPiwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPikKIHsKICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkIGFzIGl0J3MgdGhl
IGltcGwgb2JqZWN0cyB3aG8gZ2V0IHRvCiAgICAgLy8gZXhlY3V0ZSB0YXNrcyBpbiB0aGUgYnJv
d3NlciBwcm9jZXNzLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eS5oCmluZGV4IDNkYWY3M2ViM2M5MWNlMjg4ODMyYjg3MzBjZDc4Zjc1Y2RhYTNi
NDMuLjBjNTZmMTk1YWRmN2M0OTcyODhmYWI0NWE2NTVlYTlkZGIxNjA0OGYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmgKQEAgLTQ1LDcg
KzQ1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBtb2RlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0
KCk7Ci0gICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIFBhc3NPd25QdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4pOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tF
dmVudHMoKTsKICAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRDYWxsYmFja3MoSURCVHJhbnNhY3Rpb25DYWxsYmFja3MqKTsK
</data>
<flag name="review"
          id="59772"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>