<?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>21923</bug_id>
          
          <creation_ts>2008-10-28 08:21:48 -0700</creation_ts>
          <short_desc>Create an abstraction for script execution context</short_desc>
          <delta_ts>2008-10-29 03:27:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96861</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-28 08:21:48 -0700</bug_when>
    <thetext>HTML5: &quot;The script execution context of a script is defined when that script is created. In this specification, it is either a Window object or an empty object; other specifications might make the script execution context be some other object.&quot;

We need to abstract it out to enable DOM objects to work in both documents and workers.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96867</commentid>
    <comment_count>1</comment_count>
      <attachid>24716</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-28 09:03:43 -0700</bug_when>
    <thetext>Created attachment 24716
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96891</commentid>
    <comment_count>2</comment_count>
      <attachid>24716</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-28 11:46:22 -0700</bug_when>
    <thetext>Comment on attachment 24716
proposed patch

&gt; +        * bindings/js/JSDocumentCustom.cpp: (WebCore::JSDocument::mark):
&gt; +        Call markActiveObjectsForContext() by its ne name.

Typo: &quot;new name&quot;.

There&apos;s also the word &quot;gtwo0argument&quot; in here.

&gt; -JSAudioConstructor::JSAudioConstructor(ExecState* exec, Document* document)
&gt; +JSAudioConstructor::JSAudioConstructor(ExecState* exec, ScriptExecutionContext* scriptExecutionContext)

Maybe the argument could be called just &quot;context&quot;?

&gt; +#include &quot;JSDOMGlobalObject.h&quot;

Does adding this include to JSDOMBinding.h create a cycle?

I&apos;m not sure that we should move getDOMConstructor to JSDOMGlobalObject just because the storage is inside the global object. I can live with it, but I think we could consider that a hidden implementation detail.

&gt; +    virtual void fired()
&gt; +    {
&gt; +        m_scriptExecutionContext-&gt;dispatchMessagePortEvents();
&gt; +        delete this;
&gt; +    }

I think it&apos;s typically a mistake to put virtual functions into class definitions. We can do it if there&apos;s a clear benefit, but I don&apos;t think that brevity alone is a enough.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96896</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-28 12:20:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Maybe the argument could be called just &quot;context&quot;?

I did consider this, but thought that we have lots &quot;context&quot; and &quot;global&quot; objects around, so a littele differentiation could help. Even though it&apos;s a horribly long name.

Do you suggest to change the variable name globally, or just in these simpler methods?

&gt; &gt; +#include &quot;JSDOMGlobalObject.h&quot;
&gt; 
&gt; Does adding this include to JSDOMBinding.h create a cycle?

Hmm, JSDOMGlobalObject.h only includes from kjs, am I missing something?

&gt; I&apos;m not sure that we should move getDOMConstructor to JSDOMGlobalObject just
&gt; because the storage is inside the global object. I can live with it, but I
&gt; think we could consider that a hidden implementation detail.

I think that we now have enough classes in WebCore to eventually get rid of JSDOMBinding, and move all functions from there to their new homes. Do you think it makes sense?

&gt; &gt; +    virtual void fired()
&gt; &gt; +    {
&gt; &gt; +        m_scriptExecutionContext-&gt;dispatchMessagePortEvents();
&gt; &gt; +        delete this;
&gt; &gt; +    }
&gt; 
&gt; I think it&apos;s typically a mistake to put virtual functions into class
&gt; definitions. We can do it if there&apos;s a clear benefit, but I don&apos;t think that
&gt; brevity alone is a enough.

I generally agree, but for a simple closure that is defined in a .cpp file and is not exported, I am not aware of any negative consequences, so I think that brevity is enough of a reason.

Another case where I used inline virtual functions was for isDocument() and isWorkerContext() methods - this matches prevailing WebCore style and improves readability, but maybe there are sufficient reasons not to? What I do know if that this needlessly increases the pressure on compiler and linker, but I don&apos;t know how much.

&gt; r=me

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96898</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-28 12:25:23 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Do you suggest to change the variable name globally, or just in these simpler
&gt; methods?

Just when appropriate, mostly in shorter, simpler functions.

&gt; &gt; &gt; +#include &quot;JSDOMGlobalObject.h&quot;
&gt; &gt; 
&gt; &gt; Does adding this include to JSDOMBinding.h create a cycle?
&gt; 
&gt; Hmm, JSDOMGlobalObject.h only includes from kjs, am I missing something?

I think the answer is no, then.

&gt; &gt; I&apos;m not sure that we should move getDOMConstructor to JSDOMGlobalObject just
&gt; &gt; because the storage is inside the global object. I can live with it, but I
&gt; &gt; think we could consider that a hidden implementation detail.
&gt; 
&gt; I think that we now have enough classes in WebCore to eventually get rid of
&gt; JSDOMBinding, and move all functions from there to their new homes. Do you
&gt; think it makes sense?

Sure.

&gt; &gt; &gt; +    virtual void fired()
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        m_scriptExecutionContext-&gt;dispatchMessagePortEvents();
&gt; &gt; &gt; +        delete this;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; I think it&apos;s typically a mistake to put virtual functions into class
&gt; &gt; definitions. We can do it if there&apos;s a clear benefit, but I don&apos;t think that
&gt; &gt; brevity alone is enough.
&gt; 
&gt; I generally agree, but for a simple closure that is defined in a .cpp file and
&gt; is not exported, I am not aware of any negative consequences, so I think that
&gt; brevity is enough of a reason.
&gt; 
&gt; Another case where I used inline virtual functions was for isDocument() and
&gt; isWorkerContext() methods - this matches prevailing WebCore style and improves
&gt; readability, but maybe there are sufficient reasons not to? What I do know if
&gt; that this needlessly increases the pressure on compiler and linker, but I don&apos;t
&gt; know how much.

Everything you say makes sense. I have nothing to add.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96962</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-29 03:27:52 -0700</bug_when>
    <thetext>Committed revision 37966.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24716</attachid>
            <date>2008-10-28 09:03:43 -0700</date>
            <delta_ts>2008-10-28 11:46:22 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>ScriptExecutionContextDocument.txt</filename>
            <type>text/plain</type>
            <size>66405</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzkyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMwIEBACisyMDA4LTEwLTI4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjMKKyAgICAgICAg
Q3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQKKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAg
ICAgIEFkZGVkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQue2gsY3BwfS4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F1
ZGlvQ29uc3RydWN0b3I6OkpTQXVkaW9Db25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNBdWRpb0NvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW1hZ2VDb25zdHJ1Y3Rvcjo6SlNJ
bWFnZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTT3B0aW9uQ29uc3RydWN0b3I6OkpTT3B0aW9uQ29uc3RydWN0b3Ip
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yOjpKU1hNTEh0dHBSZXF1ZXN0Q29u
c3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3Rvci5oOgorICAgICAgICBQYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaW5zdGVhZCBvZiBE
b2N1bWVudCB0byBtYWtlIGdldERPTUNvbnN0cnVjdG9yKCkgaGFwcHkuCisgICAgICAgIFNpbmNl
IHRoZXNlIG9iamVjdHMgY2FuIG9ubHkgd29yayB3aXRoaW4gZG9jdW1lbnRzIG5vdywgaXQgaXMg
aW1tZWRpYXRlbHkgY29udmVydGVkIGJhY2sKKyAgICAgICAgdG8gRG9jdW1lbnQuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yOjpKU01lc3NhZ2VDaGFubmVs
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVj
dG9yOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgTWVzc2FnZUNoYW5uZWwgbmVl
ZHMgdG8gYmUgc3VwcG9ydGVkIGluIHdvcmtlcnMgcmlnaHQgYXdheSwgc28gdGhlIGNvbnN0cnVj
dG9yIG9wZXJhdGVzIHdpdGgKKyAgICAgICAgaXQgZGlyZWN0bHkuCisKKyAgICAgICAgKiBkb20v
QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6
QWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6fkFj
dGl2ZURPTU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6OmNvbnRl
eHREZXN0cm95ZWQpOgorICAgICAgICAqIGRvbS9BY3RpdmVET01PYmplY3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1h
cmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjptYXJrQ3Jvc3NI
ZWFwRGVwZW5kZW50T2JqZWN0c0ZvckNvbnRleHQpOgorICAgICAgICBVc2UgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCBpbnN0ZWFkIG9mIERvY3VtZW50LCBub3cgdGhhdCBBY3RpdmVET01PYmplY3Qg
YW5kIE1lc3NhZ2VQb3J0CisgICAgICAgIHRyYWNraW5nIGlzIGhhbmRsZWQgYnkgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOiAo
V2ViQ29yZTo6Z2V0RE9NUHJvdG90eXBlKTogTW92ZWQgdG8gSlNET01HbG9iYWxPYmplY3QuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0RE9NQ29uc3RydWN0b3IpOiBNb3ZlZCB0byB0aGlzIGZpbGUsIGFzIGNvbnN0cnVj
dG9ycyBsaXZlIGluIEpTRE9NR2xvYmFsT2JqZWN0LgorICAgICAgICBBbHNvLCB0aGUgZ3R3bzBh
cmd1bWVudCB2ZXJzaW9uIHRoYXQgdXNlZCB0byBiZSBpbiBKU0RPTVdpbmRvd0Jhc2UuY3BwIG5l
ZWQgdG8gYmUgYWNjZXNzaWJsZQorICAgICAgICB0byB3b3JrZXIgY29udGV4dCBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOiBBZGRlZCBh
IHB1cmUgdmlydHVhbCBtZXRob2QgdG8gYWNjZXNzCisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwOiAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KToKKyAgICAgICAgSW1wbGVtZW50IGJ5IHJldHVybmluZyB0aGUgYXNzb2NpYXRlZCBkb2N1bWVu
dC4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGN1cnJlbnRseSBnaXZlcyBib2d1cworICAgICAgICBy
ZXN1bHRzIGFmdGVyIG5hdmlnYXRpb24gLSBET01XaW5kb3cgRnJhbWUgcmVmZXJlbmNlIGlzIG5v
dCB6ZXJvZWQgb3V0LCBzbyB3ZSBnZXQgYSBkb2N1bWVudAorICAgICAgICB0aGF0IGlzIGN1cnJl
bnRseSBpbiB0aGUgZnJhbWUsIG5vdCB0aGUgb25lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHdpbmRv
dy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3Iu
Y3BwOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGluY2x1ZGUgb2YgRE9NV2luZG93LmguCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDogKFdlYkNvcmU6OkpTRG9jdW1l
bnQ6Om1hcmspOgorICAgICAgICBDYWxsIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCgpIGJ5
IGl0cyBuZSBuYW1lLgorCisgICAgICAgICogZG9tL0RlZGljYXRlZFdvcmtlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWRpY2F0ZWRXb3JrZXI6OkRlZGljYXRlZFdvcmtlcik6CisgICAgICAg
IChXZWJDb3JlOjpEZWRpY2F0ZWRXb3JrZXI6OmRvY3VtZW50KToKKyAgICAgICAgKiBkb20vRGVk
aWNhdGVkV29ya2VyLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpkb2N1bWVudCk6CisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0Lmg6CisgICAgICAgIEFkZGVkIGEgZG9jdW1lbnQoKSBmdW5jdGlvbiB0aGF0
IHVwY2FzdHMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYXMgdGhlc2Ugb2JqZWN0cyBvbmx5IHdv
cmsKKyAgICAgICAgd2l0aGluIGRvY3VtZW50cyBjdXJyZW50bHkgKGF0IGxlYXN0IGZvciBYTUxI
dHRwUmVxdWVzdCwgdGhpcyB3aWxsIGNoYW5nZSBzb29uIHRob3VnaCkuCisKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgorICAgICAgICBNb3ZlZCBh
Y3RpdmUgb2JqZWN0IGFuZCBNZXNzYWdlUG9ydCB0cmFja2luZyB1cCB0byBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LCB0byBzaGFyZSBjb2RlCisgICAgICAgIHdpdGggd29ya2Vycy4KKyAgICAgICAg
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
aXNEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVmU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGVyZWZTY3JpcHRFeGVj
dXRpb25Db250ZXh0KToKKyAgICAgICAgSW5oZXJpdCBmcm9tIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuCisKKyAgICAgICAgKiBkb20vTWVzc2FnZUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZUNoYW5uZWw6Ok1lc3NhZ2VDaGFubmVsKToKKyAgICAgICAgKiBkb20vTWVzc2Fn
ZUNoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VDaGFubmVsOjpjcmVhdGUpOgor
ICAgICAgICBVc2UgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBpbnN0ZWFkIG9mIERvY3VtZW50Lgor
CisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb3Nl
TWVzc2FnZVBvcnRUaW1lcjo6Q2xvc2VNZXNzYWdlUG9ydFRpbWVyKTogTWFrZSBtX3BvcnQgYSBS
ZWZQdHIsIGJlY2F1c2UKKyAgICAgICAgTWVzc2FnZVBvcnQgZG9lc24ndCByZWYoKSBpdHNlbGYg
d2hlbiBwb3N0aW5nIHRoaXMgZXZlbnQgYW55IG1vcmUgKHRoaXMgaXMgYSBmaXggZm9yIGFuCisg
ICAgICAgIHVucmVsYXRlZCBpc3N1ZSB0aGF0IHdhcyBjYXVzaW5nIHJhbmRvbSBjcmFzaGVzIGlu
IGxheW91dCB0ZXN0cykuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6TWVzc2FnZVBv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6On5NZXNzYWdlUG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6YXNzb2NpYXRlZEZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lc3NhZ2VQb3J0OjpjbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9y
dDo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnN0YXJ0Q29u
dmVyc2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpzdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6Y29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcyk6CisgICAgICAgICogZG9tL01l
c3NhZ2VQb3J0Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAg
ICAgICAgVXNlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaW5zdGVhZCBvZiBEb2N1bWVudC4gVGhp
cyBpcyBhIHN0ZXAgdG93YXJkIG1ha2luZyBNZXNzYWdlUG9ydAorICAgICAgICB3b3JrIGluIHdv
cmtlciBjb250ZXh0cyAtIHdlIG5lZWQgdG8gYWxzbyBtYWtlIHNvbWUgaXRzIG1ldGhvZCB0aHJl
YWQgc2FmZSBmb3IgY3Jvc3MtdGhyZWFkCisgICAgICAgIG1lc3NhZ2luZywgYW5kIG1ha2UgZXZl
bnQgZGlzcGF0Y2hpbmcgdGhyZWFkIHNhZmUuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0Lmg6IEFkZGVkLgorICAgICAgICBBY3RpdmVET01PYmplY3QgYW5kIE1lc3NhZ2VQb3J0IHRy
YWNraW5nIGlzIG1vdmVkIGZyb20gRG9jdW1lbnQuCisgICAgICAgIEl0IGlzIGRlYmF0YWJsZSB3
aGV0aGVyIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgc2hvdWxkIGJlIGEgcGFyZW50IG9mIERvY3Vt
ZW50IG9yIERPTVdpbmRvdywKKyAgICAgICAgYnV0IGFzIEknbSBqdXN0IG1vdmluZyBEb2N1bWVu
dCBjb2RlLCBhbmQgaXQgaXMgRG9jdW1lbnQgdGhhdCBpcyB0aGUgbWFpbiBjb250ZXh0IG9iamVj
dAorICAgICAgICBpbiBvdXIgaW1wbGVtZW50YXRpb24gY3VycmVudGx5LgorICAgICAgICBDaGFu
Z2luZyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHRvIGJlIGEgcGFyZW50IG9mIERPTVdpbmRvdyBj
YXVzZXMgYSBudW1iZXIgb2YgYnVncyB0aGF0CisgICAgICAgIHNlZW0gbm9uLXRyaXZpYWwgdG8g
Zml4LCBhbmQgaXNuJ3QgcmVhbGx5IGEgcGFydCBvZiB0aGlzIHRhc2suCisKIDIwMDgtMTAtMjgg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTcxNCw2ICs3MTQsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggXAog
CVdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIFwKIAlXZWJDb3JlL2RvbS9TY3JpcHRFbGVt
ZW50LmggXAorCVdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIFwKKwlXZWJD
b3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggXAogCVdlYkNvcmUvZG9tL1NlbGVjdG9y
Tm9kZUxpc3QuY3BwIFwKIAlXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmggXAogCVdlYkNv
cmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDM3ODk2KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNTYyLDYgKzU2Miw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIGRvbS9SYW5nZS5jcHAgXAogICAgIGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lci5jcHAgXAogICAgIGRvbS9TY3JpcHRFbGVtZW50LmNwcCBcCisgICAgZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwIFwKICAgICBkb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAgXAogICAg
IGRvbS9TdGF0aWNOb2RlTGlzdC5jcHAgXAogICAgIGRvbS9TdHlsZWRFbGVtZW50LmNwcCBcCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gMzc4OTYpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3Vy
Y2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNDI4LDYgKzQyOCw3IEBAIFRoaXMgZmlsZSBjb250
YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgZG9tL1JhbmdlLmNwcAogICAgICAg
ICBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwCiAgICAgICAgIGRvbS9TY3JpcHRFbGVt
ZW50LmNwcAorICAgICAgICBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKICAgICAgICAg
ZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCiAgICAgICAgIGRvbS9TdGF0aWNOb2RlTGlzdC5jcHAK
ICAgICAgICAgZG9tL1N0eWxlRWxlbWVudC5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMzc4OTYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTExOCw2ICsxMTExOCwyMiBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21c
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlX1BHT3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29s
DQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQlXaG9sZVByb2dyYW1PcHRp
bWl6YXRpb249InRydWUiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxkb21cU2VsZWN0b3JOb2RlTGlzdC5jcHAiDQogCQkJCT4NCiAJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDM3ODk2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxNDIsNiArNDE0Miw4IEBACiAJCUUx
MEI5QjZEMEI3NDc1OTkwMDNFRDg5MCAvKiBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwQjlCNkIwQjc0NzU5
OTAwM0VEODkwIC8qIE5hdGl2ZVhQYXRoTlNSZXNvbHZlci5jcHAgKi87IH07CiAJCUUxMEI5Q0ND
MEI3NDdBNDQwMDNFRDg5MCAvKiBET01DdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMEI5Q0NBMEI3NDdBNDQwMDNF
RDg5MCAvKiBET01DdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTEwQjlDQ0QwQjc0
N0E0NDAwM0VEODkwIC8qIERPTUN1c3RvbVhQYXRoTlNSZXNvbHZlci5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMEI5Q0NCMEI3NDdBNDQwMDNFRDg5
MCAvKiBET01DdXN0b21YUGF0aE5TUmVzb2x2ZXIubW0gKi87IH07CisJCUUxMUM5RDlCMEVCMzY4
MTIwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTFDOUQ5QTBFQjM2ODEyMDBFNDA5REIgLyog
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUUxMUM5REIwMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxMUM5REFGMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmNwcCAqLzsgfTsKIAkJRTEyRURCN0IwQjMwOEE3ODAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTJFREI3QTBC
MzA4QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTJFREJFQTBCMzA4RTBCMDAyNzA0QjYgLyogRXZl
bnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTEyRURCRTkwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCAqLzsgfTsKIAkJ
RTE3QTRBMUIwRDk3OTkxRDAwRkMxMEM2IC8qIERPTVNWR0FsdEdseXBoRWxlbWVudC5oIGluIENv
cHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVBQTZCQUMwRDk3NEEwMDAwMDU0MUFFIC8qIERPTVNWR0FsdEdseXBoRWxlbWVudC5oICovOyB9
OwpAQCAtODc1Miw2ICs4NzU0LDggQEAKIAkJRTEwQjlCNkIwQjc0NzU5OTAwM0VEODkwIC8qIE5h
dGl2ZVhQYXRoTlNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMTBCOUNDQTBCNzQ3QTQ0MDAzRUQ4OTAgLyogRE9NQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUN1c3RvbVhQYXRoTlNSZXNv
bHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTBCOUNDQjBCNzQ3QTQ0MDAz
RUQ4OTAgLyogRE9NQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMTFDOUQ5QTBFQjM2ODEyMDBFNDA5REIgLyogU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMUM5
REFGMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTJFREI3QTBCMzA4QTc4MDAyNzA0QjYg
LyogRXZlbnRUYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRU
YXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyRURCRTkwQjMwOEUwQjAw
MjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEV2ZW50VGFyZ2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFB
MzAyQkIwREU4MzcwMzAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTM5NzgsNiArMTM5ODIsOCBAQAogCQkJCTg1MDMxQjM2MEE0NEVGQzcwMEY5OTJF
MCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oICovLAogCQkJCTA4QTQ4NDc1MEU1MjcyQzUw
MEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmNwcCAqLywKIAkJCQkwOEE0ODQ3NjBFNTI3MkM1MDBD
M0ZFNzYgLyogU2NyaXB0RWxlbWVudC5oICovLAorCQkJCUUxMUM5REFGMEVCMzY5OTUwMEU0MDlE
QiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCAqLywKKwkJCQlFMTFDOUQ5QTBFQjM2ODEy
MDBFNDA5REIgLyogU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oICovLAogCQkJCUJDN0ZBNjgwMEQx
RjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmNwcCAqLywKIAkJCQlCQzdGQTY3RjBE
MUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oICovLAogCQkJCUJDN0ZBNjJDMEQx
RjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5jcHAgKi8sCkBAIC0xNjE1NCw2ICsxNjE2
MCw3IEBACiAJCQkJQkNGRjY0OTIwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aFNpemUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxQzM2QzAzMEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzA1MjEwRUIxODE1NjAwQjkwQUQ4IC8qIEF0
b21pY1N0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMUM5RDlCMEVCMzY4MTIwMEU0
MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MDM5
LDYgKzE4MDQ2LDcgQEAKIAkJCQlCQ0U2NUJFQTBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTY1RDMyMEVBRDEyMTEwMDdFNDUzMyAvKiBUaGVtZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUMzNkNCRDBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01H
bG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTExQzlEQjAwRUIzNjk5NTAwRTQw
OURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzg5
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksOSArMjksOSBAQAogCiAjaW5jbHVkZSAiSlNBdWRpb0NvbnN0cnVjdG9y
LmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxBdWRpb0VsZW1lbnQu
aCIKICNpbmNsdWRlICJKU0hUTUxBdWRpb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwpAQCAtNDAsMTAgKzQwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgQ2xhc3NJ
bmZvIEpTQXVkaW9Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQXVkaW9Db25zdHJ1Y3RvciIsIDAs
IDAsIDAgfTsKIAotSlNBdWRpb0NvbnN0cnVjdG9yOjpKU0F1ZGlvQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCitKU0F1ZGlvQ29uc3RydWN0b3I6OkpTQXVk
aW9Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgOiBET01PYmplY3QoSlNBdWRpb0NvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmVJRChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFBy
b3RvdHlwZSgpKSkKLSAgICAsIG1fZG9jdW1lbnQoc3RhdGljX2Nhc3Q8SlNEb2N1bWVudCo+KGFz
T2JqZWN0KHRvSlMoZXhlYywgZG9jdW1lbnQpKSkpCiB7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgbV9kb2N1bWVudCA9IHN0YXRpY19jYXN0
PEpTRG9jdW1lbnQqPihhc09iamVjdCh0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpKSk7CisKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJlYWRPbmx5fERvbnREZWxldGV8
RG9udEVudW0pOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDM3ODk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
c3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBKU0F1ZGlvQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQXVkaW9Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIERvY3VtZW50Kik7CisgICAgICAgIEpTQXVkaW9Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgICAgICBEb2N1bWVudCogZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50LT5pbXBsKCk7IH0KIApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMzc4OTYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSlNET01Db3JlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01HbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTRXZl
bnRFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU05vZGUuaCIKQEAgLTI4MSwxMiArMjgwLDEyIEBA
IHZvaWQgbWFya0RPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGQKICAgICB9CiB9CiAKLXZv
aWQgbWFya0FjdGl2ZU9iamVjdHNGb3JEb2N1bWVudChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IERvY3VtZW50KiBkb2MpCit2b2lkIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpCiB7CiAgICAgLy8gSWYgYW4gZWxlbWVudCBoYXMgcGVuZGluZyBhY3Rpdml0eSB0
aGF0IG1heSByZXN1bHQgaW4gbGlzdGVuZXJzIGJlaW5nIGNhbGxlZAogICAgIC8vIChlLmcuIGFu
IFhNTEh0dHBSZXF1ZXN0KSwgd2UgbmVlZCB0byBrZWVwIGFsbCBKUyB3cmFwcGVycyBhbGl2ZS4K
IAotICAgIGNvbnN0IEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+JiBhY3RpdmVPYmpl
Y3RzID0gZG9jLT5hY3RpdmVET01PYmplY3RzKCk7CisgICAgY29uc3QgSGFzaE1hcDxBY3RpdmVE
T01PYmplY3QqLCB2b2lkKj4mIGFjdGl2ZU9iamVjdHMgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5hY3RpdmVET01PYmplY3RzKCk7CiAgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lk
Kj46OmNvbnN0X2l0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmplY3RzLmVuZCgp
OwogICAgIGZvciAoSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2b2lkKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBhY3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0Vu
ZDsgKytpdGVyKSB7CiAgICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5
KCkpIHsKQEAgLTI5Nyw3ICsyOTYsNyBAQCB2b2lkIG1hcmtBY3RpdmVPYmplY3RzRm9yRG9jdW1l
bnQoSlNHbG9iCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb25zdCBIYXNoU2V0PE1lc3NhZ2VQ
b3J0Kj4mIG1lc3NhZ2VQb3J0cyA9IGRvYy0+bWVzc2FnZVBvcnRzKCk7CisgICAgY29uc3QgSGFz
aFNldDxNZXNzYWdlUG9ydCo+JiBtZXNzYWdlUG9ydHMgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5tZXNzYWdlUG9ydHMoKTsKICAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJh
dG9yIHBvcnRzRW5kID0gbWVzc2FnZVBvcnRzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxNZXNz
YWdlUG9ydCo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbWVzc2FnZVBvcnRzLmJlZ2luKCk7IGl0
ZXIgIT0gcG9ydHNFbmQ7ICsraXRlcikgewogICAgICAgICBpZiAoKCppdGVyKS0+aGFzUGVuZGlu
Z0FjdGl2aXR5KCkpIHsKQEAgLTMwOSw5ICszMDgsOSBAQCB2b2lkIG1hcmtBY3RpdmVPYmplY3Rz
Rm9yRG9jdW1lbnQoSlNHbG9iCiAgICAgfQogfQogCi12b2lkIG1hcmtDcm9zc0hlYXBEZXBlbmRl
bnRPYmplY3RzRm9yRG9jdW1lbnQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBEb2N1bWVudCog
ZG9jdW1lbnQpCit2b2lkIG1hcmtDcm9zc0hlYXBEZXBlbmRlbnRPYmplY3RzRm9yQ29udGV4dChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpCiB7Ci0gICAgY29uc3QgSGFzaFNldDxNZXNzYWdlUG9ydCo+JiBtZXNz
YWdlUG9ydHMgPSBkb2N1bWVudC0+bWVzc2FnZVBvcnRzKCk7CisgICAgY29uc3QgSGFzaFNldDxN
ZXNzYWdlUG9ydCo+JiBtZXNzYWdlUG9ydHMgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5tZXNz
YWdlUG9ydHMoKTsKICAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIHBv
cnRzRW5kID0gbWVzc2FnZVBvcnRzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9y
dCo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbWVzc2FnZVBvcnRzLmJlZ2luKCk7IGl0ZXIgIT0g
cG9ydHNFbmQ7ICsraXRlcikgewogICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9ICppdGVyOwpA
QCAtMzI0LDcgKzMyMyw3IEBAIHZvaWQgbWFya0Nyb3NzSGVhcERlcGVuZGVudE9iamVjdHNGb3JE
b2MKIAogICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIGNyb3NzLWhlYXAgbW9kZWwgb2YgbWFya2lu
ZyBvbiBzYW1lLWhlYXAgcGFpcnMuIE90aGVyd2lzZSwgdGhleSB3aWxsIG5ldmVyIGJlIGRlc3Ry
b3llZCwgYmVjYXVzZSBhIHBvcnQgd2lsbCBtYXJrIGl0cyBlbnRhbmdsZWQgb25lLAogICAgICAg
ICAgICAgLy8gYW5kIGl0IHdpbGwgbmV2ZXIgZ2V0IGEgY2hhbmNlIHRvIGJlIG1hcmtlZCBhcyBp
bmFjY2Vzc2libGUuIFNvLCB0aGUgcG9ydCB3aWxsIGtlZXAgZ2V0dGluZyBtYXJrZWQgaW4gdGhp
cyBmdW5jdGlvbi4KLSAgICAgICAgICAgIGlmICgocG9ydC0+ZG9jdW1lbnQoKSAmJiBlbnRhbmds
ZWRQb3J0LT5kb2N1bWVudCgpKSB8fCAocG9ydC0+d29ya2VyQ29udGV4dCgpID09IGVudGFuZ2xl
ZFBvcnQtPndvcmtlckNvbnRleHQoKSkpCisgICAgICAgICAgICBpZiAoKHBvcnQtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSA9PSBlbnRhbmdsZWRQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpIHx8IChwb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSAmJiBl
bnRhbmdsZWRQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIC8vIElmIHRoZSB3cmFwcGVy
IGhhc24ndCBiZWVuIG1hcmtlZCBkdXJpbmcgdGhlIG1hcmsgcGhhc2Ugb2YgR0MsIHRoZW4gdGhl
IHBvcnQgc2hvdWxkbid0IHByb3RlY3QgaXRzIGVudGFuZ2xlZCBvbmUuCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDM3ODk2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2lm
bmRlZiBKU0RPTUJpbmRpbmdfaAogI2RlZmluZSBKU0RPTUJpbmRpbmdfaAogCisjaW5jbHVkZSAi
SlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlIDxranMvSlNGdW5jdGlvbi5oPgogI2luY2x1
ZGUgPGtqcy9pbnRlcnByZXRlci5oPgogI2luY2x1ZGUgPGtqcy9sb29rdXAuaD4KQEAgLTY4LDkg
KzY5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHZvaWQgZm9yZ2V0QWxsRE9NTm9kZXNG
b3JEb2N1bWVudChEb2N1bWVudCopOwogICAgIHZvaWQgdXBkYXRlRE9NTm9kZURvY3VtZW50KE5v
ZGUqLCBEb2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCk7CiAgICAg
dm9pZCBtYXJrRE9NTm9kZXNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgbWFya0Fj
dGl2ZU9iamVjdHNGb3JEb2N1bWVudChKU0M6OkpTR2xvYmFsRGF0YSYsIERvY3VtZW50Kik7Cisg
ICAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoSlNDOjpKU0dsb2JhbERhdGEmLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgdm9pZCBtYXJrRE9NT2JqZWN0V3JhcHBlcihK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdm9pZCogb2JqZWN0KTsKLSAgICB2b2lkIG1h
cmtDcm9zc0hlYXBEZXBlbmRlbnRPYmplY3RzRm9yRG9jdW1lbnQoSlNDOjpKU0dsb2JhbERhdGEm
LCBEb2N1bWVudCopOworICAgIHZvaWQgbWFya0Nyb3NzSGVhcERlcGVuZGVudE9iamVjdHNGb3JD
b250ZXh0KEpTQzo6SlNHbG9iYWxEYXRhJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAg
ICAgSlNDOjpTdHJ1Y3R1cmVJRCogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKICAgICBKU0M6OlN0cnVjdHVyZUlEKiBjYWNoZURP
TVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4s
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CkBAIC04OCwxNSArODksNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDOjpKU09iamVjdCo+
KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMpLT5zdG9yZWRQcm90
b3R5cGUoKSkpOwogICAgIH0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDb25zdHJ1Y3RvckNsYXNzPiBp
bmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCi0gICAgewotICAgICAgICBpZiAoSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IgPSBnZXRD
YWNoZWRET01Db25zdHJ1Y3RvcihleGVjLCAmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvKSkKLSAg
ICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKLSAgICAgICAgSlNDOjpKU09iamVjdCogY29u
c3RydWN0b3IgPSBuZXcgKGV4ZWMpIENvbnN0cnVjdG9yQ2xhc3MoZXhlYyk7Ci0gICAgICAgIGNh
Y2hlRE9NQ29uc3RydWN0b3IoZXhlYywgJkNvbnN0cnVjdG9yQ2xhc3M6OnNfaW5mbywgY29uc3Ry
dWN0b3IpOwotICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgfQotCiAgICAgI2RlZmlu
ZSBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGNsYXNzTmFtZSwgb2JqZWN0KSBjcmVh
dGVET01PYmplY3RXcmFwcGVyPEpTIyNjbGFzc05hbWU+KGV4ZWMsIHN0YXRpY19jYXN0PGNsYXNz
TmFtZSo+KG9iamVjdCkpCiAgICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBE
T01DbGFzcz4gaW5saW5lIERPTU9iamVjdCogY3JlYXRlRE9NT2JqZWN0V3JhcHBlcihKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgRE9NQ2xhc3MqIG9iamVjdCkKICAgICB7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OworCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiwg
UmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+ID4gSlNET01TdHJ1Y3R1cmVNYXA7CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiwgSlNDOjpKU09iamVjdCo+IEpTRE9NQ29u
c3RydWN0b3JNYXA7CiAKQEAgLTQ1LDE0ICs0NywzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4sIEpT
RE9NR2xvYmFsT2JqZWN0RGF0YSosIEpTQzo6SlNPYmplY3QqIHRoaXNWYWx1ZSk7CiAKICAgICBw
dWJsaWM6Ci0gICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0RGF0YSogZCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0RGF0YSo+KEpTQzo6SlNWYXJpYWJsZU9iamVj
dDo6ZCk7IH0KLQogICAgICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcygpIHsgcmV0
dXJuIGQoKS0+c3RydWN0dXJlczsgfQogICAgICAgICBKU0RPTUNvbnN0cnVjdG9yTWFwJiBjb25z
dHJ1Y3RvcnMoKSBjb25zdCB7IHJldHVybiBkKCktPmNvbnN0cnVjdG9yczsgfQogCisgICAgICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0ID0gMDsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3REYXRhKiBkKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3REYXRhKj4oSlNDOjpKU1ZhcmlhYmxlT2JqZWN0Ojpk
KTsgfQogICAgIH07CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb25zdHJ1Y3RvckNsYXNzPgorICAg
IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRET01Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKKyAgICB7CisgICAgICAgIGlmIChKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGdl
dENhY2hlZERPTUNvbnN0cnVjdG9yKGV4ZWMsICZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8pKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgICAgICBKU0M6OkpTT2JqZWN0KiBj
b25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQ29uc3RydWN0b3JDbGFzcyhleGVjKTsKKyAgICAgICAg
Y2FjaGVET01Db25zdHJ1Y3RvcihleGVjLCAmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCBjb25z
dHJ1Y3Rvcik7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBDb25zdHJ1Y3RvckNsYXNzPgorICAgIGlubGluZSBKU0M6OkpTT2JqZWN0KiBn
ZXRET01Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChKU0M6OkpTT2JqZWN0KiBjb25zdHJ1
Y3RvciA9IGdsb2JhbE9iamVjdC0+Y29uc3RydWN0b3JzKCkuZ2V0KCZDb25zdHJ1Y3RvckNsYXNz
OjpzX2luZm8pKQorICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgICAgICBKU0M6
OkpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQ29uc3RydWN0b3JDbGFzcyhleGVj
LCBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAgIEFTU0VS
VCghZ2xvYmFsT2JqZWN0LT5jb25zdHJ1Y3RvcnMoKS5jb250YWlucygmQ29uc3RydWN0b3JDbGFz
czo6c19pbmZvKSk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+Y29uc3RydWN0b3JzKCkuc2V0KCZD
b25zdHJ1Y3RvckNsYXNzOjpzX2luZm8sIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGNv
bnN0cnVjdG9yOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
SlNET01HbG9iYWxPYmplY3RfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcAkocmV2aXNpb24gMzc4OTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIsMTEgQEAgSlNET01XaW5k
b3dCYXNlOjp+SlNET01XaW5kb3dCYXNlKCkKICAgICAgICAgaTEtPnNlY29uZC0+Y2xlYXJXaW5k
b3coKTsKIH0KIAorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01XaW5kb3dCYXNlOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZCgpLT5pbXBsLT5kb2N1
bWVudCgpOworfQorCiBzdGF0aWMgYm9vbCBhbGxvd1BvcFVwKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSktPmltcGwoKS0+ZnJhbWUoKTsKQEAgLTQwMSwxNyArNDA2LDYgQEAgc3RhdGljIEpTVmFs
dWUqIHNob3dNb2RhbERpYWxvZyhFeGVjU3RhdAogICAgIHJldHVybiByZXR1cm5WYWx1ZSA/IHJl
dHVyblZhbHVlIDoganNVbmRlZmluZWQoKTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgQ29uc3RydWN0
b3JDbGFzcz4KLXN0YXRpYyBKU09iamVjdCogZ2V0RE9NQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEpTRE9NV2luZG93QmFzZSogd2luZG93KQotewotICAgIGlmIChKU09i
amVjdCogY29uc3RydWN0b3IgPSB3aW5kb3ctPmNvbnN0cnVjdG9ycygpLmdldCgmQ29uc3RydWN0
b3JDbGFzczo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwotICAgIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQ29uc3RydWN0b3JDbGFzcyhleGVjLCB3aW5k
b3ctPmltcGwoKS0+ZG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKCF3aW5kb3ctPmNvbnN0cnVjdG9y
cygpLmNvbnRhaW5zKCZDb25zdHJ1Y3RvckNsYXNzOjpzX2luZm8pKTsKLSAgICB3aW5kb3ctPmNv
bnN0cnVjdG9ycygpLnNldCgmQ29uc3RydWN0b3JDbGFzczo6c19pbmZvLCBjb25zdHJ1Y3Rvcik7
Ci0gICAgcmV0dXJuIGNvbnN0cnVjdG9yOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTI1LDcgKzUxOSw3IEBAIHZvaWQgSlNET01X
aW5kb3dCYXNlOjptYXJrQ3Jvc3NIZWFwRGVwZW4KICAgICBpZiAoIWRvY3VtZW50KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtYXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0c0ZvckRvY3VtZW50
KCpnbG9iYWxEYXRhKCksIGRvY3VtZW50KTsKKyAgICBtYXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2Jq
ZWN0c0ZvckNvbnRleHQoKmdsb2JhbERhdGEoKSwgZG9jdW1lbnQpOwogfQogCiBib29sIEpTRE9N
V2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDM3ODk2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIs
NiBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgPGtqcy9wcm90
ZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CkBAIC01OSw2ICs1OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB1cGRh
dGVEb2N1bWVudCgpOwogCiAgICAgICAgIERPTVdpbmRvdyogaW1wbCgpIGNvbnN0IHsgcmV0dXJu
IGQoKS0+aW1wbC5nZXQoKTsgfQorICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRpc2Nv
bm5lY3RGcmFtZSgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29y
a2VyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
ZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM3ODk2KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJDb25z
dHJ1Y3Rvci5oIgogCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRGVkaWNhdGVk
V29ya2VyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDM3ODk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIEpTRG9jdW1lbnQ6Om1hcmsoKQog
ewogICAgIEpTRXZlbnRUYXJnZXROb2RlOjptYXJrKCk7CiAgICAgbWFya0RPTU5vZGVzRm9yRG9j
dW1lbnQoaW1wbCgpKTsKLSAgICBtYXJrQWN0aXZlT2JqZWN0c0ZvckRvY3VtZW50KCpIZWFwOjpo
ZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIGltcGwoKSk7CisgICAgbWFya0FjdGl2ZU9iamVjdHNG
b3JDb250ZXh0KCpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIGltcGwoKSk7CiB9CiAK
IEpTVmFsdWUqIEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDM3ODk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCw5ICsyMCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNJbWFnZUNvbnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAg
LTMyLDEwICszMiwxMSBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTSW1hZ2VDb25zdHJ1
CiAKIGNvbnN0IENsYXNzSW5mbyBKU0ltYWdlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkltYWdl
Q29uc3RydWN0b3IiLCAwLCAwLCAwIH07CiAKLUpTSW1hZ2VDb25zdHJ1Y3Rvcjo6SlNJbWFnZUNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRvY3VtZW50KQorSlNJbWFnZUNv
bnN0cnVjdG9yOjpKU0ltYWdlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgIDogRE9NT2JqZWN0KEpT
SW1hZ2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCi0gICAgLCBtX2RvY3VtZW50KHN0YXRpY19jYXN0
PEpTRG9jdW1lbnQqPihhc09iamVjdCh0b0pTKGV4ZWMsIGRvY3VtZW50KSkpKQogeworICAgIEFT
U0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIG1fZG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4oYXNPYmplY3QodG9KUyhleGVjLCBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKSkpOwogfQogCiBzdGF0aWMg
SlNPYmplY3QqIGNvbnN0cnVjdEltYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0
cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ltYWdlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW1hZ2VDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSw5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIERvY3VtZW50OwotCiAgICAgY2xh
c3MgSlNJbWFnZUNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CiAgICAgcHVibGljOgot
ICAgICAgICBKU0ltYWdlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBEb2N1bWVudCopOwor
ICAgICAgICBKU0ltYWdlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0Kik7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZG9jdW1lbnQtPmltcGwoKTsgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5o
IgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RvY3VtZW50LmgiCiAjaW5j
bHVkZSAiSlNNZXNzYWdlQ2hhbm5lbC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmgiCiAK
QEAgLTM2LDEwICszNywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IENsYXNzSW5m
byBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIk1lc3NhZ2VDaGFubmVs
Q29uc3RydWN0b3IiLCAwLCAwLCAwIH07CiAKLUpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcjo6
SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRv
Y3VtZW50KQorSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yOjpKU01lc3NhZ2VDaGFubmVsQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgIDogRE9NT2JqZWN0KEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmpl
Y3RQcm90b3R5cGUoKSkpCi0gICAgLCBtX2RvY3VtZW50KHN0YXRpY19jYXN0PEpTRG9jdW1lbnQq
Pihhc09iamVjdCh0b0pTKGV4ZWMsIGRvY3VtZW50KSkpKQorICAgICwgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7CisgICAgaWYgKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKQorICAgICAgICBtX2NvbnRleHRXcmFwcGVyID0g
dG9KUyhleGVjLCBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
KTsKKyAgICBlbHNlIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKQorICAgICAgICA7IC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgICAgZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlLCBKU01lc3NhZ2VDaGFubmVsUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBO
b25lKTsKIH0KIApAQCAtNTUsMTQgKzYzLDE0IEBAIENvbnN0cnVjdFR5cGUgSlNNZXNzYWdlQ2hh
bm5lbENvbnN0cnVjdG8KIAogSlNPYmplY3QqIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBB
cmdMaXN0JikKIHsKLSAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBNZXNzYWdlQ2hhbm5l
bDo6Y3JlYXRlKHN0YXRpY19jYXN0PEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcio+KGNvbnN0
cnVjdG9yKS0+ZG9jdW1lbnQoKSkpKTsKKyAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBN
ZXNzYWdlQ2hhbm5lbDo6Y3JlYXRlKHN0YXRpY19jYXN0PEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1
Y3Rvcio+KGNvbnN0cnVjdG9yKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkpOwogfQogCiB2
b2lkIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcjo6bWFyaygpCiB7CiAgICAgRE9NT2JqZWN0
OjptYXJrKCk7Ci0gICAgaWYgKCFtX2RvY3VtZW50LT5tYXJrZWQoKSkKLSAgICAgICAgbV9kb2N1
bWVudC0+bWFyaygpOworICAgIGlmICghbV9jb250ZXh0V3JhcHBlci0+bWFya2VkKCkpCisgICAg
ICAgIG1fY29udGV4dFdyYXBwZXItPm1hcmsoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI4ICsyNywyNyBA
QAogI2RlZmluZSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3JfaAogCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSAgICBjbGFzcyBGcmFtZTsKLQogICAgIGNsYXNzIEpTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgRG9jdW1lbnQqKTsKKyAgICAg
ICAgSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOwogICAgICAgICB2aXJ0dWFsIH5KU01lc3NhZ2VDaGFubmVsQ29uc3Ry
dWN0b3IoKTsKICAgICAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZv
KCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQtPmltcGwoKTsgfQorICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0OyB9CiAKICAgICAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNIYXNJbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBjb25zdCBKU0M6
OkFyZ0xpc3QmKTsKICAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3Ry
dWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy
aygpOworCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNEb2N1bWVudCogbV9kb2N1bWVudDsKKyAg
ICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Owor
ICAgICAgICBKU0M6OkpTVmFsdWUqIG1fY29udGV4dFdyYXBwZXI7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3B0aW9uQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNP
cHRpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDkgKzIwLDkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU09wdGlvbkNvbnN0cnVjdG9yLmgiCiAKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5j
bHVkZSAiSlNIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0z
MywxMCArMzMsMTIgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU09wdGlvbkNvbnN0cgog
CiBjb25zdCBDbGFzc0luZm8gSlNPcHRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiT3B0aW9u
Q29uc3RydWN0b3IiLCAwLCAwLCAwIH07CiAKLUpTT3B0aW9uQ29uc3RydWN0b3I6OkpTT3B0aW9u
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCitKU09wdGlv
bkNvbnN0cnVjdG9yOjpKU09wdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICA6IERPTU9iamVj
dChKU09wdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSkKLSAgICAsIG1fZG9jdW1lbnQoc3RhdGlj
X2Nhc3Q8SlNEb2N1bWVudCo+KGFzT2JqZWN0KHRvSlMoZXhlYywgZG9jdW1lbnQpKSkpCiB7Cisg
ICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgbV9k
b2N1bWVudCA9IHN0YXRpY19jYXN0PEpTRG9jdW1lbnQqPihhc09iamVjdCh0b0pTKGV4ZWMsIHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpKSk7CisKICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgNCks
IFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzc4OTYpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU09wdGlvbkNvbnN0
cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBKU09wdGlv
bkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgRG9jdW1lbnQqKTsKKyAgICAgICAgSlNPcHRp
b25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC0+
aW1wbCgpOyB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM3ODk2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTWE1MSHR0cFJl
cXVlc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
WE1MSHR0cFJlcXVlc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTMyLDEwICszMiwx
MiBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTWE1MSHR0cFJlcXVlCiAKIGNvbnN0IENs
YXNzSW5mbyBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlhNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3IiLCAwLCAwLCAwIH07CiAKLUpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3Rvcjo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1l
bnQqIGRvY3VtZW50KQorSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yOjpKU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgIDogRE9NT2JqZWN0KEpTWE1MSHR0cFJlcXVlc3RD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKSkpCi0gICAgLCBtX2RvY3VtZW50KHN0YXRpY19jYXN0PEpTRG9j
dW1lbnQqPihhc09iamVjdCh0b0pTKGV4ZWMsIGRvY3VtZW50KSkpKQogeworICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIG1fZG9jdW1lbnQgPSBz
dGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4oYXNPYmplY3QodG9KUyhleGVjLCBzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKSkpOworCiAgICAgcHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTWE1MSHR0cFJlcXVlc3RQcm90b3R5cGU6
OnNlbGYoZXhlYyksIE5vbmUpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM3ODk2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTEgKzI1LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBE
b2N1bWVudDsKLQogY2xhc3MgSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yIDogcHVibGljIERP
TU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgRG9jdW1lbnQqKTsKKyAgICBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC0+aW1wbCgpOyB9CiAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogV2ViQ29yZS9kb20vQWN0
aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BY3RpdmVET01PYmpl
Y3QuY3BwCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI2ICsyNywyNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQWN0aXZlRE9NT2JqZWN0OjpBY3RpdmVET01PYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50
LCB2b2lkKiB1cGNhc3RQb2ludGVyKQotICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKK0FjdGl2
ZURPTU9iamVjdDo6QWN0aXZlRE9NT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIHZvaWQqIHVwY2FzdFBvaW50ZXIpCisgICAgOiBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAsIG1fcGVuZGluZ0Fj
dGl2aXR5Q291bnQoMCkKIHsKLSAgICBtX2RvY3VtZW50LT5jcmVhdGVkQWN0aXZlRE9NT2JqZWN0
KHRoaXMsIHVwY2FzdFBvaW50ZXIpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y3Jl
YXRlZEFjdGl2ZURPTU9iamVjdCh0aGlzLCB1cGNhc3RQb2ludGVyKTsKIH0KIAogQWN0aXZlRE9N
T2JqZWN0Ojp+QWN0aXZlRE9NT2JqZWN0KCkKIHsKLSAgICBpZiAobV9kb2N1bWVudCkKLSAgICAg
ICAgbV9kb2N1bWVudC0+ZGVzdHJveWVkQWN0aXZlRE9NT2JqZWN0KHRoaXMpOworICAgIGlmICht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGVzdHJveWVkQWN0aXZlRE9NT2JqZWN0KHRoaXMpOwogfQogCiB2b2lkIEFjdGl2ZURPTU9i
amVjdDo6Y29udGV4dERlc3Ryb3llZCgpCiB7Ci0gICAgbV9kb2N1bWVudCA9IDA7CisgICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKIH0KIAogdm9pZCBBY3RpdmVET01PYmplY3Q6OnN0
b3AoKQpJbmRleDogV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgJKHJldmlzaW9uIDM3ODk2KQorKysgV2ViQ29y
ZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiAgICAgY2xhc3MgQWN0aXZlRE9NT2JqZWN0IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEFjdGl2ZURPTU9iamVjdChEb2N1bWVudCosIHZvaWQqIHVw
Y2FzdFBvaW50ZXIpOworICAgICAgICBBY3RpdmVET01PYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIHZvaWQqIHVwY2FzdFBvaW50ZXIpOwogCi0gICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsgfQogICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIHsg
cmV0dXJuIG1fcGVuZGluZ0FjdGl2aXR5Q291bnQ7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y29udGV4dERlc3Ryb3llZCgpOwpAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50
OworICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiAgICAgICAgIHVuc2lnbmVkIG1fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CiAgICAgfTsKIApJ
bmRleDogV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9EZWRpY2F0ZWRXb3JrZXIuY3BwCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUv
ZG9tL0RlZGljYXRlZFdvcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXIuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5o
IgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC04
Nyw3ICs4OSwxMyBAQCBEZWRpY2F0ZWRXb3JrZXI6On5EZWRpY2F0ZWRXb3JrZXIoKQogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiB9CiAKLVBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IERlZGlj
YXRlZFdvcmtlcjo6c3RhcnRDb252ZXJzYXRpb24oRG9jdW1lbnQqIC8qc2NyaXB0Q29udGV4dERv
Y3VtZW50Ki8sIGNvbnN0IFN0cmluZyYgLyptZXNzYWdlKi8pCitEb2N1bWVudCogRGVkaWNhdGVk
V29ya2VyOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworfQorCitQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0
PiBEZWRpY2F0ZWRXb3JrZXI6OnN0YXJ0Q29udmVyc2F0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIC8qc2NyaXB0RXhlY3V0aW9uQ29udGV4dCovLCBjb25zdCBTdHJpbmcmIC8qbWVzc2FnZSov
KQogewogICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNv
cmUvZG9tL0RlZGljYXRlZFdvcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RlZGlj
YXRlZFdvcmtlci5oCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUvZG9tL0RlZGljYXRlZFdv
cmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgICBjbGFzcyBDYWNoZWRTY3JpcHQ7CiAg
ICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAg
ICBjbGFzcyBNZXNzYWdlUG9ydDsKICAgICBjbGFzcyBTdHJpbmc7CiAKQEAgLTUyLDcgKzUzLDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWRpY2F0
ZWRXb3JrZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgRG9jdW1lbnQqIGRvY3VtZW50LCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRvcHRSZWYobmV3IERlZGljYXRlZFdvcmtlcih1
cmwsIGRvY3VtZW50LCBlYykpOyB9CiAgICAgICAgIH5EZWRpY2F0ZWRXb3JrZXIoKTsKIAotICAg
ICAgICBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBzdGFydENvbnZlcnNhdGlvbihEb2N1bWVudCos
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNv
bnN0OworCisgICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHN0YXJ0Q29udmVyc2F0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgICAg
ICB2b2lkIGNsb3NlKCk7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBNZXNzYWdlUG9ydCogcG9ydCA9IDApOwogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAzNzg5NikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsNyArNzUsNiBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVBvcnQu
aCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKQEAgLTI2MiwyMyArMjYx
LDYgQEAgc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhOb2RlICpubwogCiBzdGF0aWMg
SGFzaFNldDxEb2N1bWVudCo+KiBjaGFuZ2VkRG9jdW1lbnRzID0gMDsKIAotY2xhc3MgTWVzc2Fn
ZVBvcnRUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewotcHVibGljOgotICAgIE1lc3NhZ2VQb3J0
VGltZXIoUGFzc1JlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQpCi0gICAgICAgIDogbV9kb2N1bWVu
dChkb2N1bWVudCkKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBm
aXJlZCgpCi0gICAgewotICAgICAgICBtX2RvY3VtZW50LT5kaXNwYXRjaE1lc3NhZ2VQb3J0RXZl
bnRzKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzOwotICAgIH0KLQotICAgIFJlZlB0cjxEb2N1bWVu
dD4gbV9kb2N1bWVudDsKLX07Ci0KIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGJv
b2wgaXNYSFRNTCkKICAgICA6IENvbnRhaW5lck5vZGUoMCkKICAgICAsIG1fZG9tdHJlZV92ZXJz
aW9uKDApCkBAIC0yOTIsNyArMjc0LDYgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFt
ZSwgYm9vbCBpcwogI2VuZGlmCiAgICAgLCBtX3htbFZlcnNpb24oIjEuMCIpCiAgICAgLCBtX3ht
bFN0YW5kYWxvbmUoZmFsc2UpCi0gICAgLCBtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lcihmYWxzZSkK
ICNpZiBFTkFCTEUoWEJMKQogICAgICwgbV9iaW5kaW5nTWFuYWdlcihuZXcgWEJMQmluZGluZ01h
bmFnZXIodGhpcykpCiAjZW5kaWYKQEAgLTQyNywxOCArNDA4LDYgQEAgRG9jdW1lbnQ6On5Eb2N1
bWVudCgpCiAKICAgICByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogCi0gICAgSGFzaE1hcDxB
Y3RpdmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2Fj
dGl2ZURPTU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCos
IHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVy
ICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmly
c3QtPmRvY3VtZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5jb250ZXh0RGVz
dHJveWVkKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBt
ZXNzYWdlUG9ydHNFbmQgPSBtX21lc3NhZ2VQb3J0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8
TWVzc2FnZVBvcnQqPjo6aXRlcmF0b3IgaXRlciA9IG1fbWVzc2FnZVBvcnRzLmJlZ2luKCk7IGl0
ZXIgIT0gbWVzc2FnZVBvcnRzRW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKCgqaXRlcikt
PmRvY3VtZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgICgqaXRlciktPmNvbnRleHREZXN0cm95ZWQo
KTsKLSAgICB9Ci0KICAgICBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3VtZW50KHRoaXMpOwogCiAg
ICAgaWYgKG1fZG9jQ2hhbmdlZCAmJiBjaGFuZ2VkRG9jdW1lbnRzKQpAQCAtNDM2NSw2OSArNDMz
NCw2IEBAIEhUTUxDYW52YXNFbGVtZW50KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmEKICAgICByZXR1
cm4gcmVzdWx0LmdldCgpOwogfQogCi12b2lkIERvY3VtZW50Ojpwcm9jZXNzTWVzc2FnZVBvcnRN
ZXNzYWdlc1Nvb24oKQotewotICAgIGlmIChtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTWVzc2FnZVBvcnRUaW1lciogdGltZXIgPSBuZXcgTWVzc2FnZVBv
cnRUaW1lcih0aGlzKTsKLSAgICB0aW1lci0+c3RhcnRPbmVTaG90KDApOwotCi0gICAgbV9maXJl
ZE1lc3NhZ2VQb3J0VGltZXIgPSB0cnVlOwotfQotCi12b2lkIERvY3VtZW50OjpkaXNwYXRjaE1l
c3NhZ2VQb3J0RXZlbnRzKCkKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3QodGhpcyk7
Ci0KLSAgICAvLyBNYWtlIGEgZnJvemVuIGNvcHkuCi0gICAgVmVjdG9yPE1lc3NhZ2VQb3J0Kj4g
cG9ydHM7Ci0gICAgY29weVRvVmVjdG9yKG1fbWVzc2FnZVBvcnRzLCBwb3J0cyk7Ci0KLSAgICBt
X2ZpcmVkTWVzc2FnZVBvcnRUaW1lciA9IGZhbHNlOwotCi0gICAgdW5zaWduZWQgcG9ydENvdW50
ID0gcG9ydHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb3J0Q291bnQ7
ICsraSkgewotICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9IHBvcnRzW2ldOwotICAgICAgICBp
ZiAobV9tZXNzYWdlUG9ydHMuY29udGFpbnMocG9ydCkgJiYgcG9ydC0+cXVldWVJc09wZW4oKSkK
LSAgICAgICAgICAgIHBvcnQtPmRpc3BhdGNoTWVzc2FnZXMoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
RG9jdW1lbnQ6OmNyZWF0ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCogcG9ydCkKLXsKLSAgICBB
U1NFUlQocG9ydCk7Ci0gICAgbV9tZXNzYWdlUG9ydHMuYWRkKHBvcnQpOwotfQotCi12b2lkIERv
Y3VtZW50OjpkZXN0cm95ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCogcG9ydCkKLXsKLSAgICBB
U1NFUlQocG9ydCk7Ci0gICAgbV9tZXNzYWdlUG9ydHMucmVtb3ZlKHBvcnQpOwotfQotCi12b2lk
IERvY3VtZW50OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpCi17Ci0gICAgSGFzaE1hcDxBY3RpdmVE
T01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURP
TU9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQq
Pjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFj
dGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPmRv
Y3VtZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgIGl0ZXItPmZpcnN0LT5zdG9wKCk7Ci0gICAgfQot
fQotCi12b2lkIERvY3VtZW50OjpjcmVhdGVkQWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9iamVj
dCogb2JqZWN0LCB2b2lkKiB1cGNhc3RQb2ludGVyKQotewotICAgIEFTU0VSVChvYmplY3QpOwot
ICAgIEFTU0VSVCh1cGNhc3RQb2ludGVyKTsKLSAgICBtX2FjdGl2ZURPTU9iamVjdHMuYWRkKG9i
amVjdCwgdXBjYXN0UG9pbnRlcik7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OmRlc3Ryb3llZEFjdGl2
ZURPTU9iamVjdChBY3RpdmVET01PYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQob2JqZWN0
KTsKLSAgICBtX2FjdGl2ZURPTU9iamVjdHMucmVtb3ZlKG9iamVjdCk7Ci19Ci0KIHZvaWQgRG9j
dW1lbnQ6OmluaXRETlNQcmVmZXRjaCgpCiB7CiAgICAgbV9oYXZlRXhwbGljaXRseURpc2FibGVk
RE5TUHJlZmV0Y2ggPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzc4OTYpCisrKyBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoQ291bnRlZFNldC5oPgpAQCAtNDgsNyArNDksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSAgICBjbGFzcyBBY3RpdmVET01PYmplY3Q7CiAgICAgY2xhc3MgQVhPYmplY3RDYWNoZTsK
ICAgICBjbGFzcyBBdHRyOwogICAgIGNsYXNzIEF0dHJpYnV0ZTsKQEAgLTg2LDcgKzg2LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEltYWdlTG9hZGVyOwogICAgIGNsYXNzIElu
dFBvaW50OwogICAgIGNsYXNzIEpTTm9kZTsKLSAgICBjbGFzcyBNZXNzYWdlUG9ydDsKICAgICBj
bGFzcyBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOwogICAgIGNsYXNzIE5vZGVGaWx0ZXI7
CiAgICAgY2xhc3MgTm9kZUl0ZXJhdG9yOwpAQCAtMTY4LDcgKzE2Nyw3IEBAIHN0cnVjdCBGb3Jt
RWxlbWVudEtleUhhc2hUcmFpdHMgOiBXVEY6OkcKICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRW
YWx1ZShjb25zdCBGb3JtRWxlbWVudEtleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCk7IH0KIH07CiAKLWNsYXNzIERvY3VtZW50IDogcHVibGljIENvbnRh
aW5lck5vZGUgeworY2xhc3MgRG9jdW1lbnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSwgcHVibGlj
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQogICAgIHsKQEAgLTE4MCw2ICsxNzksMTAg
QEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5Eb2N1bWVudCgpOwogCisgICAgdmlydHVh
bCBib29sIGlzRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB1c2luZyBD
b250YWluZXJOb2RlOjpyZWY7CisgICAgdXNpbmcgQ29udGFpbmVyTm9kZTo6ZGVyZWY7CiAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZWRMYXN0UmVmKCk7CiAKICAgICAvLyBOb2RlcyBiZWxvbmdpbmcg
dG8gdGhpcyBkb2N1bWVudCBob2xkICJzZWxmLW9ubHkiIHJlZmVyZW5jZXMgLQpAQCAtNzY1LDE5
ICs3NjgsNiBAQCBwdWJsaWM6CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBnZXRDU1ND
YW52YXNDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBnZXRDU1NDYW52YXNF
bGVtZW50KGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICAvLyBBY3RpdmUgb2JqZWN0cyBhcmUg
bm90IGdhcmJhZ2UgY29sbGVjdGVkIGV2ZW4gaWYgaW5hY2Nlc3NpYmxlLCBlLmcuIGJlY2F1c2Ug
dGhlaXIgYWN0aXZpdHkgbWF5IHJlc3VsdCBpbiBjYWxsYmFja3MgYmVpbmcgaW52b2tlZC4KLSAg
ICB2b2lkIHN0b3BBY3RpdmVET01PYmplY3RzKCk7Ci0gICAgdm9pZCBjcmVhdGVkQWN0aXZlRE9N
T2JqZWN0KEFjdGl2ZURPTU9iamVjdCosIHZvaWQqIHVwY2FzdFBvaW50ZXIpOwotICAgIHZvaWQg
ZGVzdHJveWVkQWN0aXZlRE9NT2JqZWN0KEFjdGl2ZURPTU9iamVjdCopOwotICAgIGNvbnN0IEhh
c2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+JiBhY3RpdmVET01PYmplY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9hY3RpdmVET01PYmplY3RzOyB9Ci0KLSAgICAvLyBNZXNzYWdlUG9ydCBpcyBj
b25jZXB0dWFsbHkgYSBraW5kIG9mIEFjdGl2ZURPTU9iamVjdCwgYnV0IGl0IG5lZWRzIHRvIGJl
IHRyYWNrZWQgc2VwYXJhdGVseSBmb3IgbWVzc2FnZSBkaXNwYXRjaCwgYW5kIGZvciBjcm9zcy1o
ZWFwIEdDIHN1cHBvcnQuCi0gICAgdm9pZCBwcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24o
KTsKLSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKTsKLSAgICB2b2lkIGNyZWF0
ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCopOwotICAgIHZvaWQgZGVzdHJveWVkTWVzc2FnZVBv
cnQoTWVzc2FnZVBvcnQqKTsKLSAgICBjb25zdCBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj4mIG1lc3Nh
Z2VQb3J0cygpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZVBvcnRzOyB9Ci0KICAgICBib29sIGlz
RE5TUHJlZmV0Y2hFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0ROU1ByZWZldGNoRW5hYmxl
ZDsgfQogICAgIHZvaWQgaW5pdEROU1ByZWZldGNoKCk7CiAgICAgdm9pZCBwYXJzZUROU1ByZWZl
dGNoQ29udHJvbEhlYWRlcihjb25zdCBTdHJpbmcmKTsKQEAgLTc4Niw2ICs3NzYsOSBAQCBwcm90
ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhUTUwpOwogCiBwcml2YXRlOgor
ICAgIHZpcnR1YWwgdm9pZCByZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgeyByZWYoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IGRlcmVmKCk7
IH0KKwogICAgIENTU1N0eWxlU2VsZWN0b3IqIG1fc3R5bGVTZWxlY3RvcjsKICAgICBib29sIG1f
ZGlkQ2FsY3VsYXRlU3R5bGVTZWxlY3RvcjsKIApAQCAtOTM1LDExICs5MjgsNiBAQCBwcml2YXRl
OgogCiAgICAgU3RyaW5nIG1fY29udGVudExhbmd1YWdlOwogCi0gICAgYm9vbCBtX2ZpcmVkTWVz
c2FnZVBvcnRUaW1lcjsKLSAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj4gbV9tZXNzYWdlUG9ydHM7
Ci0KLSAgICBIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPiBtX2FjdGl2ZURPTU9iamVj
dHM7Ci0KIHB1YmxpYzoKICAgICBib29sIGluUGFnZUNhY2hlKCk7CiAgICAgdm9pZCBzZXRJblBh
Z2VDYWNoZShib29sIGZsYWcpOwpAQCAtMTA4NCw3ICsxMDcyLDYgQEAgcHJpdmF0ZToKICNpZiBV
U0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogICAgIGJvb2wgbV9pbkxvd0JhbmR3aWR0aERpc3Bs
YXk7CiAjZW5kaWYKLQogfTsKIAogaW5saW5lIGJvb2wgRG9jdW1lbnQ6Omhhc0VsZW1lbnRXaXRo
SWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdl
Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwuY3Bw
CShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU1l
c3NhZ2VDaGFubmVsOjpNZXNzYWdlQ2hhbm5lbChEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBt
X3BvcnQxKE1lc3NhZ2VQb3J0OjpjcmVhdGUoZG9jdW1lbnQpKQotICAgICwgbV9wb3J0MihNZXNz
YWdlUG9ydDo6Y3JlYXRlKGRvY3VtZW50KSkKK01lc3NhZ2VDaGFubmVsOjpNZXNzYWdlQ2hhbm5l
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgIDog
bV9wb3J0MShNZXNzYWdlUG9ydDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQorICAg
ICwgbV9wb3J0MihNZXNzYWdlUG9ydDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQog
ewogICAgIE1lc3NhZ2VQb3J0OjplbnRhbmdsZShtX3BvcnQxLmdldCgpLCBtX3BvcnQyLmdldCgp
KTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VDaGFubmVsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTWVzc2FnZUNoYW5uZWwuaAkocmV2aXNpb24gMzc4OTYpCisrKyBXZWJDb3Jl
L2RvbS9NZXNzYWdlQ2hhbm5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOSArMzMsMTkgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3Mg
TWVzc2FnZVBvcnQ7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogICAgIGNs
YXNzIE1lc3NhZ2VDaGFubmVsIDogcHVibGljIFJlZkNvdW50ZWQ8TWVzc2FnZUNoYW5uZWw+IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VDaGFubmVsPiBj
cmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZUNo
YW5uZWwoZG9jdW1lbnQpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlQ2hh
bm5lbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlQ2hhbm5lbChzY3JpcHRFeGVjdXRpb25D
b250ZXh0KSk7IH0KICAgICAgICAgfk1lc3NhZ2VDaGFubmVsKCk7CiAKICAgICAgICAgTWVzc2Fn
ZVBvcnQqIHBvcnQxKCkgY29uc3QgeyByZXR1cm4gbV9wb3J0MS5nZXQoKTsgfQogICAgICAgICBN
ZXNzYWdlUG9ydCogcG9ydDIoKSBjb25zdCB7IHJldHVybiBtX3BvcnQyLmdldCgpOyB9CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBNZXNzYWdlQ2hhbm5lbChEb2N1bWVudCopOworICAgICAgICBN
ZXNzYWdlQ2hhbm5lbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICAgICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBtX3BvcnQxOwogICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG1fcG9y
dDI7CkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCShyZXZpc2lvbiAzNzg5NikKKysrIFdlYkNvcmUvZG9t
L01lc3NhZ2VQb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENsb3NlTWVzc2FnZVBvcnRUaW1lciA6IHB1YmxpYyBUaW1l
ckJhc2UgewogcHVibGljOgotICAgIENsb3NlTWVzc2FnZVBvcnRUaW1lcihNZXNzYWdlUG9ydCog
cG9ydCkKKyAgICBDbG9zZU1lc3NhZ2VQb3J0VGltZXIoUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4g
cG9ydCkKICAgICAgICAgOiBtX3BvcnQocG9ydCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Bv
cnQpOwpAQCAtNTksMTcgKzU5LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIGRlbGV0ZSB0aGlzOwog
ICAgIH0KIAotICAgIE1lc3NhZ2VQb3J0KiBtX3BvcnQ7CisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0
PiBtX3BvcnQ7CiB9OwogCi1NZXNzYWdlUG9ydDo6TWVzc2FnZVBvcnQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQorTWVzc2FnZVBvcnQ6Ok1lc3NhZ2VQb3J0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgOiBtX2VudGFuZ2xlZFBvcnQoMCkKICAgICAsIG1f
cXVldWVJc09wZW4oZmFsc2UpCi0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgLCBtX3Bl
bmRpbmdDbG9zZUV2ZW50KGZhbHNlKQogICAgICwgbV9qc1dyYXBwZXJJc0luYWNjZXNzaWJsZShm
YWxzZSkKIHsKLSAgICBkb2N1bWVudC0+Y3JlYXRlZE1lc3NhZ2VQb3J0KHRoaXMpOworICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRNZXNzYWdlUG9ydCh0aGlzKTsKIH0KIAogTWVz
c2FnZVBvcnQ6On5NZXNzYWdlUG9ydCgpCkBAIC03NywxOCArNzcsMTggQEAgTWVzc2FnZVBvcnQ6
On5NZXNzYWdlUG9ydCgpCiAgICAgaWYgKG1fZW50YW5nbGVkUG9ydCkKICAgICAgICAgdW5lbnRh
bmdsZSgpOwogCi0gICAgaWYgKG1fZG9jdW1lbnQpCi0gICAgICAgIG1fZG9jdW1lbnQtPmRlc3Ry
b3llZE1lc3NhZ2VQb3J0KHRoaXMpOworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGVzdHJveWVkTWVzc2FnZVBvcnQo
dGhpcyk7CiB9CiAKIEZyYW1lKiBNZXNzYWdlUG9ydDo6YXNzb2NpYXRlZEZyYW1lKCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fZG9jdW1lbnQpCisgICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgfHwgIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kb2N1bWVudC0+ZnJhbWUoKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5mcmFtZSgpOwog
fQogCi1QYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBNZXNzYWdlUG9ydDo6Y2xvbmUoRG9jdW1lbnQq
IG5ld093bmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IE1l
c3NhZ2VQb3J0OjpjbG9uZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBuZXdPd25lciwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQpIHsKICAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIE1lc3NhZ2VQb3J0
Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpCiAKIHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIGRhdGFQb3J0LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCB8fCAhbV9kb2N1bWVudCB8fCAh
bV9lbnRhbmdsZWRQb3J0LT5tX2RvY3VtZW50KQorICAgIGlmICghbV9lbnRhbmdsZWRQb3J0IHx8
ICFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgIW1fZW50YW5nbGVkUG9ydC0+bV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8TWVzc2FnZVBv
cnQ+IG5ld01lc3NhZ2VQb3J0OwpAQCAtMTI0LDM4ICsxMjQsNDIgQEAgdm9pZCBNZXNzYWdlUG9y
dDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaQogICAgICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbmV3TWVzc2Fn
ZVBvcnQgPSBkYXRhUG9ydC0+Y2xvbmUobV9lbnRhbmdsZWRQb3J0LT5tX2RvY3VtZW50LCBlYyk7
CisgICAgICAgIG5ld01lc3NhZ2VQb3J0ID0gZGF0YVBvcnQtPmNsb25lKG1fZW50YW5nbGVkUG9y
dC0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBlYyk7CiAgICAgICAgIGlmIChlYykKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2VudGFuZ2xlZFBvcnQtPm1fbWVzc2FnZVF1
ZXVlLmFwcGVuZChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCAiIiwgIiIsIG1fZG9jdW1l
bnQtPmRvbVdpbmRvdygpLCBuZXdNZXNzYWdlUG9ydC5nZXQoKSkpOworICAgIERPTVdpbmRvdyog
d2luZG93ID0gKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIG1fZW50
YW5nbGVkUG9ydC0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpID8KKyAg
ICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5k
b21XaW5kb3coKSA6IDA7CisgICAgbV9lbnRhbmdsZWRQb3J0LT5tX21lc3NhZ2VRdWV1ZS5hcHBl
bmQoTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCB3aW5kb3csIG5ld01lc3Nh
Z2VQb3J0LmdldCgpKSk7CiAgICAgaWYgKG1fZW50YW5nbGVkUG9ydC0+bV9xdWV1ZUlzT3BlbikK
LSAgICAgICAgbV9lbnRhbmdsZWRQb3J0LT5tX2RvY3VtZW50LT5wcm9jZXNzTWVzc2FnZVBvcnRN
ZXNzYWdlc1Nvb24oKTsKKyAgICAgICAgbV9lbnRhbmdsZWRQb3J0LT5tX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPnByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpOwogfQogCi1QYXNzUmVm
UHRyPE1lc3NhZ2VQb3J0PiBNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRpb24oRG9jdW1lbnQq
IHNjcmlwdENvbnRleHREb2N1bWVudCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUGFzc1JlZlB0
cjxNZXNzYWdlUG9ydD4gTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKLSAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQxID0gTWVzc2FnZVBvcnQ6OmNyZWF0
ZShzY3JpcHRDb250ZXh0RG9jdW1lbnQpOwotICAgIGlmICghbV9lbnRhbmdsZWRQb3J0IHx8ICFt
X2RvY3VtZW50IHx8ICFtX2VudGFuZ2xlZFBvcnQtPm1fZG9jdW1lbnQpCisgICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBwb3J0MSA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7CisgICAgaWYgKCFtX2VudGFuZ2xlZFBvcnQgfHwgIW1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCB8fCAhbV9lbnRhbmdsZWRQb3J0LT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAg
ICAgIHJldHVybiBwb3J0MTsKLSAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQyID0gTWVzc2Fn
ZVBvcnQ6OmNyZWF0ZShtX2VudGFuZ2xlZFBvcnQtPm1fZG9jdW1lbnQpOworICAgIFJlZlB0cjxN
ZXNzYWdlUG9ydD4gcG9ydDIgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKG1fZW50YW5nbGVkUG9ydC0+
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIAogICAgIGVudGFuZ2xlKHBvcnQxLmdldCgpLCBw
b3J0Mi5nZXQoKSk7CiAKLSAgICBtX2VudGFuZ2xlZFBvcnQtPm1fbWVzc2FnZVF1ZXVlLmFwcGVu
ZChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCAiIiwgIiIsIG1fZG9jdW1lbnQtPmRvbVdp
bmRvdygpLCBwb3J0Mi5nZXQoKSkpOworICAgIERPTVdpbmRvdyogd2luZG93ID0gKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIG1fZW50YW5nbGVkUG9ydC0+bV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpID8KKyAgICAgICAgc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5kb21XaW5kb3coKSA6IDA7Cisg
ICAgbV9lbnRhbmdsZWRQb3J0LT5tX21lc3NhZ2VRdWV1ZS5hcHBlbmQoTWVzc2FnZUV2ZW50Ojpj
cmVhdGUobWVzc2FnZSwgIiIsICIiLCB3aW5kb3csIHBvcnQyLmdldCgpKSk7CiAgICAgaWYgKG1f
ZW50YW5nbGVkUG9ydC0+bV9xdWV1ZUlzT3BlbikKLSAgICAgICAgbV9lbnRhbmdsZWRQb3J0LT5t
X2RvY3VtZW50LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKKyAgICAgICAgbV9l
bnRhbmdsZWRQb3J0LT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnByb2Nlc3NNZXNzYWdlUG9y
dE1lc3NhZ2VzU29vbigpOwogICAgIHJldHVybiBwb3J0MTsKIH0KIAogdm9pZCBNZXNzYWdlUG9y
dDo6c3RhcnQoKQogewotICAgIGlmIChtX3F1ZXVlSXNPcGVuIHx8ICFtX2RvY3VtZW50KQorICAg
IGlmIChtX3F1ZXVlSXNPcGVuIHx8ICFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fcXVldWVJc09wZW4gPSB0cnVlOwotICAgIG1fZG9jdW1lbnQtPnBy
b2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNTb29uKCk7CiB9CiAKIHZvaWQgTWVzc2Fn
ZVBvcnQ6OmNsb3NlKCkKQEAgLTE5OSwxNSArMjAzLDE1IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmNv
bnRleHREZXN0cm95ZWQoKQogICAgIGlmIChtX2VudGFuZ2xlZFBvcnQpIHsKICAgICAgICAgUmVm
UHRyPE1lc3NhZ2VQb3J0PiBzdXJ2aXZpbmdQb3J0ID0gbV9lbnRhbmdsZWRQb3J0OwogICAgICAg
ICB1bmVudGFuZ2xlKCk7Ci0gICAgICAgIGlmIChzdXJ2aXZpbmdQb3J0LT5kb2N1bWVudCgpICE9
IGRvY3VtZW50KCkpIC8vIE90aGVyd2lzZSwgc3Vydml2aW5nUG9ydCB3b24ndCByZWFsbHkgc3Vy
dml2ZS4KKyAgICAgICAgaWYgKHN1cnZpdmluZ1BvcnQtPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCAhPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIC8vIE90aGVyd2lzZSwgc3Vydml2aW5nUG9y
dCB3b24ndCByZWFsbHkgc3Vydml2ZS4KICAgICAgICAgICAgIHN1cnZpdmluZ1BvcnQtPnF1ZXVl
Q2xvc2VFdmVudCgpOwogICAgIH0KLSAgICBtX2RvY3VtZW50ID0gMDsKKyAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSAwOwogfQogCiB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3Nh
Z2VzKCkKIHsKLSAgICAvLyBNZXNzYWdlcyBmb3IgZG9jdW1lbnRzIHRoYXQgYXJlIG5vdCBmdWxs
eSBhY3RpdmUgZ2V0IGRpc3BhdGNoZWQgdG9vLCBidXQgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KCkgZG9lc24ndCBjYWxsIGhhbmRsZXJzIGZvciB0aGVzZS4KKyAgICAvLyBN
ZXNzYWdlcyBmb3IgY29udGV4dHMgdGhhdCBhcmUgbm90IGZ1bGx5IGFjdGl2ZSBnZXQgZGlzcGF0
Y2hlZCB0b28sIGJ1dCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoKSBkb2Vz
bid0IGNhbGwgaGFuZGxlcnMgZm9yIHRoZXNlLgogICAgIEFTU0VSVChxdWV1ZUlzT3BlbigpKTsK
IAogICAgIFJlZlB0cjxFdmVudD4gZXZ0OwpJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCShyZXZpc2lvbiAzNzg5
NikKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDIz
ICs0MCwyMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQXRvbWljU3RyaW5n
SW1wbDsKLSAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBG
cmFtZTsKKyAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFN0cmlu
ZzsKICAgICBjbGFzcyBXb3JrZXJDb250ZXh0OwogCiAgICAgY2xhc3MgTWVzc2FnZVBvcnQgOiBw
dWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxNZXNzYWdlUG9ydD4sIHB1YmxpYyBFdmVudFRhcmdldCB7
CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gY3Jl
YXRlKERvY3VtZW50KiBkb2N1bWVudCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VQb3J0
KGRvY3VtZW50KSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVBvcnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOyB9
CiAgICAgICAgIH5NZXNzYWdlUG9ydCgpOwogCi0gICAgICAgIFBhc3NSZWZQdHI8TWVzc2FnZVBv
cnQ+IGNsb25lKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVmUHRy
PE1lc3NhZ2VQb3J0PiBjbG9uZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29k
ZSYpOwogCiAgICAgICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRhbmdsZWRQ
b3J0OyB9CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBNZXNzYWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgUGFzc1JlZlB0
cjxNZXNzYWdlUG9ydD4gc3RhcnRDb252ZXJzYXRpb24oRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOworICAgICAgICBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBzdGFydENvbnZlcnNh
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKICAg
ICAgICAgdm9pZCBzdGFydCgpOwogICAgICAgICB2b2lkIGNsb3NlKCk7CiAKQEAgLTY3LDggKzY3
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVuZW50YW5nbGUoKTsKIAog
ICAgICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQotICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0KCkgeyByZXR1cm4gMDsgfSAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0LgorICAgICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgeyByZXR1
cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CiAKICAgICAgICAgdmlydHVhbCBNZXNzYWdl
UG9ydCogdG9NZXNzYWdlUG9ydCgpIHsgcmV0dXJuIHRoaXM7IH0KIApAQCAtMTAyLDcgKzEwMSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgQ2xvc2VNZXNzYWdlUG9ydFRpbWVyOwogCi0gICAgICAgIE1lc3NhZ2VQb3J0KERvY3VtZW50
Kik7CisgICAgICAgIE1lc3NhZ2VQb3J0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CkBAIC0xMTMsNyArMTEy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBNZXNzYWdlUXVldWU8UmVmUHRyPEV2
ZW50PiA+IG1fbWVzc2FnZVF1ZXVlOwogICAgICAgICBib29sIG1fcXVldWVJc09wZW47CiAKLSAg
ICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7IC8vIFdpbGwgYmUgMCBpZiB0aGUgY29udGV4dCBk
b2VzIG5vdCBjb250YWluIGEgZG9jdW1lbnQgKGUuZy4gaWYgaXQncyBhIHdvcmtlciB0aHJlYWQp
LgorICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiAKICAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25NZXNzYWdlTGlzdGVuZXI7
CiAgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2xvc2VMaXN0ZW5lcjsKSW5kZXg6
IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
KyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZXNzYWdl
UG9ydFRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgTWVzc2FnZVBvcnRU
aW1lcihQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCisgICAgICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZmly
ZWQoKQorICAgIHsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kaXNwYXRjaE1l
c3NhZ2VQb3J0RXZlbnRzKCk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KKworICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Cit9
OworCitTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkKKyAg
ICA6IG1fZmlyZWRNZXNzYWdlUG9ydFRpbWVyKGZhbHNlKQoreworfQorCitTY3JpcHRFeGVjdXRp
b25Db250ZXh0Ojp+U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpCit7CisgICAgSGFzaE1hcDxBY3Rp
dmVET01PYmplY3QqLCB2b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2
ZURPTU9iamVjdHMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZv
aWQqPjo6aXRlcmF0b3IgaXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9
IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgeworICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3Qt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgaXRlci0+Zmlyc3Qt
PmNvbnRleHREZXN0cm95ZWQoKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46
Oml0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9IG1fbWVzc2FnZVBvcnRzLmVuZCgpOworICAgIGZv
ciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+OjppdGVyYXRvciBpdGVyID0gbV9tZXNzYWdlUG9ydHMu
YmVnaW4oKTsgaXRlciAhPSBtZXNzYWdlUG9ydHNFbmQ7ICsraXRlcikgeworICAgICAgICBBU1NF
UlQoKCppdGVyKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09IHRoaXMpOworICAgICAgICAo
Kml0ZXIpLT5jb250ZXh0RGVzdHJveWVkKCk7CisgICAgfQorfQorCit2b2lkIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OnByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpCit7CisgICAgaWYg
KG1fZmlyZWRNZXNzYWdlUG9ydFRpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBNZXNzYWdl
UG9ydFRpbWVyKiB0aW1lciA9IG5ldyBNZXNzYWdlUG9ydFRpbWVyKHRoaXMpOworICAgIHRpbWVy
LT5zdGFydE9uZVNob3QoMCk7CisKKyAgICBtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lciA9IHRydWU7
Cit9CisKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlUG9ydEV2
ZW50cygpCit7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHByb3RlY3QodGhp
cyk7CisKKyAgICAvLyBNYWtlIGEgZnJvemVuIGNvcHkuCisgICAgVmVjdG9yPE1lc3NhZ2VQb3J0
Kj4gcG9ydHM7CisgICAgY29weVRvVmVjdG9yKG1fbWVzc2FnZVBvcnRzLCBwb3J0cyk7CisKKyAg
ICBtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lciA9IGZhbHNlOworCisgICAgdW5zaWduZWQgcG9ydENv
dW50ID0gcG9ydHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb3J0Q291
bnQ7ICsraSkgeworICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9IHBvcnRzW2ldOworICAgICAg
ICBpZiAobV9tZXNzYWdlUG9ydHMuY29udGFpbnMocG9ydCkgJiYgcG9ydC0+cXVldWVJc09wZW4o
KSkKKyAgICAgICAgICAgIHBvcnQtPmRpc3BhdGNoTWVzc2FnZXMoKTsKKyAgICB9Cit9CisKK3Zv
aWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0
KiBwb3J0KQoreworICAgIEFTU0VSVChwb3J0KTsKKyAgICBtX21lc3NhZ2VQb3J0cy5hZGQocG9y
dCk7Cit9CisKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWVzc2FnZVBv
cnQoTWVzc2FnZVBvcnQqIHBvcnQpCit7CisgICAgQVNTRVJUKHBvcnQpOworICAgIG1fbWVzc2Fn
ZVBvcnRzLnJlbW92ZShwb3J0KTsKK30KKwordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpz
dG9wQWN0aXZlRE9NT2JqZWN0cygpCit7CisgICAgSGFzaE1hcDxBY3RpdmVET01PYmplY3QqLCB2
b2lkKj46Oml0ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBtX2FjdGl2ZURPTU9iamVjdHMuZW5k
KCk7CisgICAgZm9yIChIYXNoTWFwPEFjdGl2ZURPTU9iamVjdCosIHZvaWQqPjo6aXRlcmF0b3Ig
aXRlciA9IG1fYWN0aXZlRE9NT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNF
bmQ7ICsraXRlcikgeworICAgICAgICBBU1NFUlQoaXRlci0+Zmlyc3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSB0aGlzKTsKKyAgICAgICAgaXRlci0+Zmlyc3QtPnN0b3AoKTsKKyAgICB9
Cit9CisKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlZEFjdGl2ZURPTU9iamVj
dChBY3RpdmVET01PYmplY3QqIG9iamVjdCwgdm9pZCogdXBjYXN0UG9pbnRlcikKK3sKKyAgICBB
U1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQodXBjYXN0UG9pbnRlcik7CisgICAgbV9hY3RpdmVE
T01PYmplY3RzLmFkZChvYmplY3QsIHVwY2FzdFBvaW50ZXIpOworfQorCit2b2lkIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OmRlc3Ryb3llZEFjdGl2ZURPTU9iamVjdChBY3RpdmVET01PYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBtX2FjdGl2ZURPTU9iamVjdHMu
cmVtb3ZlKG9iamVjdCk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAq
LworCisjaWZuZGVmIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRfaAorI2RlZmluZSBTY3JpcHRFeGVj
dXRpb25Db250ZXh0X2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQWN0aXZlRE9N
T2JqZWN0OworICAgIGNsYXNzIE1lc3NhZ2VQb3J0OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xh
c3MgU2VjdXJpdHlPcmlnaW47CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIHZpcnR1YWwgflNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dvcmtlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgICAgIC8vIEFjdGl2ZSBvYmplY3RzIGFyZSBub3QgZ2FyYmFnZSBjb2xs
ZWN0ZWQgZXZlbiBpZiBpbmFjY2Vzc2libGUsIGUuZy4gYmVjYXVzZSB0aGVpciBhY3Rpdml0eSBt
YXkgcmVzdWx0IGluIGNhbGxiYWNrcyBiZWluZyBpbnZva2VkLgorICAgICAgICB2b2lkIHN0b3BB
Y3RpdmVET01PYmplY3RzKCk7CisgICAgICAgIHZvaWQgY3JlYXRlZEFjdGl2ZURPTU9iamVjdChB
Y3RpdmVET01PYmplY3QqLCB2b2lkKiB1cGNhc3RQb2ludGVyKTsKKyAgICAgICAgdm9pZCBkZXN0
cm95ZWRBY3RpdmVET01PYmplY3QoQWN0aXZlRE9NT2JqZWN0Kik7CisgICAgICAgIGNvbnN0IEhh
c2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+JiBhY3RpdmVET01PYmplY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9hY3RpdmVET01PYmplY3RzOyB9CisKKyAgICAgICAgLy8gTWVzc2FnZVBvcnQg
aXMgY29uY2VwdHVhbGx5IGEga2luZCBvZiBBY3RpdmVET01PYmplY3QsIGJ1dCBpdCBuZWVkcyB0
byBiZSB0cmFja2VkIHNlcGFyYXRlbHkgZm9yIG1lc3NhZ2UgZGlzcGF0Y2gsIGFuZCBmb3IgY3Jv
c3MtaGVhcCBHQyBzdXBwb3J0LgorICAgICAgICB2b2lkIHByb2Nlc3NNZXNzYWdlUG9ydE1lc3Nh
Z2VzU29vbigpOworICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKTsKKyAg
ICAgICAgdm9pZCBjcmVhdGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqKTsKKyAgICAgICAgdm9p
ZCBkZXN0cm95ZWRNZXNzYWdlUG9ydChNZXNzYWdlUG9ydCopOworICAgICAgICBjb25zdCBIYXNo
U2V0PE1lc3NhZ2VQb3J0Kj4mIG1lc3NhZ2VQb3J0cygpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2Fn
ZVBvcnRzOyB9CisKKyAgICAgICAgdm9pZCByZWYoKSB7IHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsgfQorICAgICAgICB2b2lkIGRlcmVmKCkgeyBkZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBtX2ZpcmVkTWVzc2FnZVBvcnRU
aW1lcjsKKyAgICAgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+IG1fbWVzc2FnZVBvcnRzOworCisg
ICAgICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+IG1fYWN0aXZlRE9NT2JqZWN0
czsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID0g
MDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID0g
MDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKworI2VuZGlmIC8vIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICAr
IG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDM3ODk2KQorKysg
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiAr
MTg5LDEyIEBAIFhNTEh0dHBSZXF1ZXN0Ojp+WE1MSHR0cFJlcXVlc3QoKQogICAgICAgICBtX3Vw
bG9hZC0+ZGlzY29ubmVjdFhNTEh0dHBSZXF1ZXN0KCk7CiB9CiAKK0RvY3VtZW50KiBYTUxIdHRw
UmVxdWVzdDo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50
Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKK30KKwogRnJhbWUqIFhNTEh0dHBSZXF1ZXN0
Ojphc3NvY2lhdGVkRnJhbWUoKSBjb25zdAogewogICAgIGlmICghZG9jdW1lbnQoKSkKSW5kZXg6
IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gMzc4OTYpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDggQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAorICAgIERvY3VtZW50KiBkb2N1
bWVudCgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChTdWJyZXNv
dXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1
YnJlc291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
</data>
<flag name="review"
          id="11299"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>