<?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>29701</bug_id>
          
          <creation_ts>2009-09-23 20:16:58 -0700</creation_ts>
          <short_desc>Bring a little sanity to this crazy EventTarget world of ours</short_desc>
          <delta_ts>2009-09-24 10:41:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          <blocked>29713</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>149638</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-23 20:16:58 -0700</bug_when>
    <thetext>So crazy!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149639</commentid>
    <comment_count>1</comment_count>
      <attachid>40037</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-23 20:17:38 -0700</bug_when>
    <thetext>Created attachment 40037
swap vectors with inline capacities</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149640</commentid>
    <comment_count>2</comment_count>
      <attachid>40038</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-23 20:18:03 -0700</bug_when>
    <thetext>Created attachment 40038
layout test changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149641</commentid>
    <comment_count>3</comment_count>
      <attachid>40039</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-23 20:18:43 -0700</bug_when>
    <thetext>Created attachment 40039
webkit support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149646</commentid>
    <comment_count>4</comment_count>
      <attachid>40042</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-23 20:57:18 -0700</bug_when>
    <thetext>Created attachment 40042
webcore patch - changelog in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149651</commentid>
    <comment_count>5</comment_count>
      <attachid>40042</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-09-23 21:39:38 -0700</bug_when>
    <thetext>Comment on attachment 40042
webcore patch - changelog in progress

&gt; +    if (!result.second) // pre-existing entry
&gt; +        if (entry.find(registeredListener) != notFound) // duplicate listener
&gt; +            return false;

The outer if statement needs braces.

&gt; +
&gt; +    // Notify firing events planning to invoke the listener at &apos;index&apos; that
&gt; +    // they have one less listener to invoke.
&gt; +    for (size_t i = 0; i &lt; d-&gt;firingEventEndIterators.size(); ++i)
&gt; +        if (eventType == *d-&gt;firingEventEndIterators[i].eventType &amp;&amp; index &lt; *d-&gt;firingEventEndIterators[i].value)
&gt; +            --*d-&gt;firingEventEndIterators[i].value;

The for-loop needs braces.

&gt; +EventListener* EventTarget::getAttributeEventListener(const AtomicString&amp; eventType)
&gt; +{
&gt; +    const EventListenerVector&amp; entry = getEventListeners(eventType);
&gt; +    for (size_t i = 0; i &lt; entry.size(); ++i)
&gt; +        if (entry[i].listener-&gt;isAttribute())
&gt; +            return entry[i].listener.get();

For-loop needs braces.


&gt; +
&gt; +        bool fireEventListeners(Event*);
&gt; +        bool isFiringEventListeners();
&gt; +        bool dispatchEvent(PassRefPtr&lt;Event&gt;, ExceptionCode&amp;); // DOM API
I think it makes sense to put this method up with addEventListener and removeEventListener.


&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(abort);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(change);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(click);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(contextmenu);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(dblclick);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(dragenter);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(dragover);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(dragleave);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(drop);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(dragstart);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(drag);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(dragend);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(input);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(invalid);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(keydown);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(keypress);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(keyup);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(mousedown);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(mousemove);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(mouseout);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(mouseover);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(mouseup);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(mousewheel);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(scroll);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(select);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(submit);
...
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecut);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(cut);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecopy);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(copy);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(beforepaste);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(paste);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(reset);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(search);
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(selectstart);

These should all be treated the same way as the 4 virtual ones and only on Element and Document.


&gt; -    void setOnbeforeunload(PassRefPtr&lt;EventListener&gt;);
&gt; -    EventListener* onmessage() const;
&gt; -    void setOnmessage(PassRefPtr&lt;EventListener&gt;);
&gt; -    EventListener* onhashchange() const;
&gt; -    void setOnhashchange(PassRefPtr&lt;EventListener&gt;);
&gt; -    EventListener* onoffline() const;
&gt; -    void setOnoffline(PassRefPtr&lt;EventListener&gt;);
&gt; -    EventListener* ononline() const;
&gt; -    void setOnonline(PassRefPtr&lt;EventListener&gt;);
&gt; +    // Declared virtual in Node

Should be // Declared virtual in Element

&gt; -
&gt; -    EventListener* onbeforeunload() const;
&gt; -    void setOnbeforeunload(PassRefPtr&lt;EventListener&gt;);
&gt; -    EventListener* onhashchange() const;
&gt; -    void setOnhashchange(PassRefPtr&lt;EventListener&gt;);
&gt; -    EventListener* onmessage() const;
&gt; -    void setOnmessage(PassRefPtr&lt;EventListener&gt;);
&gt; -    EventListener* onoffline() const;
&gt; -    void setOnoffline(PassRefPtr&lt;EventListener&gt;);
&gt; -    EventListener* ononline() const;
&gt; -    void setOnonline(PassRefPtr&lt;EventListener&gt;);
&gt; +    // Declared virtual in Node

Should be // Declared virtual in Element


Since these issues are mainly superficial, r=me.  But please make them :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149775</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-24 10:41:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/48701
http://trac.webkit.org/changeset/48703
http://trac.webkit.org/changeset/48704
http://trac.webkit.org/changeset/48705
http://trac.webkit.org/changeset/48706
http://trac.webkit.org/changeset/48707</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40037</attachid>
            <date>2009-09-23 20:17:38 -0700</date>
            <delta_ts>2009-09-23 20:19:26 -0700</delta_ts>
            <desc>swap vectors with inline capacities</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>2604</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ4Njk5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDktMjMgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRlZCB0aGUgYWJpbGl0eSB0
byBzd2FwIHZlY3RvcnMgd2l0aCBpbmxpbmUgY2FwYWNpdGllcywgc28geW91IGNhbgorICAgICAg
ICBzdG9yZSBhIHZlY3RvciB3aXRoIGlubGluZSBjYXBhY2l0eSBpbiBhIGhhc2ggdGFibGUuCisK
KyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OnN3YXApOgorICAgICAgICAo
V1RGOjpWZWN0b3JCdWZmZXI6OnN3YXApOgorCiAyMDA5LTA5LTIzICBEYXZpZCBLaWx6ZXIgIDxk
ZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBkZWZpbml0aW9uIG9mIFVTRShQTFVH
SU5fSE9TVF9QUk9DRVNTKSBmcm9tIFdlYktpdFByZWZpeC5oIHRvIFBsYXRmb3JtLmgKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDQ4Njg2KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1Zl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICB0ZW1wbGF0ZSA8c2l6ZV90IHNpemU+IHN0cnVjdCBBbGlnbmVkQnVmZmVyPHNpemUsIDMy
PiB7IFdURl9BTElHTkVEKEFsaWduZWRCdWZmZXJDaGFyLCBidWZmZXJbc2l6ZV0sIDMyKTsgfTsK
ICAgICB0ZW1wbGF0ZSA8c2l6ZV90IHNpemU+IHN0cnVjdCBBbGlnbmVkQnVmZmVyPHNpemUsIDY0
PiB7IFdURl9BTElHTkVEKEFsaWduZWRCdWZmZXJDaGFyLCBidWZmZXJbc2l6ZV0sIDY0KTsgfTsK
IAorICAgIHRlbXBsYXRlIDxzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudD4KKyAgICB2b2lk
IHN3YXAoQWxpZ25lZEJ1ZmZlcjxzaXplLCBhbGlnbm1lbnQ+JiBhLCBBbGlnbmVkQnVmZmVyPHNp
emUsIGFsaWdubWVudD4mIGIpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChhLmJ1ZmZlcltpXSwgYi5idWZmZXJb
aV0pOworICAgIH0KKwogICAgIHRlbXBsYXRlIDxib29sIG5lZWRzRGVzdHJ1Y3Rpb24sIHR5cGVu
YW1lIFQ+CiAgICAgY2xhc3MgVmVjdG9yRGVzdHJ1Y3RvcjsKIApAQCAtNDA0LDYgKzQxMSwyNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIoYnVm
ZmVyVG9EZWFsbG9jYXRlKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBzd2Fw
KFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoYnVmZmVyKCkgPT0gaW5saW5lQnVmZmVyKCkgJiYgb3RoZXIuYnVmZmVyKCkg
PT0gb3RoZXIuaW5saW5lQnVmZmVyKCkpIHsKKyAgICAgICAgICAgICAgICBXVEY6OnN3YXAobV9p
bmxpbmVCdWZmZXIsIG90aGVyLm1faW5saW5lQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBzdGQ6
OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGJ1ZmZlcigpID09IGlubGluZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICAgICAgbV9idWZm
ZXIgPSBvdGhlci5tX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG90
aGVyLmlubGluZUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIFdURjo6c3dhcChtX2lubGluZUJ1
ZmZlciwgb3RoZXIubV9pbmxpbmVCdWZmZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6c3dhcCht
X2NhcGFjaXR5LCBvdGhlci5tX2NhcGFjaXR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob3Ro
ZXIuYnVmZmVyKCkgPT0gb3RoZXIuaW5saW5lQnVmZmVyKCkpIHsKKyAgICAgICAgICAgICAgICBv
dGhlci5tX2J1ZmZlciA9IG1fYnVmZmVyOworICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gaW5s
aW5lQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgV1RGOjpzd2FwKG1faW5saW5lQnVmZmVyLCBv
dGhlci5tX2lubGluZUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgc3RkOjpzd2FwKG1fY2FwYWNp
dHksIG90aGVyLm1fY2FwYWNpdHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzdGQ6OnN3YXAobV9idWZmZXIsIG90aGVyLm1fYnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIHJlc3RvcmVJbmxpbmVCdWZmZXJJZk5lZWRlZCgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX2J1ZmZlcikK
</data>
<flag name="review"
          id="21206"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="21207"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40038</attachid>
            <date>2009-09-23 20:18:03 -0700</date>
            <delta_ts>2009-09-23 20:20:29 -0700</delta_ts>
            <desc>layout test changes</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>14703</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ4Njk2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDktMjMgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisg
ICAgICAgIExheW91dCB0ZXN0cyBmb3IgZXZlbnQgdGFyZ2V0IHNhbml0aXphdGlvbi4KKyAgICAg
ICAgCisgICAgICAgIE5ldyB0ZXN0cyBmb3IgZXZlbnQgZGlzcGF0Y2g6CisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9ldmVudC1hdHRyaWJ1dGVzLWFmdGVyLWV4Y2VwdGlvbi1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2V2ZW50LWF0dHJpYnV0ZXMtYWZ0ZXItZXhj
ZXB0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2V2ZW50LWZpcmUtb3Jk
ZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9ldmVudC1maXJl
LW9yZGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2V2ZW50LWZpcmVkLWFm
dGVyLXJlbW92YWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9l
dmVudC1maXJlZC1hZnRlci1yZW1vdmFsLmh0bWw6IEFkZGVkLgorICAgICAgICAKKyAgICAgICAg
Rml4ZWQgdGhlc2UgdGVzdHM6CisKKyAgICAgICAgKiBmYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQ6IGV2ZW50UGhhc2Ugc2hvdWxkCisgICAgICAgIGJl
IEFUX1RBUkdFVCAoMikgd2hlbiBmaXJpbmcgYW4gZXZlbnQgb24gYW4gWEhSLCBub3QgSU5WQUxJ
RCAoMCkuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9pbmZvT25Qcm9ncmVz
c0V2ZW50LWV4cGVjdGVkLnR4dDogZGl0dG8KKworICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvZXZlbnQtdGFyZ2V0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L2V2ZW50LXRhcmdldC5odG1sOiBSZW1vdmluZyBhbiBldmVudCBsaXN0
ZW5lcgorICAgICAgICBkdXJpbmcgZXZlbnQgZGlzcGF0Y2ggc2hvdWxkIHByZXZlbnQgaXQgZnJv
bSBmaXJpbmcuIChUaGlzIHRlc3Qgd2FzIGJhY2t3YXJkcy4pCisgICAgICAgIAorICAgICAgICAq
IHN2Zy9jdXN0b20vbG9hZGV2ZW50cy1jYXB0dXJpbmcuc3ZnOiBFbmhhbmNlZCB0aGlzIHRlc3Qg
dG8gdGVsbCB5b3UKKyAgICAgICAgd2h5IGl0IGZhaWxzIHdoZW4gaXQgZmFpbHMuIENoYW5nZWQg
aXQgdG8gcmVnaXN0ZXIgcnVuVGVzdCgpIChub3cgbmFtZWQgCisgICAgICAgIHJlcG9ydFJlc3Vs
dHMoKSkgdXNpbmcgYWRkRXZlbnRMaXN0ZW5lcigpIGluc3RlYWQgb2YgdGhlICdvbmxvYWQnIGF0
dHJpYnV0ZS4KKyAgICAgICAgVGhlIHRlc3QgcmVsaWVzIG9uIHJlcG9ydFJlc3VsdHMoKSBydW5u
aW5nIGFmdGVyIGhhbmRsZXIoKSwgc28gaXQgbmVlZHMKKyAgICAgICAgdG8gcmVnaXN0ZXIgcmVw
b3J0UmVzdWx0cygpIGFmdGVyIGhhbmRsZXIoKS4KKwogMjAwOS0wOS0yMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTm8gcmV2aWV3LCBqdXN0IGFkZGluZyBtaXNz
aW5nIHBpeGVsIHRlc3QgcmVzdWx0cyBmcm9tIHJlY2VudCB0ZXN0IGFkZGl0aW9ucy4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2V2ZW50LWF0dHJpYnV0ZXMtYWZ0ZXItZXhjZXB0aW9u
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9ldmVu
dC1hdHRyaWJ1dGVzLWFmdGVyLWV4Y2VwdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9ldmVudC1hdHRyaWJ1dGVzLWFmdGVyLWV4Y2VwdGlv
bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorVGhpcyBwYWdlIHRl
c3RzIHZhcmlvdXMgZXZlbnQgYXR0cmlidXRlcyBhZnRlciBkaXNwYXRjaEV2ZW50IHRocm93cyBh
biBleGNlcHRpb24uCisKK0lmIHRoZSB0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIHNlcmllcyBv
ZiBQQVNTIG1lc3NhZ2VzIGJlbG93LgorCitQQVNTOiBldmVudC50YXJnZXQgc2hvdWxkIGJlIG51
bGwgYW5kIGlzLgorUEFTUzogZXZlbnQuY3VycmVudFRhcmdldCBzaG91bGQgYmUgbnVsbCBhbmQg
aXMuCitQQVNTOiBldmVudC5yZWxhdGVkVGFyZ2V0IHNob3VsZCBiZSBudWxsIGFuZCBpcy4KK1BB
U1M6IGV2ZW50LmV2ZW50UGhhc2Ugc2hvdWxkIGJlIDAgYW5kIGlzLgorCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9ldmVudC1hdHRyaWJ1dGVzLWFmdGVyLWV4Y2VwdGlvbi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2V2ZW50LWF0dHJpYnV0ZXMtYWZ0
ZXItZXhjZXB0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9ldmVudC1hdHRyaWJ1dGVzLWFmdGVyLWV4Y2VwdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM3IEBACis8cD5UaGlzIHBhZ2UgdGVzdHMgdmFyaW91cyBldmVudCBhdHRyaWJ1dGVz
IGFmdGVyIGRpc3BhdGNoRXZlbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbi48L3A+Cis8cD5JZiB0aGUg
dGVzdCBwYXNzZXMsIHlvdSdsbCBzZWUgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBiZWxvdy48
L3A+CisKKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKK2Z1bmN0aW9uIGxvZyhzKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b25zb2xlIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcbiIpKTsK
K30KKworZnVuY3Rpb24gc2hvdWxkQmUoYURlc2NyaXB0aW9uLCBhLCBiKQoreworICAgIGlmIChh
ID09IGIpIHsKKyAgICAgICAgbG9nKCJQQVNTOiAiICsgYURlc2NyaXB0aW9uICsgIiBzaG91bGQg
YmUgIiArIGIgKyAiIGFuZCBpcy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsb2co
IkZBSUw6ICIgKyBhRGVzY3JpcHRpb24gKyAiIHNob3VsZCBiZSAiICsgYiArICIgYnV0IGluc3Rl
YWQgaXMgIiArIGEgKyAiLiIpOworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQorewor
ICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50Iik7CisgICAg
dHJ5IHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5kaXNwYXRj
aEV2ZW50KGV2ZW50KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldCIsIGV2ZW50LnRhcmdldCwgbnVsbCk7CisgICAgICAg
IHNob3VsZEJlKCJldmVudC5jdXJyZW50VGFyZ2V0IiwgZXZlbnQuY3VycmVudFRhcmdldCwgbnVs
bCk7CisgICAgICAgIHNob3VsZEJlKCJldmVudC5yZWxhdGVkVGFyZ2V0IiwgZXZlbnQucmVsYXRl
ZFRhcmdldCwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKCJldmVudC5ldmVudFBoYXNlIiwgZXZl
bnQuZXZlbnRQaGFzZSwgMCk7CisgICAgfQorfTsKKzwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvZXZlbnQtZmlyZS1vcmRlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZXZlbnQtZmlyZS1vcmRlci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9ldmVudC1maXJlLW9yZGVy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUaGlzIHBhZ2UgdGVz
dHMgZXZlbnQgbGlzdGVuZXIgZmlyZSBvcmRlciBmb3IgYSBmZXcgb2JqZWN0cyB0aGF0IGhhZCBp
dCB3cm9uZyBpbiB0aGUgcGFzdC4KKworSWYgdGhlIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEg
c2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgYmVsb3cuCisKK1BBU1M6IHJlc3VsdCBzaG91bGQgYmUg
ZjEsZjIgYW5kIGlzLgorUEFTUzogcmVzdWx0IHNob3VsZCBiZSBmMSxmMiBhbmQgaXMuCitQQVNT
OiByZXN1bHQgc2hvdWxkIGJlIGYxLGYyIGFuZCBpcy4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvZXZlbnQtZmlyZS1vcmRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2V2ZW50LWZpcmUtb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2V2ZW50LWZpcmUtb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMDYgQEAKKzxwPlRoaXMgcGFnZSB0ZXN0cyBldmVudCBsaXN0ZW5lciBmaXJlIG9y
ZGVyIGZvciBhIGZldyBvYmplY3RzIHRoYXQgaGFkIGl0IHdyb25nIGluIHRoZSBwYXN0LjwvcD4K
KzxwPklmIHRoZSB0ZXN0IHBhc3NlcywgeW91J2xsIHNlZSBhIHNlcmllcyBvZiBQQVNTIG1lc3Nh
Z2VzIGJlbG93LjwvcD4KKworPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CisKKzxkaXYgaWQ9ImRp
diI+PC9kaXY+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbG9nKHMp
Cit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzICsgIlxuIikpOworfQorCit2YXIgcmVzdWx0OworCitm
dW5jdGlvbiByZXNldCgpCit7CisgICAgcmVzdWx0ID0gWyBdOworfQorCitmdW5jdGlvbiBmMSgp
Cit7CisgICAgcmVzdWx0LnB1c2goImYxIik7Cit9CisKK2Z1bmN0aW9uIGYyKGV2ZW50KQorewor
ICAgIHJlc3VsdC5wdXNoKCJmMiIpOworICAgIGV2ZW50LnRhcmdldC5yZW1vdmVFdmVudExpc3Rl
bmVyKGV2ZW50LnR5cGUsIGYzLCBmYWxzZSk7IC8vIFJlbW92ZWQ6IHNob3VsZCBub3QgZmlyZS4K
KyAgICBldmVudC50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudC50eXBlLCBmNCwgZmFsc2Up
OyAvLyBBZGRlZCBhZnRlciBkaXNwYXRjaCBiZWdhbjogc2hvdWxkIG5vdCBmaXJlLgorfQorCitm
dW5jdGlvbiBmMygpCit7CisgICAgcmVzdWx0LnB1c2goImYzIik7Cit9CisKK2Z1bmN0aW9uIGY0
KCkKK3sKKyAgICByZXN1bHQucHVzaCgiZjQiKTsKK30KKworZnVuY3Rpb24gcmVwb3J0UmVzdWx0
KG5hbWUsIGV4cGVjdGVkKQoreworICAgIHZhciBwYXNzZWQgPSB0cnVlOworICAgIHZhciBlbmQg
PSByZXN1bHQubGVuZ3RoID4gZXhwZWN0ZWQubGVuZ3RoID8gcmVzdWx0Lmxlbmd0aCA6IGV4cGVj
dGVkLmxlbmd0aDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZDsgKytpKSB7CisgICAgICAg
IGlmIChyZXN1bHRbaV0gIT0gZXhwZWN0ZWRbaV0pIHsKKyAgICAgICAgICAgIGxvZygiRkFJTDog
IiArIG5hbWUgKyAiIHJlc3VsdFsiICsgaSArICJdIHNob3VsZCBiZSAiICsgZXhwZWN0ZWRbaV0g
KyAiIGJ1dCBpbnN0ZWFkIGlzICIgKyByZXN1bHRbaV0gKyAiLiIpOworICAgICAgICAgICAgcGFz
c2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBhc3NlZCkKKyAgICAgICAg
bG9nKCJQQVNTOiByZXN1bHQgc2hvdWxkIGJlICIgKyBleHBlY3RlZCArICIgYW5kIGlzLiIpOwor
fQorCit2YXIgdGVzdHMgPSBbCisgICAgZnVuY3Rpb24gdGVzdERpdigpCisgICAgeworICAgICAg
ICByZXNldCgpOworICAgICAgICB2YXIgeCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYi
KTsKKyAgICAgICAgeC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGYxLCBmYWxzZSk7CisgICAg
ICAgIHgub25jbGljayA9IGYyOworICAgICAgICB4LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
ZjMsIGZhbHNlKTsKKworICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgi
TW91c2VFdmVudCIpOworICAgICAgICBldmVudC5pbml0TW91c2VFdmVudCgiY2xpY2siLCB0cnVl
LCB0cnVlLCBkb2N1bWVudC5kZWZhdWx0VmlldywgMSwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIDAsIGRvY3VtZW50KTsKKyAgICAgICAgeC5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKKworICAgICAgICByZXBvcnRSZXN1bHQoYXJndW1lbnRzLmNhbGxlZS5uYW1lLCBbICJm
MSIsICJmMiIgXSk7CisgICAgfSwKKworICAgIGZ1bmN0aW9uIHRlc3RYSFIoKQorICAgIHsKKyAg
ICAgICAgcmVzZXQoKTsKKyAgICAgICAgdmFyIHggPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAg
ICAgIHguYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsIGYxLCBmYWxzZSk7Cisg
ICAgICAgIHgub25yZWFkeXN0YXRlY2hhbmdlID0gZjI7CisgICAgICAgIHguYWRkRXZlbnRMaXN0
ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsIGYzLCBmYWxzZSk7CisKKyAgICAgICAgeC5vcGVuKCJH
RVQiLCAicmVzb3VyY2VzL2RvZXMtbm90LWV4aXN0Iik7CisKKyAgICAgICAgcmVwb3J0UmVzdWx0
KGFyZ3VtZW50cy5jYWxsZWUubmFtZSwgWyAiZjEiLCAiZjIiIF0pOworICAgIH0sCisKKyAgICBm
dW5jdGlvbiB0ZXN0WEhSVXBsb2FkKCkKKyAgICB7CisgICAgICAgIHJlc2V0KCk7CisgICAgICAg
IHZhciB4ID0gbmV3IFhNTEh0dHBSZXF1ZXN0OworICAgICAgICB4LnVwbG9hZC5hZGRFdmVudExp
c3RlbmVyKCJhYm9ydCIsIGYxLCBmYWxzZSk7CisgICAgICAgIHgudXBsb2FkLm9uYWJvcnQgPSBm
MjsKKyAgICAgICAgeC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBmMywgZmFsc2Up
OworCisgICAgICAgIHgub3BlbigiUE9TVCIsICJyZXNvdXJjZXMvZG9lcy1ub3QtZXhpc3QiKTsK
KyAgICAgICAgeC5hYm9ydCgpOworCisgICAgICAgIHJlcG9ydFJlc3VsdChhcmd1bWVudHMuY2Fs
bGVlLm5hbWUsIFsgImYxIiwgImYyIiBdKTsKKyAgICB9CitdOworCitmb3IgKHZhciBpID0gMDsg
aSA8IHRlc3RzLmxlbmd0aDsgKytpKQorICAgIHRlc3RzW2ldKCk7Cis8L3NjcmlwdD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2V2ZW50LWZpcmVkLWFmdGVyLXJlbW92YWwtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2V2ZW50LWZpcmVk
LWFmdGVyLXJlbW92YWwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvZXZlbnQtZmlyZWQtYWZ0ZXItcmVtb3ZhbC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGhpcyBwYWdlIHZlcmlmaWVzIHRoYXQgcXVldWVkIGV2
ZW50IGxpc3RlbmVycyBrZWVwIGZpcmluZyBldmVuIGFmdGVyIGEgbm9kZSBoYXMgYmVlbiByZW1v
dmVkIGZyb20gdGhlIGRvY3VtZW50LgorCitJZiB0aGUgdGVzdCBwYXNzZXMsIHlvdSdsbCBzZWUg
YSBQQVNTIG1lc3NhZ2UgYmVsb3cuCisKK1BBU1M6IHJlc3VsdCBzaG91bGQgYmUgZjEsZjIgYW5k
IGlzLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9ldmVudC1maXJlZC1hZnRlci1y
ZW1vdmFsLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZXZlbnQt
ZmlyZWQtYWZ0ZXItcmVtb3ZhbC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvZXZlbnQtZmlyZWQtYWZ0ZXItcmVtb3ZhbC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ4IEBACis8cD5UaGlzIHBhZ2UgdmVyaWZpZXMgdGhhdCBxdWV1ZWQgZXZlbnQgbGlz
dGVuZXJzIGtlZXAgZmlyaW5nIGV2ZW4gYWZ0ZXIgYSBub2RlIGhhcyBiZWVuIHJlbW92ZWQgZnJv
bSB0aGUgZG9jdW1lbnQuPC9wPgorPHA+SWYgdGhlIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEg
UEFTUyBtZXNzYWdlIGJlbG93LjwvcD4KKworPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CisKKzxk
aXYgaWQ9ImRpdiI+PC9kaXY+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rp
b24gbG9nKHMpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzICsgIlxuIikpOworfQorCit2YXIgcmVz
dWx0ID0gWyBdOworCitmdW5jdGlvbiByZXBvcnRSZXN1bHQoZXhwZWN0ZWQpCit7CisgICAgdmFy
IHBhc3NlZCA9IHRydWU7CisgICAgdmFyIGVuZCA9IHJlc3VsdC5sZW5ndGggPiBleHBlY3RlZC5s
ZW5ndGggPyByZXN1bHQubGVuZ3RoIDogZXhwZWN0ZWQubGVuZ3RoOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgaWYgKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtp
XSkgeworICAgICAgICAgICAgbG9nKCJGQUlMOiAiICsgbmFtZSArICIgcmVzdWx0WyIgKyBpICsg
Il0gc2hvdWxkIGJlICIgKyBleHBlY3RlZFtpXSArICIgYnV0IGluc3RlYWQgaXMgIiArIHJlc3Vs
dFtpXSArICIuIik7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAocGFzc2VkKQorICAgICAgICBsb2coIlBBU1M6IHJlc3VsdCBzaG91bGQgYmUg
IiArIGV4cGVjdGVkICsgIiBhbmQgaXMuIik7Cit9CisKK3ZhciBkaXYgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZGl2Iik7CitkaXYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlv
biBmMSgpIHsKKyAgICByZXN1bHQucHVzaChhcmd1bWVudHMuY2FsbGVlLm5hbWUpOworICAgIGRp
di5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpdik7Cit9LCBmYWxzZSk7CisKK2Rpdi5hZGRFdmVu
dExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uIGYyKCkgeworICAgIHJlc3VsdC5wdXNoKGFyZ3Vt
ZW50cy5jYWxsZWUubmFtZSk7Cit9LCBmYWxzZSk7CisKK3ZhciBldmVudCA9IGRvY3VtZW50LmNy
ZWF0ZUV2ZW50KCJNb3VzZUV2ZW50Iik7CitldmVudC5pbml0TW91c2VFdmVudCgiY2xpY2siLCB0
cnVlLCB0cnVlLCBkb2N1bWVudC5kZWZhdWx0VmlldywgMSwgMCwgMCwgMCwgMCwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIDAsIGRvY3VtZW50KTsKK2Rpdi5kaXNwYXRjaEV2ZW50KGV2ZW50
KTsKKworcmVwb3J0UmVzdWx0KFsgImYxIiwgImYyIiBdKTsKKzwvc2NyaXB0PgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1nZXQtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3QtZ2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDg2ODYpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY2FuY2VsQnViYmxlIDogJ2ZhbHNlJwogY2Fu
Y2VsYWJsZSA6ICd0cnVlJwogY2xpcGJvYXJkRGF0YSA6ICd1bmRlZmluZWQnCiBjdXJyZW50VGFy
Z2V0IDogJ1tvYmplY3QgWE1MSHR0cFJlcXVlc3RdJwotZXZlbnRQaGFzZSA6ICcwJworZXZlbnRQ
aGFzZSA6ICcyJwogaW5pdEV2ZW50IDogJ2Z1bmN0aW9uIGluaXRFdmVudCgpIHsKICAgICBbbmF0
aXZlIGNvZGVdCiB9JwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9ldmVudC10YXJnZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZXZlbnQtdGFyZ2V0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gNDg2ODYpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2V2ZW50
LXRhcmdldC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw2IEBAIGZvb0xp
c3RlbmVyOiB0aGlzID0gW29iamVjdCBYTUxIdHRwUmVxdWUKIG9ubG9hZDogdGhpcyA9IFtvYmpl
Y3QgWE1MSHR0cFJlcXVlc3RdCiBldmVudExpc3RlbmVyOiB0aGlzID0gW29iamVjdCBYTUxIdHRw
UmVxdWVzdF0KIGV2ZW50TGlzdGVuZXIyOiB0aGlzID0gW29iamVjdCBYTUxIdHRwUmVxdWVzdF0K
LWV2ZW50TGlzdGVuZXIzOiB0aGlzID0gW29iamVjdCBYTUxIdHRwUmVxdWVzdF0KIG9ubG9hZDog
dGhpcyA9IFtvYmplY3QgWE1MSHR0cFJlcXVlc3RdCiBldmVudExpc3RlbmVyOiB0aGlzID0gW29i
amVjdCBYTUxIdHRwUmVxdWVzdF0KIGV2ZW50TGlzdGVuZXIyOiB0aGlzID0gW29iamVjdCBYTUxI
dHRwUmVxdWVzdF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
ZXZlbnQtdGFyZ2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9ldmVudC10YXJnZXQuaHRtbAkocmV2aXNpb24gNDg2ODYpCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2V2ZW50LXRhcmdldC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMTMgQEAgWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIGJlIGFu
IEV2ZW50VGFyZ2V0LgogCiAgICAgZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcjIoKSB7CiAgICAgICAg
IGxvZygiZXZlbnRMaXN0ZW5lcjI6IHRoaXMgPSAiICsgdGhpcyk7Ci0gICAgICAgIC8vIEl0IGlz
IHRvbyBsYXRlIHRvIHJlbW92ZSB0aGlzIGxpc3RlbmVyLCBzbyBpdCB3aWxsIHN0aWxsIGZpcmUu
CisgICAgICAgIC8vIFJlbW92aW5nIHRoaXMgZXZlbnQgbGlzdGVuZXIgc2hvdWxkIHByZXZlbnQg
aXQgZnJvbSBmaXJpbmcuCiAgICAgICAgIHJlcS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwg
ZXZlbnRMaXN0ZW5lcjMsIGZhbHNlKTsKICAgICB9CiAKICAgICBmdW5jdGlvbiBldmVudExpc3Rl
bmVyMygpIHsgbG9nKCJldmVudExpc3RlbmVyMzogdGhpcyA9ICIgKyB0aGlzKTsgfQogICAgIAot
ICAgIC8vIFRoaXMgb25lIGlzIHJlbW92ZWQganVzdCBpbiB0aW1lIHRvIGJlIHJlYWxseSByZW1v
dmVkLgorICAgIC8vIFRoaXMgbGlzdGVuZXIgaXMgcmVtb3ZlZCBiZWZvcmUgaXQgZ2V0cyBhIGNo
YW5jZSB0byBmaXJlLgogICAgIGZ1bmN0aW9uIGV2ZW50TGlzdGVuZXI0KCkgeyBsb2coImV2ZW50
TGlzdGVuZXI0OiB0aGlzID0gIiArIHRoaXMpOyB9CiAKICAgICBmdW5jdGlvbiBmb29MaXN0ZW5l
cigpIHsgbG9nKCJmb29MaXN0ZW5lcjogdGhpcyA9ICIgKyB0aGlzKTsgfQpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9pbmZvT25Qcm9ncmVzc0V2ZW50LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L2luZm9PblByb2dyZXNzRXZlbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0ODY4NikKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvaW5mb09uUHJvZ3Jlc3NFdmVu
dC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBAIFN5bmNocm9ub3Vz
IGNhc2U6CiBUeXBlOiBwcm9ncmVzcwogQnViYmxlOiBmYWxzZQogQ2FuY2VsYWJsZTogdHJ1ZQot
RXZlbnRQaGFzZTogMAorRXZlbnRQaGFzZTogMgogVGFyZ2V0OiBbb2JqZWN0IFhNTEh0dHBSZXF1
ZXN0XQogQ3VycmVudCB0YXJnZXQ6IFtvYmplY3QgWE1MSHR0cFJlcXVlc3RdCiAKQEAgLTE0LDcg
KzE0LDcgQEAgQXN5bmNocm9ub3VzIGNhc2U6CiBUeXBlOiBwcm9ncmVzcwogQnViYmxlOiBmYWxz
ZQogQ2FuY2VsYWJsZTogdHJ1ZQotRXZlbnRQaGFzZTogMAorRXZlbnRQaGFzZTogMgogVGFyZ2V0
OiBbb2JqZWN0IFhNTEh0dHBSZXF1ZXN0XQogQ3VycmVudCB0YXJnZXQ6IFtvYmplY3QgWE1MSHR0
cFJlcXVlc3RdCiAKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vbG9hZGV2ZW50cy1jYXB0
dXJpbmcuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vbG9hZGV2ZW50
cy1jYXB0dXJpbmcuc3ZnCShyZXZpc2lvbiA0ODY4NikKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0
b20vbG9hZGV2ZW50cy1jYXB0dXJpbmcuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwICsxLDI5
IEBACi08c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG9ubG9hZD0icnVuVGVzdCgpOyI+Cis8c3Zn
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGxpbmsiPgogICA8c2NyaXB0PgogICAgIDwhW0NEQVRBWwogICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOwogCi0gICAgICBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7Cisg
ICAgICB2YXIgcmVzdWx0cyA9IFsgXTsKKyAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpCisg
ICAgICB7CiAgICAgICAgIHJlc3VsdHMucHVzaChldmVudC50YXJnZXQubG9jYWxOYW1lKTsKICAg
ICAgIH0KKyAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCds
b2FkJywgaGFuZGxlciwgdHJ1ZSk7CiAKLSAgICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5KCk7
Ci0KLSAgICAgIHZhciB0ZXN0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotICAgICAgdGVz
dC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgaGFuZGxlciwgdHJ1ZSk7Ci0KLSAgICAgIGZ1bmN0
aW9uIHJ1blRlc3QoKQorICAgICAgZnVuY3Rpb24gcmVwb3J0UmVzdWx0cygpCiAgICAgICB7Ci0g
ICAgICAgIHZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKLSAg
ICAgICAgaWYgKCByZXN1bHRzLmxlbmd0aCAhPSA2IHx8IHJlc3VsdHNbMF0gIT0gImltYWdlIiB8
fAotICAgICAgICAgICAgIHJlc3VsdHNbMV0gIT0gInRleHQiIHx8IHJlc3VsdHNbMl0gIT0gInRl
eHQiIHx8Ci0gICAgICAgICAgICAgcmVzdWx0c1szXSAhPSAidGV4dCIgfHwgcmVzdWx0c1s0XSAh
PSAiZyIgfHwKLSAgICAgICAgICAgICByZXN1bHRzWzVdICE9ICJzdmciKSB7Ci0gICAgICAgICAg
dGVzdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiRmFpbGVkIikpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIHRlc3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIlBhc3NlZCIpKTsKKyAgICAgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY29uc29sZSIpOworICAgICAgICB2YXIgZXhwZWN0ZWQgPSBbICJpbWFnZSIs
ICJ0ZXh0IiwgInRleHQiLCAidGV4dCIsICJnIiwgInN2ZyIgXTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHJlc3Vs
dHNbaV0gIT0gZXhwZWN0ZWRbaV0pIHsKKyAgICAgICAgICAgICAgY29uc29sZS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiRkFJTDogIiArIGkgKyAiIHNob3VsZCBiZSAiICsg
ZXhwZWN0ZWRbaV0gKyAiIGJ1dCBpbnN0ZWFkIGlzICIgKyByZXN1bHRzW2ldICsgIi5cbiIpKTsK
KyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAg
IGNvbnNvbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlBhc3NlZCIpKTsK
ICAgICAgIH0KKyAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCdsb2FkJywgcmVwb3J0UmVzdWx0cyk7CiAgICAgXV0+CiAgIDwvc2NyaXB0PgogICA8Zz4K
</data>
<flag name="review"
          id="21208"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="21209"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40039</attachid>
            <date>2009-09-23 20:18:43 -0700</date>
            <delta_ts>2009-09-23 20:20:10 -0700</delta_ts>
            <desc>webkit support</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>1179</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA0ODY5OSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTAgQEAKKzIwMDktMDktMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dh
cmVuQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGVkIGZvciBhIFdlYkNvcmUgcmVuYW1lLgor
CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2Nh
Y2hlYWJpbGl0eURpY3Rpb25hcnldKToKKwogMjAwOS0wOS0yMyAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTc0LDcgKzExNzQsNyBAQCBzdGF0
aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAgICAgICAgIFtyZXN1bHQgc2V0
T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJGcmFtZUhhc1Bs
dWdpbnNdOwogICAgIAogICAgIGlmIChET01XaW5kb3cqIGRvbVdpbmRvdyA9IF9wcml2YXRlLT5j
b3JlRnJhbWUtPmRvbVdpbmRvdygpKSB7Ci0gICAgICAgIGlmIChkb21XaW5kb3ctPmhhc0V2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkKKyAgICAgICAgaWYgKGRvbVdpbmRv
dy0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkKICAgICAgICAg
ICAgIFtyZXN1bHQgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktl
eTpXZWJGcmFtZUhhc1VubG9hZExpc3RlbmVyXTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAo
ZG9tV2luZG93LT5vcHRpb25hbEFwcGxpY2F0aW9uQ2FjaGUoKSkK
</data>
<flag name="review"
          id="21210"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="21211"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40042</attachid>
            <date>2009-09-23 20:57:18 -0700</date>
            <delta_ts>2009-09-23 21:39:37 -0700</delta_ts>
            <desc>webcore patch - changelog in progress</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>332884</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODY5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzc2IEBACisyMDA5LTA5LTIzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QnJpbmcgYSBsaXR0bGUgc2FuaXR5IHRvIHRoaXMgY3JhenkgRXZlbnRUYXJnZXQgd29ybGQgb2Yg
b3VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk3
MDEKKworICAgICAgICBMb3RzIG9mIEV2ZW50VGFyZ2V0IHJlZmFjdG9yaW5nIHRvIGFjaGlldmUg
YSBzaW5nbGUgc2hhcmVkIGltcGxlbWVudGF0aW9uCisgICAgICAgIHRoYXQgZml4ZXMgc29tZSBv
ZiB0aGUgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzIGJ1Z3Mgb2YgdGhlIG1hbnkgaW5kaXZp
ZHVhbAorICAgICAgICBpbXBsZW1lbnRhdGlvbnMsIGFuZCBtYWtlcyByZWFzb25pbmcgYWJvdXQg
RXZlbnRUYXJnZXRzIGFuZCBFdmVudExpc3RlbmVycworICAgICAgICBtdWNoIGVhc2llci4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBiYXNpYyBkZXNpZ24gaXMgdGhpczoKKyAgICAgICAgICAgIC0g
RXZlbnRUYXJnZXQgbWFuYWdlcyBhIHNldCBvZiBFdmVudExpc3RlbmVycy4KKyAgICAgICAgICAg
IC0gb25YWFggRXZlbnRMaXN0ZW5lciBhdHRyaWJ1dGVzIGZvcndhcmQgdG8gc3RhbmRhcmQgRXZl
bnRUYXJnZXQgQVBJcy4KKyAgICAgICAgICAgIC0gU2luY2UgdGhlIG9uWFhYIGNvZGUgaXMgcmVw
ZXRpdGl2ZSwgaXQgaXMgdXN1YWxseSBkb25lIHdpdGggbWFjcm9zCisgICAgICAgICAgICAgIG9m
IHRoZSBmb3JtIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYXR0cmlidXRlTmFtZSku
CisgICAgICAgICAgICAtIEV2ZW50VGFyZ2V0IHByb3ZpZGVzIGEgc2hhcmVkIGltcGxlbWVudGF0
aW9uIG9mIGRpc3BhdGNoRXZlbnQsCisgICAgICAgICAgICAgIHdoaWNoIHN1YmNsYXNzZXMgd2l0
aCBzcGVjaWFsIGV2ZW50IGRpc3BhdGNoIHJ1bGVzLCBsaWtlIE5vZGUsIG92ZXJyaWRlLgorICAg
ICAgICAgICAgLSBUbyBzdXBwb3J0IE5vZGUsIHdoaWNoIGxhemlseSBpbnN0YW50aWF0ZXMgaXRz
IEV2ZW50VGFyZ2V0IGRhdGEsCisgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0IGhhcyBubyBkYXRh
IG1lbWJlcnMsIGFuZCBpbnN0ZWFkIG1ha2VzIGEgdmlydHVhbCBjYWxsCisgICAgICAgICAgICAg
IHRvIGdldCBpdHMgZGF0YSBmcm9tIHdoZXJldmVyIGl0cyBzdWJjbGFzcyBjaG9zZSB0byBzdG9y
ZSBpdC4KKyAgICAgICAgICAgICAgCisgICAgICAgIENvZGUgdGhhdCB1c2VkIHRvIGNhbGwgZGlz
cGF0Y2hFdmVudCwgcGFzc2luZyBhbiBFeGNlcHRpb25Db2RlIHBhcmF0bWV0ZXIsCisgICAgICAg
IGV2ZW4gdGhvdWdoIG5vIGV4Y2VwdGlvbiBjb3VsZCBiZSB0aHJvd24sIGhhcyBiZWVuIGNoYW5n
ZWQgbm90IHRvIGRvIHNvLAorICAgICAgICB0byBpbXByb3ZlIGNsYXJpdHkgYW5kIHBlcmZvcm1h
bmNlLgorICAgICAgICAKKyAgICAgICAgQ29kZSB0aGF0IHVzZWQgdG8gY2FsbCBhIHNwZWNpYWwg
ZGlzcGF0Y2hYWFhFdmVudCBmdW5jdGlvbiwgd2hpY2gganVzdAorICAgICAgICB0dXJuZWQgYXJv
dW5kIGFuZCBjYWxsZWQgZGlzcGF0Y2hFdmVudCwgaGFzIGJlZW4gY2hhbmdlZCB0byBjYWxsCisg
ICAgICAgIGRpc3BhdGNoRXZlbnQsIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcGVyZm9ybWFuY2Uu
CisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogQW5vdGhlciBkYXkgaW4gdGhlIGxpZmUgb2YgYSBXZWJLaXQK
KyAgICAgICAgZW5naW5lZXIuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNPYnNlcnZhYmxlVGhyb3VnaERPTSk6IFVwZGF0ZWQg
Zm9yIE5vZGUgQVBJIGNoYW5nZS4gQWRkZWQKKyAgICAgICAgImlzIG5vdCBpbiB0aGUgZG9jdW1l
bnQgYnV0IGlzIGZpcmluZyBldmVudCBsaXN0ZW5lcnMiIGFzIGEgY29uZGl0aW9uCisgICAgICAg
IHRoYXQgbWFrZXMgYSBOb2RlIG9ic2VydmFibGUgaW4gdGhlIERPTSwgc28gdGhhdCBldmVudCBs
aXN0ZW5lcnMgZmlyaW5nCisgICAgICAgIG9uIHJlbW92ZWQgbm9kZXMgYXJlIG5vdCBkZXN0cm95
ZWQgbWlkc3RyZWFtLiAoVGhpcyB3YXMgYSBsb25nLXN0YW5kaW5nCisgICAgICAgIGJ1ZyB0aGF0
IHdhcyBzb21ld2hhdCBoaWRkZW4gYnV0IHRoZSBvbGQgaW1wbGVtZW50YXRpb24ncyBoYWJpdCBv
ZgorICAgICAgICBjb3B5aW5nIHRoZSBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciB2ZWN0b3IgYmVm
b3JlIGZpcmluZyBldmVudHMsIHdoaWNoCisgICAgICAgIHdvdWxkIGtlZXAgYWxtb3N0IGFsbCB0
aGUgcmVsZXZhbnQgb2JqZWN0cyBmcm9tIGJlaW5nIGRlc3Ryb3llZC4pCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudCk6IFJlbW92ZWQgdGhlIGlzV2luZG93RXZlbnQgZmxhZwor
ICAgICAgICBiZWNhdXNlIGl0IHdhcyBvbmUgb2YgdGhlIG1vc3QgZWxhYm9yYXRlbHkgcGxhbm5l
ZCBuby1vcHMgaW4gdGhlIGhpc3RvcnkKKyAgICAgICAgb2Ygc29mdHdhcmUgY3JpbWUsIGFuZCBv
bmUgb2YgdGhlIHJlYXNvbnMgY2xpZW50cyB0aG91Z2h0IHRoZXkgbmVlZGVkIG1vcmUKKyAgICAg
ICAgdGhhbiBvbmUgZGlzcGF0Y2hFdmVudCBmdW5jdGlvbiBldmVuIHRob3VnaCB0aGV5IGRpZG4n
dC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaDoKKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9y
dDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01l
c3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtl
ckNvbnRleHRDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2Vi
U29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjptYXJrQ2hpbGRy
ZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTWE1MSHR0cFJlcXVlc3Q6Om1hcmtDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjptYXJrQ2hpbGRyZW4pOiBFdmVudExpc3RlbmVyIG1hcmtp
bmcgaXMKKyAgICAgICAgbm93IGF1dG9nZW5lcmF0ZWQuIENsYXNzZXMgdGhhdCBzdGlsbCBoYXZl
IGN1c3RvbSBtYXJrIGZ1bmN0aW9ucyBmb3Igb3RoZXIKKyAgICAgICAgcmVhc29ucyBub3cgY2Fs
bCBhIHNoYXJlZCBFdmVudFRhcmdldCBBUEkgdG8gbWFyayB0aGVpciBFdmVudExpc3RlbmVycy4K
KworICAgICAgICAqIGJpbmRpbmdzL29iamMvT2JqQ0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6
T2JqQ0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KTogQnllIGJ5ZSBpc1dpbmRvd0V2ZW50Lgor
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IEF1dG9nZW5l
cmF0aW9uIHN1cHBvcnQgZm9yCisgICAgICAgIG1hcmtpbmcgYW5kIGludmFsaWRhdGluZyBldmVu
dCBsaXN0ZW5lcnMuCisKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQpOgorICAgICAg
ICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGU6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBs
YWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6d2lsbFJlbW92ZUNoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0
Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpk
aXNwYXRjaFdpbmRvd0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaXNwYXRj
aFdpbmRvd0xvYWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZmluaXNoZWRQ
YXJzaW5nKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogVXNlIGRpc3BhdGNoRXZlbnQgZGly
ZWN0bHkuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOiBNb3ZlZCBhIGZldyBldmVudCBsaXN0
ZW5lciBhdHRyaWJ1dGVzIGRvd24gZnJvbSBOb2RlLAorICAgICAgICBzaW5jZSB0aGV5IGRvbid0
IGFwcGx5IHRvIGFsbCBOb2Rlcywgb25seSBFbGVtZW50cy4KKworICAgICAgICAqIGRvbS9FdmVu
dExpc3RlbmVyLmg6IFJlbW92ZWQgaXNXaW5kb3dFdmVudCBwYXJhbWV0ZXIuCisKKyAgICAgICAg
KiBkb20vRXZlbnROYW1lcy5oOiBBZGRlZCB0aGUgImRpc3BsYXkiIGV2ZW50IG5hbWUsIHNvIGl0
IHdvcmtzIGNvcnJlY3RseQorICAgICAgICB3aXRoIGF0dHJpYnV0ZSBtYWNyb3MsIGFuZCBmb3Ig
cGVyZm9ybWFuY2UuCisKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Zm9yYmlkRXZlbnREaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjphbGxvd0V2
ZW50RGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnREaXNwYXRjaEZvcmJpZGRlbik6
IE1hZGUgdGhpcyBjb2RlIChlbWJhcnJhc2luZ2x5KSB0aHJlYWQKKyAgICAgICAgc2FmZSwgc2lu
Y2UgaXQncyBub3cgY2FsbGVkIG9uIG11bHRpcGxlIHRocmVhZHMuIChDdXJyZW50bHksIHdlIG9u
bHkgZm9yYmlkCisgICAgICAgIGV2ZW50IGRpc3BhdGNoIG9uIHRoZSBtYWluIHRocmVhZC4gSWYg
d2UgZXZlciB3YW50IHRvIGZvcmJpZCBldmVudCBkaXNwYXRjaAorICAgICAgICBvbiBzZWNvbmRh
cnkgdGhyZWFkcywgd2UgY2FuIGltcHJvdmUgaXQgdGhlbi4pCisKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFy
Z2V0OjpzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0OjpnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50VGFyZ2V0OjpjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dDo6Z2V0RXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJl
bW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpcmluZ0V2ZW50RW5kSXRlcmF0b3I6OkZpcmluZ0V2ZW50RW5kSXRl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXQ6Om1hcmtFdmVudExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6
aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0
Ojppc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0
OjpoYXNFdmVudExpc3RlbmVycyk6IFRoZSBPTkUgVFJVRSBJTVBMRU1FTlRBVElPTiBvZgorICAg
ICAgICBFdmVudFRhcmdldCBBUElzLCBjcmFmdGVkIGZyb20gYW4gYW1hbGdhbSBvZiBhbGwgdGhl
IGRpZmZlcmVudCB2ZXJzaW9ucworICAgICAgICB3ZSB1c2VkIHRvIGhhdmUuIFRoZSBtb3N0IHNp
Z25pZmljYW50IGNoYW5nZSBoZXJlIGlzIHRoYXQgd2Ugbm8gbG9uZ2VyCisgICAgICAgIG1ha2Ug
YSBjb3B5IG9mIGFuIEV2ZW50TGlzdGVuZXIgdmVjdG9yIGJlZm9yZSBmaXJpbmcgdGhlIGV2ZW50
cyBpbiB0aGUKKyAgICAgICAgdmVjdG9yIC0tIGluc3RlYWQsIHdlIHVzZSBhIHJlZmVyZW5jZSB0
byB0aGUgb3JpZ2luYWwgdmVjdG9yLCBhbG9uZyB3aXRoCisgICAgICAgIGEgbm90aWZpY2F0aW9u
IG1lY2hhbmlzbSBmb3IgdGhlIHVubGlrZWx5IGNhc2Ugd2hlbiBhbiBFdmVudExpc3RlbmVyIGlz
CisgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgdmVjdG9yLiBUaGlzIHN1YnN0YW50aWFsbHkgcmVk
dWNlcyBtYWxsb2MsIGNvcHlpbmcsIGFuZAorICAgICAgICByZWZjb3VudCBvdmVyaGVhZCwgYW5k
IGNvbXBsZXhpdHkuCisKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIpOgorICAgICAgICAq
IGRvbS9NZXNzYWdlRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6Y3Jl
YXRlKTogVXNlIGRpc3BhdGNoRXZlbnQgZGlyZWN0bHkuCisKKyAgICAgICAgKiBkb20vTWVzc2Fn
ZVBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2Fn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmV2ZW50VGFyZ2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAg
ICAgICAgKiBkb20vTWVzc2FnZVBvcnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0
OjpzZXRPbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6Om9ubWVzc2Fn
ZSk6CisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0LmlkbDogUmVtb3ZlZCBjdXN0b20gRXZlbnRU
YXJnZXQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBkb20vTXV0YXRpb25FdmVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25FdmVudDo6Y3JlYXRlKTogQWRkZWQgc29tZSBkZWZh
dWx0IHZhbHVlcyBzbyBjYWxsZXJzCisgICAgICAgIGNhbiBjb25zdHJ1Y3QgTXV0YXRpb25FdmVu
dHMgbW9yZSBlYXNpbHksIHdpdGhvdXQgY2FsbGluZyBhIGN1c3RvbSBkaXNwYXRjaAorICAgICAg
ICBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpldmVudFRhcmdldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmhhbmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hH
ZW5lcmljRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9k
aWZpZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaFVJRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlzcGF0Y2hLZXlFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpkaXNwYXRjaE1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
ZGlzcGF0Y2hXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpc3BhdGNoRm9j
dXNFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaEJsdXJFdmVudCk6Cisg
ICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnByZURpc3BhdGNo
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBvc3REaXNwYXRjaEV2ZW50
SGFuZGxlcik6CisgICAgICAgICogZG9tL05vZGUuaWRsOgorICAgICAgICAqIGRvbS9Ob2RlUmFy
ZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZXZlbnRUYXJnZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRh
KToKKyAgICAgICAgKiBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAq
IGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXI6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWVCYXNlOjpyZXN0b3JlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5n
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNr
VmFsaWRpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KiBodG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6OmRpc3BhdGNoTG9h
ZEV2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6b25TZWFyY2gpOgorICAgICAgICAqIGh0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojps
b2FkSW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaEVycm9yRXZlbnQpOgor
ICAgICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNvdXJjZUVsZW1lbnQ6OmVycm9yRXZlbnRUaW1lckZpcmVkKToKKyAgICAgICAgKiBodG1s
L0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bm90
aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcExvYWRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdU
aGlzRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hlRnJh
bWVEZWNpc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpIYXNoQ2hhbmdlRXZlbnRUYXNrOjpwZXJm
b3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6cGFnZUhpZGRlbik6Cisg
ICAgICAgICogbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWxsQ2FjaGVM
aXN0ZW5lclRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZUhvc3Q6Om5vdGlmeURPTUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5oOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9E
T01BcHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlv
bkNhY2hlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9ET01BcHBsaWNhdGlvbkNhY2hlLmg6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0RPTUFw
cGxpY2F0aW9uQ2FjaGUuaWRsOgorICAgICAgICAqIG5vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbjo6ZXZlbnRUYXJnZXREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToK
KyAgICAgICAgKiBub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm90aWZpY2F0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiBub3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGw6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UG9zdE1lc3NhZ2VUaW1lcjo6ZXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6d2luZG93c1dpdGhVbmxvYWRFdmVudExpc3RlbmVycyk6CisgICAgICAgIChXZWJD
b3JlOjp3aW5kb3dzV2l0aEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OmFsbG93c0JlZm9yZVVubG9hZExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpE
T01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpET01XaW5kb3c6OnBlbmRpbmdVbmxvYWRFdmVudExpc3RlbmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6On5ET01XaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdp
bmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6
OmRpc3BhdGNoTG9hZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlbW92ZUFsbEV2ZW50TGlz
dGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y2FwdHVyZUV2ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlbGVhc2VFdmVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV2luZG93OjpldmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
V2luZG93OjplbnN1cmVFdmVudFRhcmdldERhdGEpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93
Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEb3du
U3RhcnRTZWxlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjYW5Nb3VzZURy
YWdFeHRlbmRTZWxlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kUmVz
aXplRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kU2Nyb2xsRXZl
bnQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRTb3VyY2U6OmVuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6
OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFy
c2VFdmVudFN0cmVhbUxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnN0b3Ap
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgorICAgICAgICAq
IHBhZ2UvRXZlbnRTb3VyY2UuaDoKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmlkbDoKKyAg
ICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXNw
YXRjaEV2ZW50c09uV2luZG93QW5kRm9jdXNlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9j
dXNDb250cm9sbGVyOjpzZXRGb2N1c2VkRnJhbWUpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNob3VsZENsb3NlKToKKyAgICAgICAgKiBwYWdl
L0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5l
dHdvcmtTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyRmlyZWQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzZWxlY3Rpb25DaGFuZ2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OnN1YnRyZWVIYXND
aGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpoYXNMb2FkTGlzdGVuZXIpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZHVtbXlFdmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6ZGlzcGF0Y2hFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmV2ZW50VGFyZ2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0
YSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5oOgorICAgICAgICAqIHN2Zy9T
VkdJbWFnZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUxvYWRlcjo6ZGlz
cGF0Y2hMb2FkRXZlbnQpOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCk6Cisg
ICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNl
RWxlbWVudDo6dHJhbnNmZXJFdmVudExpc3RlbmVyc1RvU2hhZG93VHJlZSk6CisgICAgICAgICog
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb25k
aXRpb25FdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogd2Vic29ja2V0cy9X
ZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2s6
OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NXZWJTb2NrZXRFdmVudFRh
c2s6OlByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29j
a2V0OjpkaWRDb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDbG9zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgICogd2Vic29j
a2V0cy9XZWJTb2NrZXQuaDoKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6Cisg
ICAgICAgICogd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdFdvcmtlcjo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0V29ya2VyOjplbnN1cmVFdmVudFRhcmdldERhdGEpOgorICAgICAgICAqIHdvcmtlcnMvQWJz
dHJhY3RXb3JrZXIuaDoKKyAgICAgICAgKiB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbDoKKyAg
ICAgICAgKiB3b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAqIHdv
cmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oOgorICAgICAgICAqIHdvcmtlcnMvRGVkaWNh
dGVkV29ya2VyQ29udGV4dC5pZGw6CisgICAgICAgICogd29ya2Vycy9EZWZhdWx0U2hhcmVkV29y
a2VyUmVwb3NpdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJDb25uZWN0
VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyU2NyaXB0
TG9hZGVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclNjcmlwdExvYWRl
cjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIHdvcmtlcnMvU2hhcmVkV29ya2VyLmlkbDoK
KyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQ29ubmVjdEV2ZW50KToKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtl
ckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuaWRsOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6
bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmg6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXIuaWRsOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpldmVudFRhcmdldERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuaWRsOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpwZXJmb3JtVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29ya2VyVGFzazo6cGVyZm9ybVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXhjZXB0aW9uVGFzazo6cGVyZm9ybVRhc2spOgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6Y2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Om5l
dHdvcmtFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6YWJvcnRFcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkU2VuZERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpldmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3Q6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmlkbDoK
KyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSk6CisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0VXBsb2FkOjpldmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3RVcGxvYWQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
LmlkbDoKKwogMjAwOS0wOS0yMyAgTWFydGluIFJvYmluc29uICA8bWFydGluLmphbWVzLnJvYmlu
c29uQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29y
a2luZyBjb3B5KQpAQCAtNDk0LDcgKzQ5NCw3IEBAIF9fWk43V2ViQ29yZTVDYWNoZTExc2V0RGlz
YWJsZWRFYgogX19aTjdXZWJDb3JlNUNhY2hlMTNnZXRTdGF0aXN0aWNzRXYKIF9fWk43V2ViQ29y
ZTVDYWNoZTEzc2V0Q2FwYWNpdGllc0VqamoKIF9fWk43V2ViQ29yZTVGcmFtZTEwZmluZFN0cmlu
Z0VSS05TXzZTdHJpbmdFYmJiYgotX19aTjdXZWJDb3JlNUZyYW1lMTFzaG91bGRDbG9zZUVQTjNX
VEY2VmVjdG9ySU5TMV82UmVmUHRySU5TXzIzUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJFRUVMbTBF
RUUKK19fWk43V2ViQ29yZTVGcmFtZTExc2hvdWxkQ2xvc2VFdgogX19aTjdXZWJDb3JlNUZyYW1l
MTNyZWFwcGx5U3R5bGVzRXYKIF9fWk43V2ViQ29yZTVGcmFtZTEzc2V0Wm9vbUZhY3RvckVmYgog
X19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZvcldpZGdldEVQS05TXzZXaWRnZXRFCkBAIC02NTYs
NyArNjU2LDYgQEAgX19aTjdXZWJDb3JlOFNldHRpbmdzNDBzZXRUZXh0RGlyZWN0aW9uUwogX19a
TjdXZWJDb3JlOFNldHRpbmdzNDFzZXROZWVkc0tleWJvYXJkRXZlbnREaXNhbWJpZ3VhdGlvblF1
aXJrc0ViCiBfX1pON1dlYkNvcmU4YmxhbmtVUkxFdgogX19aTjdXZWJDb3JlOG1ha2VSR0JBRWlp
aWkKLV9fWk43V2ViQ29yZTlET01XaW5kb3cxNmhhc0V2ZW50TGlzdGVuZXJFUktOU18xMkF0b21p
Y1N0cmluZ0UKIF9fWk43V2ViQ29yZTlET01XaW5kb3czMGRpc3BhdGNoQWxsUGVuZGluZ1VubG9h
ZEV2ZW50c0V2CiBfX1pON1dlYkNvcmU5RE9NV2luZG93MzZkaXNwYXRjaEFsbFBlbmRpbmdCZWZv
cmVVbmxvYWRFdmVudHNFdgogX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLN19OU1JlY3QKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0
ODY4NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODAsNyArNjgwLDYgQEAKIAkJNDEyQTY4NDcwRjZCMDNERDAwMEVBNjZF
IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyQTY4NDYwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9i
amVjdFF1YXJhbnRpbmUuY3BwICovOyB9OwogCQk0MTVCN0M1NzBGRjU5OEU2MDA2NzcwRjcgLyog
SlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTVCN0M1NDBGRjU5OEU2MDA2NzcwRjcgLyogSlNBYnN0cmFjdFdv
cmtlckN1c3RvbS5jcHAgKi87IH07CiAJCTQxNUI3QzU4MEZGNTk4RTYwMDY3NzBGNyAvKiBKU1No
YXJlZFdvcmtlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNUI3QzU1MEZGNTk4RTYwMDY3NzBGNyAvKiBKU1NoYXJlZFdvcmtl
ckNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKLQkJNDE1QjdDNTkwRkY1OThFNjAwNjc3MEY3IC8qIEpT
U2hhcmVkV29ya2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxNUI3QzU2MEZGNTk4RTYwMDY3NzBGNyAvKiBKU1NoYXJlZFdvcmtlckN1
c3RvbS5jcHAgKi87IH07CiAJCTQxNUI3QzYzMEZGNUE3NjcwMDY3NzBGNyAvKiBKU1NoYXJlZFdv
cmtlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MTVCN0M2MjBGRjVBNzY3MDA2NzcwRjcgLyogSlNTaGFyZWRXb3JrZXJDb25zdHJ1
Y3Rvci5oICovOyB9OwogCQk0MTYyQTQ1MDEwMTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVkV29y
a2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTYyQTQ0RDEwMTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVkV29ya2VyQ29udGV4dC5j
cHAgKi87IH07CiAJCTQxNjJBNDUxMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MTYyQTQ0RTEwMTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oICovOyB9
OwpAQCAtNzE0LDcgKzcxMyw2IEBACiAJCTQxRDE2OEVBMTAyMjZFODkwMDlCQzgyNyAvKiBTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MUQxNjhFMjEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyUmVwb3Np
dG9yeS5oICovOyB9OwogCQk0MUQxNjhFRDEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2Vy
VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxRDE2OEU1MTAyMjZFODkwMDlCQzgyNyAvKiBTaGFyZWRXb3JrZXJUaHJlYWQuY3BwICovOyB9
OwogCQk0MUQxNjhFRTEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyVGhyZWFkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQxNjhFNjEwMjI2
RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyVGhyZWFkLmggKi87IH07Ci0JCTQxRDE2OEYwMTAy
MjZFQzQwMDlCQzgyNyAvKiBKU1NoYXJlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMTY4RUYxMDIyNkVDNDAw
OUJDODI3IC8qIEpTU2hhcmVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CiAJCTQxRDE2
OTA1MTAyMzhCNjYwMDlCQzgyNyAvKiBKU1NoYXJlZFdvcmtlckNvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMTY5MDMxMDIzOEI2NjAw
OUJDODI3IC8qIEpTU2hhcmVkV29ya2VyQ29udGV4dC5jcHAgKi87IH07CiAJCTQxRDE2OTA2MTAy
MzhCNjYwMDlCQzgyNyAvKiBKU1NoYXJlZFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRDE2OTA0MTAyMzhCNjYwMDlCQzgyNyAv
KiBKU1NoYXJlZFdvcmtlckNvbnRleHQuaCAqLzsgfTsKIAkJNDFFMUIxRDAwRkY1OTg2OTAwNTc2
QjNCIC8qIEFic3RyYWN0V29ya2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxRTFCMUNBMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtl
ci5jcHAgKi87IH07CkBAIC01ODQwLDcgKzU4MzgsNiBAQAogCQk0MTJBNjg0NjBGNkIwM0REMDAw
RUE2NkUgLyogU2NyaXB0T2JqZWN0UXVhcmFudGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDE1QjdDNTQwRkY1OThFNjAwNjc3MEY3IC8qIEpTQWJzdHJhY3RX
b3JrZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNB
YnN0cmFjdFdvcmtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
NUI3QzU1MEZGNTk4RTYwMDY3NzBGNyAvKiBKU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2hhcmVkV29ya2VyQ29uc3Ry
dWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTVCN0M1NjBGRjU5OEU2
MDA2NzcwRjcgLyogSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTVCN0M2MjBGRjVBNzY3MDA2NzcwRjcgLyogSlNTaGFyZWRXb3Jr
ZXJDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NoYXJl
ZFdvcmtlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNjJB
NDREMTAxMTQ1QUUwMERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERlZGljYXRlZFdvcmtlckNvbnRleHQuY3Bw
OyBwYXRoID0gd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDE2MkE0NEUxMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdv
cmtlckNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGVkaWNhdGVk
V29ya2VyQ29udGV4dC5oOyBwYXRoID0gd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODc2LDcgKzU4NzMsNiBAQAogCQk0MUQx
NjhFMjEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Lmg7IHBhdGgg
PSB3b3JrZXJzL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFEMTY4RTUxMDIyNkU4OTAwOUJDODI3IC8qIFNoYXJlZFdvcmtlclRocmVhZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTaGFyZWRXb3JrZXJUaHJl
YWQuY3BwOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXJUaHJlYWQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUQxNjhFNjEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29y
a2VyVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNoYXJlZFdvcmtl
clRocmVhZC5oOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXJUaHJlYWQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFEMTY4RUYxMDIyNkVDNDAwOUJDODI3IC8qIEpTU2hhcmVk
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1NoYXJlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MUQxNjkwMzEwMjM4QjY2MDA5QkM4MjcgLyogSlNTaGFyZWRXb3JrZXJDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2hhcmVkV29y
a2VyQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDE2OTA0MTAy
MzhCNjYwMDlCQzgyNyAvKiBKU1NoYXJlZFdvcmtlckNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTaGFyZWRXb3JrZXJDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxRTFCMUNBMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBYnN0cmFjdFdvcmtl
ci5jcHA7IHBhdGggPSB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE0MTM3LDYgKzE0MTMzLDggQEAKIAkJCQk5M0I3MEQ1MDA5RUIwQzdD
MDA5RDg0NjggLyogSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmggKi8sCiAJCQkJQzA5MTU4ODgw
REI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcCAqLywKIAkJ
CQlDMDkxNTg4OTBEQjQyMDkyMDBFNTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIu
aCAqLywKKwkJCQk0MTVCN0M1NTBGRjU5OEU2MDA2NzcwRjcgLyogSlNTaGFyZWRXb3JrZXJDb25z
dHJ1Y3Rvci5jcHAgKi8sCisJCQkJNDE1QjdDNjIwRkY1QTc2NzAwNjc3MEY3IC8qIEpTU2hhcmVk
V29ya2VyQ29uc3RydWN0b3IuaCAqLywKIAkJCQlCMjExMjdBNTBCMzE4Njc3MDAwOUJFNTMgLyog
SlNTVkdQT0RUeXBlV3JhcHBlci5oICovLAogCQkJCUUxQzM2RDMyMEVCMEEwOTQwMDc0MTBCQyAv
KiBKU1dvcmtlckNvbnRleHRCYXNlLmNwcCAqLywKIAkJCQlFMUMzNkQzMzBFQjBBMDk0MDA3NDEw
QkMgLyogSlNXb3JrZXJDb250ZXh0QmFzZS5oICovLApAQCAtMTQyNDUsNiArMTQyNDMsMjggQEAK
IAkJCQk5MzkyMjYyRTEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAg
Ki8sCiAJCQkJQkM1ODI1RjIwQzBCODkzODAwNTNGMUI1IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyMEZCN0UwQzBFOEU2QzAwRDE0NDdGIC8qIEpTQ1NTVmFs
dWVDdXN0b20uY3BwICovLAorCQkJCUZFODBEN0EyMEU5QzFFRDIwMDBENkY3NSAvKiBKU0N1c3Rv
bVBvc2l0aW9uQ2FsbGJhY2suY3BwICovLAorCQkJCUZFODBEN0EzMEU5QzFFRDIwMDBENkY3NSAv
KiBKU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2suaCAqLywKKwkJCQlGRTgwRDdBNDBFOUMxRUQyMDAw
RDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwICovLAorCQkJCUZFODBE
N0E1MEU5QzFFRDIwMDBENkY3NSAvKiBKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5oICov
LAorCQkJCTUxRUM5MjVCMENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudENh
bGxiYWNrLmNwcCAqLywKKwkJCQk1MUVDOTI1QzBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21T
UUxTdGF0ZW1lbnRDYWxsYmFjay5oICovLAorCQkJCTUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAv
KiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwICovLAorCQkJCTUxRUM5MjVF
MENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCAq
LywKKwkJCQk1MUVDOTI1RjBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmNwcCAqLywKKwkJCQk1MUVDOTI2MDBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0
b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggKi8sCisJCQkJNTFFQzkyNjEwQ0U5MERENDAwRjkw
MzA4IC8qIEpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcCAqLywKKwkJCQk1
MUVDOTI2MjBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suaCAqLywKKwkJCQkxQTM0MTdDODBDRUNGRjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lk
Q2FsbGJhY2suY3BwICovLAorCQkJCTFBMzQxN0M3MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3Rv
bVZvaWRDYWxsYmFjay5oICovLAorCQkJCTkzQkE1OUIxMEYyQUE1RkUwMDhFOEU5OSAvKiBKU0NE
QVRBU2VjdGlvbkN1c3RvbS5jcHAgKi8sCisJCQkJQkNBODNFNTEwRDdDRTIwNTAwMzQyMUE4IC8q
IEpTQ2xpcGJvYXJkQ3VzdG9tLmNwcCAqLywKKwkJCQlDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0Mg
LyogSlNDb25zb2xlQ3VzdG9tLmNwcCAqLywKKwkJCQlGRTcwMEREMDBGOTJEODFBMDA4RTJCRkUg
LyogSlNDb29yZGluYXRlc0N1c3RvbS5jcHAgKi8sCisJCQkJQkM0NkMxRUQwQzBEREJERjAwMjBD
RkMzIC8qIEpTQ1NTUnVsZUN1c3RvbS5jcHAgKi8sCisJCQkJOTM5MjI2MkUxMDMyMTA4NDAwNkU3
RDVEIC8qIEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwICovLAorCQkJCUJDNTgyNUYyMEMwQjg5Mzgw
MDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwICovLAorCQkJCUJDMjBG
QjdFMEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywKIAkJCQlCQ0NF
NThBQjEwNjFFOENGMDA4RkIzNUEgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgKi8sCiAJCQkJQkM3
N0QxNTEwRkYxOUM3MzAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCAq
LywKIAkJCQk0MTYyQTQ1MzEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcCAqLywKQEAgLTE0MjkyLDggKzE0MzEyLDYgQEAKIAkJCQlCQ0Q5QzI2MTBD
MTdBQTY3MDA1QzkwQTIgLyogSlNOb2RlTGlzdEN1c3RvbS5jcHAgKi8sCiAJCQkJQTlDNkU2NEEw
RDc0NjVFNzAwNjQ0MkU5IC8qIEpTUGx1Z2luQXJyYXlDdXN0b20uY3BwICovLAogCQkJCUE5QzZF
NjRCMEQ3NDY1RTcwMDY0NDJFOSAvKiBKU1BsdWdpbkN1c3RvbS5jcHAgKi8sCi0JCQkJNDFEMTY4
RUYxMDIyNkVDNDAwOUJDODI3IC8qIEpTU2hhcmVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi8s
Ci0JCQkJNDE1QjdDNTYwRkY1OThFNjAwNjc3MEY3IC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNw
cCAqLywKIAkJCQk1MURDRTgwMTBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dM
aXN0Q3VzdG9tLmNwcCAqLywKIAkJCQkxQUQyMzE2RDBDRDI2OUU3MDBDMUYxOTQgLyogSlNTUUxU
cmFuc2FjdGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJNTFEMEM1MTUwREFBOTBCNzAwM0IzODMxIC8q
IEpTU3RvcmFnZUN1c3RvbS5jcHAgKi8sCkBAIC0xOTAzMSw4ICsxOTA0OSw2IEBACiAJCQkJNDFE
MDdBN0UwRkY5MzVDQTAwOTVFRENFIC8qIEpTU2hhcmVkV29ya2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQxNUI3QzU4MEZGNTk4RTYwMDY3NzBGNyAvKiBKU1NoYXJlZFdvcmtlckNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDE2OTA1MTAyMzhCNjYwMDlCQzgyNyAvKiBK
U1NoYXJlZFdvcmtlckNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDFEMTY4RjAxMDIy
NkVDNDAwOUJDODI3IC8qIEpTU2hhcmVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk0MTVCN0M1OTBGRjU5OEU2MDA2NzcwRjcgLyogSlNTaGFyZWRXb3JrZXJDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2MzcwQ0U5MjI1RTAwN0VGM0NEIC8qIEpT
U1FMRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFODJGRUMwQ0FCMDdFRTAwMjIzN0FF
IC8qIEpTU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRkUxMTk5MENCRkZD
QzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2Vy
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjEgKzQ0LDYgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQWJzdHJhY3RXb3JrZXI6
Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKLXsKLSAgICBCYXNlOjptYXJrQ2hp
bGRyZW4obWFya1N0YWNrKTsKLQotICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwt
Pm9uZXJyb3IoKSk7Ci0KLSAgICB0eXBlZGVmIEFic3RyYWN0V29ya2VyOjpFdmVudExpc3RlbmVy
c01hcCBFdmVudExpc3RlbmVyc01hcDsKLSAgICB0eXBlZGVmIEFic3RyYWN0V29ya2VyOjpMaXN0
ZW5lclZlY3RvciBMaXN0ZW5lclZlY3RvcjsKLSAgICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRM
aXN0ZW5lcnMgPSBtX2ltcGwtPmV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgZm9yIChFdmVudExpc3Rl
bmVyc01hcDo6aXRlcmF0b3IgbWFwSXRlciA9IGV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7IG1hcEl0
ZXIgIT0gZXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsrbWFwSXRlcikgewotICAgICAgICBmb3IgKExp
c3RlbmVyVmVjdG9yOjppdGVyYXRvciB2ZWNJdGVyID0gbWFwSXRlci0+c2Vjb25kLmJlZ2luKCk7
IHZlY0l0ZXIgIT0gbWFwSXRlci0+c2Vjb25kLmVuZCgpOyArK3ZlY0l0ZXIpCi0gICAgICAgICAg
ICAoKnZlY0l0ZXIpLT5tYXJrSlNGdW5jdGlvbihtYXJrU3RhY2spOwotICAgIH0KLX0KLQogSlNW
YWx1ZSBKU0Fic3RyYWN0V29ya2VyOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9u
Q2FjaGVDdXN0b20uY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjgg
KzQyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0
YWNrKQotewotICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwotCi0gICAgbWFya0lm
Tm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25jaGVja2luZygpKTsKLSAgICBtYXJrSWZOb3RO
dWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmVycm9yKCkpOwotICAgIG1hcmtJZk5vdE51bGwobWFy
a1N0YWNrLCBtX2ltcGwtPm9ubm91cGRhdGUoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtYXJrU3Rh
Y2ssIG1faW1wbC0+b25kb3dubG9hZGluZygpKTsKLSAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFj
aywgbV9pbXBsLT5vbnByb2dyZXNzKCkpOwotICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBt
X2ltcGwtPm9udXBkYXRlcmVhZHkoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1f
aW1wbC0+b25jYWNoZWQoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+
b25vYnNvbGV0ZSgpKTsKLQotICAgIHR5cGVkZWYgRE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRM
aXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7Ci0gICAgdHlwZWRlZiBET01BcHBsaWNhdGlv
bkNhY2hlOjpMaXN0ZW5lclZlY3RvciBMaXN0ZW5lclZlY3RvcjsKLSAgICBFdmVudExpc3RlbmVy
c01hcCYgZXZlbnRMaXN0ZW5lcnMgPSBtX2ltcGwtPmV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgZm9y
IChFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgbWFwSXRlciA9IGV2ZW50TGlzdGVuZXJzLmJl
Z2luKCk7IG1hcEl0ZXIgIT0gZXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsrbWFwSXRlcikgewotICAg
ICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciB2ZWNJdGVyID0gbWFwSXRlci0+c2Vj
b25kLmJlZ2luKCk7IHZlY0l0ZXIgIT0gbWFwSXRlci0+c2Vjb25kLmVuZCgpOyArK3ZlY0l0ZXIp
Ci0gICAgICAgICAgICAoKnZlY0l0ZXIpLT5tYXJrSlNGdW5jdGlvbihtYXJrU3RhY2spOwotICAg
IH0KLX0KLQogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRV9EWU5BTUlDX0VOVFJJRVMpCiAK
IEpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpoYXNJdGVtKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNyArMjc1LDcgQEAgc3RhdGljIGlubGluZSBib29s
IGlzT2JzZXJ2YWJsZVRocm91Z2hETwogCiAgICAgICAgIC8vIElmIGEgbm9kZSBpcyBpbiB0aGUg
ZG9jdW1lbnQsIGFuZCBoYXMgZXZlbnQgbGlzdGVuZXJzLCBpdHMgd3JhcHBlciBpcwogICAgICAg
ICAvLyBvYnNlcnZhYmxlIGJlY2F1c2UgaXRzIHdyYXBwZXIgaXMgcmVzcG9uc2libGUgZm9yIG1h
cmtpbmcgdGhvc2UgZXZlbnQgbGlzdGVuZXJzLgotICAgICAgICBpZiAobm9kZS0+ZXZlbnRMaXN0
ZW5lcnMoKS5zaXplKCkpCisgICAgICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycygpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRlY2huaWNhbGx5LCB3ZSBtYXkgb3ZlcnplYWxv
dXNseSBtYXJrIGEgd3JhcHBlciBmb3IgYSBub2RlIHRoYXQgaGFzIG9ubHkgbm9uLUpTIGV2ZW50
IGxpc3RlbmVycy4gT2ggd2VsbC4KIAogICAgICAgICAvLyBJZiBhIG5vZGUgb3ducyBhbm90aGVy
IG9iamVjdCB3aXRoIGEgd3JhcHBlciB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzLApAQCAtMzIzLDYg
KzMyMywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxlVGhyb3VnaERPCiAjZW5k
aWYKICAgICB9CiAKKyAgICAvLyBJZiBhIG5vZGUgaXMgZmlyaW5nIGV2ZW50IGxpc3RlbmVycywg
aXRzIHdyYXBwZXIgaXMgb2JzZXJ2YWJsZSBiZWNhdXNlCisgICAgLy8gaXRzIHdyYXBwZXIgaXMg
cmVzcG9uc2libGUgZm9yIG1hcmtpbmcgdGhvc2UgZXZlbnQgbGlzdGVuZXJzLgorICAgIGlmIChu
b2RlLT5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB2b2lk
IEpTRE9NV2luZG93OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrCiB7CiAgICAgQmFzZTo6bWFya0No
aWxkcmVuKG1hcmtTdGFjayk7CiAKLSAgICBtYXJrRXZlbnRMaXN0ZW5lcnMobWFya1N0YWNrLCBp
bXBsKCktPmV2ZW50TGlzdGVuZXJzKCkpOworICAgIGltcGwoKS0+bWFya0V2ZW50TGlzdGVuZXJz
KG1hcmtTdGFjayk7CiAKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqSGVhcDo6aGVh
cCh0aGlzKS0+Z2xvYmFsRGF0YSgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVk
aWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA0ODY4
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4
dDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQotewotICAgIEJhc2U6Om1hcmtD
aGlsZHJlbihtYXJrU3RhY2spOwotCi0gICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIGltcGwo
KS0+b25tZXNzYWdlKCkpOwotfQotCiBKU0M6OkpTVmFsdWUgSlNEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0
JiBhcmdzKQogewogICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCBhcmdzLCBpbXBs
KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNp
b24gNDg2ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6Om1hcmtK
U0Z1bmN0aW9uKE1hcgogICAgIG1hcmtTdGFjay5hcHBlbmQobV9nbG9iYWxPYmplY3QpOwogfQog
Ci12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50LCBib29sIGlz
V2luZG93RXZlbnQpCit2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2
ZW50KQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKQEAgLTEw
NiwxOSArMTA2LDEwIEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChFdmVudCoK
ICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCk7CiAgICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29w
ZShleGVjLCBnbG9iYWxEYXRhLT5keW5hbWljR2xvYmFsT2JqZWN0ID8gZ2xvYmFsRGF0YS0+ZHlu
YW1pY0dsb2JhbE9iamVjdCA6IGdsb2JhbE9iamVjdCk7CiAKLSAgICAgICAgSlNWYWx1ZSByZXR2
YWw7Ci0gICAgICAgIGlmIChoYW5kbGVFdmVudEZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICBnbG9i
YWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgICAgICAgICAgcmV0dmFsID0gY2Fs
bChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzRnVuY3Rp
b24sIGFyZ3MpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSB0aGlzVmFs
dWU7Ci0gICAgICAgICAgICBpZiAoaXNXaW5kb3dFdmVudCkKLSAgICAgICAgICAgICAgICB0aGlz
VmFsdWUgPSBnbG9iYWxPYmplY3QtPnRvVGhpc09iamVjdChleGVjKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
ZXZlbnQtPmN1cnJlbnRUYXJnZXQoKSk7Ci0gICAgICAgICAgICBnbG9iYWxEYXRhLT50aW1lb3V0
Q2hlY2tlci5zdGFydCgpOwotICAgICAgICAgICAgcmV0dmFsID0gY2FsbChleGVjLCBqc0Z1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7Ci0gICAgICAgIH0KKyAg
ICAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICAgICAgSlNWYWx1
ZSByZXR2YWwgPSBoYW5kbGVFdmVudEZ1bmN0aW9uCisgICAgICAgICAgICA/IGNhbGwoZXhlYywg
aGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc0Z1bmN0aW9uLCBhcmdz
KQorICAgICAgICAgICAgOiBjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGV2ZW50LT5jdXJyZW50VGFyZ2V0KCkpLCBhcmdz
KTsKICAgICAgICAgZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgICAg
IGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCB2b2lkIG1hcmtKU0Z1bmN0aW9uKEpTQzo6TWFya1N0YWNrJik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wgaXNXaW5kb3dFdmVudCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOwogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVw
b3J0RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxp
bmVOdW1iZXIpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbGlzQXR0cmlidXRlKCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgY2xlYXJKU0Z1bmN0aW9uSW5saW5lKCk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4Njg2KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMsMjMgKzQzLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTRXZlbnRTb3VyY2U6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2sm
IG1hcmtTdGFjaykKLXsKLSAgICBET01PYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwot
Ci0gICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25vcGVuKCkpOwotICAgIG1h
cmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ubWVzc2FnZSgpKTsKLSAgICBtYXJrSWZO
b3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmVycm9yKCkpOwotCi0gICAgdHlwZWRlZiBFdmVu
dFNvdXJjZTo6RXZlbnRMaXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7Ci0gICAgdHlwZWRl
ZiBFdmVudFNvdXJjZTo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7Ci0gICAgRXZlbnRM
aXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVudExpc3RlbmVycygpOwot
ICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExpc3Rl
bmVycy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0ZXIp
IHsKLSAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1hcEl0
ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsgKyt2
ZWNJdGVyKQotICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24obWFya1N0YWNr
KTsKLSAgICB9Ci19Ci0KIEpTVmFsdWUgSlNFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQ
b3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDYgQEAg
dm9pZCBKU01lc3NhZ2VQb3J0OjptYXJrQ2hpbGRyZW4oTWFya1N0YQogewogICAgIEJhc2U6Om1h
cmtDaGlsZHJlbihtYXJrU3RhY2spOwogCi0gICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1f
aW1wbC0+b25tZXNzYWdlKCkpOwotCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvY2FsbHkgZW50YW5n
bGVkIHBvcnQsIHdlIGNhbiBkaXJlY3RseSBtYXJrIGl0IGFzIHJlYWNoYWJsZS4gUG9ydHMgdGhh
dCBhcmUgcmVtb3RlbHkgZW50YW5nbGVkIGFyZSBtYXJrZWQgaW4tdXNlIGJ5IG1hcmtBY3RpdmVP
YmplY3RzRm9yQ29udGV4dCgpLgogICAgIGlmIChNZXNzYWdlUG9ydCogZW50YW5nbGVkUG9ydCA9
IG1faW1wbC0+bG9jYWxseUVudGFuZ2xlZFBvcnQoKSkgewogICAgICAgICBET01PYmplY3QqIHdy
YXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCpIZWFwOjpoZWFwKHRoaXMpLT5nbG9i
YWxEYXRhKCksIGVudGFuZ2xlZFBvcnQpOwpAQCAtNTQsMTMgKzUyLDcgQEAgdm9pZCBKU01lc3Nh
Z2VQb3J0OjptYXJrQ2hpbGRyZW4oTWFya1N0YQogICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVu
ZCh3cmFwcGVyKTsKICAgICB9CiAKLSAgICB0eXBlZGVmIE1lc3NhZ2VQb3J0OjpFdmVudExpc3Rl
bmVyc01hcCBFdmVudExpc3RlbmVyc01hcDsKLSAgICB0eXBlZGVmIE1lc3NhZ2VQb3J0OjpMaXN0
ZW5lclZlY3RvciBMaXN0ZW5lclZlY3RvcjsKLSAgICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRM
aXN0ZW5lcnMgPSBtX2ltcGwtPmV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgZm9yIChFdmVudExpc3Rl
bmVyc01hcDo6aXRlcmF0b3IgbWFwSXRlciA9IGV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7IG1hcEl0
ZXIgIT0gZXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsrbWFwSXRlcikgewotICAgICAgICBmb3IgKExp
c3RlbmVyVmVjdG9yOjppdGVyYXRvciB2ZWNJdGVyID0gbWFwSXRlci0+c2Vjb25kLmJlZ2luKCk7
IHZlY0l0ZXIgIT0gbWFwSXRlci0+c2Vjb25kLmVuZCgpOyArK3ZlY0l0ZXIpIAotICAgICAgICAg
ICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24obWFya1N0YWNrKTsKLSAgICB9CisgICAgbV9p
bXBsLT5tYXJrRXZlbnRMaXN0ZW5lcnMobWFya1N0YWNrKTsKIH0KIAogSlNWYWx1ZSBKU01lc3Nh
Z2VQb3J0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4
Njg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsMTAgKzE1MCwxMCBAQCB2b2lkIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNj
b3BlKEV4ZWNTCiAKIHZvaWQgSlNOb2RlOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3Rh
Y2spCiB7Ci0gICAgTm9kZSogbm9kZSA9IG1faW1wbC5nZXQoKTsKLQogICAgIEJhc2U6Om1hcmtD
aGlsZHJlbihtYXJrU3RhY2spOwotICAgIG1hcmtFdmVudExpc3RlbmVycyhtYXJrU3RhY2ssIG5v
ZGUtPmV2ZW50TGlzdGVuZXJzKCkpOworCisgICAgTm9kZSogbm9kZSA9IG1faW1wbC5nZXQoKTsK
KyAgICBub2RlLT5tYXJrRXZlbnRMaXN0ZW5lcnMobWFya1N0YWNrKTsKIAogICAgIC8vIE5vZGVz
IGluIHRoZSBkb2N1bWVudCBhcmUga2VwdCBhbGl2ZSBieSBKU0RvY3VtZW50OjptYXJrLCBzbywg
aWYgd2UncmUgaW4KICAgICAvLyB0aGUgZG9jdW1lbnQsIHdlIG5lZWQgdG8gbWFyayB0aGUgZG9j
dW1lbnQsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlz
aW9uIDQ4Njg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckNvbnRleHRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0KLSNpbmNsdWRlICJKU1NoYXJlZFdv
cmtlckNvbnRleHQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIEpTU2hhcmVkV29ya2VyQ29udGV4dDo6bWFya0NoaWxkcmVuKE1hcmtTdGFj
ayYgbWFya1N0YWNrKQotewotICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwotCi0g
ICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIGltcGwoKS0+b25jb25uZWN0KCkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkocmV2aXNp
b24gNDg2ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTV2ViU29ja2V0OjptYXJrQ2hpbGRyZW4oTWFy
a1N0YWNrJiBtYXJrU3RhY2spCi17Ci0gICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7
Ci0gICAgaWYgKG1faW1wbC0+cmVhZHlTdGF0ZSgpICE9IFdlYlNvY2tldDo6Q0xPU0VEKQotICAg
ICAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbm1lc3NhZ2UoKSk7Ci0gICAg
Ly8gRklYTUU6IG1hcmsgaWYgRXZlbnRMaXN0ZW5lcnMgaXMgcmVnaXN0ZXJlZC4KLX0KLQogLy8g
Q3VzdG9tIGZ1bmN0aW9ucwogSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsMTUgKzYyLDcgQEAgdm9pZCBKU1dvcmtlckNvbnRleHQ6Om1hcmtDaGlsZHJlbihNYXJrUwog
ICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgaW1wbCgpLT5v
cHRpb25hbExvY2F0aW9uKCkpOwogICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywg
Z2xvYmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbE5hdmlnYXRvcigpKTsKIAotICAgIG1hcmtJZk5v
dE51bGwobWFya1N0YWNrLCBpbXBsKCktPm9uZXJyb3IoKSk7Ci0KLSAgICB0eXBlZGVmIFdvcmtl
ckNvbnRleHQ6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlzdGVuZXJzTWFwOwotICAgIHR5cGVk
ZWYgV29ya2VyQ29udGV4dDo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7Ci0gICAgRXZl
bnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gaW1wbCgpLT5ldmVudExpc3RlbmVycygp
OwotICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExp
c3RlbmVycy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0
ZXIpIHsKLSAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1h
cEl0ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsg
Kyt2ZWNJdGVyKQotICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24obWFya1N0
YWNrKTsKLSAgICB9CisgICAgaW1wbCgpLT5tYXJrRXZlbnRMaXN0ZW5lcnMobWFya1N0YWNrKTsK
IH0KIAogYm9vbCBKU1dvcmtlckNvbnRleHQ6OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2
aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTV29ya2VyOjptYXJrQ2hpbGRyZW4oTWFya1N0
YWNrJiBtYXJrU3RhY2spCi17Ci0gICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7Ci0K
LSAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgc3RhdGljX2Nhc3Q8V29ya2VyKj4oaW1wbCgp
KS0+b25tZXNzYWdlKCkpOwotfQotCiBKU0M6OkpTVmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNzYWdl
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
cmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsIGFyZ3MsIGltcGwoKSk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9u
IDQ4Njg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksMjAgKzU5LDcgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0
OjptYXJrQ2hpbGRyZW4oTWFyawogICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh3cmFwcGVy
KTsKICAgICB9CiAKLSAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbnJlYWR5
c3RhdGVjaGFuZ2UoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25h
Ym9ydCgpKTsKLSAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmVycm9yKCkp
OwotICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ubG9hZCgpKTsKLSAgICBt
YXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmxvYWRzdGFydCgpKTsKLSAgICBtYXJr
SWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbnByb2dyZXNzKCkpOwotICAgIAotICAgIHR5
cGVkZWYgWE1MSHR0cFJlcXVlc3Q6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlzdGVuZXJzTWFw
OwotICAgIHR5cGVkZWYgWE1MSHR0cFJlcXVlc3Q6Okxpc3RlbmVyVmVjdG9yIExpc3RlbmVyVmVj
dG9yOwotICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVycyA9IG1faW1wbC0+ZXZl
bnRMaXN0ZW5lcnMoKTsKLSAgICBmb3IgKEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBtYXBJ
dGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFwSXRlciAhPSBldmVudExpc3RlbmVycy5l
bmQoKTsgKyttYXBJdGVyKSB7Ci0gICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9y
IHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4oKTsgdmVjSXRlciAhPSBtYXBJdGVyLT5z
ZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikKLSAgICAgICAgICAgICgqdmVjSXRlciktPm1hcmtKU0Z1
bmN0aW9uKG1hcmtTdGFjayk7Ci0gICAgfQorICAgIG1faW1wbC0+bWFya0V2ZW50TGlzdGVuZXJz
KG1hcmtTdGFjayk7CiB9CiAKIC8vIEN1c3RvbSBmdW5jdGlvbnMKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAkocmV2
aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxv
YWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxOSArNTEsNyBAQCB2b2lkIEpTWE1M
SHR0cFJlcXVlc3RVcGxvYWQ6Om1hcmtDaGlsZHJlCiAgICAgICAgICAgICBtYXJrU3RhY2suYXBw
ZW5kKHdyYXBwZXIpOwogICAgIH0KIAotICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2lt
cGwtPm9uYWJvcnQoKSk7Ci0gICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25l
cnJvcigpKTsKLSAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmxvYWQoKSk7
Ci0gICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25sb2Fkc3RhcnQoKSk7Ci0g
ICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25wcm9ncmVzcygpKTsKLSAgICAK
LSAgICB0eXBlZGVmIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpFdmVudExpc3RlbmVyc01hcCBFdmVu
dExpc3RlbmVyc01hcDsKLSAgICB0eXBlZGVmIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpMaXN0ZW5l
clZlY3RvciBMaXN0ZW5lclZlY3RvcjsKLSAgICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0
ZW5lcnMgPSBtX2ltcGwtPmV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgZm9yIChFdmVudExpc3RlbmVy
c01hcDo6aXRlcmF0b3IgbWFwSXRlciA9IGV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7IG1hcEl0ZXIg
IT0gZXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsrbWFwSXRlcikgewotICAgICAgICBmb3IgKExpc3Rl
bmVyVmVjdG9yOjppdGVyYXRvciB2ZWNJdGVyID0gbWFwSXRlci0+c2Vjb25kLmJlZ2luKCk7IHZl
Y0l0ZXIgIT0gbWFwSXRlci0+c2Vjb25kLmVuZCgpOyArK3ZlY0l0ZXIpCi0gICAgICAgICAgICAo
KnZlY0l0ZXIpLT5tYXJrSlNGdW5jdGlvbihtYXJrU3RhY2spOwotICAgIH0KKyAgICBtX2ltcGwt
Pm1hcmtFdmVudExpc3RlbmVycyhtYXJrU3RhY2spOwogfQogCiBKU1ZhbHVlIEpTWE1MSHR0cFJl
cXVlc3RVcGxvYWQ6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVy
LmgJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExp
c3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBPYmpDRXZlbnRMaXN0ZW5lcihpZCA8RE9NRXZlbnRMaXN0ZW5lcj4pOwog
ICAgICAgICB2aXJ0dWFsIH5PYmpDRXZlbnRMaXN0ZW5lcigpOwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wgaXNXaW5kb3dFdmVudCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOwogCiAgICAgICAgIGlkIDxET01FdmVudExp
c3RlbmVyPiBtX2xpc3RlbmVyOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMv
T2JqQ0V2ZW50TGlzdGVuZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L09iakNFdmVudExpc3RlbmVyLm1tCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9PYmpDRXZlbnRMaXN0ZW5lci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
NyBAQCBPYmpDRXZlbnRMaXN0ZW5lcjo6fk9iakNFdmVudExpc3RlbmVyKCkKICAgICBbbV9saXN0
ZW5lciByZWxlYXNlXTsKIH0KIAotdm9pZCBPYmpDRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQo
RXZlbnQqIGV2ZW50LCBib29sKQordm9pZCBPYmpDRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQo
RXZlbnQqIGV2ZW50KQogewogICAgIFttX2xpc3RlbmVyIGhhbmRsZUV2ZW50OmtpdChldmVudCld
OwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTQ3Niw3ICs0NzYsOSBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICBteSAkcGFyZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q2xhc3NOYW1lKCRkYXRh
Tm9kZSk7CiAgICAgbXkgJGNvbmRpdGlvbmFsID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ29uZGl0aW9uYWwifTsKICAgICBteSAkbmVlZHNTVkdDb250ZXh0ID0gSXNTVkdUeXBl
TmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGludGVyZmFjZU5hbWUpOwotCisgICAgbXkgJGV2ZW50
VGFyZ2V0ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsK
KyAgICBteSAkbmVlZHNNYXJrQ2hpbGRyZW4gPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJFdmVudFRhcmdldCJ9OworICAgIAogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVt
cGxhdGUKICAgICBAaGVhZGVyQ29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRoZWFkZXJUZW1w
bGF0ZSk7CiAKQEAgLTU0OCw3ICs1NTAsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICB9CiAK
ICAgICAjIERlc3RydWN0b3IKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwg
fiRjbGFzc05hbWUoKTtcbiIpIGlmICghJGhhc1BhcmVudCBvciAkaW50ZXJmYWNlTmFtZSBlcSAi
RG9jdW1lbnQiIG9yICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKTsKKyAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgfiRjbGFzc05hbWUoKTtcbiIpIGlmICghJGhhc1Bh
cmVudCBvciAkZXZlbnRUYXJnZXQgb3IgJGludGVyZmFjZU5hbWUgZXEgIkRvY3VtZW50IiBvciAk
aW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iik7CiAKICAgICAjIFByb3RvdHlwZQogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3Rv
dHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcbiIpIHVubGVzcyAo
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCJ9
KTsKQEAgLTYxMyw4ICs2MTUsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgICIg
ICAgfVxuXG4iKTsKICAgICB9CiAKLSAgICAjIEN1c3RvbSBtYXJrIGZ1bmN0aW9uCi0gICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKEpTQzo6TWFy
a1N0YWNrJik7XG5cbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bU1hcmtGdW5jdGlvbiJ9OworICAgICMgbWFya0NoaWxkcmVuIGZ1bmN0aW9uCisgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKEpTQzo6TWFya1N0
YWNrJik7XG5cbiIpIGlmICRuZWVkc01hcmtDaGlsZHJlbjsKIAogICAgICMgQ3VzdG9tIHB1c2hF
dmVudEhhbmRsZXJTY29wZSBmdW5jdGlvbgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dmlydHVhbCB2b2lkIHB1c2hFdmVudEhhbmRsZXJTY29wZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
U2NvcGVDaGFpbiYpIGNvbnN0O1xuXG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21QdXNoRXZlbnRIYW5kbGVyU2NvcGUifTsKQEAgLTc4OSw3ICs3OTEsNyBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwKICAgICAgICAg
ICAgICIgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVxuIiAuCiAgICAgICAgICAgICAiICAgIHtcbiIgLgot
ICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSIgLiAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0gPyAiIiA6ICIsIEpTQzo6SGFzRGVm
YXVsdE1hcmsiKSAuICIpKTtcbiIgLgorICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSIgLiAoJG5lZWRzTWFya0NoaWxkcmVuID8gIiIgOiAiLCBKU0M6Okhhc0RlZmF1bHRNYXJrIikg
LiAiKSk7XG4iIC4KICAgICAgICAgICAgICIgICAgfVxuIik7CiAgICAgfSBlbHNpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pIHsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwKQEAgLTg2OCw2ICs4NzAsOCBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgIG15ICRwYXJlbnRDbGFzc05hbWUgPSBHZXRQYXJlbnRDbGFzc05h
bWUoJGRhdGFOb2RlKTsKICAgICBteSAkY29uZGl0aW9uYWwgPSAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OwogICAgIG15ICR2aXNpYmxlQ2xhc3NOYW1lID0g
R2V0VmlzaWJsZUNsYXNzTmFtZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgbXkgJGV2ZW50VGFyZ2V0
ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsKKyAgICBt
eSAkbmVlZHNNYXJrQ2hpbGRyZW4gPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21NYXJrRnVuY3Rpb24ifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJF
dmVudFRhcmdldCJ9OwogCiAgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQogICAg
IEBpbXBsQ29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRoZWFkZXJUZW1wbGF0ZSk7CkBAIC0x
MTUzLDE3ICsxMTU3LDE3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgIyBEZXN0cnVjdG9yCi0gICAgaWYgKCEkaGFz
UGFyZW50IHx8ICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CisgICAgaWYgKCEkaGFz
UGFyZW50IHx8ICRldmVudFRhcmdldCkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7
Y2xhc3NOYW1lfTo6fiRjbGFzc05hbWUoKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CiAKKyAgICAgICAgaWYgKCRldmVudFRhcmdldCkgeworICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCJ9ID0gMTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGltcGwoKS0+aW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJz
KCk7XG4iKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiTm9k
ZSIpIHsKLSAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ci5oIn0gPSAxOwotICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGludmFsaWRh
dGVFdmVudExpc3RlbmVycyhtX2ltcGwtPmV2ZW50TGlzdGVuZXJzKCkpO1xuIik7Ci0gICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZm9yZ2V0RE9NTm9kZShtX2ltcGwtPmRvY3Vt
ZW50KCksIG1faW1wbC5nZXQoKSk7XG4iKTsKLSAgICAgICAgfSBlbHNpZiAoJGludGVyZmFjZU5h
bWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwotICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGludmFsaWRhdGVFdmVudExpc3RlbmVycyhpbXBsKCktPmV2ZW50TGlzdGVuZXJzKCkp
O1xuIik7CisgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZm9yZ2V0RE9NTm9k
ZShpbXBsKCktPmRvY3VtZW50KCksIGltcGwoKSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAgICAgIG15ICRhbmltYXRlZFR5
cGUgPSAkaW1wbENsYXNzTmFtZTsKQEAgLTExNzQsNyArMTE3OCw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEpTU1ZHRHluYW1pY1BPRFR5cGVXcmFwcGVyQ2FjaGU8JHBvZFR5cGUsICRhbmltYXRlZFR5cGU+
Ojpmb3JnZXRXcmFwcGVyKG1faW1wbC5nZXQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBmb3JnZXRE
T01PYmplY3QoKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKSwgbV9pbXBsLmdldCgpKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZm9yZ2V0RE9NT2JqZWN0
KCpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIGltcGwoKSk7XG4iKTsKICAgICAgICAg
fQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKQEAgLTExODcsNiArMTE5
MSwxNCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiAgICBmb3JnZXRET01PYmplY3QoKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERh
dGEoKSwgc3RhdGljX2Nhc3Q8JHtpbXBsQ2xhc3NOYW1lfSo+KGltcGwoKSkpO1xufVxuXG4iKTsK
ICAgICB9CiAKKyAgICBpZiAoJG5lZWRzTWFya0NoaWxkcmVuICYmICEkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSkgeworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBt
YXJrU3RhY2spXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wbCgpLT5tYXJrRXZlbnRM
aXN0ZW5lcnMobWFya1N0YWNrKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
blxuIik7CisgICAgfQorCiAgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJFeHRlbmRzRE9NR2xvYmFsT2JqZWN0In0pIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU09iamVjdCogJHtjbGFzc05hbWV9OjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CkluZGV4OiBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gNDg2ODYp
CisrKyBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3
LDEwICsxODcsOCBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZpZWRFdmVuCiB7
CiAgICAgaWYgKHBhcmVudE5vZGUoKSkKICAgICAgICAgcGFyZW50Tm9kZSgpLT5jaGlsZHJlbkNo
YW5nZWQoKTsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpE
T01DSEFSQUNURVJEQVRBTU9ESUZJRURfTElTVEVORVIpKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7Ci0gICAgICAgIGRpc3BhdGNoTXV0YXRpb25FdmVudChldmVudE5hbWVzKCkuRE9NQ2hh
cmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsIHRydWUsIDAsIHByZXZWYWx1ZSwgbV9kYXRhLCBlYyk7
IAotICAgIH0KKyAgICBpZiAoZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpE
T01DSEFSQUNURVJEQVRBTU9ESUZJRURfTElTVEVORVIpKQorICAgICAgICBkaXNwYXRjaEV2ZW50
KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQ2hhcmFjdGVyRGF0YU1vZGlm
aWVkRXZlbnQsIHRydWUsIDAsIHByZXZWYWx1ZSwgbV9kYXRhKSk7CiAgICAgZGlzcGF0Y2hTdWJ0
cmVlTW9kaWZpZWRFdmVudCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNp
b24gNDg2ODYpCisrKyBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsOCArNDEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lk
IGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKLXN0
YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqLCBFeGNlcHRpb25Db2Rl
Jik7CitzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKE5vZGUqKTsKK3N0
YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqKTsKIAogdHlwZWRlZiBW
ZWN0b3I8c3RkOjpwYWlyPE5vZGVDYWxsYmFjaywgUmVmUHRyPE5vZGU+ID4gPiBOb2RlQ2FsbGJh
Y2tRdWV1ZTsKIHN0YXRpYyBOb2RlQ2FsbGJhY2tRdWV1ZSogc19wb3N0QXR0YWNoQ2FsbGJhY2tR
dWV1ZTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9y
ZShQYXNzUmVmCiAKICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIG11dGF0aW9uIGV2ZW50cy4KICAg
ICAgICAgY2hpbGRyZW5DaGFuZ2VkKGZhbHNlLCByZWZDaGlsZFByZXZpb3VzU2libGluZy5nZXQo
KSwgbmV4dC5nZXQoKSwgMSk7Ci0gICAgICAgIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMo
Y2hpbGQuZ2V0KCksIGVjKTsKKyAgICAgICAgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50cyhj
aGlsZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIC8vIEFkZCBjaGlsZCB0byB0
aGUgcmVuZGVyaW5nIHRyZWUuCiAgICAgICAgIGlmIChhdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0
YWNoZWQoKSAmJiBjaGlsZC0+cGFyZW50KCkgPT0gdGhpcykgewpAQCAtMjU1LDcgKzI1NSw3IEBA
IGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWYKICAgICAgICAgYWxsb3dF
dmVudERpc3BhdGNoKCk7CiAKICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIG11dGF0aW9uIGV2ZW50
cwotICAgICAgICBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKGNoaWxkLmdldCgpLCBlYyk7
CisgICAgICAgIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMoY2hpbGQuZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAvLyBBZGQgY2hpbGQgdG8gdGhlIHJlbmRlcmluZyB0cmVl
CiAgICAgICAgIGlmIChhdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSAmJiBjaGlsZC0+
cGFyZW50KCkgPT0gdGhpcykgewpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBFeGNlcHRpb25D
b2RlIHdpbGxSZW1vdmVDaGlsZChOb2QKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAg
IC8vIGZpcmUgcmVtb3ZlZCBmcm9tIGRvY3VtZW50IG11dGF0aW9uIGV2ZW50cy4KLSAgICBkaXNw
YXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhjaGlsZCwgZWMpOworICAgIGRpc3BhdGNoQ2hpbGRSZW1v
dmFsRXZlbnRzKGNoaWxkKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBlYzsKIApAQCAt
NDgwLDcgKzQ4MCw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlAK
IAogICAgICAgICAvLyBEaXNwYXRjaCB0aGUgbXV0YXRpb24gZXZlbnRzCiAgICAgICAgIGNoaWxk
cmVuQ2hhbmdlZChmYWxzZSwgcHJldi5nZXQoKSwgMCwgMSk7Ci0gICAgICAgIGRpc3BhdGNoQ2hp
bGRJbnNlcnRpb25FdmVudHMoY2hpbGQuZ2V0KCksIGVjKTsKKyAgICAgICAgZGlzcGF0Y2hDaGls
ZEluc2VydGlvbkV2ZW50cyhjaGlsZC5nZXQoKSk7CiAKICAgICAgICAgLy8gQWRkIGNoaWxkIHRv
IHRoZSByZW5kZXJpbmcgdHJlZQogICAgICAgICBpZiAoYXR0YWNoZWQoKSAmJiAhY2hpbGQtPmF0
dGFjaGVkKCkgJiYgY2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKQEAgLTg2NCw3ICs4NjQsNyBA
QCBOb2RlICpDb250YWluZXJOb2RlOjpjaGlsZE5vZGUodW5zaWduZWQgCiAgICAgcmV0dXJuIG47
CiB9CiAKLXN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMoTm9kZSogY2hp
bGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlv
bkV2ZW50cyhOb2RlKiBjaGlsZCkKIHsKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKSk7CiAKQEAgLTg3OCwyNSArODc4LDE3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJ
bnNlcnRpb25FdmVudHMKIAogICAgIGRvY3VtZW50LT5pbmNET01UcmVlVmVyc2lvbigpOwogCi0g
ICAgaWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3Vt
ZW50OjpET01OT0RFSU5TRVJURURfTElTVEVORVIpKSB7Ci0gICAgICAgIGVjID0gMDsKLSAgICAg
ICAgYy0+ZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRF
dmVudCwgdHJ1ZSwgYy0+cGFyZW50Tm9kZSgpLCBTdHJpbmcoKSwgU3RyaW5nKCksIGVjKTsgCi0g
ICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGMtPnBh
cmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RF
SU5TRVJURURfTElTVEVORVIpKQorICAgICAgICBjLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2VydGVkRXZlbnQsIHRydWUsIGMtPnBh
cmVudE5vZGUoKSkpOwogCiAgICAgLy8gZGlzcGF0Y2ggdGhlIERPTU5vZGVJbnNlcnRlZEludG9E
b2N1bWVudCBldmVudCB0byBhbGwgZGVzY2VuZGFudHMKICAgICBpZiAoYy0+aW5Eb2N1bWVudCgp
ICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRElO
VE9ET0NVTUVOVF9MSVNURU5FUikpIHsKLSAgICAgICAgZm9yICg7IGM7IGMgPSBjLT50cmF2ZXJz
ZU5leHROb2RlKGNoaWxkKSkgewotICAgICAgICAgICAgZWMgPSAwOwotICAgICAgICAgICAgYy0+
ZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRJbnRvRG9j
dW1lbnRFdmVudCwgZmFsc2UsIDAsIFN0cmluZygpLCBTdHJpbmcoKSwgZWMpOyAKLSAgICAgICAg
ICAgIGlmIChlYykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAg
Zm9yICg7IGM7IGMgPSBjLT50cmF2ZXJzZU5leHROb2RlKGNoaWxkKSkKKyAgICAgICAgICAgIGMt
PmRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2Rl
SW5zZXJ0ZWRJbnRvRG9jdW1lbnRFdmVudCwgZmFsc2UpKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2
b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqIGNoaWxkLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3N0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqIGNoaWxk
KQogewogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBk
b2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwpAQCAtOTA3LDIxICs4OTksMTQgQEAgc3RhdGlj
IHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTgogICAgIGRvY3VtZW50LT5pbmNET01U
cmVlVmVyc2lvbigpOwogCiAgICAgLy8gZGlzcGF0Y2ggcHJlLXJlbW92YWwgbXV0YXRpb24gZXZl
bnRzCi0gICAgaWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBl
KERvY3VtZW50OjpET01OT0RFUkVNT1ZFRF9MSVNURU5FUikpIHsKLSAgICAgICAgZWMgPSAwOwot
ICAgICAgICBjLT5kaXNwYXRjaE11dGF0aW9uRXZlbnQoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1v
dmVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSwgU3RyaW5nKCksIFN0cmluZygpLCBlYyk7
IAotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChj
LT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9N
Tk9ERVJFTU9WRURfTElTVEVORVIpKQorICAgICAgICBjLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9u
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRFdmVudCwgdHJ1ZSwgYy0+
cGFyZW50Tm9kZSgpKSk7CiAKICAgICAvLyBkaXNwYXRjaCB0aGUgRE9NTm9kZVJlbW92ZWRGcm9t
RG9jdW1lbnQgZXZlbnQgdG8gYWxsIGRlc2NlbmRhbnRzCi0gICAgaWYgKGMtPmluRG9jdW1lbnQo
KSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFUkVNT1ZFREZS
T01ET0NVTUVOVF9MSVNURU5FUikpCi0gICAgICAgIGZvciAoOyBjOyBjID0gYy0+dHJhdmVyc2VO
ZXh0Tm9kZShjaGlsZCkpIHsKLSAgICAgICAgICAgIGVjID0gMDsKLSAgICAgICAgICAgIGMtPmRp
c3BhdGNoTXV0YXRpb25FdmVudChldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1l
bnRFdmVudCwgZmFsc2UsIDAsIFN0cmluZygpLCBTdHJpbmcoKSwgZWMpOyAKLSAgICAgICAgICAg
IGlmIChlYykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAoYy0+
aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5P
REVSRU1PVkVERlJPTURPQ1VNRU5UX0xJU1RFTkVSKSkgeworICAgICAgICBmb3IgKDsgYzsgYyA9
IGMtPnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQpKQorICAgICAgICAgICAgYy0+ZGlzcGF0Y2hFdmVu
dChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRnJvbURv
Y3VtZW50RXZlbnQsIGZhbHNlKSk7CisgICAgfQogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3MCw5ICsxNDcwLDExIEBAIHZvaWQgRG9jdW1l
bnQ6OmRldGFjaCgpCiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkK
IHsKKyAgICBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKKwogICAgIGlm
IChET01XaW5kb3cqIGRvbVdpbmRvdyA9IHRoaXMtPmRvbVdpbmRvdygpKQogICAgICAgICBkb21X
aW5kb3ctPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0g
dGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkKKyAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKCkpCiAgICAgICAgIG5vZGUtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiB9CiAKQEAg
LTE3MTUsOCArMTcxNyw4IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAg
ICBmLT5hbmltYXRpb24oKS0+cmVzdW1lQW5pbWF0aW9ucyh0aGlzKTsKIAogICAgIEltYWdlTG9h
ZGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkRXZlbnRzKCk7Ci0gICAgZGlzcGF0Y2hMb2FkRXZlbnQo
KTsKLSAgICBkaXNwYXRjaFBhZ2VUcmFuc2l0aW9uRXZlbnQoRXZlbnROYW1lcygpLnBhZ2VzaG93
RXZlbnQsIGZhbHNlKTsKKyAgICBkaXNwYXRjaFdpbmRvd0xvYWRFdmVudCgpOworICAgIGRpc3Bh
dGNoV2luZG93RXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5w
YWdlc2hvd0V2ZW50LCBmYWxzZSksIHRoaXMpOwogICAgIGlmIChmKQogICAgICAgICBmLT5sb2Fk
ZXIoKS0+aGFuZGxlZE9ubG9hZEV2ZW50cygpOwogI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1ND
SEVEVUxJTkcKQEAgLTI2NDYsNyArMjY0OCw3IEBAIGJvb2wgRG9jdW1lbnQ6OnNldEZvY3VzZWRO
b2RlKFBhc3NSZWZQdHIKICAgICAgICAgLy8gRGlzcGF0Y2ggYSBjaGFuZ2UgZXZlbnQgZm9yIHRl
eHQgZmllbGRzIG9yIHRleHRhcmVhcyB0aGF0IGhhdmUgYmVlbiBlZGl0ZWQKICAgICAgICAgUmVu
ZGVyT2JqZWN0KiByID0gb2xkRm9jdXNlZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChy
ICYmIHItPmlzVGV4dENvbnRyb2woKSAmJiB0b1JlbmRlclRleHRDb250cm9sKHIpLT5pc0VkaXRl
ZCgpKSB7Ci0gICAgICAgICAgICBvbGRGb2N1c2VkTm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudE5h
bWVzKCkuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIG9sZEZvY3VzZWRO
b2RlLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50
LCB0cnVlLCBmYWxzZSkpOwogICAgICAgICAgICAgciA9IG9sZEZvY3VzZWROb2RlLT5yZW5kZXJl
cigpOwogICAgICAgICAgICAgaWYgKHIgJiYgci0+aXNUZXh0Q29udHJvbCgpKQogICAgICAgICAg
ICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wociktPnNldEVkaXRlZChmYWxzZSk7CkBAIC0yODcz
LDI2ICsyODc1LDE2IEBAIEV2ZW50TGlzdGVuZXIqIERvY3VtZW50OjpnZXRXaW5kb3dBdHRyaWIK
ICAgICByZXR1cm4gZG9tV2luZG93LT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoV2luZG93RXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCit2b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0V2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50LCAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KQogewogICAg
IEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBET01XaW5kb3cqIGRvbVdp
bmRvdyA9IHRoaXMtPmRvbVdpbmRvdygpOwogICAgIGlmICghZG9tV2luZG93KQogICAgICAgICBy
ZXR1cm47Ci0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBkb21XaW5kb3ctPmRpc3BhdGNoRXZl
bnQoZXZlbnQsIGVjKTsKKyAgICBkb21XaW5kb3ctPmRpc3BhdGNoRXZlbnQoZXZlbnQsIHRhcmdl
dCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoV2luZG93RXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcp
Ci17Ci0gICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIERPTVdpbmRv
dyogZG9tV2luZG93ID0gdGhpcy0+ZG9tV2luZG93KCk7Ci0gICAgaWYgKCFkb21XaW5kb3cpCi0g
ICAgICAgIHJldHVybjsKLSAgICBkb21XaW5kb3ctPmRpc3BhdGNoRXZlbnQoZXZlbnRUeXBlLCBj
YW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpOwotfQotCi12b2lkIERvY3VtZW50OjpkaXNwYXRj
aExvYWRFdmVudCgpCit2b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0xvYWRFdmVudCgpCiB7
CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogICAgIERPTVdpbmRvdyog
ZG9tV2luZG93ID0gdGhpcy0+ZG9tV2luZG93KCk7CkBAIC0yOTAxLDE1ICsyODkzLDYgQEAgdm9p
ZCBEb2N1bWVudDo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogICAgIGRvbVdpbmRvdy0+ZGlzcGF0Y2hM
b2FkRXZlbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hQYWdlVHJhbnNpdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIHBlcnNpc3RlZCkKLXsKLSAg
ICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgRE9NV2luZG93KiBkb21X
aW5kb3cgPSB0aGlzLT5kb21XaW5kb3coKTsKLSAgICBpZiAoIWRvbVdpbmRvdykKLSAgICAgICAg
cmV0dXJuOwotICAgIGRvbVdpbmRvdy0+ZGlzcGF0Y2hQYWdlVHJhbnNpdGlvbkV2ZW50KGV2ZW50
VHlwZSwgcGVyc2lzdGVkKTsKLX0KLQogUGFzc1JlZlB0cjxFdmVudD4gRG9jdW1lbnQ6OmNyZWF0
ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBpZiAoZXZlbnRUeXBlID09ICJFdmVudCIgfHwgZXZlbnRUeXBlID09ICJFdmVudHMiIHx8IGV2
ZW50VHlwZSA9PSAiSFRNTEV2ZW50cyIpCkBAIC00MDI5LDEwICs0MDEyLDcgQEAgQ29sbGVjdGlv
bkNhY2hlKiBEb2N1bWVudDo6bmFtZUNvbGxlY3Rpbwogdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQ
YXJzaW5nKCkKIHsKICAgICBzZXRQYXJzaW5nKGZhbHNlKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9N
Q29udGVudExvYWRlZEV2ZW50LCB0cnVlLCBmYWxzZSksIGVjKTsKLQorICAgIGRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQ29udGVudExvYWRlZEV2ZW50LCB0cnVl
LCBmYWxzZSkpOwogICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpCiAgICAgICAgIGYtPmxvYWRl
cigpLT5maW5pc2hlZFBhcnNpbmcoKTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNDg2ODYpCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDEx
IEBAIHB1YmxpYzoKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgRG9jdW1l
bnQKIAorICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmx1cik7CisgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7CisgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihmb2N1cyk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihsb2FkKTsKKwogICAgIERvY3VtZW50VHlwZSogZG9jdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZG9jVHlwZS5nZXQoKTsgfQogCiAgICAgRE9NSW1wbGVtZW50YXRpb24qIGltcGxlbWVudGF0
aW9uKCkgY29uc3Q7CkBAIC01NDcsMTAgKzU1Miw4IEBAIHB1YmxpYzoKICAgICAvLyBIZWxwZXIg
ZnVuY3Rpb25zIGZvciBmb3J3YXJkaW5nIERPTVdpbmRvdyBldmVudCByZWxhdGVkIHRhc2tzIHRv
IHRoZSBET01XaW5kb3cgaWYgaXQgZXhpc3RzLgogICAgIHZvaWQgc2V0V2luZG93QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPik7CiAgICAgRXZlbnRMaXN0ZW5lciogZ2V0V2luZG93QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7Ci0gICAgdm9pZCBkaXNw
YXRjaFdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2b2lkIGRpc3BhdGNoV2lu
ZG93RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJn
LCBib29sIGNhbmNlbGFibGVBcmcpOwotICAgIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKLSAg
ICB2b2lkIGRpc3BhdGNoUGFnZVRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgYm9vbCBwZXJzaXN0ZWQpOworICAgIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gPSAwKTsKKyAgICB2b2lk
IGRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCk7CiAKICAgICBQYXNzUmVmUHRyPEV2ZW50PiBjcmVh
dGVFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50VHlwZSwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC04
MTIsNyArODE1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGFzaGJvYXJkUmVnaW9ucyhjb25z
dCBWZWN0b3I8RGFzaGJvYXJkUmVnaW9uVmFsdWU+Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgcmVt
b3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcnMoKTsKIAogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMmIGNoZWNrZWRSYWRpb0J1dHRv
bnMoKSB7IHJldHVybiBtX2NoZWNrZWRSYWRpb0J1dHRvbnM7IH0KICAgICAKSW5kZXg6IFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJl
dmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkVs
ZW1lbnQoKTsKIAorICAgIC8vIFRoZXNlIDQgYXR0cmlidXRlIGV2ZW50IGhhbmRsZXIgYXR0cmli
dXRlcyBhcmUgb3ZlcnJpZGVkIGJ5IEhUTUxCb2R5RWxlbWVudAorICAgIC8vIGFuZCBIVE1MRnJh
bWVTZXRFbGVtZW50IHRvIGZvcndhcmQgdG8gdGhlIERPTVdpbmRvdy4KKyAgICBERUZJTkVfVklS
VFVBTF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmx1cik7CisgICAgREVGSU5FX1ZJUlRVQUxf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKyAgICBERUZJTkVfVklSVFVBTF9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoZm9jdXMpOworICAgIERFRklORV9WSVJUVUFMX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihsb2FkKTsKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZ2V0SURB
dHRyaWJ1dGUoKSBjb25zdDsKICAgICBib29sIGhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJikgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gNDg2
ODYpCisrKyBXZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgdmlydHVhbCB+RXZlbnRMaXN0ZW5lcigpIHsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoRXZlbnQqLCBib29sIGlzV2luZG93RXZlbnQgPSBmYWxzZSkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKSA9IDA7CiAgICAgICAgIC8v
IFJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlIGVycm9yIGlzIGhhbmRsZWQuCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCByZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmIC8qbWVzc2FnZSovLCBj
b25zdCBTdHJpbmcmIC8qdXJsKi8sIGludCAvKmxpbmVOdW1iZXIqLykgeyByZXR1cm4gZmFsc2U7
IH0KICAgICAgICAgdmlydHVhbCBib29sIHdhc0NyZWF0ZWRGcm9tTWFya3VwKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTY5LDEwICs2OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgVHlwZSBtX3R5cGU7CiAgICAgfTsKIAotI2lmIFVTRShKU0MpCi0gICAgaW5saW5lIHZv
aWQgbWFya0lmTm90TnVsbChKU0M6Ok1hcmtTdGFjayYgbWFya1N0YWNrLCBFdmVudExpc3RlbmVy
KiBsaXN0ZW5lcikgeyBpZiAobGlzdGVuZXIpIGxpc3RlbmVyLT5tYXJrSlNGdW5jdGlvbihtYXJr
U3RhY2spOyB9Ci0jZW5kaWYKLQogfQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50
TmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJKHJldmlzaW9u
IDQ4Njg2KQorKysgV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhjb3B5KSBcCiAgICAg
bWFjcm8oY3V0KSBcCiAgICAgbWFjcm8oZGJsY2xpY2spIFwKKyAgICBtYWNybyhkaXNwbGF5KSBc
CiAgICAgbWFjcm8oZG93bmxvYWRpbmcpIFwKICAgICBtYWNybyhkcmFnKSBcCiAgICAgbWFjcm8o
ZHJhZ2VuZCkgXApJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwzOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAKKyNpbmNs
dWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgaW50IGdFdmVudERpc3BhdGNoRm9yYmlk
ZGVuID0gMDsKLSNlbmRpZgorCit2b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKQoreworICAgIGlm
ICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybjsKKyAgICArK2dFdmVudERpc3BhdGNo
Rm9yYmlkZGVuOworfQorCit2b2lkIGFsbG93RXZlbnREaXNwYXRjaCgpCit7CisgICAgaWYgKCFp
c01haW5UaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChnRXZlbnREaXNwYXRjaEZv
cmJpZGRlbiA+IDApCisgICAgICAgIC0tZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW47Cit9CisKK2Jv
b2wgZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpCit7CisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnRXZlbnREaXNwYXRjaEZvcmJpZGRl
biA+IDA7Cit9CisjZW5kaWYgLy8gTkRFQlVHCiAKIEV2ZW50VGFyZ2V0Ojp+RXZlbnRUYXJnZXQo
KQogewpAQCAtMTI1LDIyICsxNTMsMTUwIEBAIE5vdGlmaWNhdGlvbiogRXZlbnRUYXJnZXQ6OnRv
Tm90aWZpY2F0aW8KIH0KICNlbmRpZgogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBmb3JiaWRFdmVu
dERpc3BhdGNoKCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIs
IGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICArK2dFdmVudERpc3BhdGNoRm9yYmlkZGVuOworICAg
IEV2ZW50VGFyZ2V0RGF0YSogZCA9IGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOworCisgICAgcGFp
cjxFdmVudExpc3RlbmVyTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gZC0+ZXZlbnRMaXN0
ZW5lck1hcC5hZGQoZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyVmVjdG9yKCkpOworICAgIEV2ZW50
TGlzdGVuZXJWZWN0b3ImIGVudHJ5ID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7CisKKyAgICBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lciByZWdpc3RlcmVkTGlzdGVuZXIobGlzdGVuZXIsIHVzZUNhcHR1
cmUpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgLy8gcHJlLWV4aXN0aW5nIGVudHJ5CisgICAg
ICAgIGlmIChlbnRyeS5maW5kKHJlZ2lzdGVyZWRMaXN0ZW5lcikgIT0gbm90Rm91bmQpIC8vIGR1
cGxpY2F0ZSBsaXN0ZW5lcgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZW50cnku
YXBwZW5kKHJlZ2lzdGVyZWRMaXN0ZW5lcik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
YWxsb3dFdmVudERpc3BhdGNoKCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
LCBib29sIHVzZUNhcHR1cmUpCiB7Ci0gICAgaWYgKGdFdmVudERpc3BhdGNoRm9yYmlkZGVuID4g
MCkKLSAgICAgICAgLS1nRXZlbnREaXNwYXRjaEZvcmJpZGRlbjsKKyAgICBFdmVudFRhcmdldERh
dGEqIGQgPSBldmVudFRhcmdldERhdGEoKTsKKyAgICBpZiAoIWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEV2ZW50TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGQtPmV2ZW50
TGlzdGVuZXJNYXAuZmluZChldmVudFR5cGUpOworICAgIGlmIChyZXN1bHQgPT0gZC0+ZXZlbnRM
aXN0ZW5lck1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEV2ZW50TGlzdGVu
ZXJWZWN0b3ImIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciByZWdpc3RlcmVkTGlzdGVuZXIobGlzdGVuZXIsIHVzZUNhcHR1cmUpOworICAgIHNp
emVfdCBpbmRleCA9IGVudHJ5LmZpbmQocmVnaXN0ZXJlZExpc3RlbmVyKTsKKyAgICBpZiAoaW5k
ZXggPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVudHJ5LnJlbW92
ZShpbmRleCk7CisgICAgaWYgKCFlbnRyeS5zaXplKCkpCisgICAgICAgIGQtPmV2ZW50TGlzdGVu
ZXJNYXAucmVtb3ZlKHJlc3VsdCk7CisKKyAgICAvLyBOb3RpZnkgZmlyaW5nIGV2ZW50cyBwbGFu
bmluZyB0byBpbnZva2UgdGhlIGxpc3RlbmVyIGF0ICdpbmRleCcgdGhhdAorICAgIC8vIHRoZXkg
aGF2ZSBvbmUgbGVzcyBsaXN0ZW5lciB0byBpbnZva2UuCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBkLT5maXJpbmdFdmVudEVuZEl0ZXJhdG9ycy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYg
KGV2ZW50VHlwZSA9PSAqZC0+ZmlyaW5nRXZlbnRFbmRJdGVyYXRvcnNbaV0uZXZlbnRUeXBlICYm
IGluZGV4IDwgKmQtPmZpcmluZ0V2ZW50RW5kSXRlcmF0b3JzW2ldLnZhbHVlKQorICAgICAgICAg
ICAgLS0qZC0+ZmlyaW5nRXZlbnRFbmRJdGVyYXRvcnNbaV0udmFsdWU7CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBldmVudERpc3BhdGNoRm9yYmlkZGVuKCkKK2Jvb2wgRXZlbnRUYXJn
ZXQ6OnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpCiB7Ci0gICAgcmV0dXJuIGdF
dmVudERpc3BhdGNoRm9yYmlkZGVuID4gMDsKKyAgICBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnRUeXBlKTsKKyAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2Up
OworfQorCitFdmVudExpc3RlbmVyKiBFdmVudFRhcmdldDo6Z2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKKyAgICBjb25zdCBFdmVudExp
c3RlbmVyVmVjdG9yJiBlbnRyeSA9IGdldEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyeS5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGVu
dHJ5W2ldLmxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5
W2ldLmxpc3RlbmVyLmdldCgpOworICAgIHJldHVybiAwOworfQorCitib29sIEV2ZW50VGFyZ2V0
OjpjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUpCit7CisgICAgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBnZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV2ZW50VHlwZSk7CisgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIs
IGZhbHNlKTsKK30KKworYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFldmVudCB8fCBl
dmVudC0+dHlwZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpV
TlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKK2Jvb2wgRXZlbnRUYXJnZXQ6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7CisgICAgZXZlbnQtPnNl
dFRhcmdldCh0aGlzKTsKKyAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICByZXR1cm4gZmlyZUV2
ZW50TGlzdGVuZXJzKGV2ZW50LmdldCgpKTsKK30KKworYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2
ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hG
b3JiaWRkZW4oKSk7CisgICAgQVNTRVJUKGV2ZW50ICYmICFldmVudC0+dHlwZSgpLmlzRW1wdHko
KSk7CisKKyAgICBFdmVudFRhcmdldERhdGEqIGQgPSBldmVudFRhcmdldERhdGEoKTsKKyAgICBp
ZiAoIWQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgRXZlbnRMaXN0ZW5lck1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGV2ZW50LT50eXBlKCkpOwor
ICAgIGlmIChyZXN1bHQgPT0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGVudHJ5ID0gcmVzdWx0LT5zZWNv
bmQ7CisKKyAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IHByb3RlY3QgPSB0aGlzOworCisgICAgc2l6
ZV90IGVuZCA9IGVudHJ5LnNpemUoKTsKKyAgICBkLT5maXJpbmdFdmVudEVuZEl0ZXJhdG9ycy5h
cHBlbmQoRmlyaW5nRXZlbnRFbmRJdGVyYXRvcigmZXZlbnQtPnR5cGUoKSwgJmVuZCkpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGVudHJ5W2ldOworICAgICAgICBpZiAo
ZXZlbnQtPmV2ZW50UGhhc2UoKSA9PSBFdmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3Rl
cmVkTGlzdGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAoZXZlbnQtPmV2ZW50UGhhc2UoKSA9PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0
ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Ly8gVG8gbWF0Y2ggTW96aWxsYSwgdGhlIEFUX1RBUkdFVCBwaGFzZSBmaXJlcyBib3RoIGNhcHR1
cmluZyBhbmQgYnViYmxpbmcKKyAgICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzLCBldmVuIHRob3Vn
aCB0aGF0IHZpb2xhdGVzIHNvbWUgdmVyc2lvbnMgb2YgdGhlIERPTSBzcGVjLgorICAgICAgICBy
ZWdpc3RlcmVkTGlzdGVuZXIubGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2ZW50KTsKKyAgICB9Cisg
ICAgZC0+ZmlyaW5nRXZlbnRFbmRJdGVyYXRvcnMucmVtb3ZlTGFzdCgpOworCisgICAgcmV0dXJu
ICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworfQorCitjb25zdCBFdmVudExpc3RlbmVyVmVj
dG9yJiBFdmVudFRhcmdldDo6Z2V0RXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChFdmVudExpc3RlbmVyVmVjdG9y
LCBlbXB0eVZlY3RvciwgKCkpOworCisgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJn
ZXREYXRhKCk7CisgICAgaWYgKCFkKQorICAgICAgICByZXR1cm4gZW1wdHlWZWN0b3I7CisgICAg
RXZlbnRMaXN0ZW5lck1hcDo6aXRlcmF0b3IgaXQgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQo
ZXZlbnRUeXBlKTsKKyAgICBpZiAoaXQgPT0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGVtcHR5VmVjdG9yOworICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCit2
b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCit7CisgICAgRXZlbnRU
YXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7CisgICAgaWYgKCFkKQorICAgICAgICBy
ZXR1cm47CisgICAgZC0+ZXZlbnRMaXN0ZW5lck1hcC5jbGVhcigpOworCisgICAgLy8gTm90aWZ5
IGZpcmluZyBldmVudHMgcGxhbm5pbmcgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciBhdCAnaW5kZXgn
IHRoYXQKKyAgICAvLyB0aGV5IGhhdmUgb25lIGxlc3MgbGlzdGVuZXIgdG8gaW52b2tlLgorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZC0+ZmlyaW5nRXZlbnRFbmRJdGVyYXRvcnMuc2l6ZSgp
OyArK2kpCisgICAgICAgICpkLT5maXJpbmdFdmVudEVuZEl0ZXJhdG9yc1tpXS52YWx1ZSA9IDA7
CiB9Ci0jZW5kaWYgLy8gTkRFQlVHCiAKLX0gLy8gZW5kIG5hbWVzcGFjZQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDkgQEAKICNpZm5k
ZWYgRXZlbnRUYXJnZXRfaAogI2RlZmluZSBFdmVudFRhcmdldF9oCiAKKyNpbmNsdWRlICJBdG9t
aWNTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIlJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNTgsOCArNjEsMzEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAorICAgIHN0cnVjdCBGaXJpbmdFdmVudEVu
ZEl0ZXJhdG9yIHsKKyAgICAgICAgRmlyaW5nRXZlbnRFbmRJdGVyYXRvcihjb25zdCBBdG9taWNT
dHJpbmcqIGV2ZW50VHlwZSwgc2l6ZV90KiB2YWx1ZSkKKyAgICAgICAgICAgIDogZXZlbnRUeXBl
KGV2ZW50VHlwZSkKKyAgICAgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBldmVudFR5cGU7Cisg
ICAgICAgIHNpemVfdCogdmFsdWU7CisgICAgfTsKKyAgICB0eXBlZGVmIFZlY3RvcjxGaXJpbmdF
dmVudEVuZEl0ZXJhdG9yLCAxPiBGaXJpbmdFdmVudEVuZEl0ZXJhdG9yVmVjdG9yOworCisgICAg
dHlwZWRlZiBWZWN0b3I8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIsIDE+IEV2ZW50TGlzdGVuZXJW
ZWN0b3I7CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgRXZlbnRMaXN0ZW5lclZl
Y3Rvcj4gRXZlbnRMaXN0ZW5lck1hcDsKKworICAgIHN0cnVjdCBFdmVudFRhcmdldERhdGEgewor
ICAgICAgICBFdmVudExpc3RlbmVyTWFwIGV2ZW50TGlzdGVuZXJNYXA7CisgICAgICAgIEZpcmlu
Z0V2ZW50RW5kSXRlcmF0b3JWZWN0b3IgZmlyaW5nRXZlbnRFbmRJdGVyYXRvcnM7CisgICAgfTsK
KwogICAgIGNsYXNzIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgcmVm
KCkgeyByZWZFdmVudFRhcmdldCgpOyB9CisgICAgICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmRXZl
bnRUYXJnZXQoKTsgfQorCiAgICAgICAgIHZpcnR1YWwgRXZlbnRTb3VyY2UqIHRvRXZlbnRTb3Vy
Y2UoKTsKICAgICAgICAgdmlydHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpOwogICAg
ICAgICB2aXJ0dWFsIE5vZGUqIHRvTm9kZSgpOwpAQCAtOTAsMzYgKzExNiwxMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0ID0gMDsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKSA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJikgPSAw
OwotCi0gICAgICAgIHZvaWQgcmVmKCkgeyByZWZFdmVudFRhcmdldCgpOyB9Ci0gICAgICAgIHZv
aWQgZGVyZWYoKSB7IGRlcmVmRXZlbnRUYXJnZXQoKTsgfQotCi0gICAgICAgIC8vIEhhbmRsZXJz
IHRvIGRvL3VuZG8gYWN0aW9ucyBvbiB0aGUgdGFyZ2V0IG5vZGUgYmVmb3JlIGFuIGV2ZW50IGlz
IGRpc3BhdGNoZWQgdG8gaXQgYW5kIGFmdGVyIHRoZSBldmVudAotICAgICAgICAvLyBoYXMgYmVl
biBkaXNwYXRjaGVkLiAgVGhlIGRhdGEgcG9pbnRlciBpcyBoYW5kZWQgYmFjayBieSB0aGUgcHJl
RGlzcGF0Y2ggYW5kIHBhc3NlZCB0byBwb3N0RGlzcGF0Y2guCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqKSB7IHJldHVybiAwOyB9Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqLCB2b2lkKiAvKmRh
dGFGcm9tUHJlRGlzcGF0Y2gqLykgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBhZGRFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lcios
IGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExp
c3RlbmVycygpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50Pik7CisKKyAgICAgICAgLy8gVXNlZCBmb3IgbGVnYWN5ICJvbkV2ZW50IiBhdHRyaWJ1
dGUgQVBJcy4KKyAgICAgICAgYm9vbCBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKKyAgICAg
ICAgYm9vbCBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUpOworICAgICAgICBFdmVudExpc3RlbmVyKiBnZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKworICAgICAgICBib29sIGhhc0V2
ZW50TGlzdGVuZXJzKCk7CisgICAgICAgIGJvb2wgaGFzRXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUpOworICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9y
JiBnZXRFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CisKKyAg
ICAgICAgYm9vbCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqKTsKKyAgICAgICAgYm9vbCBpc0Zp
cmluZ0V2ZW50TGlzdGVuZXJzKCk7CisgICAgICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOyAvLyBET00gQVBJCisKKyNpZiBVU0UoSlNDKQor
ICAgICAgICB2b2lkIG1hcmtFdmVudExpc3RlbmVycyhKU0M6Ok1hcmtTdGFjayYpOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVFdmVudExpc3RlbmVycygpOworI2VuZGlmCiAKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIHZpcnR1YWwgfkV2ZW50VGFyZ2V0KCk7CisgICAgICAgIAorICAgICAgICB2
aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgPSAwOworICAgICAgICB2
aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkgPSAwOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpID0gMDsKICAgICB9OwogCi0g
ICAgdm9pZCBmb3JiaWRFdmVudERpc3BhdGNoKCk7Ci0gICAgdm9pZCBhbGxvd0V2ZW50RGlzcGF0
Y2goKTsKKyAgICAjZGVmaW5lIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYXR0cmli
dXRlKSBcCisgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uIyNhdHRyaWJ1dGUoKSB7IHJldHVybiBn
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5hdHRyaWJ1dGUjI0V2ZW50KTsg
fSBcCisgICAgICAgIHZvaWQgc2V0T24jI2F0dHJpYnV0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmF0
dHJpYnV0ZSMjRXZlbnQsIGxpc3RlbmVyKTsgfSBcCisKKyAgICAjZGVmaW5lIERFRklORV9WSVJU
VUFMX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhdHRyaWJ1dGUpIFwKKyAgICAgICAgdmlydHVh
bCBFdmVudExpc3RlbmVyKiBvbiMjYXR0cmlidXRlKCkgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYXR0cmlidXRlIyNFdmVudCk7IH0gXAorICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0T24jI2F0dHJpYnV0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmF0dHJpYnV0
ZSMjRXZlbnQsIGxpc3RlbmVyKTsgfSBcCisKKyAgICAjZGVmaW5lIERFRklORV9XSU5ET1dfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKGF0dHJpYnV0ZSkgXAorICAgICAgICBFdmVudExpc3RlbmVy
KiBvbiMjYXR0cmlidXRlKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+Z2V0V2luZG93QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYXR0cmlidXRlIyNFdmVudCk7IH0gXAorICAgICAg
ICB2b2lkIHNldE9uIyNhdHRyaWJ1dGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
cikgeyBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5hdHRyaWJ1dGUjI0V2ZW50LCBsaXN0ZW5lcik7IH0gXAorCisgICAgI2RlZmluZSBERUZJ
TkVfTUFQUEVEX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhdHRyaWJ1dGUsIGV2ZW50TmFtZSkg
XAorICAgICAgICBFdmVudExpc3RlbmVyKiBvbiMjYXR0cmlidXRlKCkgeyByZXR1cm4gZ2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXZlbnROYW1lIyNFdmVudCk7IH0gXAor
ICAgICAgICB2b2lkIHNldE9uIyNhdHRyaWJ1dGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ldmVudE5h
bWUjI0V2ZW50LCBsaXN0ZW5lcik7IH0gXAogCiAjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZm9y
YmlkRXZlbnREaXNwYXRjaCgpOworICAgIHZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCk7CiAgICAg
Ym9vbCBldmVudERpc3BhdGNoRm9yYmlkZGVuKCk7CiAjZWxzZQogICAgIGlubGluZSB2b2lkIGZv
cmJpZEV2ZW50RGlzcGF0Y2goKSB7IH0KICAgICBpbmxpbmUgdm9pZCBhbGxvd0V2ZW50RGlzcGF0
Y2goKSB7IH0KICNlbmRpZgogCi19CisjaWYgVVNFKEpTQykKKyAgICBpbmxpbmUgdm9pZCBFdmVu
dFRhcmdldDo6bWFya0V2ZW50TGlzdGVuZXJzKEpTQzo6TWFya1N0YWNrJiBtYXJrU3RhY2spCisg
ICAgeworICAgICAgICBFdmVudFRhcmdldERhdGEqIGQgPSBldmVudFRhcmdldERhdGEoKTsKKyAg
ICAgICAgaWYgKCFkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEV2ZW50TGlzdGVu
ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZW5kKCk7CisgICAgICAg
IGZvciAoRXZlbnRMaXN0ZW5lck1hcDo6aXRlcmF0b3IgaXQgPSBkLT5ldmVudExpc3RlbmVyTWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRXZlbnRMaXN0ZW5lclZl
Y3RvciYgZW50cnkgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBlbnRyeS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBlbnRyeVtpXS5saXN0ZW5l
ci0+bWFya0pTRnVuY3Rpb24obWFya1N0YWNrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlu
bGluZSB2b2lkIEV2ZW50VGFyZ2V0OjppbnZhbGlkYXRlRXZlbnRMaXN0ZW5lcnMoKQorICAgIHsK
KyAgICAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7CisgICAgICAg
IGlmICghZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkLT5ldmVudExpc3RlbmVy
TWFwLmNsZWFyKCk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgRXZlbnRUYXJnZXQ6OmlzRmly
aW5nRXZlbnRMaXN0ZW5lcnMoKQorICAgIHsKKyAgICAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0g
ZXZlbnRUYXJnZXREYXRhKCk7CisgICAgICAgIGlmICghZCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIGQtPmZpcmluZ0V2ZW50RW5kSXRlcmF0b3JzLnNpemUoKSAh
PSAwOworICAgIH0KKworICAgIGlubGluZSBib29sIEV2ZW50VGFyZ2V0OjpoYXNFdmVudExpc3Rl
bmVycygpCisgICAgeworICAgICAgICBFdmVudFRhcmdldERhdGEqIGQgPSBldmVudFRhcmdldERh
dGEoKTsKKyAgICAgICAgaWYgKCFkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gIWQtPmV2ZW50TGlzdGVuZXJNYXAuaXNFbXB0eSgpOworICAgIH0KKworICAgIGlu
bGluZSBib29sIEV2ZW50VGFyZ2V0OjpoYXNFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSkKKyAgICB7CisgICAgICAgIEV2ZW50VGFyZ2V0RGF0YSogZCA9IGV2ZW50
VGFyZ2V0RGF0YSgpOworICAgICAgICBpZiAoIWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBkLT5ldmVudExpc3RlbmVyTWFwLmNvbnRhaW5zKGV2ZW50VHlwZSk7
CisgICAgfQogCiAjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RXZlbnRUYXJnZXRfaApJbmRleDogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0ODY4NikKKysr
IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw4ICsx
NTQsNyBAQCB2b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoCiAKICAgICBl
bGVtZW50LT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwogCi0gICAg
Ly8gRmlyZSB0aGUgImlucHV0IiBET00gZXZlbnQKLSAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50
KGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgZWxlbWVudC0+ZGlz
cGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50LCB0cnVlLCBm
YWxzZSkpOwogICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoZWxlbWVudCk7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01l
c3NhZ2VFdmVudC5oCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlRXZlbnQp
OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgbGFzdEV2ZW50SWQsIFBhc3NSZWZQdHI8RE9NV2luZG93PiBzb3VyY2UsIFBhc3NPd25QdHI8
TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3Nh
Z2VFdmVudD4gY3JlYXRlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMsIGNvbnN0
IFN0cmluZyYgZGF0YSA9ICIiLCBjb25zdCBTdHJpbmcmIG9yaWdpbiA9ICIiLCBjb25zdCBTdHJp
bmcmIGxhc3RFdmVudElkID0gIiIsIFBhc3NSZWZQdHI8RE9NV2luZG93PiBzb3VyY2UgPSAwKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VFdmVudChk
YXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzKSk7CiAgICAgICAgIH0KSW5k
ZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTMgKzE2OSw3IEBAIHZvaWQgTWVzc2Fn
ZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMoKQogICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6
OkV2ZW50RGF0YT4gZXZlbnREYXRhOwogICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5uZWwgJiYg
bV9lbnRhbmdsZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShldmVudERhdGEpKSB7
CiAgICAgICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0cyA9IE1lc3NhZ2VQb3J0Ojpl
bnRhbmdsZVBvcnRzKCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50RGF0YS0+Y2hhbm5l
bHMoKSk7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUo
ZXZlbnREYXRhLT5tZXNzYWdlKCksICIiLCAiIiwgMCwgcG9ydHMucmVsZWFzZSgpKTsKLQotICAg
ICAgICBpZiAobV9vbk1lc3NhZ2VMaXN0ZW5lcikgewotICAgICAgICAgICAgZXZ0LT5zZXRUYXJn
ZXQodGhpcyk7Ci0gICAgICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAg
ICAgICAgICBtX29uTWVzc2FnZUxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZhbHNl
KTsKLSAgICAgICAgfQorICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6
Y3JlYXRlKHBvcnRzLnJlbGVhc2UoKSwgZXZlbnREYXRhLT5tZXNzYWdlKCkpOwogCiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNl
KCksIGVjKTsKQEAgLTE4Myw2MyArMTc3LDYgQEAgdm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hN
ZXNzYWdlcygpCiAgICAgfQogfQogCi12b2lkIE1lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9
PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yIGxpc3Rl
bmVyczsKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAg
bV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7Ci0gICAg
ICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVy
cy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRl
cikgewotICAgICAgICAgICAgaWYgKCoqbGlzdGVuZXJJdGVyID09ICpldmVudExpc3RlbmVyKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbGlz
dGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5h
ZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwotICAgIH0gICAgCi19Ci0KLXZvaWQgTWVzc2FnZVBv
cnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2
ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAg
ICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKLSAgICBm
b3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5l
cnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0
ZXIpIHsKLSAgICAgICAgaWYgKCoqbGlzdGVuZXJJdGVyID09ICpldmVudExpc3RlbmVyKSB7Ci0g
ICAgICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5iZWdp
bigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBN
ZXNzYWdlUG9ydDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFldmVudCB8fCBldmVudC0+dHlwZSgpLmlzRW1wdHko
KSkgewotICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpVTlNQRUNJRklFRF9FVkVOVF9UWVBF
X0VSUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIExpc3RlbmVyVmVj
dG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsK
LSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBs
aXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgp
OyArK2xpc3RlbmVySXRlcikgewotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAg
ICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbGlzdGVuZXJJdGVy
LT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwotfQotCi12b2lkIE1lc3NhZ2VQ
b3J0OjpzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQotewotICAgIG1fb25NZXNzYWdlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOwotICAgIHN0YXJ0
KCk7Ci19Ci0KIGJvb2wgTWVzc2FnZVBvcnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpCiB7CiAgICAg
Ly8gVGhlIHNwZWMgc2F5cyB0aGF0IGVudGFuZ2xlZCBtZXNzYWdlIHBvcnRzIHNob3VsZCBhbHdh
eXMgYmUgdHJlYXRlZCBhcyBpZiB0aGV5IGhhdmUgYSBzdHJvbmcgcmVmZXJlbmNlLgpAQCAtMjk0
LDQgKzIzMSwxNCBAQCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IE1lc3NhZ2VQb3J0CiAg
ICAgcmV0dXJuIHBvcnRBcnJheTsKIH0KIAorRXZlbnRUYXJnZXREYXRhKiBNZXNzYWdlUG9ydDo6
ZXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworfQor
CitFdmVudFRhcmdldERhdGEqIE1lc3NhZ2VQb3J0OjplbnN1cmVFdmVudFRhcmdldERhdGEoKQor
eworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vTWVzc2FnZVBvcnQuaAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2RvbS9N
ZXNzYWdlUG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiAKICNpbmNsdWRl
ICJBdG9taWNTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIk1l
c3NhZ2VQb3J0Q2hhbm5lbC5oIgotCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTg3LDIxICs4
NywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3Nh
Z2VzKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNl
Q2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJl
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4s
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwotICAgICAgICBFdmVu
dExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJz
OyB9Ci0KICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxNZXNzYWdlUG9ydD46OnJlZjsKICAgICAg
ICAgdXNpbmcgUmVmQ291bnRlZDxNZXNzYWdlUG9ydD46OmRlcmVmOwogCiAgICAgICAgIGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KCk7CiAKLSAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KKyAgICAgICAgdm9p
ZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikKKyAgICAg
ICAgeworICAgICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
bWVzc2FnZUV2ZW50LCBsaXN0ZW5lcik7CisgICAgICAgICAgICBzdGFydCgpOworICAgICAgICB9
CisgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgpIHsgcmV0dXJuIGdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCk7IH0KIAogICAgICAgICAv
LyBSZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gZW50YW5nbGVkIHBvcnQsIG9yIGlmIHRoZSBl
bnRhbmdsZWQgcG9ydCBpcyBydW4gYnkgYSBkaWZmZXJlbnQgdGhyZWFkLgogICAgICAgICAvLyBS
ZXR1cm5zIG51bGwgb3RoZXJ3aXNlLgpAQCAtMTE0LDE2ICsxMTAsMTUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7
IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0K
KyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAg
ICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiAK
ICAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gbV9lbnRhbmdsZWRDaGFubmVsOwog
CiAgICAgICAgIGJvb2wgbV9zdGFydGVkOwogCiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKLQotICAgICAgICBFdmVudExpc3RlbmVyc01hcCBt
X2V2ZW50TGlzdGVuZXJzOworICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERh
dGE7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20v
TWVzc2FnZVBvcnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0Lmlk
bAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAgbW9kdWxlIGV2ZW50cyB7CiAKICAgICBpbnRlcmZh
Y2UgWwogICAgICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCisgICAgICAgIEV2ZW50VGFyZ2V0LAog
ICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAogICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAg
IF0gTWVzc2FnZVBvcnQgewpJbmRleDogV2ViQ29yZS9kb20vTXV0YXRpb25FdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuaAkocmV2aXNpb24gNDg2ODYpCisr
KyBXZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0
MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTXV0YXRpb25FdmVudCk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TXV0YXRpb25FdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxOb2RlPiByZWxh
dGVkTm9kZSwKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcHJldlZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIGF0dHJOYW1lLCB1bnNpZ25lZCBzaG9ydCBhdHRy
Q2hhbmdlKQorCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uRXZlbnQ+IGNyZWF0
ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBQYXNzUmVmUHRyPE5v
ZGU+IHJlbGF0ZWROb2RlID0gMCwKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcHJldlZhbHVl
ID0gU3RyaW5nKCksIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUgPSBTdHJpbmcoKSwgY29uc3QgU3Ry
aW5nJiBhdHRyTmFtZSA9IFN0cmluZygpLCB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlID0gMCkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhdGlvbkV2ZW50
KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgcmVsYXRlZE5vZGUsIHByZXZWYWx1ZSwgbmV3
VmFsdWUsIGF0dHJOYW1lLCBhdHRyQ2hhbmdlKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE11dGF0aW9uRXZlbnQodHlwZSwgY2FuQnViYmxlLCBmYWxzZSwgcmVsYXRlZE5vZGUs
IHByZXZWYWx1ZSwgbmV3VmFsdWUsIGF0dHJOYW1lLCBhdHRyQ2hhbmdlKSk7CiAgICAgICAgIH0K
IAogICAgICAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxOb2RlPiByZWxh
dGVkTm9kZSwKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvZG9tL05vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzQyLDE2ICsyMzQyLDYgQEAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogTm9kZTo6c2NyaXB0RXhlYwogICAgIHJldHVybiBkb2N1bWVudCgpOwogfQogCi1jb25z
dCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciYgTm9kZTo6ZXZlbnRMaXN0ZW5lcnMoKSBj
b25zdAotewotICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7Ci0gICAgICAgIGlmIChSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzID0gcmFyZURhdGEoKS0+bGlzdGVuZXJzKCkp
Ci0gICAgICAgICAgICByZXR1cm4gKmxpc3RlbmVyczsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yKiBlbXB0eUxpc3RlbmVyc1ZlY3RvciA9IG5l
dyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvcjsKLSAgICByZXR1cm4gKmVtcHR5TGlzdGVu
ZXJzVmVjdG9yOwotfQotCiB2b2lkIE5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAg
ICBzZXRJbkRvY3VtZW50KHRydWUpOwpAQCAtMjM5OSw2OSArMjM4OSw0NSBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgdXBkYXRlU1ZHRWxlbWVudEluc3RhCiAjZW5kaWYKIH0KIAotdm9pZCBOb2RlOjph
ZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCitib29sIE5vZGU6OmFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKKyAgICBpZiAoIUV2
ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1
cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50
ID0gdGhpcy0+ZG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnQtPmFkZExpc3RlbmVyVHlwZUlm
TmVlZGVkKGV2ZW50VHlwZSk7Ci0KLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciYg
bGlzdGVuZXJzID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTGlzdGVuZXJzKCk7Ci0KLSAgICAv
LyBSZW1vdmUgZXhpc3RpbmcgaWRlbnRpY2FsIGxpc3RlbmVyIHNldCB3aXRoIGlkZW50aWNhbCBh
cmd1bWVudHMuCi0gICAgLy8gVGhlIERPTTIgc3BlYyBzYXlzIHRoYXQgImR1cGxpY2F0ZSBpbnN0
YW5jZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhpcyBjYXNlLgotICAgIHJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7Ci0KLSAgICBsaXN0ZW5l
cnMuYXBwZW5kKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpjcmVhdGUoZXZlbnRUeXBlLCBsaXN0
ZW5lciwgdXNlQ2FwdHVyZSkpOwogICAgIHVwZGF0ZVNWR0VsZW1lbnRJbnN0YW5jZXNBZnRlckV2
ZW50TGlzdGVuZXJDaGFuZ2UodGhpcyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTm9k
ZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK2Jvb2wgTm9kZTo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBpZiAoIWhhc1JhcmVEYXRhKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yKiBs
aXN0ZW5lcnMgPSByYXJlRGF0YSgpLT5saXN0ZW5lcnMoKTsKLSAgICBpZiAoIWxpc3RlbmVycykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IHNpemUgPSBsaXN0ZW5lcnMtPnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciYgciA9ICpsaXN0ZW5lcnMtPmF0KGkpOwotICAgICAgICBpZiAoci5l
dmVudFR5cGUoKSA9PSBldmVudFR5cGUgJiYgci51c2VDYXB0dXJlKCkgPT0gdXNlQ2FwdHVyZSAm
JiAqci5saXN0ZW5lcigpID09ICpsaXN0ZW5lcikgewotICAgICAgICAgICAgci5zZXRSZW1vdmVk
KHRydWUpOwotICAgICAgICAgICAgbGlzdGVuZXJzLT5yZW1vdmUoaSk7CisgICAgaWYgKCFFdmVu
dFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0
dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICB1cGRhdGVTVkdFbGVt
ZW50SW5zdGFuY2VzQWZ0ZXJFdmVudExpc3RlbmVyQ2hhbmdlKHRoaXMpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIHVwZGF0ZVNWR0VsZW1lbnRJbnN0YW5jZXNB
ZnRlckV2ZW50TGlzdGVuZXJDaGFuZ2UodGhpcyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgTm9kZTo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNTbG93Q2FzZSgpCitFdmVudFRhcmdldERh
dGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkp
OwotCi0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVycyA9IHJhcmVE
YXRhKCktPmxpc3RlbmVycygpOwotICAgIGlmICghbGlzdGVuZXJzKQotICAgICAgICByZXR1cm47
CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5ldmVudFRhcmdldERhdGEo
KSA6IDA7Cit9CiAKLSAgICBzaXplX3Qgc2l6ZSA9IGxpc3RlbmVycy0+c2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBsaXN0ZW5lcnMtPmF0KGkp
LT5zZXRSZW1vdmVkKHRydWUpOwotICAgIGxpc3RlbmVycy0+Y2xlYXIoKTsKK0V2ZW50VGFyZ2V0
RGF0YSogTm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gZW5zdXJl
UmFyZURhdGEoKS0+ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiB9CiAKLXZvaWQgTm9kZTo6aGFu
ZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50LCBib29sIHVzZUNhcHR1cmUpCit2b2lkIE5vZGU6
OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiBldmVudCkKIHsKKyAgICBpZiAoIWhhc1JhcmVEYXRh
KCkgfHwgIXJhcmVEYXRhKCktPmV2ZW50VGFyZ2V0RGF0YSgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBpZiAoZGlzYWJsZWQoKSAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkg
PSBldmVudExpc3RlbmVycygpOwotICAgIHNpemVfdCBzaXplID0gbGlzdGVuZXJzQ29weS5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgY29u
c3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHIgPSAqbGlzdGVuZXJzQ29weVtpXTsKLSAgICAg
ICAgaWYgKHIuZXZlbnRUeXBlKCkgPT0gZXZlbnQtPnR5cGUoKSAmJiByLnVzZUNhcHR1cmUoKSA9
PSB1c2VDYXB0dXJlICYmICFyLnJlbW92ZWQoKSkKLSAgICAgICAgICAgIHIubGlzdGVuZXIoKS0+
aGFuZGxlRXZlbnQoZXZlbnQsIGZhbHNlKTsKLSAgICB9CisgICAgZmlyZUV2ZW50TGlzdGVuZXJz
KGV2ZW50KTsKIH0KIAogI2lmIEVOQUJMRShTVkcpCkBAIC0yNTAyLDE5ICsyNDY4LDE1IEBAIHN0
YXRpYyBpbmxpbmUgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmUKICAgICByZXR1cm4gcmVmZXJl
bmNlTm9kZTsKIH0KIAotYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IHBycEV2ZW50KQogewotICAgIFJlZlB0cjxFdmVudD4gZXZ0KGUpOwotICAgIEFT
U0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBpZiAoIWV2dCB8fCBldnQtPnR5
cGUoKS5pc0VtcHR5KCkpIHsgCi0gICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lG
SUVEX0VWRU5UX1RZUEVfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIFJl
ZlB0cjxFdmVudFRhcmdldD4gcHJvdGVjdCA9IHRoaXM7CisgICAgUmVmUHRyPEV2ZW50PiBldmVu
dCA9IHBycEV2ZW50OwogCi0gICAgZXZ0LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5n
U1ZHVGFyZ2V0UnVsZXModGhpcykpOworICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXModGhpcykpOwogCiAgICAgUmVmUHRyPEZyYW1lVmlldz4g
dmlldyA9IGRvY3VtZW50KCktPnZpZXcoKTsKLSAgICByZXR1cm4gZGlzcGF0Y2hHZW5lcmljRXZl
bnQoZXZ0LnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2ZW50
LnJlbGVhc2UoKSk7CiB9CiAKIGJvb2wgTm9kZTo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gcHJwRXZlbnQpCkBAIC0yNTY3LDI3ICsyNTI5LDIyIEBAIGJvb2wgTm9kZTo6
ZGlzcGF0Y2hHZW5lcmljRXZlbnQoUGFzc1JlZlAKIAogICAgIGlmICh0YXJnZXRGb3JXaW5kb3dF
dmVudHMpIHsKICAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGFyZ2V0Rm9yV2luZG93
RXZlbnRzKTsKLSAgICAgICAgdGFyZ2V0Rm9yV2luZG93RXZlbnRzLT5oYW5kbGVFdmVudChldmVu
dC5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHRhcmdldEZvcldpbmRvd0V2ZW50cy0+ZmlyZUV2ZW50
TGlzdGVuZXJzKGV2ZW50LmdldCgpKTsKICAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0
b3BwZWQoKSkKICAgICAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgIH0KICAgICBm
b3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUoKTsgaTsgLS1pKSB7CiAgICAgICAgIENvbnRh
aW5lck5vZGUqIGFuY2VzdG9yID0gYW5jZXN0b3JzW2kgLSAxXS5nZXQoKTsKICAgICAgICAgZXZl
bnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMo
YW5jZXN0b3IpKTsKLSAgICAgICAgYW5jZXN0b3ItPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50Lmdl
dCgpLCB0cnVlKTsKKyAgICAgICAgYW5jZXN0b3ItPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50Lmdl
dCgpKTsKICAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAg
ICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgIH0KIAogICAgIGV2ZW50LT5zZXRFdmVudFBo
YXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogCi0gICAgLy8gV2UgZG8gd2FudCBjYXB0dXJpbmcgZXZl
bnQgbGlzdGVuZXJzIHRvIGJlIGludm9rZWQgaGVyZSwgZXZlbiB0aG91Z2gKLSAgICAvLyB0aGF0
IHZpb2xhdGVzIHNvbWUgdmVyc2lvbnMgb2YgdGhlIERPTSBzcGVjaWZpY2F0aW9uOyBNb3ppbGxh
IGRvZXMgaXQuCiAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0
aW5nU1ZHVGFyZ2V0UnVsZXModGhpcykpOwotICAgIGhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50Lmdl
dCgpLCB0cnVlKTsKLSAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQotICAgICAg
ICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKLSAgICBoYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQo
KSwgZmFsc2UpOworICAgIGhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgpKTsKICAgICBpZiAo
ZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGlu
ZzsKIApAQCAtMjU5OSwxMyArMjU1NiwxMyBAQCBib29sIE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2
ZW50KFBhc3NSZWZQCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CiAgICAgICAgICAgICBDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IGFuY2VzdG9yc1tpXS5nZXQo
KTsKICAgICAgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1NWR1RhcmdldFJ1bGVzKGFuY2VzdG9yKSk7Ci0gICAgICAgICAgICBhbmNlc3Rvci0+aGFu
ZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgICAgIGFuY2VzdG9y
LT5oYW5kbGVMb2NhbEV2ZW50cyhldmVudC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKICAgICAgICAg
ICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICAgICAgfQogICAgICAgICBpZiAodGFy
Z2V0Rm9yV2luZG93RXZlbnRzKSB7CiAgICAgICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdl
dCh0YXJnZXRGb3JXaW5kb3dFdmVudHMpOwotICAgICAgICAgICAgdGFyZ2V0Rm9yV2luZG93RXZl
bnRzLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgICAgICAgICAgdGFyZ2V0
Rm9yV2luZG93RXZlbnRzLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOwogICAgICAg
ICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBldmVudC0+Y2FuY2VsQnVi
YmxlKCkpCiAgICAgICAgICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAgICAgICAgIH0K
QEAgLTI2NjMsOCArMjYyMCw3IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRF
dmVudCgKICAgICBpZiAoIWRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9N
U1VCVFJFRU1PRElGSUVEX0xJU1RFTkVSKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5E
T01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgdHJ1ZSwgMCwgU3RyaW5nKCksIFN0cmluZygpLCBlYyk7
IAorICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5E
T01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgdHJ1ZSkpOwogfQogCiB2b2lkIE5vZGU6OmRpc3BhdGNo
VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGRldGFpbCwgUGFzc1Jl
ZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KQpAQCAtMjY3NCwxOCArMjYzMCwxNSBAQCB2b2lk
IE5vZGU6OmRpc3BhdGNoVUlFdmVudChjb25zdCBBdG9taWNTCiAgICAgCiAgICAgYm9vbCBjYW5j
ZWxhYmxlID0gZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50OwogICAg
IAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxVSUV2ZW50PiBldnQgPSBV
SUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCBjYW5jZWxhYmxlLCBkb2N1bWVudCgpLT5k
ZWZhdWx0VmlldygpLCBkZXRhaWwpOwotICAgIGV2dC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVy
bHlpbmdFdmVudCk7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7CisgICAg
UmVmUHRyPFVJRXZlbnQ+IGV2ZW50ID0gVUlFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwg
Y2FuY2VsYWJsZSwgZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgZGV0YWlsKTsKKyAgICBldmVu
dC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudCk7CisgICAgZGlzcGF0Y2hFdmVu
dChldmVudC5yZWxlYXNlKCkpOwogfQogCiBib29sIE5vZGU6OmRpc3BhdGNoS2V5RXZlbnQoY29u
c3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBrZXkpCiB7Ci0gICAgQVNTRVJUKCFldmVudERpc3Bh
dGNoRm9yYmlkZGVuKCkpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxL
ZXlib2FyZEV2ZW50PiBrZXlib2FyZEV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleSwg
ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7Ci0gICAgYm9vbCByID0gZGlzcGF0Y2hFdmVudChr
ZXlib2FyZEV2ZW50LCBlYyk7CisgICAgYm9vbCByID0gZGlzcGF0Y2hFdmVudChrZXlib2FyZEV2
ZW50KTsKICAgICAKICAgICAvLyB3ZSB3YW50IHRvIHJldHVybiBmYWxzZSBpZiBkZWZhdWx0IGlz
IHByZXZlbnRlZCAoYWxyZWFkeSB0YWtlbiBjYXJlIG9mKQogICAgIC8vIG9yIGlmIHRoZSBlbGVt
ZW50IGlzIGRlZmF1bHQtaGFuZGxlZCBieSB0aGUgRE9NLiBPdGhlcndpc2Ugd2UgbGV0IGl0IGp1
c3QKQEAgLTI3NzksOCArMjczMiw2IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNv
bnN0IEF0b20KICAgICAKICAgICBib29sIGNhbmNlbGFibGUgPSBldmVudFR5cGUgIT0gZXZlbnRO
YW1lcygpLm1vdXNlbW92ZUV2ZW50OwogICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIAogICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZmFsc2U7CiAgICAgCiAgICAgLy8gQXR0ZW1w
dGluZyB0byBkaXNwYXRjaCB3aXRoIGEgbm9uLUV2ZW50VGFyZ2V0IHJlbGF0ZWRUYXJnZXQgY2F1
c2VzIHRoZSByZWxhdGVkVGFyZ2V0IHRvIGJlIHNpbGVudGx5IGlnbm9yZWQuCkBAIC0yODA1LDcg
KzI3NTYsNyBAQCBib29sIE5vZGU6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9tCiAgICAg
bW91c2VFdmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudC5nZXQoKSk7CiAg
ICAgbW91c2VFdmVudC0+c2V0QWJzb2x1dGVMb2NhdGlvbihJbnRQb2ludChwYWdlWCwgcGFnZVkp
KTsKICAgICAKLSAgICBkaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQsIGVjKTsKKyAgICBkaXNwYXRj
aEV2ZW50KG1vdXNlRXZlbnQpOwogICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBtb3VzZUV2ZW50
LT5kZWZhdWx0SGFuZGxlZCgpOwogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IG1vdXNlRXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICBpZiAoZGVmYXVsdEhhbmRsZWQgfHwgZGVmYXVs
dFByZXZlbnRlZCkKQEAgLTI4MjMsNyArMjc3NCw3IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hNb3Vz
ZUV2ZW50KGNvbnN0IEF0b20KICAgICAgICAgZG91YmxlQ2xpY2tFdmVudC0+c2V0VW5kZXJseWlu
Z0V2ZW50KHVuZGVybHlpbmdFdmVudC5nZXQoKSk7CiAgICAgICAgIGlmIChkZWZhdWx0SGFuZGxl
ZCkKICAgICAgICAgICAgIGRvdWJsZUNsaWNrRXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0g
ICAgICAgIGRpc3BhdGNoRXZlbnQoZG91YmxlQ2xpY2tFdmVudCwgZWMpOworICAgICAgICBkaXNw
YXRjaEV2ZW50KGRvdWJsZUNsaWNrRXZlbnQpOwogICAgICAgICBpZiAoZG91YmxlQ2xpY2tFdmVu
dC0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBkb3VibGVDbGlja0V2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCkpCiAgICAgICAgICAgICBzd2FsbG93RXZlbnQgPSB0cnVlOwogICAgIH0KQEAgLTI4NjAsOTgg
KzI4MTEsMTggQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFdoZWVsRXZlbnQoUGxhdGZvcm1XaAogCiAg
ICAgd2UtPnNldEFic29sdXRlTG9jYXRpb24oSW50UG9pbnQocG9zLngoKSwgcG9zLnkoKSkpOwog
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKCFkaXNwYXRjaEV2ZW50KHdlLnJl
bGVhc2UoKSwgZWMpKQorICAgIGlmICghZGlzcGF0Y2hFdmVudCh3ZS5yZWxlYXNlKCkpKQogICAg
ICAgICBlLmFjY2VwdCgpOwogfQogCi12b2lkIE5vZGU6OmRpc3BhdGNoV2ViS2l0QW5pbWF0aW9u
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIEFTU0VSVCghZXZlbnREaXNwYXRj
aEZvcmJpZGRlbigpKTsKLSAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNw
YXRjaEV2ZW50KFdlYktpdEFuaW1hdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBhbmltYXRp
b25OYW1lLCBlbGFwc2VkVGltZSksIGVjKTsKLX0KLQotdm9pZCBOb2RlOjpkaXNwYXRjaFdlYktp
dFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBBU1NFUlQoIWV2
ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgZGlzcGF0Y2hFdmVudChXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudFR5
cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNlZFRpbWUpLCBlYyk7Ci19Ci0KLXZvaWQgTm9kZTo6ZGlz
cGF0Y2hNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGNh
bkJ1YmJsZSwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkTm9kZSwgY29uc3QgU3RyaW5nJiBwcmV2
VmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLQotICAgIGRpc3BhdGNoRXZlbnQo
TXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgY2FuQnViYmxlLCBmYWxzZSwgcmVsYXRl
ZE5vZGUsIHByZXZWYWx1ZSwgbmV3VmFsdWUsIFN0cmluZygpLCAwKSwgZWMpOwotfQotCiB2b2lk
IE5vZGU6OmRpc3BhdGNoRm9jdXNFdmVudCgpCiB7Ci0gICAgZGlzcGF0Y2hFdmVudChldmVudE5h
bWVzKCkuZm9jdXNFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiB2
b2lkIE5vZGU6OmRpc3BhdGNoQmx1ckV2ZW50KCkKIHsKLSAgICBkaXNwYXRjaEV2ZW50KGV2ZW50
TmFtZXMoKS5ibHVyRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLWJvb2wgTm9kZTo6ZGlzcGF0
Y2hFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcs
IGJvb2wgY2FuY2VsYWJsZUFyZykKLXsKLSAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcmV0dXJuIGRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyks
IGVjKTsKLX0KLQotdm9pZCBOb2RlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nICZldmVudFR5cGUsIGJvb2wgbGVuZ3RoQ29tcHV0YWJsZUFyZywgdW5zaWduZWQgbG9h
ZGVkQXJnLCB1bnNpZ25lZCB0b3RhbEFyZykKLXsKLSAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hG
b3JiaWRkZW4oKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVu
dChQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBsZW5ndGhDb21wdXRhYmxlQXJnLCBs
b2FkZWRBcmcsIHRvdGFsQXJnKSwgZWMpOwotfQotCi12b2lkIE5vZGU6OmNsZWFyQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKLXsKLSAgICBpZiAo
IWhhc1JhcmVEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnMgPSByYXJlRGF0YSgpLT5saXN0ZW5lcnMoKTsKLSAgICBp
ZiAoIWxpc3RlbmVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IHNpemUgPSBsaXN0
ZW5lcnMtPnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgciA9ICpsaXN0ZW5lcnMtPmF0KGkpOwot
ICAgICAgICBpZiAoci5ldmVudFR5cGUoKSAhPSBldmVudFR5cGUgfHwgIXIubGlzdGVuZXIoKS0+
aXNBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHIuc2V0UmVt
b3ZlZCh0cnVlKTsKLSAgICAgICAgbGlzdGVuZXJzLT5yZW1vdmUoaSk7Ci0KLSAgICAgICAgdXBk
YXRlU1ZHRWxlbWVudEluc3RhbmNlc0FmdGVyRXZlbnRMaXN0ZW5lckNoYW5nZSh0aGlzKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBOb2RlOjpzZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyKQotewotICAgIGNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUpOwotICAgIGlmIChsaXN0ZW5lcikKLSAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIE5vZGU6OmdldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0
Ci17Ci0gICAgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9
IGV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBsaXN0ZW5lcnMuc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJiByID0gKmxpc3RlbmVyc1tpXTsKLSAgICAgICAgaWYgKHIu
ZXZlbnRUeXBlKCkgPT0gZXZlbnRUeXBlICYmIHIubGlzdGVuZXIoKS0+aXNBdHRyaWJ1dGUoKSkK
LSAgICAgICAgICAgIHJldHVybiByLmxpc3RlbmVyKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwor
ICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBm
YWxzZSwgZmFsc2UpKTsKIH0KIAogYm9vbCBOb2RlOjpkaXNhYmxlZCgpIGNvbnN0CkBAIC0yOTg0
LDM5NiArMjg1NSw2IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXYK
ICAgICB9CiB9CiAKLUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9uYWJvcnQoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbmFib3J0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5hYm9ydEV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogTm9k
ZTo6b25ibHVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuYmx1ckV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbmJsdXIoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJsdXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19
Ci0KLUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9uY2hhbmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpOwotfQot
Ci12b2lkIE5vZGU6OnNldE9uY2hhbmdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5j
aGFuZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9u
Y2xpY2soKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbmNsaWNrKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKLX0K
LQotRXZlbnRMaXN0ZW5lciogTm9kZTo6b25jb250ZXh0bWVudSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZl
bnQpOwotfQotCi12b2lkIE5vZGU6OnNldE9uY29udGV4dG1lbnUoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVu
dExpc3RlbmVyKiBOb2RlOjpvbmRibGNsaWNrKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCk7Ci19Ci0KLXZv
aWQgTm9kZTo6c2V0T25kYmxjbGljayhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZGJs
Y2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9u
ZXJyb3IoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbmVycm9yKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0K
LQotRXZlbnRMaXN0ZW5lciogTm9kZTo6b25mb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpOwotfQotCi12
b2lkIE5vZGU6OnNldE9uZm9jdXMoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmZvY3Vz
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbmlucHV0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuaW5wdXRFdmVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6c2V0T25pbnB1dChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuaW5wdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2
ZW50TGlzdGVuZXIqIE5vZGU6Om9uaW52YWxpZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCk7Ci19Ci0KLXZv
aWQgTm9kZTo6c2V0T25pbnZhbGlkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5pbnZh
bGlkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbmtl
eWRvd24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpOwotfQotCi12b2lkIE5vZGU6OnNldE9ua2V5ZG93bihQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50LCBldmVudExpc3RlbmVy
KTsKLX0KLQotRXZlbnRMaXN0ZW5lciogTm9kZTo6b25rZXlwcmVzcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQpOwotfQotCi12b2lkIE5vZGU6OnNldE9ua2V5cHJlc3MoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLmtleXByZXNzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3Rl
bmVyKiBOb2RlOjpvbmtleXVwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkua2V5dXBFdmVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6c2V0
T25rZXl1cChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAg
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkua2V5dXBFdmVudCwgZXZlbnRM
aXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9ubG9hZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVu
dCk7Ci19Ci0KLXZvaWQgTm9kZTo6c2V0T25sb2FkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2Rl
Ojpvbm1vdXNlZG93bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRP
bm1vdXNlZG93bihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0g
ICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbm1vdXNlbW92ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLm1vdXNlbW92ZUV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbm1vdXNlbW92ZShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbm1vdXNlb3V0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2VvdXRFdmVu
dCk7Ci19Ci0KLXZvaWQgTm9kZTo6c2V0T25tb3VzZW91dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkubW91c2VvdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVu
ZXIqIE5vZGU6Om9ubW91c2VvdmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpOwotfQotCi12b2lkIE5v
ZGU6OnNldE9ubW91c2VvdmVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW92
ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9ubW91
c2V1cCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLm1vdXNldXBFdmVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6c2V0T25tb3VzZXVwKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbm1vdXNld2hlZWwoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVs
RXZlbnQpOwotfQotCi12b2lkIE5vZGU6OnNldE9ubW91c2V3aGVlbChQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZl
bnRMaXN0ZW5lciogTm9kZTo6b25kcmFnZW50ZXIoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnZW50ZXJFdmVudCk7Ci19Ci0K
LXZvaWQgTm9kZTo6c2V0T25kcmFnZW50ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmRyYWdlbnRlckV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogTm9k
ZTo6b25kcmFnb3ZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmRyYWdvdmVyRXZlbnQpOwotfQotCi12b2lkIE5vZGU6OnNldE9u
ZHJhZ292ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAg
IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdvdmVyRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbmRyYWdsZWF2ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmRyYWdsZWF2ZUV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbmRyYWdsZWF2ZShQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwot
fQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbmRyb3AoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcm9wRXZlbnQpOwotfQotCi12
b2lkIE5vZGU6OnNldE9uZHJvcChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJvcEV2
ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogTm9kZTo6b25kcmFnc3Rh
cnQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5kcmFnc3RhcnRFdmVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6c2V0T25kcmFnc3RhcnQo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdzdGFydEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogTm9kZTo6b25kcmFnKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ0V2ZW50KTsK
LX0KLQotdm9pZCBOb2RlOjpzZXRPbmRyYWcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmRyYWdFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9u
ZHJhZ2VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmRyYWdlbmRFdmVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6c2V0T25kcmFnZW5k
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbnNjcm9sbCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50
KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbnNjcm9sbChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuc2Nyb2xsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBO
b2RlOjpvbnNlbGVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbnNl
bGVjdChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbnN1Ym1pdCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Ym1pdEV2
ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbnN1Ym1pdChQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuc3VibWl0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVy
KiBOb2RlOjpvbmJlZm9yZWN1dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50KTsKLX0KLQotdm9pZCBOb2Rl
OjpzZXRPbmJlZm9yZWN1dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
Ci17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVmb3JlY3V0
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbmN1dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmN1dEV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbmN1dChQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3Rl
bmVyKiBOb2RlOjpvbmJlZm9yZWNvcHkoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5RXZlbnQpOwotfQotCi12b2lk
IE5vZGU6OnNldE9uYmVmb3JlY29weShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVm
b3JlY29weUV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogTm9kZTo6
b25jb3B5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuY29weUV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbmNvcHkoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvcHlFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0K
LUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9uYmVmb3JlcGFzdGUoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVwYXN0ZUV2ZW50
KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbmJlZm9yZXBhc3RlKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5iZWZvcmVwYXN0ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRM
aXN0ZW5lciogTm9kZTo6b25wYXN0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQpOwotfQotCi12b2lkIE5vZGU6
OnNldE9ucGFzdGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewot
ICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb2RlOjpvbnJlc2V0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVz
ZXRFdmVudCk7Ci19Ci0KLXZvaWQgTm9kZTo6c2V0T25yZXNldChQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkucmVzZXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVu
ZXIqIE5vZGU6Om9uc2VhcmNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQpOwotfQotCi12b2lkIE5vZGU6OnNl
dE9uc2VhcmNoKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAg
ICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVudCwgZXZl
bnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIE5vZGU6Om9uc2VsZWN0c3RhcnQoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5zZWxlY3RzdGFydEV2ZW50KTsKLX0KLQotdm9pZCBOb2RlOjpzZXRPbnNlbGVjdHN0YXJ0KFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwpJbmRl
eDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAko
cmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxMiwxOSArNTEyLDE5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCi0gICAgLy8gVXNlZCBm
b3Igc3RhbmRhcmQgRE9NIGFkZEV2ZW50TGlzdGVuZXIgLyByZW1vdmVFdmVudExpc3RlbmVyIEFQ
SXMuCi0gICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwotCi0gICAgLy8g
VXNlZCBmb3IgbGVnYWN5ICJvbkV2ZW50IiBwcm9wZXJ0eSBBUElzLgotICAgIHZvaWQgc2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgdm9pZCBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwotICAgIEV2ZW50TGlzdGVuZXIqIGdl
dEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUp
OworICAgIHZpcnR1YWwgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKIAotICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKKyAgICAvLyBIYW5kbGVycyB0byBk
by91bmRvIGFjdGlvbnMgb24gdGhlIHRhcmdldCBub2RlIGJlZm9yZSBhbiBldmVudCBpcyBkaXNw
YXRjaGVkIHRvIGl0IGFuZCBhZnRlciB0aGUgZXZlbnQKKyAgICAvLyBoYXMgYmVlbiBkaXNwYXRj
aGVkLiAgVGhlIGRhdGEgcG9pbnRlciBpcyBoYW5kZWQgYmFjayBieSB0aGUgcHJlRGlzcGF0Y2gg
YW5kIHBhc3NlZCB0byBwb3N0RGlzcGF0Y2guCisgICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlcihFdmVudCopIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50Kiwgdm9pZCogLypkYXRhRnJvbVByZURpc3BhdGNo
Ki8pIHsgfQogCi0gICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIHsgaWYgKGhhc1Jh
cmVEYXRhKCkpIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzU2xvd0Nhc2UoKTsgfQorICAgIHVzaW5n
IEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKworICAgIGJvb2wgZGlzcGF0Y2hHZW5lcmljRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhF
dmVudCopOwogCiAgICAgdm9pZCBkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CiAgICAg
dm9pZCBkaXNwYXRjaFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGludCBk
ZXRhaWwsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCk7CkBAIC01MzgsMTQgKzUz
OCw2IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCwgTm9kZSogcmVsYXRlZFRh
cmdldCwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KTsKICAgICB2b2lkIGRpc3Bh
dGNoU2ltdWxhdGVkTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50KTsKICAgICB2b2lkIGRpc3BhdGNoU2ltdWxh
dGVkQ2xpY2soUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3Vz
ZUV2ZW50cyA9IGZhbHNlLCBib29sIHNob3dQcmVzc2VkTG9vayA9IHRydWUpOwotICAgIHZvaWQg
ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29s
IGxlbmd0aENvbXB1dGFibGVBcmcsIHVuc2lnbmVkIGxvYWRlZEFyZywgdW5zaWduZWQgdG90YWxB
cmcpOwotICAgIHZvaWQgZGlzcGF0Y2hXZWJLaXRBbmltYXRpb25FdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgZWxh
cHNlZFRpbWUpOwotICAgIHZvaWQgZGlzcGF0Y2hXZWJLaXRUcmFuc2l0aW9uRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3Vi
bGUgZWxhcHNlZFRpbWUpOwotICAgIHZvaWQgZGlzcGF0Y2hNdXRhdGlvbkV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRl
ZE5vZGUsIGNvbnN0IFN0cmluZyYgcHJldlZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICBib29sIGRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+KTsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCos
IGJvb2wgdXNlQ2FwdHVyZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CkBAIC01NjEsOTUgKzU1
Myw1MCBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29u
c3Q7CiAKLSAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciYgZXZlbnRMaXN0
ZW5lcnMoKSBjb25zdDsKLQotICAgIC8vIFRoZXNlIDQgYXR0cmlidXRlIGV2ZW50IGhhbmRsZXIg
YXR0cmlidXRlcyBhcmUgb3ZlcnJpZGVkIGJ5IEhUTUxCb2R5RWxlbWVudAotICAgIC8vIGFuZCBI
VE1MRnJhbWVTZXRFbGVtZW50IHRvIGZvcndhcmQgdG8gdGhlIERPTVdpbmRvdy4KLSAgICB2aXJ0
dWFsIEV2ZW50TGlzdGVuZXIqIG9uYmx1cigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRP
bmJsdXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgdmlydHVhbCBFdmVudExpc3Rl
bmVyKiBvbmVycm9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9uZXJyb3IoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgdmlydHVhbCBFdmVudExpc3RlbmVyKiBvbmZvY3Vz
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9uZm9jdXMoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPik7Ci0gICAgdmlydHVhbCBFdmVudExpc3RlbmVyKiBvbmxvYWQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0T25sb2FkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotCi0g
ICAgRXZlbnRMaXN0ZW5lciogb25hYm9ydCgpIGNvbnN0OwotICAgIHZvaWQgc2V0T25hYm9ydChQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3RlbmVyKiBvbmNoYW5nZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0T25jaGFuZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7
Ci0gICAgRXZlbnRMaXN0ZW5lciogb25jbGljaygpIGNvbnN0OwotICAgIHZvaWQgc2V0T25jbGlj
ayhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3RlbmVyKiBvbmNvbnRl
eHRtZW51KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbmNvbnRleHRtZW51KFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9uZGJsY2xpY2soKSBjb25zdDsKLSAg
ICB2b2lkIHNldE9uZGJsY2xpY2soUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZl
bnRMaXN0ZW5lciogb25kcmFnZW50ZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldE9uZHJhZ2VudGVy
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9uZHJhZ292
ZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldE9uZHJhZ292ZXIoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciogb25kcmFnbGVhdmUoKSBjb25zdDsKLSAgICB2b2lk
IHNldE9uZHJhZ2xlYXZlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlz
dGVuZXIqIG9uZHJvcCgpIGNvbnN0OwotICAgIHZvaWQgc2V0T25kcm9wKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9uZHJhZ3N0YXJ0KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRPbmRyYWdzdGFydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBF
dmVudExpc3RlbmVyKiBvbmRyYWcoKSBjb25zdDsKLSAgICB2b2lkIHNldE9uZHJhZyhQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3RlbmVyKiBvbmRyYWdlbmQoKSBjb25z
dDsKLSAgICB2b2lkIHNldE9uZHJhZ2VuZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAg
ICBFdmVudExpc3RlbmVyKiBvbmlucHV0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbmlucHV0KFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9uaW52YWxpZCgp
IGNvbnN0OwotICAgIHZvaWQgc2V0T25pbnZhbGlkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4p
OwotICAgIEV2ZW50TGlzdGVuZXIqIG9ua2V5ZG93bigpIGNvbnN0OwotICAgIHZvaWQgc2V0T25r
ZXlkb3duKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9u
a2V5cHJlc3MoKSBjb25zdDsKLSAgICB2b2lkIHNldE9ua2V5cHJlc3MoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciogb25rZXl1cCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0T25rZXl1cChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3Rl
bmVyKiBvbm1vdXNlZG93bigpIGNvbnN0OwotICAgIHZvaWQgc2V0T25tb3VzZWRvd24oUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciogb25tb3VzZW1vdmUoKSBj
b25zdDsKLSAgICB2b2lkIHNldE9ubW91c2Vtb3ZlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4p
OwotICAgIEV2ZW50TGlzdGVuZXIqIG9ubW91c2VvdXQoKSBjb25zdDsKLSAgICB2b2lkIHNldE9u
bW91c2VvdXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciog
b25tb3VzZW92ZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldE9ubW91c2VvdmVyKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9ubW91c2V1cCgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0T25tb3VzZXVwKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2
ZW50TGlzdGVuZXIqIG9ubW91c2V3aGVlbCgpIGNvbnN0OwotICAgIHZvaWQgc2V0T25tb3VzZXdo
ZWVsKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9uc2Ny
b2xsKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbnNjcm9sbChQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+KTsKLSAgICBFdmVudExpc3RlbmVyKiBvbnNlbGVjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0
T25zZWxlY3QoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciog
b25zdWJtaXQoKSBjb25zdDsKLSAgICB2b2lkIHNldE9uc3VibWl0KFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4pOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOwor
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY2hhbmdlKTsKKyAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNsaWNrKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKGNvbnRleHRtZW51KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKGRibGNsaWNrKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGRy
YWdlbnRlcik7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihkcmFnb3Zlcik7
CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihkcmFnbGVhdmUpOworICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZHJvcCk7CisgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihkcmFnc3RhcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoZHJhZyk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihkcmFn
ZW5kKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGlucHV0KTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGludmFsaWQpOworICAgIERFRklORV9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoa2V5ZG93bik7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihrZXlwcmVzcyk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihrZXl1cCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtb3VzZWRvd24p
OworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobW91c2Vtb3ZlKTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG1vdXNlb3V0KTsKKyAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKG1vdXNlb3Zlcik7CisgICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihtb3VzZXVwKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKG1vdXNld2hlZWwpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2Ny
b2xsKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdCk7CisgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWJtaXQpOwogCiAgICAgLy8gV2ViS2l0
IGV4dGVuc2lvbnMKLSAgICBFdmVudExpc3RlbmVyKiBvbmJlZm9yZWN1dCgpIGNvbnN0OwotICAg
IHZvaWQgc2V0T25iZWZvcmVjdXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZl
bnRMaXN0ZW5lciogb25jdXQoKSBjb25zdDsKLSAgICB2b2lkIHNldE9uY3V0KFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9uYmVmb3JlY29weSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0T25iZWZvcmVjb3B5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwot
ICAgIEV2ZW50TGlzdGVuZXIqIG9uY29weSgpIGNvbnN0OwotICAgIHZvaWQgc2V0T25jb3B5KFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9uYmVmb3JlcGFz
dGUoKSBjb25zdDsKLSAgICB2b2lkIHNldE9uYmVmb3JlcGFzdGUoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciogb25wYXN0ZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0T25wYXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3RlbmVy
KiBvbnJlc2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbnJlc2V0KFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIG9uc2VhcmNoKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRPbnNlYXJjaChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3Rl
bmVyKiBvbnNlbGVjdHN0YXJ0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbnNlbGVjdHN0YXJ0KFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoYmVmb3JlY3V0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGN1
dCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihiZWZvcmVjb3B5KTsKKyAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvcHkpOworICAgIERFRklORV9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoYmVmb3JlcGFzdGUpOworICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIocGFzdGUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIocmVzZXQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2VhcmNoKTsK
KyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdHN0YXJ0KTsKIAogICAg
IHVzaW5nIFRyZWVTaGFyZWQ8Tm9kZT46OnJlZjsKICAgICB1c2luZyBUcmVlU2hhcmVkPE5vZGU+
OjpkZXJlZjsKIAorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEo
KTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7
CisKIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGVFbGVtZW50WmVyb1JlZkNvdW50IGlzIGRlcHJl
Y2F0ZWQgYW5kIGNhbiBiZSByZW1vdmVkIG9uY2Ugd2UgY29udmVydCBhbGwgZWxlbWVudAogICAg
IC8vIGNsYXNzZXMgdG8gc3RhcnQgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgpJbmRleDog
V2ViQ29yZS9kb20vTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5pZGwJ
KHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9kb20vTm9kZS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBDdXN0b21NYXJrRnVuY3Rp
b24sCiAgICAgICAgIEN1c3RvbVB1c2hFdmVudEhhbmRsZXJTY29wZSwKICAgICAgICAgQ3VzdG9t
VG9KUywKKyAgICAgICAgRXZlbnRUYXJnZXQsCiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3Is
CiAgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAogICAgICAgICBJbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QsCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTIgKzkzLDEyIEBA
IHB1YmxpYzogICAgCiAgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaW5kZXgp
IHsgbV90YWJJbmRleCA9IGluZGV4OyBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseSA9IHRydWU7
IH0KICAgICBib29sIHRhYkluZGV4U2V0RXhwbGljaXRseSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFi
SW5kZXhXYXNTZXRFeHBsaWNpdGx5OyB9CiAKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZl
Y3RvciogbGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVycy5nZXQoKTsgfQotICAg
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yJiBlbnN1cmVMaXN0ZW5lcnMoKQorICAgIEV2
ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gbV9ldmVudFRhcmdldERh
dGEuZ2V0KCk7IH0KKyAgICBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgp
CiAgICAgewotICAgICAgICBpZiAoIW1fZXZlbnRMaXN0ZW5lcnMpCi0gICAgICAgICAgICBtX2V2
ZW50TGlzdGVuZXJzLnNldChuZXcgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3IpOwotICAg
ICAgICByZXR1cm4gKm1fZXZlbnRMaXN0ZW5lcnM7CisgICAgICAgIGlmICghbV9ldmVudFRhcmdl
dERhdGEpCisgICAgICAgICAgICBtX2V2ZW50VGFyZ2V0RGF0YS5zZXQobmV3IEV2ZW50VGFyZ2V0
RGF0YSk7CisgICAgICAgIHJldHVybiBtX2V2ZW50VGFyZ2V0RGF0YS5nZXQoKTsKICAgICB9CiAK
ICAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb2N1c2VkOyB9CkBAIC0x
MTEsNyArMTExLDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIE93blB0cjxOb2RlTGlz
dHNOb2RlRGF0YT4gbV9ub2RlTGlzdHM7Ci0gICAgT3duUHRyPFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyVmVjdG9yID4gbV9ldmVudExpc3RlbmVyczsKKyAgICBPd25QdHI8RXZlbnRUYXJnZXREYXRh
PiBtX2V2ZW50VGFyZ2V0RGF0YTsKICAgICBzaG9ydCBtX3RhYkluZGV4OwogICAgIGJvb2wgbV90
YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgOiAxOwogICAgIGJvb2wgbV9pc0ZvY3VzZWQgOiAxOwpJ
bmRleDogV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gNDg2
ODYpCisrKyBXZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEyICsyNyw0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXI6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29s
IHVzZUNhcHR1cmUpCi0gICAgOiBtX2V2ZW50VHlwZShldmVudFR5cGUpCi0gICAgLCBtX2xpc3Rl
bmVyKGxpc3RlbmVyKQotICAgICwgbV91c2VDYXB0dXJlKHVzZUNhcHR1cmUpCi0gICAgLCBtX3Jl
bW92ZWQoZmFsc2UpCi17Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3Jl
L2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw0NyAr
MjksMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4g
ewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQorICAgIHN0cnVjdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciB7CisgICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKKyAg
ICAgICAgICAgIDogbGlzdGVuZXIobGlzdGVuZXIpCisgICAgICAgICAgICAsIHVzZUNhcHR1cmUo
dXNlQ2FwdHVyZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBlOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyKCkgY29uc3QgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQotICAgICAgICBib29sIHVz
ZUNhcHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3VzZUNhcHR1cmU7IH0KLSAgICAgICAgCi0gICAg
ICAgIGJvb2wgcmVtb3ZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3ZlZDsgfQotICAgICAgICB2
b2lkIHNldFJlbW92ZWQoYm9vbCByZW1vdmVkKSB7IG1fcmVtb3ZlZCA9IHJlbW92ZWQ7IH0KLSAg
ICAKLSAgICBwcml2YXRlOgotICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1
c2VDYXB0dXJlKTsKLQotICAgICAgICBBdG9taWNTdHJpbmcgbV9ldmVudFR5cGU7Ci0gICAgICAg
IFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX2xpc3RlbmVyOwotICAgICAgICBib29sIG1fdXNlQ2Fw
dHVyZTsKLSAgICAgICAgYm9vbCBtX3JlbW92ZWQ7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lcjsKKyAgICAgICAgYm9vbCB1c2VDYXB0dXJlOwogICAgIH07Ci0KLSAgICB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+ID4gUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXJWZWN0b3I7Ci0KLSNpZiBVU0UoSlNDKQotICAgIGlubGluZSB2b2lkIG1h
cmtFdmVudExpc3RlbmVycyhKU0M6Ok1hcmtTdGFjayYgbWFya1N0YWNrLCBjb25zdCBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzKQotICAgIHsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsaXN0
ZW5lcnNbaV0tPmxpc3RlbmVyKCktPm1hcmtKU0Z1bmN0aW9uKG1hcmtTdGFjayk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIHZvaWQgaW52YWxpZGF0ZUV2ZW50TGlzdGVuZXJzKGNvbnN0IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMpCisgICAgCisgICAgaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYSwgY29uc3QgUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXImIGIpCiAgICAgewotICAgICAgICAvLyBGb3IgZWZmaWNpZW5jeSdz
IHNha2UsIHdlIGp1c3Qgc2V0IHRoZSAicmVtb3ZlZCIgYml0LCBpbnN0ZWFkIG9mCi0gICAgICAg
IC8vIGFjdHVhbGx5IHJlbW92aW5nIHRoZSBldmVudCBsaXN0ZW5lci4gVGhlIG5vZGUgdGhhdCBv
d25zIHRoZXNlCi0gICAgICAgIC8vIGxpc3RlbmVycyBpcyBhYm91dCB0byBiZSBkZWxldGVkLCBh
bnl3YXkuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJzLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgbGlzdGVuZXJzW2ldLT5zZXRSZW1vdmVkKHRydWUpOworICAgICAg
ICByZXR1cm4gKmEubGlzdGVuZXIgPT0gKmIubGlzdGVuZXIgJiYgYS51c2VDYXB0dXJlID09IGIu
dXNlQ2FwdHVyZTsKICAgICB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCklu
ZGV4OiBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEzIEBA
CiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJDU3RyaW5n
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KIAogI2lmIEVOQUJMRShTVkcpCkBAIC05Nyw3
ICs5OSw3IEBAIHZvaWQgQ2FjaGVkRnJhbWVCYXNlOjpyZXN0b3JlKCkKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9jaGlsZEZyYW1lcy5zaXplKCk7ICsraSkKICAgICAgICAgbV9jaGls
ZEZyYW1lc1tpXS0+b3BlbigpOwogCi0gICAgbV9kb2N1bWVudC0+ZGlzcGF0Y2hQYWdlVHJhbnNp
dGlvbkV2ZW50KEV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50LCB0cnVlKTsKKyAgICBtX2RvY3Vt
ZW50LT5kaXNwYXRjaFdpbmRvd0V2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShFdmVu
dE5hbWVzKCkucGFnZXNob3dFdmVudCwgdHJ1ZSksIG1fZG9jdW1lbnQpOwogfQogCiBDYWNoZWRG
cmFtZTo6Q2FjaGVkRnJhbWUoRnJhbWUqIGZyYW1lKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxC
b2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiwxMzYgKzMyNiw0IEBAIHZvaWQgSFRNTEJvZHlFbGVt
ZW50OjpkaWRNb3ZlVG9OZXdPd25lckQKICAgICBIVE1MRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3du
ZXJEb2N1bWVudCgpOwogfQogCi1FdmVudExpc3RlbmVyKiBIVE1MQm9keUVsZW1lbnQ6Om9uYmx1
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJsdXJFdmVudCk7Ci19Ci0KLXZvaWQgSFRNTEJvZHlF
bGVtZW50OjpzZXRPbmJsdXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQotewotICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLmJsdXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIq
IEhUTUxCb2R5RWxlbWVudDo6b25lcnJvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50
KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmVycm9yRXZl
bnQpOwotfQotCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0T25lcnJvcihQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+c2V0V2luZG93
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZXZlbnRMaXN0
ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIEhUTUxCb2R5RWxlbWVudDo6b25mb2N1cygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpOwotfQotCi12b2lkIEhUTUxCb2R5RWxlbWVu
dDo6c2V0T25mb2N1cyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17
Ci0gICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuZm9jdXNFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIEhU
TUxCb2R5RWxlbWVudDo6b25sb2FkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+
Z2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50KTsK
LX0KLQotdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldE9ubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBldmVudExpc3RlbmVyKTsK
LX0KLQotRXZlbnRMaXN0ZW5lciogSFRNTEJvZHlFbGVtZW50OjpvbmJlZm9yZXVubG9hZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50KTsKLX0KLQotdm9pZCBIVE1MQm9k
eUVsZW1lbnQ6OnNldE9uYmVmb3JldW5sb2FkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikKLXsKLSAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19
Ci0KLUV2ZW50TGlzdGVuZXIqIEhUTUxCb2R5RWxlbWVudDo6b25oYXNoY2hhbmdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Z2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuaGFzaGNoYW5nZUV2ZW50KTsKLX0KLQotdm9pZCBIVE1MQm9keUVsZW1l
bnQ6OnNldE9uaGFzaGNoYW5nZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuaGFzaGNoYW5nZUV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0gICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAotRXZlbnRMaXN0ZW5lciogSFRNTEJvZHlFbGVtZW50Ojpvbm1l
c3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5nZXRXaW5kb3dBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQpOwotfQotCi12b2lkIEhU
TUxCb2R5RWxlbWVudDo6c2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikKLXsKLSAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1F
dmVudExpc3RlbmVyKiBIVE1MQm9keUVsZW1lbnQ6Om9ub2ZmbGluZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLm9mZmxpbmVFdmVudCk7Ci19Ci0KLXZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRPbm9m
ZmxpbmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGRv
Y3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm9m
ZmxpbmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIEhUTUxCb2R5
RWxlbWVudDo6b25vbmxpbmUoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5nZXRX
aW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5vbmxpbmVFdmVudCk7Ci19
Ci0KLXZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRPbm9ubGluZShQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkub25saW5lRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwotfQotCi0jaWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKLUV2ZW50TGlzdGVuZXIqIEhU
TUxCb2R5RWxlbWVudDo6b25vcmllbnRhdGlvbmNoYW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
Lm9yaWVudGF0aW9uY2hhbmdlRXZlbnQpOwotfQotCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0
T25vcmllbnRhdGlvbmNoYW5nZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkub3JpZW50YXRpb25jaGFuZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0j
ZW5kaWYKLQotRXZlbnRMaXN0ZW5lciogSFRNTEJvZHlFbGVtZW50OjpvbnJlc2l6ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KTsKLX0KLQotdm9pZCBIVE1MQm9keUVsZW1lbnQ6
OnNldE9ucmVzaXplKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsK
LSAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5yZXNpemVFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIEhU
TUxCb2R5RWxlbWVudDo6b25zdG9yYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQo
KS0+Z2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3RvcmFnZUV2
ZW50KTsKLX0KLQotdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldE9uc3RvcmFnZShQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+c2V0V2lu
ZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBldmVu
dExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogSFRNTEJvZHlFbGVtZW50OjpvbnVubG9h
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KTsKLX0KLQotdm9pZCBIVE1MQm9k
eUVsZW1lbnQ6OnNldE9udW5sb2FkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikKLXsKLSAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgJKHJldmlzaW9uIDQ4Njg2
KQorKysgV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBACiAjZGVmaW5lIEhUTUxCb2R5RWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDQsMzUgKzQ1LDIzIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdkxpbmsoKSBjb25zdDsK
ICAgICB2b2lkIHNldFZMaW5rKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCBFdmVudExp
c3RlbmVyKiBvbmJsdXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T25ibHVyKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgIHZpcnR1YWwgRXZlbnRMaXN0ZW5lciogb25lcnJv
cigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4pOwotICAgIHZpcnR1YWwgRXZlbnRMaXN0ZW5lciogb25mb2N1cygpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzZXRPbmZvY3VzKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwot
ICAgIHZpcnR1YWwgRXZlbnRMaXN0ZW5lciogb25sb2FkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHNldE9ubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLQotICAgIEV2ZW50TGlz
dGVuZXIqIG9uYmVmb3JldW5sb2FkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbmJlZm9yZXVubG9h
ZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3RlbmVyKiBvbm1lc3Nh
Z2UoKSBjb25zdDsKLSAgICB2b2lkIHNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+KTsKLSAgICBFdmVudExpc3RlbmVyKiBvbmhhc2hjaGFuZ2UoKSBjb25zdDsKLSAgICB2b2lk
IHNldE9uaGFzaGNoYW5nZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExp
c3RlbmVyKiBvbm9mZmxpbmUoKSBjb25zdDsKLSAgICB2b2lkIHNldE9ub2ZmbGluZShQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3RlbmVyKiBvbm9ubGluZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0T25vbmxpbmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7CisgICAg
Ly8gRGVjbGFyZWQgdmlydHVhbCBpbiBOb2RlCisgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoYmx1cik7CisgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoZXJyb3IpOworICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKGZvY3VzKTsKKyAgICBERUZJTkVfV0lORE9XX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihs
b2FkKTsKKworICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGJlZm9y
ZXVubG9hZCk7CisgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobWVz
c2FnZSk7CisgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoaGFzaGNo
YW5nZSk7CisgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIob2ZmbGlu
ZSk7CisgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIob25saW5lKTsK
KyAgICBERUZJTkVfV0lORE9XX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihyZXNpemUpOworICAg
IERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHN0b3JhZ2UpOworICAgIERF
RklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHVubG9hZCk7CiAjaWYgRU5BQkxF
KE9SSUVOVEFUSU9OX0VWRU5UUykKLSAgICBFdmVudExpc3RlbmVyKiBvbm9yaWVudGF0aW9uY2hh
bmdlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbm9yaWVudGF0aW9uY2hhbmdlKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4pOworICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKG9yaWVudGF0aW9uY2hhbmdlKTsKICNlbmRpZgotICAgIEV2ZW50TGlzdGVuZXIqIG9ucmVz
aXplKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbnJlc2l6ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+KTsKLSAgICBFdmVudExpc3RlbmVyKiBvbnN0b3JhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNl
dE9uc3RvcmFnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICBFdmVudExpc3RlbmVy
KiBvbnVubG9hZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0T251bmxvYWQoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ4Njg2KQor
KysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVy
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0xODYs
NyArMTg3LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNvbgogCiB2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVu
dCgpCiB7Ci0gICAgZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIHRydWUs
IGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNo
YW5nZUV2ZW50LCB0cnVlLCBmYWxzZSkpOwogfQogCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmRpc2FibGVkKCkgY29uc3QKQEAgLTI4Miw3ICsyODMsNyBAQCBib29sIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0CiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNo
ZWNrVmFsaWRpdHkoKQogewogICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiAhaXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpKSB7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnROYW1lcygpLmlu
dmFsaWRFdmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50Ojpj
cmVhdGUoRXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MCwxNCArMTUwLDE0IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1v
dmVkRnJvbURvY3VtZW4KICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwog
fQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50
LCBib29sIHVzZUNhcHR1cmUpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQqIGV2ZW50KQogewogICAgIE5vZGUqIHRhcmdldE5vZGUgPSBldmVudC0+dGFyZ2V0
KCktPnRvTm9kZSgpOwotICAgIGlmICghdXNlQ2FwdHVyZSAmJiB0YXJnZXROb2RlICYmIHRhcmdl
dE5vZGUgIT0gdGhpcyAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VibWl0RXZl
bnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudCkpIHsKKyAgICBp
ZiAoZXZlbnQtPmV2ZW50UGhhc2UoKSAhPSBFdmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmIHRhcmdl
dE5vZGUgJiYgdGFyZ2V0Tm9kZSAhPSB0aGlzICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5zdWJtaXRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5yZXNldEV2
ZW50KSkgewogICAgICAgICBldmVudC0+c3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgSFRNTEVsZW1lbnQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCB1c2VD
YXB0dXJlKTsKKyAgICBIVE1MRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQpOwogfQog
CiB1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6Omxlbmd0aCgpIGNvbnN0CkBAIC0yOTYsNyArMjk2
LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQoRXZlbgogICAgIG1faW5z
dWJtaXQgPSB0cnVlOwogICAgIG1fZG9pbmdzdWJtaXQgPSBmYWxzZTsKIAotICAgIGlmIChkaXNw
YXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgdHJ1ZSwgdHJ1ZSkgJiYgIW1fZG9p
bmdzdWJtaXQpCisgICAgaWYgKGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuc3VibWl0RXZlbnQsIHRydWUsIHRydWUpKSAmJiAhbV9kb2luZ3N1Ym1pdCkKICAgICAgICAg
bV9kb2luZ3N1Ym1pdCA9IHRydWU7CiAKICAgICBtX2luc3VibWl0ID0gZmFsc2U7CkBAIC00MTYs
NyArNDE2LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlc2V0KCkKIAogICAgIC8vICMjIyBE
T00yIGxhYmVscyB0aGlzIGV2ZW50IGFzIG5vdCBjYW5jZWxhYmxlLCBob3dldmVyCiAgICAgLy8g
Y29tbW9uIGJyb3dzZXJzKCBzaWNrISApIGFsbG93IGl0IGJlIGNhbmNlbGxlZC4KLSAgICBpZiAo
ICFkaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50LCB0cnVlLCB0cnVlKSApIHsK
KyAgICBpZiAoIWRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVzZXRF
dmVudCwgdHJ1ZSwgdHJ1ZSkpKSB7CiAgICAgICAgIG1faW5yZXNldCA9IGZhbHNlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gNDg2
ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgCi0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiwgYm9vbCB1c2VDYXB0dXJlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqKTsKICAgICAgCiAgICAg
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZWxlbWVudHMoKTsKICAgICB2b2lkIGdldE5hbWVk
RWxlbWVudHMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFJlZlB0cjxOb2RlPiA+Jik7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0ODY4NikKKysr
IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM0LDEzNiArMjM0LDQgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpzZXRSb3dzKGNvbnN0
IAogICAgIHNldEF0dHJpYnV0ZShyb3dzQXR0ciwgdmFsdWUpOwogfQogCi1FdmVudExpc3RlbmVy
KiBIVE1MRnJhbWVTZXRFbGVtZW50OjpvbmJsdXIoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1
bWVudCgpLT5nZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ibHVy
RXZlbnQpOwotfQotCi12b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnNldE9uYmx1cihQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+c2V0
V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBldmVu
dExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogSFRNTEZyYW1lU2V0RWxlbWVudDo6b25l
cnJvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwotfQotCi12b2lkIEhUTUxG
cmFtZVNldEVsZW1lbnQ6OnNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKQotewotICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVu
dExpc3RlbmVyKiBIVE1MRnJhbWVTZXRFbGVtZW50OjpvbmZvY3VzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+Z2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuZm9jdXNFdmVudCk7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6c2V0T25m
b2N1cyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgZG9j
dW1lbnQoKS0+c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZm9j
dXNFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIEhUTUxGcmFtZVNl
dEVsZW1lbnQ6Om9uaGFzaGNoYW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkt
PmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmhhc2hjaGFuZ2VF
dmVudCk7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6c2V0T25oYXNoY2hhbmdlKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBkb2N1bWVudCgp
LT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5oYXNoY2hhbmdl
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfSAgIAotCi1FdmVudExpc3RlbmVyKiBIVE1MRnJhbWVT
ZXRFbGVtZW50OjpvbmxvYWQoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5nZXRX
aW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpOwotfQot
Ci12b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnNldE9ubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBldmVudExpc3RlbmVyKTsK
LX0KLQotRXZlbnRMaXN0ZW5lciogSFRNTEZyYW1lU2V0RWxlbWVudDo6b25iZWZvcmV1bmxvYWQo
KSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5nZXRXaW5kb3dBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCk7Ci19Ci0KLXZvaWQgSFRN
TEZyYW1lU2V0RWxlbWVudDo6c2V0T25iZWZvcmV1bmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogSFRNTEZyYW1lU2V0RWxlbWVudDo6b25tZXNzYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Z2V0V2luZG93QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50KTsKLX0KLQotdm9pZCBIVE1MRnJh
bWVTZXRFbGVtZW50OjpzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKQotewotICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2
ZW50TGlzdGVuZXIqIEhUTUxGcmFtZVNldEVsZW1lbnQ6Om9ub2ZmbGluZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGRvY3VtZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLm9mZmxpbmVFdmVudCk7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6
c2V0T25vZmZsaW5lKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsK
LSAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5vZmZsaW5lRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBI
VE1MRnJhbWVTZXRFbGVtZW50Ojpvbm9ubGluZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3Vt
ZW50KCktPmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm9ubGlu
ZUV2ZW50KTsKLX0KLQotdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpzZXRPbm9ubGluZShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgZG9jdW1lbnQoKS0+
c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkub25saW5lRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwotfQotCi0jaWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKLUV2
ZW50TGlzdGVuZXIqIEhUTUxGcmFtZVNldEVsZW1lbnQ6Om9ub3JpZW50YXRpb25jaGFuZ2UoKSBj
b25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5nZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5vcmllbnRhdGlvbmNoYW5nZUV2ZW50KTsKLX0KLQotdm9pZCBI
VE1MRnJhbWVTZXRFbGVtZW50OjpzZXRPbm9yaWVudGF0aW9uY2hhbmdlKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5vcmllbnRhdGlvbmNoYW5nZUV2ZW50
LCBldmVudExpc3RlbmVyKTsKLX0KLSNlbmRpZgotICAgIAotRXZlbnRMaXN0ZW5lciogSFRNTEZy
YW1lU2V0RWxlbWVudDo6b25yZXNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgp
LT5nZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVu
dCk7Ci19Ci0KLXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6c2V0T25yZXNpemUoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGRvY3VtZW50KCktPnNldFdp
bmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBldmVu
dExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogSFRNTEZyYW1lU2V0RWxlbWVudDo6b25z
dG9yYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Z2V0V2luZG93QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50KTsKLX0KLQotdm9pZCBI
VE1MRnJhbWVTZXRFbGVtZW50OjpzZXRPbnN0b3JhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKQotewotICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19
Ci0KLUV2ZW50TGlzdGVuZXIqIEhUTUxGcmFtZVNldEVsZW1lbnQ6Om9udW5sb2FkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Z2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpOwotfQotCi12b2lkIEhUTUxGcmFtZVNldEVsZW1l
bnQ6OnNldE9udW5sb2FkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikK
LXsKLSAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS51bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaAkocmV2aXNpb24gNDg2
ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw4ICsyNCw5IEBACiAjaWZuZGVmIEhUTUxGcmFtZVNldEVsZW1lbnRfaAogI2RlZmlu
ZSBIVE1MRnJhbWVTZXRFbGVtZW50X2gKIAotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjcsMzYgKzY4LDIzIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBMZW5ndGgqIHJvd0xlbmd0aHMoKSBjb25zdCB7IHJldHVybiBtX3Jvd3M7
IH0KICAgICBjb25zdCBMZW5ndGgqIGNvbExlbmd0aHMoKSBjb25zdCB7IHJldHVybiBtX2NvbHM7
IH0KIAotICAgIC8vIEV2ZW50IGhhbmRsZXIgYXR0cmlidXRlcwotICAgIHZpcnR1YWwgRXZlbnRM
aXN0ZW5lciogb25ibHVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9uYmx1cihQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICB2aXJ0dWFsIEV2ZW50TGlzdGVuZXIqIG9uZXJy
b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+KTsKLSAgICB2aXJ0dWFsIEV2ZW50TGlzdGVuZXIqIG9uZm9jdXMoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0T25mb2N1cyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsK
LSAgICB2aXJ0dWFsIEV2ZW50TGlzdGVuZXIqIG9ubG9hZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBzZXRPbmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0KLSAgICBFdmVudExp
c3RlbmVyKiBvbmJlZm9yZXVubG9hZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0T25iZWZvcmV1bmxv
YWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciogb25oYXNo
Y2hhbmdlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbmhhc2hjaGFuZ2UoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZlbnRM
aXN0ZW5lciogb25vZmZsaW5lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRPbm9mZmxpbmUoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciogb25vbmxpbmUoKSBjb25z
dDsKLSAgICB2b2lkIHNldE9ub25saW5lKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOworICAg
IC8vIERlY2xhcmVkIHZpcnR1YWwgaW4gTm9kZQorICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGJsdXIpOworICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGVycm9yKTsKKyAgICBERUZJTkVfV0lORE9XX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihmb2N1cyk7CisgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
bG9hZCk7CisKKyAgICBERUZJTkVfV0lORE9XX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihiZWZv
cmV1bmxvYWQpOworICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGhh
c2hjaGFuZ2UpOworICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG1l
c3NhZ2UpOworICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG9mZmxp
bmUpOworICAgIERFRklORV9XSU5ET1dfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG9ubGluZSk7
CisgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocmVzaXplKTsKKyAg
ICBERUZJTkVfV0lORE9XX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdG9yYWdlKTsKKyAgICBE
RUZJTkVfV0lORE9XX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih1bmxvYWQpOwogI2lmIEVOQUJM
RShPUklFTlRBVElPTl9FVkVOVFMpCi0gICAgRXZlbnRMaXN0ZW5lciogb25vcmllbnRhdGlvbmNo
YW5nZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0T25vcmllbnRhdGlvbmNoYW5nZShQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+KTsKKyAgICBERUZJTkVfV0lORE9XX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihvcmllbnRhdGlvbmNoYW5nZSk7CiAjZW5kaWYKLSAgICBFdmVudExpc3RlbmVyKiBvbnJl
c2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0T25yZXNpemUoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5lciogb25zdG9yYWdlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRPbnN0b3JhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgRXZlbnRMaXN0ZW5l
ciogb251bmxvYWQoKSBjb25zdDsKLSAgICB2b2lkIHNldE9udW5sb2FkKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4pOwogCiBwcml2YXRlOgogICAgIExlbmd0aCogbV9yb3dzOwpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNs
dWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgpAQCAt
NDUsNyArNDYsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6ZGlzcGF0Y2hMb2FkRXZlbnQoCiAg
ICAgYm9vbCBlcnJvck9jY3VycmVkID0gaW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgpOwogICAgIGlm
ICghZXJyb3JPY2N1cnJlZCAmJiBpbWFnZSgpLT5odHRwU3RhdHVzQ29kZUVycm9yT2NjdXJyZWQo
KSkKICAgICAgICAgZXJyb3JPY2N1cnJlZCA9IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9iamVjdFRhZyk7IC8vIEFuIDxvYmplY3Q+IGNvbnNpZGVycyBhIDQwNCB0byBiZSBhbiBl
cnJvciBhbmQgc2hvdWxkIGZpcmUgb25lcnJvci4KLSAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZl
bnQoZXJyb3JPY2N1cnJlZCA/IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IDogZXZlbnROYW1lcygp
LmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZlbnQo
RXZlbnQ6OmNyZWF0ZShlcnJvck9jY3VycmVkID8gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgOiBl
dmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogU3RyaW5nIEhUTUxJ
bWFnZUxvYWRlcjo6c291cmNlVVJJKGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cikgY29uc3QKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQyLDcgKzE3
NDIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Om9uU2VhcmNoKCkKICAgICBBU1NFUlQoaXNT
ZWFyY2hGaWVsZCgpKTsKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgdG9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIoKSktPnN0b3BTZWFyY2hFdmVudFRpbWVyKCk7Ci0g
ICAgZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIHRydWUsIGZhbHNlKTsK
KyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNlYXJjaEV2ZW50
LCB0cnVlLCBmYWxzZSkpOwogfQogCiBWaXNpYmxlU2VsZWN0aW9uIEhUTUxJbnB1dEVsZW1lbnQ6
OnNlbGVjdGlvbigpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA0ODY4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYzLDggKzQ2Myw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZElu
dGVybmFsKCkKICAgICAgICAgYm9vbCB0b3RhbEtub3duID0gbV9wbGF5ZXIgJiYgbV9wbGF5ZXIt
PnRvdGFsQnl0ZXNLbm93bigpOwogICAgICAgICB1bnNpZ25lZCBsb2FkZWQgPSBtX3BsYXllciA/
IG1fcGxheWVyLT5ieXRlc0xvYWRlZCgpIDogMDsKICAgICAgICAgdW5zaWduZWQgdG90YWwgPSBt
X3BsYXllciA/IG1fcGxheWVyLT50b3RhbEJ5dGVzKCkgOiAwOwotICAgICAgICBkaXNwYXRjaFBy
b2dyZXNzRXZlbnQoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIHRvdGFsS25vd24sIGxvYWRlZCwg
dG90YWwpOwotICAgICAgICBkaXNwYXRjaFByb2dyZXNzRXZlbnQoZXZlbnROYW1lcygpLmxvYWRl
bmRFdmVudCwgdG90YWxLbm93biwgbG9hZGVkLCB0b3RhbCk7CisgICAgICAgIGRpc3BhdGNoRXZl
bnQoUHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0b3RhbEtu
b3duLCBsb2FkZWQsIHRvdGFsKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoUHJvZ3Jlc3NFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQsIHRvdGFsS25vd24sIGxvYWRlZCwg
dG90YWwpKTsKICAgICB9CiAKICAgICAvLyA1CkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojpsb2FkSW50ZXJuYWwoKQogICAgICAgICAgICAgbV9wbGF5aW5nID0gZmFs
c2U7CiAgICAgICAgICAgICBtX3BsYXllci0+c2VlaygwKTsKICAgICAgICAgfQotICAgICAgICBk
aXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5lbXB0aWVkRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAg
ICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbXB0aWVkRXZl
bnQsIGZhbHNlLCB0cnVlKSk7CiAgICAgfQogCiAgICAgc2VsZWN0TWVkaWFSZXNvdXJjZSgpOwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKICNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGUuaCIKQEAgLTIy
MiwxMiArMjIzLDEyIEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW4K
ICAgICBBU1NFUlQoIW1fZGF0YS5oYXZlRmlyZWRMb2FkRXZlbnQoKSk7CiAgICAgbV9kYXRhLnNl
dEhhdmVGaXJlZExvYWRFdmVudCh0cnVlKTsKIAotICAgIGRpc3BhdGNoRXZlbnQoZXZlbnROYW1l
cygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKIHZvaWQg
SFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB7Ci0gICAgZGlzcGF0Y2hF
dmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2UpOworICAgIGRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2Up
KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0
ODY4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoVklERU8pCiAjaW5jbHVkZSAiSFRNTFNv
dXJjZUVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnQuaCIKQEAgLTEwNSw3ICsxMDYsNyBAQCB2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjpjYW5jZWxQ
ZW5kaW5nRXJyCiAKIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OmVycm9yRXZlbnRUaW1lckZpcmVk
KFRpbWVyPEhUTUxTb3VyY2VFbGVtZW50PiopCiB7Ci0gICAgZGlzcGF0Y2hFdmVudChldmVudE5h
bWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIHRydWUpOworICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIHRydWUpKTsKIH0KIAogfQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpA
QCAtMjAyOSw3ICsyMDMwLDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZChD
YWNoZQogI2VuZGlmCiAKICAgICAgICAgaWYgKGVycm9yT2NjdXJyZWQpCi0gICAgICAgICAgICBu
LT5kaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7Cisg
ICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVy
cm9yRXZlbnQsIHRydWUsIGZhbHNlKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVB
c0phdmFTY3JpcHQoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9u
KHNvdXJjZUNvZGUsIG1fc3RhdGUpOwpAQCAtMjAzNyw3ICsyMDM4LDcgQEAgdm9pZCBIVE1MVG9r
ZW5pemVyOjpub3RpZnlGaW5pc2hlZChDYWNoZQogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwogI2Vu
ZGlmCi0gICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQs
IGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBUaGUgc3RhdGUgb2YgbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkgY2FuIGNo
YW5nZSBpbnNpZGUgdGhlIHNjcmlwdEV4ZWN1dGlvbigpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0b3BMaXN0ZW5pbmcoRG8KICAgICBtX2RvY3Vt
ZW50cy5yZW1vdmUoZG9jKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlRXZl
bnQoRXZlbnQqIGV2ZW50LCBib29sKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlRXZl
bnQoRXZlbnQqIGV2ZW50KQogewogICAgIEF0b21pY1N0cmluZyB0eXBlID0gZXZlbnQtPnR5cGUo
KTsKICAgICBOb2RlKiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3
ICs4NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzdGFydExpc3Rlbmlu
ZyhEb2N1bWVudCogZG9jdW1lbnQpOwogICAgICAgICB2b2lkIHN0b3BMaXN0ZW5pbmcoRG9jdW1l
bnQqIGRvY3VtZW50KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQq
IGV2ZW50LCBib29sIGlzV2luZG93RXZlbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXZlbnQoRXZlbnQqIGV2ZW50KTsKIAogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5v
ZGU+LCBsb25nPiBOb2RlVG9JZE1hcDsKICAgICAgICAgbG9uZyBiaW5kKE5vZGUqIG5vZGUsIE5v
ZGVUb0lkTWFwKiBub2Rlc01hcCk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6c3Rh
cnRSCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6aGFuZGxl
RXZlbnQoRXZlbnQqIGV2ZW50LCBib29sKQordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2U6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAgICBBU1NFUlQobV9mcm9udGVuZCk7
CiAgICAgQVNTRVJUKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQgPT0gZXZlbnQtPnR5cGUoKSk7
CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UuaAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdW5iaW5kKCk7CiAgICAgICAgIHZvaWQgc3RhcnRS
ZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChFdmVudCosIGJvb2wgaXNXaW5kb3dFdmVudCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVFdmVudChFdmVudCopOwogICAgICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcik7CiAKICAgICAgICAgYm9vbCBpc1NhbWVIb3N0
QW5kVHlwZShGcmFtZSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5j
bHVkZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlBsYWNlaG9sZGVyRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQu
aCIKQEAgLTU4Niw5ICs1ODcsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhVbmxv
YWRFdmVuCiAgICAgICAgICAgICAgICAgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvbVdpbmRvdygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICh1bmxvYWRFdmVudFBvbGljeSA9PSBVbmxvYWRFdmVudFBvbGljeVVu
bG9hZEFuZFBhZ2VIaWRlKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9tV2lu
ZG93KCktPmRpc3BhdGNoUGFnZVRyYW5zaXRpb25FdmVudChFdmVudE5hbWVzKCkucGFnZWhpZGVF
dmVudCwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNp
dGlvbkV2ZW50OjpjcmVhdGUoRXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIG1fZnJhbWUtPmRv
Y3VtZW50KCktPmluUGFnZUNhY2hlKCkpLCBtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPmRpc3BhdGNoVW5sb2Fk
RXZlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5k
aXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxz
ZSwgZmFsc2UpLCBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKQEAgLTE4NjYs
NyArMTg2Nyw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFnZUNvbnRhaW5pbmcKICAg
ICAgICAgJiYgIW1fY29udGFpbnNQbHVnSW5zCiAgICAgICAgICYmICFtX1VSTC5wcm90b2NvbElz
KCJodHRwcyIpCiAjaWZuZGVmIFBBR0VfQ0FDSEVfQUNDRVBUU19VTkxPQURfSEFORExFUlMKLSAg
ICAgICAgJiYgKCFtX2ZyYW1lLT5kb21XaW5kb3coKSB8fCAhbV9mcmFtZS0+ZG9tV2luZG93KCkt
Pmhhc0V2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkKKyAgICAgICAgJiYg
KCFtX2ZyYW1lLT5kb21XaW5kb3coKSB8fCAhbV9mcmFtZS0+ZG9tV2luZG93KCktPmhhc0V2ZW50
TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCiAjZW5kaWYKICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAgICAgICAgICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJh
c2VzKCkKQEAgLTIwMTMsNyArMjAxNCw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hl
RnJhbWVEZWNpc2kKICAgICAgICAgaWYgKG1fVVJMLnByb3RvY29sSXMoImh0dHBzIikpCiAgICAg
ICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaXMgSFRUUFMiKTsgY2Fubm90Q2FjaGUgPSB0cnVl
OyB9CiAjaWZuZGVmIFBBR0VfQ0FDSEVfQUNDRVBUU19VTkxPQURfSEFORExFUlMKLSAgICAgICAg
aWYgKG1fZnJhbWUtPmRvbVdpbmRvdygpICYmIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCisgICAgICAgIGlmIChtX2ZyYW1l
LT5kb21XaW5kb3coKSAmJiBtX2ZyYW1lLT5kb21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkKICAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFt
ZSBoYXMgYW4gdW5sb2FkIGV2ZW50IGxpc3RlbmVyIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQog
I2VuZGlmCiAjaWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtMjA4MCw3ICsyMDgxLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5p
c0RvY3VtZW50KCkpOwotICAgICAgICBtX2RvY3VtZW50LT5kaXNwYXRjaFdpbmRvd0V2ZW50KGV2
ZW50TmFtZXMoKS5oYXNoY2hhbmdlRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIG1fZG9j
dW1lbnQtPmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaGFz
aGNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgpAQCAt
NDI5Myw3ICs0Mjk0LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cGFnZUhpZGRlbigpCiB7CiAgICAg
bV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IHRydWU7CiAgICAgaWYgKG1fZnJhbWUtPmRv
bVdpbmRvdygpKQotICAgICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hQYWdlVHJh
bnNpdGlvbkV2ZW50KEV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2ZW50LCB0cnVlKTsKKyAgICAgICAg
bV9mcmFtZS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6
Y3JlYXRlKEV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2ZW50LCB0cnVlKSwgbV9mcmFtZS0+ZG9jdW1l
bnQoKSk7CiAgICAgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IGZhbHNlOwogCiAgICAg
Ly8gU2VuZCBwYWdlaGlkZSBldmVudCBmb3Igc3ViZnJhbWVzIGFzIHdlbGwKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0ltYWdlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvbG9hZGVyL0lt
YWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJv
b2wgaXNXaW5kb3dFdmVudCk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7
CiAKICAgICBJbWFnZURvY3VtZW50KiBtX2RvYzsKIH07CkBAIC0zNTgsNyArMzU4LDcgQEAgYm9v
bCBJbWFnZURvY3VtZW50OjpzaG91bGRTaHJpbmtUb0ZpdCgpIAogCiAvLyAtLS0tLS0tLQogCi12
b2lkIEltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50LCBib29sKQor
dm9pZCBJbWFnZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpCiAgICAgICAg
IG1fZG9jLT53aW5kb3dTaXplQ2hhbmdlZCgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCShyZXZpc2lvbiA0ODY4NikKKysr
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2Miw3ICs5NjIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgICAgIEFTU0VS
VChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgPT0gbV9kb2N1bWVudExvYWRlci5n
ZXQoKSk7CiAKLSAgICAgICAgbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS0+bm90aWZ5RXZlbnRMaXN0ZW5lcihtX2V2ZW50SUQpOworICAgICAgICBtX2RvY3VtZW50TG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5ub3RpZnlET01BcHBsaWNhdGlvbkNhY2hlKG1f
ZXZlbnRJRCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNywxMCArMjI3LDEzIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OnNl
dERPTUFwcGxpY2EKICAgICBtX2RvbUFwcGxpY2F0aW9uQ2FjaGUgPSBkb21BcHBsaWNhdGlvbkNh
Y2hlOwogfQogCi12b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpub3RpZnlFdmVudExpc3RlbmVy
KEV2ZW50SUQgaWQpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpub3RpZnlET01BcHBsaWNh
dGlvbkNhY2hlKEV2ZW50SUQgaWQpCiB7Ci0gICAgaWYgKG1fZG9tQXBwbGljYXRpb25DYWNoZSkK
LSAgICAgICAgbV9kb21BcHBsaWNhdGlvbkNhY2hlLT5jYWxsRXZlbnRMaXN0ZW5lcihpZCk7Cisg
ICAgaWYgKG1fZG9tQXBwbGljYXRpb25DYWNoZSkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgbV9kb21BcHBsaWNhdGlvbkNhY2hlLT5kaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoRE9NQXBwbGljYXRpb25DYWNoZTo6dG9FdmVudFR5cGUoaWQpLCBmYWxzZSwgZmFs
c2UpLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOyAgICAKKyAgICB9CiB9CiAKIHZvaWQgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OnNldENhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cChBcHBs
aWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5oCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwOCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc3dhcENh
Y2hlKCk7CiAKICAgICAgICAgdm9pZCBzZXRET01BcHBsaWNhdGlvbkNhY2hlKERPTUFwcGxpY2F0
aW9uQ2FjaGUqIGRvbUFwcGxpY2F0aW9uQ2FjaGUpOwotICAgICAgICB2b2lkIG5vdGlmeUV2ZW50
TGlzdGVuZXIoRXZlbnRJRCBpZCk7CisgICAgICAgIHZvaWQgbm90aWZ5RE9NQXBwbGljYXRpb25D
YWNoZShFdmVudElEIGlkKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNBcHBsaWNh
dGlvbkNhY2hlRW5hYmxlZCgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBw
bGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
RE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkx
LDczICs5MSw2IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2EKICAg
ICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIH0KIAotdm9pZCBET01BcHBsaWNhdGlvbkNh
Y2hlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRM
aXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRU
eXBlKTsKLSAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0gICAgICAg
IExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyczsKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVu
dExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0
ZW5lcnMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMg
PSBpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxp
c3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJz
LmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAgICAgICAgICAgaWYgKCoqbGlzdGVuZXJJdGVy
ID09ICpldmVudExpc3RlbmVyKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAg
ICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwotICAgIH0gICAg
Ci19Ci0KLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwg
Ym9vbCkKLXsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRM
aXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwotICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5l
cnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMaXN0ZW5lclZlY3RvciYgbGlz
dGVuZXJzID0gaXRlci0+c2Vjb25kOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0g
bGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAgICAgICBpZiAoKipsaXN0ZW5l
ckl0ZXIgPT0gKmV2ZW50TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUo
bGlzdGVuZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmICghZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWMgPSBF
dmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2
ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxp
c3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAg
ICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBldmVudC0+c2V0Q3VycmVudFRh
cmdldCh0aGlzKTsKLSAgICAgICAgbGlzdGVuZXJJdGVyLT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZl
bnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpOwotfQotCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIp
Ci17Ci0gICAgQVNTRVJUKG1fZnJhbWUpOwotICAgIAotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQg
PSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKLSAgICBpZiAobGlzdGVu
ZXIpIHsKLSAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZlbnQtPnNl
dEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGxpc3RlbmVyLT5oYW5kbGVFdmVudChldmVu
dC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSwgZWMpOwotICAgIEFTU0VSVCghZWMp
OyAgICAKLX0KLQogY29uc3QgQXRvbWljU3RyaW5nJiBET01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2
ZW50VHlwZShBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBpZCkKIHsKICAgICBzd2l0Y2gg
KGlkKSB7CkBAIC0xODIsMjcgKzExNSwxNCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIERPTUFwcGxp
Y2F0aW9uQ2FjaGU6CiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50OwogfQogCi1B
cHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBET01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50
SUQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCitFdmVudFRhcmdldERhdGEqIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OmV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAgaWYgKGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkuY2hlY2tpbmdFdmVudCkKLSAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpDSEVDS0lOR19FVkVOVDsKLSAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50KQotICAgICAgICByZXR1cm4gQXBwbGljYXRpb25DYWNoZUhvc3Q6OkVS
Uk9SX0VWRU5UOwotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm5vdXBkYXRlRXZl
bnQpCi0gICAgICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Tk9VUERBVEVfRVZFTlQ7
Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCkKLSAg
ICAgICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpET1dOTE9BRElOR19FVkVOVDsKLSAg
ICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50KQotICAgICAgICBy
ZXR1cm4gQXBwbGljYXRpb25DYWNoZUhvc3Q6OlBST0dSRVNTX0VWRU5UOwotICAgIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLnVwZGF0ZXJlYWR5RXZlbnQpCi0gICAgICAgIHJldHVybiBB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6VVBEQVRFUkVBRFlfRVZFTlQ7Ci0gICAgaWYgKGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkuY2FjaGVkRXZlbnQpCi0gICAgICAgIHJldHVybiBBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6Q0FDSEVEX0VWRU5UOwotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLm9ic29sZXRlRXZlbnQpCi0gICAgICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
T0JTT0xFVEVfRVZFTlQ7Ci0gIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQ7CisgICAgcmV0dXJuICZtX2V2ZW50
VGFyZ2V0RGF0YTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBET01BcHBsaWNhdGlvbkNhY2hlOjpl
bnN1cmVFdmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw4ICszMCw5IEBACiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTU1LDcyICs1
NiwzOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUoRXhjZXB0aW9uQ29kZSYpOwogICAgIHZv
aWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIC8vIEV2ZW50IGxpc3RlbmVyIGF0
dHJpYnV0ZXMgYnkgRXZlbnRJRAotCi0gICAgdm9pZCBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIGlkLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1tpZF0gPSBldmVu
dExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBpZCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVFdmVudExpc3RlbmVyc1tpZF0uZ2V0KCk7IH0KLSAgICB2b2lkIGNsZWFyQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBpZCkgeyBtX2F0dHJp
YnV0ZUV2ZW50TGlzdGVuZXJzW2lkXSA9IDA7IH0KLSAgICB2b2lkIGNhbGxFdmVudExpc3RlbmVy
KEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIGlkKSB7IGNhbGxMaXN0ZW5lcih0b0V2ZW50
VHlwZShpZCksIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoaWQpKTsgfQotCiAgICAgLy8gRXZl
bnRUYXJnZXQgaW1wbAogCi0gICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wg
dXNlQ2FwdHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUp
OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4g
TGlzdGVuZXJWZWN0b3I7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgTGlzdGVu
ZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwotICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVu
dExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KLQogICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8RE9NQXBwbGljYXRpb25DYWNoZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVk
PERPTUFwcGxpY2F0aW9uQ2FjaGU+OjpkZXJlZjsKIAogICAgIC8vIEV4cGxpY2l0bHkgbmFtZWQg
YXR0cmlidXRlIGV2ZW50IGxpc3RlbmVyIGhlbHBlcnMKIAotICAgIHZvaWQgc2V0T25jaGVja2lu
ZyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNIRUNLSU5HX0VWRU5ULCBsaXN0ZW5lcik7
IH0KLSAgICBFdmVudExpc3RlbmVyKiBvbmNoZWNraW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q0hFQ0tJTkdfRVZFTlQp
OyB9Ci0KLSAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpF
UlJPUl9FVkVOVCwgbGlzdGVuZXIpO30KLSAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29u
c3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6RVJST1JfRVZFTlQpOyB9Ci0KLSAgICB2b2lkIHNldE9ubm91cGRhdGUoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpOT1VQREFURV9FVkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRM
aXN0ZW5lciogb25ub3VwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6Ok5PVVBEQVRFX0VWRU5UKTsgfQotCi0gICAgdm9p
ZCBzZXRPbmRvd25sb2FkaW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsg
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RE9XTkxPQURJ
TkdfRVZFTlQsIGxpc3RlbmVyKTsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9uZG93bmxvYWRpbmco
KSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpET1dOTE9BRElOR19FVkVOVCk7IH0KLQotICAgIHZvaWQgc2V0T25wcm9ncmVzcyhQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OlBST0dSRVNTX0VWRU5ULCBsaXN0ZW5lcik7IH0K
LSAgICBFdmVudExpc3RlbmVyKiBvbnByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UFJPR1JFU1NfRVZFTlQpOyB9
Ci0KLSAgICB2b2lkIHNldE9udXBkYXRlcmVhZHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpVUERBVEVSRUFEWV9FVkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb251
cGRhdGVyZWFkeSgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBw
bGljYXRpb25DYWNoZUhvc3Q6OlVQREFURVJFQURZX0VWRU5UKTsgfQotCi0gICAgdm9pZCBzZXRP
bmNhY2hlZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNBQ0hFRF9FVkVOVCwgbGlzdGVu
ZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25jYWNoZWQoKSBjb25zdCB7IHJldHVybiBnZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDQUNIRURfRVZFTlQp
OyB9Ci0KLSAgICB2b2lkIHNldE9ub2Jzb2xldGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpPQlNPTEVURV9FVkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25vYnNv
bGV0ZSgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRp
b25DYWNoZUhvc3Q6Ok9CU09MRVRFX0VWRU5UKTsgfQorICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoY2hlY2tpbmcpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoZXJyb3IpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobm91cGRhdGUp
OworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZG93bmxvYWRpbmcpOworICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocHJvZ3Jlc3MpOworICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIodXBkYXRlcmVhZHkpOworICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoY2FjaGVkKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKG9ic29sZXRlKTsKIAogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUq
IHRvRE9NQXBwbGljYXRpb25DYWNoZSgpIHsgcmV0dXJuIHRoaXM7IH0KIAogICAgIHN0YXRpYyBj
b25zdCBBdG9taWNTdHJpbmcmIHRvRXZlbnRUeXBlKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVu
dElEIGlkKTsKLSAgICBzdGF0aWMgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQgdG9FdmVu
dElEKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKIAogcHJpdmF0ZToKICAgICBET01B
cHBsaWNhdGlvbkNhY2hlKEZyYW1lKik7CiAKLSAgICB2b2lkIGNhbGxMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciopOwotICAgIAogICAgIHZpcnR1
YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVy
ZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRh
KiBldmVudFRhcmdldERhdGEoKTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJl
RXZlbnRUYXJnZXREYXRhKCk7CiAKICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdCogYXBwbGljYXRp
b25DYWNoZUhvc3QoKSBjb25zdDsKLSAgICAKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9h
dHRyaWJ1dGVFdmVudExpc3RlbmVyc1tBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T0JTT0xFVEVfRVZF
TlQgKyAxXTsKLQotICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5lcnM7CiAKICAg
ICBGcmFtZSogbV9mcmFtZTsKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAkocmV2aXNpb24gNDg2ODYpCisrKyBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQCBtb2R1bGUgb2ZmbGluZSB7CiAgCiAgICAgaW50ZXJmYWNl
IFsKICAgICAgICAgQ29uZGl0aW9uYWw9T0ZGTElORV9XRUJfQVBQTElDQVRJT05TLAotICAgICAg
ICBDdXN0b21NYXJrRnVuY3Rpb24KKyAgICAgICAgRXZlbnRUYXJnZXQKICAgICBdIERPTUFwcGxp
Y2F0aW9uQ2FjaGUgewogICAgICAgICAvLyB1cGRhdGUgc3RhdHVzCiAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IFVOQ0FDSEVEID0gMDsKSW5kZXg6IFdlYkNvcmUvbm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbm90aWZpY2F0aW9ucy9Ob3Rp
ZmljYXRpb24uY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvbm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTk2LDEzNyArOTcsMTQgQEAgdm9pZCBOb3Rp
ZmljYXRpb246OmNhbmNlbCgpIAogICAgICAgICBtX3ByZXNlbnRlci0+Y2FuY2VsKHRoaXMpOwog
fQogCi1FdmVudExpc3RlbmVyKiBOb3RpZmljYXRpb246Om9uZGlzcGxheSgpIGNvbnN0CitFdmVu
dFRhcmdldERhdGEqIE5vdGlmaWNhdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkKIHsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcigiZGlzcGxheSIpOworICAgIHJldHVybiAmbV9l
dmVudFRhcmdldERhdGE7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uOjpzZXRPbmRpc3BsYXkoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQorRXZlbnRUYXJnZXREYXRhKiBO
b3RpZmljYXRpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAgc2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcigiZGlzcGxheSIsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3Rl
bmVyKiBOb3RpZmljYXRpb246Om9uZXJyb3IoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKLX0KLQotdm9pZCBO
b3RpZmljYXRpb246OnNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmVy
cm9yRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb3RpZmljYXRp
b246Om9uY2xvc2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50KTsKLX0KLQotdm9pZCBOb3RpZmljYXRpb246OnNl
dE9uY2xvc2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAg
IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNsb3NlRXZlbnQsIGV2ZW50
TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBOb3RpZmljYXRpb246OmdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IG1fZXZl
bnRMaXN0ZW5lcnM7Ci0gICAgc2l6ZV90IHNpemUgPSBsaXN0ZW5lcnMuc2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyJiByID0gKmxpc3RlbmVyc1tpXTsKLSAgICAgICAgaWYgKHIuZXZlbnRU
eXBlKCkgPT0gZXZlbnRUeXBlICYmIHIubGlzdGVuZXIoKS0+aXNBdHRyaWJ1dGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiByLmxpc3RlbmVyKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi12
b2lkIE5vdGlmaWNhdGlvbjo6c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikKLXsK
LSAgICBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAgICBpZiAobGlz
dGVuZXIpCi0gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFs
c2UpOwotfQotCi12b2lkIE5vdGlmaWNhdGlvbjo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotewotICAgIFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnMgPSAmbV9ldmVudExpc3RlbmVyczsKLSAgICBzaXplX3Qg
c2l6ZSA9IGxpc3RlbmVycy0+c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByID0gKmxpc3RlbmVy
cy0+YXQoaSk7Ci0gICAgICAgIGlmIChyLmV2ZW50VHlwZSgpICE9IGV2ZW50VHlwZSB8fCAhci5s
aXN0ZW5lcigpLT5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgci5zZXRSZW1vdmVkKHRydWUpOwotICAgICAgICBsaXN0ZW5lcnMtPnJlbW92ZShpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBOb3RpZmljYXRpb246OmRpc3BhdGNoRGlz
cGxheUV2ZW50KCkgCi17ICAgCi0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVh
dGUoImRpc3BsYXkiLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsK
LX0KLQotdm9pZCBOb3RpZmljYXRpb246OmRpc3BhdGNoRXJyb3JFdmVudCgpCi17ICAKLSAgICBS
ZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVu
dCwgZmFsc2UsIHRydWUpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNo
RXZlbnQoZXZlbnQucmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQg
Tm90aWZpY2F0aW9uOjpkaXNwYXRjaENsb3NlRXZlbnQoKSAKLXsgICAKLSAgICBSZWZQdHI8RXZl
bnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xvc2VFdmVudCwgZmFsc2Us
IHRydWUpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNoRXZlbnQoZXZl
bnQucmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQgTm90aWZpY2F0
aW9uOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAg
UmVmUHRyPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiByZWdpc3RlcmVkTGlzdGVuZXIgPSBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1
cmUpOwotICAgIG1fZXZlbnRMaXN0ZW5lcnMuYXBwZW5kKHJlZ2lzdGVyZWRMaXN0ZW5lcik7Ci19
Ci0KLXZvaWQgTm90aWZpY2F0aW9uOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJl
KQotewotICAgIHNpemVfdCBzaXplID0gbV9ldmVudExpc3RlbmVycy5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXImIHIgPSAqbV9ldmVudExpc3RlbmVyc1tpXTsKLSAgICAgICAgaWYgKHIuZXZlbnRU
eXBlKCkgPT0gZXZlbnRUeXBlICYmIHIudXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUgJiYgKnIu
bGlzdGVuZXIoKSA9PSAqbGlzdGVuZXIpIHsKLSAgICAgICAgICAgIHIuc2V0UmVtb3ZlZCh0cnVl
KTsKLSAgICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGkpOwotICAgICAgICAgICAg
cmV0dXJuOyAKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBOb3RpZmljYXRpb246OmhhbmRs
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0
ZW5lcnM7Ci0gICAgc2l6ZV90IHNpemUgPSBsaXN0ZW5lcnNDb3B5LnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciYgciA9ICpsaXN0ZW5lcnNDb3B5W2ldOwotICAgICAgICBpZiAoci5ldmVudFR5cGUo
KSA9PSBldmVudC0+dHlwZSgpICYmIHIudXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUgJiYgIXIu
cmVtb3ZlZCgpKQotICAgICAgICAgICAgci5saXN0ZW5lcigpLT5oYW5kbGVFdmVudChldmVudC5n
ZXQoKSk7Ci0gICAgfQotfQotCi1ib29sIE5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBpbkV2ZW50LCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBSZWZQdHI8RXZl
bnQ+IGV2ZW50KGluRXZlbnQpOwotCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFU
X1RBUkdFVCk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0KLSAgICBoYW5k
bGVFdmVudChldmVudC5nZXQoKSwgdHJ1ZSk7Ci0gICAgaWYgKCFldmVudC0+cHJvcGFnYXRpb25T
dG9wcGVkKCkpIHsKLSAgICAgICAgaGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJu
ICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJD
b3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzUsNiArMzYs
NyBAQAogI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJFdmVudC5oIgog
I2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5j
bHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgpAQCAtNjUsMzMgKzY3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgS1VSTCB1cmwoKSB7IHJldHVybiBtX25vdGlmaWNhdGlvblVSTDsgfQogICAgICAgICBOb3Rp
ZmljYXRpb25Db250ZW50cyYgY29udGVudHMoKSB7IHJldHVybiBtX2NvbnRlbnRzOyB9CiAKLSAg
ICAgICAgRXZlbnRMaXN0ZW5lciogb25kaXNwbGF5KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
T25kaXNwbGF5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcik7Ci0gICAg
ICAgIEV2ZW50TGlzdGVuZXIqIG9uZXJyb3IoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmVy
cm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIEV2
ZW50TGlzdGVuZXIqIG9uY2xvc2UoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmNsb3NlKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcik7CisgICAgICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZGlzcGxheSk7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGNsb3NlKTsKICAgICAKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxOb3RpZmlj
YXRpb24+OjpyZWY7CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8Tm90aWZpY2F0aW9uPjo6ZGVy
ZWY7CiAgICAgCi0gICAgICAgIC8vIERpc3BhdGNoaW5nIG9mIGV2ZW50cyBvbiB0aGUgbm90aWZp
Y2F0aW9uLiAgVGhlIHByZXNlbnRlciBzaG91bGQgY2FsbCB0aGVzZSB3aGVuIGV2ZW50cyBvY2N1
ci4KLSAgICAgICAgdm9pZCBkaXNwYXRjaERpc3BsYXlFdmVudCgpOwotICAgICAgICB2b2lkIGRp
c3BhdGNoRXJyb3JFdmVudCgpOwotICAgICAgICB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudCgpOwot
CiAgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQogICAgICAgICB2aXJ0dWFsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQotICAgICAgICB2
aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmLCBQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+LCBib29sKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiwgRXZlbnRMaXN0ZW5lciosIGJvb2wpOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgICAgICB2aXJ0dWFsIE5vdGlmaWNhdGlvbiogdG9Ob3RpZmljYXRp
b24oKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgZm9y
IG9uRXZlbnQgc3R5bGUgbGlzdGVuZXJzLgotICAgICAgICBFdmVudExpc3RlbmVyKiBnZXRBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotICAgICAgICB2
b2lkIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiwgUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIHZvaWQgY2xlYXJBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYpOwotCiAgICAgcHJpdmF0ZToKICAgICAgICAgTm90
aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlJiBlYywgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBwcm92aWRlcik7
CiAgICAgICAgIE5vdGlmaWNhdGlvbihjb25zdCBOb3RpZmljYXRpb25Db250ZW50cyYgZmllbGRz
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYywgTm90
aWZpY2F0aW9uUHJlc2VudGVyKiBwcm92aWRlcik7CkBAIC05OSw4ICs4NSw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCiAgICAgICAgIHZp
cnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLSAgCi0gICAgICAgIHZvaWQgaGFu
ZGxlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAg
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKKyAgICAgICAg
dmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCiAgICAg
ICAgIGJvb2wgbV9pc0hUTUw7CiAgICAgICAgIEtVUkwgbV9ub3RpZmljYXRpb25VUkw7CkBAIC0x
MDgsOSArOTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBtX2lzU2hv
d2luZzsKIAotICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciBtX2V2ZW50TGlz
dGVuZXJzOwotCiAgICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlciogbV9wcmVzZW50ZXI7Cisg
ICAgICAgIAorICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9ub3RpZmljYXRpb25z
L05vdGlmaWNhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5pZGwJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9ub3RpZmljYXRpb25z
L05vdGlmaWNhdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDggQEAKIG1vZHVs
ZSB0aHJlYWRzIHsKIAogICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPU5PVElG
SUNBVElPTlMKKyAgICAgICAgQ29uZGl0aW9uYWw9Tk9USUZJQ0FUSU9OUywKKyAgICAgICAgRXZl
bnRUYXJnZXQKICAgICBdIE5vdGlmaWNhdGlvbiB7CiAgICAgICAgIHZvaWQgc2hvdygpOwogICAg
ICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDQ4Njg2KQor
KysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsx
MDUsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBPd25QdHI8TWVzc2Fn
ZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKmNv
bnRleHQsIG1fY2hhbm5lbHMucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIE1lc3NhZ2VFdmVu
dDo6Y3JlYXRlKG1fbWVzc2FnZSwgbV9vcmlnaW4sICIiLCBtX3NvdXJjZSwgbWVzc2FnZVBvcnRz
LnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNzYWdl
UG9ydHMucmVsZWFzZSgpLCBtX21lc3NhZ2UsIG1fb3JpZ2luLCAiIiwgbV9zb3VyY2UpOwogICAg
IH0KICAgICBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV90
YXJnZXRPcmlnaW4uZ2V0KCk7IH0KIApAQCAtMTIzLDgzICsxMjMsMzYgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fdGFyZ2V0T3JpZ2luOwogfTsKIAotdHlwZWRlZiBI
YXNoTWFwPERPTVdpbmRvdyosIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yKj4gRE9NV2lu
ZG93UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJNYXA7Cit0eXBlZGVmIEhhc2hDb3VudGVkU2V0PERP
TVdpbmRvdyo+IERPTVdpbmRvd1NldDsKIAotc3RhdGljIERPTVdpbmRvd1JlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyTWFwJiBwZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lck1hcCgpCitzdGF0aWMgRE9N
V2luZG93U2V0JiB3aW5kb3dzV2l0aFVubG9hZEV2ZW50TGlzdGVuZXJzKCkKIHsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKERPTVdpbmRvd1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyTWFwLCBldmVu
dExpc3RlbmVyTWFwLCAoKSk7Ci0gICAgcmV0dXJuIGV2ZW50TGlzdGVuZXJNYXA7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChET01XaW5kb3dTZXQsIHdpbmRvd3NXaXRoVW5sb2FkRXZlbnRMaXN0
ZW5lcnMsICgpKTsKKyAgICByZXR1cm4gd2luZG93c1dpdGhVbmxvYWRFdmVudExpc3RlbmVyczsK
IH0KIAotc3RhdGljIERPTVdpbmRvd1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyTWFwJiBwZW5kaW5n
QmVmb3JlVW5sb2FkRXZlbnRMaXN0ZW5lck1hcCgpCitzdGF0aWMgRE9NV2luZG93U2V0JiB3aW5k
b3dzV2l0aEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJzKCkKIHsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKERPTVdpbmRvd1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyTWFwLCBldmVudExpc3RlbmVy
TWFwLCAoKSk7Ci0gICAgcmV0dXJuIGV2ZW50TGlzdGVuZXJNYXA7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChET01XaW5kb3dTZXQsIHdpbmRvd3NXaXRoQmVmb3JlVW5sb2FkRXZlbnRMaXN0ZW5l
cnMsICgpKTsKKyAgICByZXR1cm4gd2luZG93c1dpdGhCZWZvcmVVbmxvYWRFdmVudExpc3RlbmVy
czsKIH0KIAotc3RhdGljIGJvb2wgYWxsb3dzUGVuZGluZ0JlZm9yZVVubG9hZExpc3RlbmVycyhE
T01XaW5kb3cqIHdpbmRvdykKK3N0YXRpYyBib29sIGFsbG93c0JlZm9yZVVubG9hZExpc3RlbmVy
cyhET01XaW5kb3cqIHdpbmRvdykKIHsKICAgICBBU1NFUlRfQVJHKHdpbmRvdywgd2luZG93KTsK
ICAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAg
IHJldHVybiBwYWdlICYmIGZyYW1lID09IHBhZ2UtPm1haW5GcmFtZSgpOwotfQotCi1zdGF0aWMg
dm9pZCBhZGRQZW5kaW5nRXZlbnRMaXN0ZW5lcihET01XaW5kb3dSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lck1hcCYgbWFwLCBET01XaW5kb3cqIHdpbmRvdywgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyKQotewotICAgIEFTU0VSVF9BUkcod2luZG93LCB3aW5kb3cpOwotICAgIEFTU0VS
VF9BUkcobGlzdGVuZXIsIGxpc3RlbmVyKTsKLQotICAgIGlmIChtYXAuaXNFbXB0eSgpKQotICAg
ICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKLQotICAgIHBhaXI8RE9NV2luZG93UmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXJNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtYXAuYWRk
KHdpbmRvdywgMCk7Ci0gICAgaWYgKHJlc3VsdC5zZWNvbmQpCi0gICAgICAgIHJlc3VsdC5maXJz
dC0+c2Vjb25kID0gbmV3IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yOwotICAgIHJlc3Vs
dC5maXJzdC0+c2Vjb25kLT5hcHBlbmQobGlzdGVuZXIpOwotfQotCi1zdGF0aWMgdm9pZCByZW1v
dmVQZW5kaW5nRXZlbnRMaXN0ZW5lcihET01XaW5kb3dSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lck1h
cCYgbWFwLCBET01XaW5kb3cqIHdpbmRvdywgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyKQotewotICAgIEFTU0VSVF9BUkcod2luZG93LCB3aW5kb3cpOwotICAgIEFTU0VSVF9BUkco
bGlzdGVuZXIsIGxpc3RlbmVyKTsKLQotICAgIERPTVdpbmRvd1JlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKHdpbmRvdyk7Ci0gICAgQVNTRVJUKGl0ICE9
IG1hcC5lbmQoKSk7Ci0KLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVu
ZXJzID0gaXQtPnNlY29uZDsKLSAgICBzaXplX3QgaW5kZXggPSBsaXN0ZW5lcnMtPmZpbmQobGlz
dGVuZXIpOwotICAgIEFTU0VSVChpbmRleCAhPSBXVEY6Om5vdEZvdW5kKTsKLSAgICBsaXN0ZW5l
cnMtPnJlbW92ZShpbmRleCk7Ci0KLSAgICBpZiAoIWxpc3RlbmVycy0+aXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtYXAucmVtb3ZlKGl0KTsKLSAgICBkZWxldGUgbGlzdGVuZXJz
OwotCi0gICAgaWYgKG1hcC5pc0VtcHR5KCkpCi0gICAgICAgIGVuYWJsZVN1ZGRlblRlcm1pbmF0
aW9uKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZVBlbmRpbmdFdmVudExpc3RlbmVycyhET01X
aW5kb3dSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lck1hcCYgbWFwLCBET01XaW5kb3cqIHdpbmRvdykK
LXsKLSAgICBBU1NFUlRfQVJHKHdpbmRvdywgd2luZG93KTsKLQotICAgIFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnMgPSBtYXAudGFrZSh3aW5kb3cpOwotICAgIGlmICgh
bGlzdGVuZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWxldGUgbGlzdGVuZXJzOwotCi0g
ICAgaWYgKG1hcC5pc0VtcHR5KCkpCi0gICAgICAgIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZyYW1l
ID09IHBhZ2UtPm1haW5GcmFtZSgpOwogfQogCiBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQ
ZW5kaW5nQmVmb3JlVW5sb2FkRXZlbnRzKCkKIHsKLSAgICBET01XaW5kb3dSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lck1hcCYgbWFwID0gcGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJNYXAo
KTsKLSAgICBpZiAobWFwLmlzRW1wdHkoKSkKKyAgICBET01XaW5kb3dTZXQmIHNldCA9IHdpbmRv
d3NXaXRoQmVmb3JlVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICBpZiAoc2V0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBzdGF0aWMgYm9vbCBhbHJlYWR5RGlzcGF0
Y2hlZCA9IGZhbHNlOwpAQCAtMjA4LDIwICsxNjEsMjEgQEAgYm9vbCBET01XaW5kb3c6OmRpc3Bh
dGNoQWxsUGVuZGluZ0JlZm9yZQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZlY3RvcjxS
ZWZQdHI8RE9NV2luZG93PiA+IHdpbmRvd3M7Ci0gICAgRE9NV2luZG93UmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIG1hcEVuZCA9IG1hcC5lbmQoKTsKLSAgICBmb3IgKERPTVdp
bmRvd1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigp
OyBpdCAhPSBtYXBFbmQ7ICsraXQpCisgICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBlbmQgPSBz
ZXQuZW5kKCk7CisgICAgZm9yIChET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmZpcnN0KTsK
IAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgRE9NV2luZG93KiB3aW5kb3cgPSB3aW5kb3dz
W2ldLmdldCgpOwotICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVu
ZXJzID0gbWFwLmdldCh3aW5kb3cpOwotICAgICAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAg
aWYgKCFzZXQuY29udGFpbnMod2luZG93KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSAqbGlzdGVu
ZXJzOwogICAgICAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7Ci0gICAgICAgIGlm
ICghZnJhbWUtPnNob3VsZENsb3NlKCZsaXN0ZW5lcnNDb3B5KSkKKyAgICAgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghZnJhbWUtPnNob3VsZENs
b3NlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMzQsMTQgKzE4
OCwxMyBAQCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlCiAKIHVuc2ln
bmVkIERPTVdpbmRvdzo6cGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJzKCkgY29uc3QKIHsKLSAg
ICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzID0gcGVuZGluZ1VubG9h
ZEV2ZW50TGlzdGVuZXJNYXAoKS5nZXQoY29uc3RfY2FzdDxET01XaW5kb3cqPih0aGlzKSk7Ci0g
ICAgcmV0dXJuIGxpc3RlbmVycyA/IGxpc3RlbmVycy0+c2l6ZSgpIDogMDsKKyAgICByZXR1cm4g
d2luZG93c1dpdGhVbmxvYWRFdmVudExpc3RlbmVycygpLmNvdW50KGNvbnN0X2Nhc3Q8RE9NV2lu
ZG93Kj4odGhpcykpOwogfQogCiB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nVW5s
b2FkRXZlbnRzKCkKIHsKLSAgICBET01XaW5kb3dSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lck1hcCYg
bWFwID0gcGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJNYXAoKTsKLSAgICBpZiAobWFwLmlzRW1w
dHkoKSkKKyAgICBET01XaW5kb3dTZXQmIHNldCA9IHdpbmRvd3NXaXRoQmVmb3JlVW5sb2FkRXZl
bnRMaXN0ZW5lcnMoKTsKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgc3RhdGljIGJvb2wgYWxyZWFkeURpc3BhdGNoZWQgPSBmYWxzZTsKQEAgLTI1MCwxOSAr
MjAzLDE4IEBAIHZvaWQgRE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWQKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKLSAg
ICBET01XaW5kb3dSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lck1hcDo6aXRlcmF0b3IgbWFwRW5kID0g
bWFwLmVuZCgpOwotICAgIGZvciAoRE9NV2luZG93UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJNYXA6
Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcEVuZDsgKytpdCkKKyAgICBET01X
aW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKKyAgICBmb3IgKERPTVdpbmRvd1Nl
dDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICB3
aW5kb3dzLmFwcGVuZChpdC0+Zmlyc3QpOwogCiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBE
T01XaW5kb3cqIHdpbmRvdyA9IHdpbmRvd3NbaV0uZ2V0KCk7Ci0gICAgICAgIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnMgPSBtYXAuZ2V0KHdpbmRvdyk7Ci0gICAgICAg
IGlmICghbGlzdGVuZXJzKQorICAgICAgICBpZiAoIXNldC5jb250YWlucyh3aW5kb3cpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9y
IGxpc3RlbmVyc0NvcHkgPSAqbGlzdGVuZXJzOwotICAgICAgICB3aW5kb3ctPmRpc3BhdGNoUGFn
ZVRyYW5zaXRpb25FdmVudChFdmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgZmFsc2UpOwotICAg
ICAgICB3aW5kb3ctPmRpc3BhdGNoVW5sb2FkRXZlbnQoJmxpc3RlbmVyc0NvcHkpOworCisgICAg
ICAgIHdpbmRvdy0+ZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoRXZl
bnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIGZhbHNlKSwgd2luZG93LT5kb2N1bWVudCgpKTsKKyAg
ICAgICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVu
bG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCB3aW5kb3ctPmRvY3VtZW50KCkpOwogICAgIH0KIAog
ICAgIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CkBAIC0zNzYsOCArMzI4LDggQEAgRE9NV2lu
ZG93Ojp+RE9NV2luZG93KCkKICAgICBpZiAobV9mcmFtZSkKICAgICAgICAgbV9mcmFtZS0+Y2xl
YXJGb3JtZXJET01XaW5kb3codGhpcyk7CiAKLSAgICByZW1vdmVQZW5kaW5nRXZlbnRMaXN0ZW5l
cnMocGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJNYXAoKSwgdGhpcyk7Ci0gICAgcmVtb3ZlUGVu
ZGluZ0V2ZW50TGlzdGVuZXJzKHBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudExpc3RlbmVyTWFwKCks
IHRoaXMpOworICAgIHdpbmRvd3NXaXRoVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKS5jbGVhcih0aGlz
KTsKKyAgICB3aW5kb3dzV2l0aEJlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJzKCkuY2xlYXIodGhp
cyk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIERPTVdpbmRvdzo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0CkBAIC00NzEsNyArNDIzLDcgQEAgaW50IERPTVdpbmRvdzo6b3Jp
ZW50YXRpb24oKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lLT5vcmllbnRhdGlvbigpOwogfQog
I2VuZGlmCi0gICAgCisKIFNjcmVlbiogRE9NV2luZG93OjpzY3JlZW4oKSBjb25zdAogewogICAg
IGlmICghbV9zY3JlZW4pCkBAIC02OTIsOCArNjQ0LDcgQEAgdm9pZCBET01XaW5kb3c6OnBvc3RN
ZXNzYWdlVGltZXJGaXJlZChQbwogICAgICAgICB9CiAgICAgfQogCi0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudCh0aW1lci0+ZXZlbnQoZG9jdW1lbnQoKSksIGVj
KTsKKyAgICBkaXNwYXRjaEV2ZW50KHRpbWVyLT5ldmVudChkb2N1bWVudCgpKSk7CiB9CiAKIERP
TVNlbGVjdGlvbiogRE9NV2luZG93OjpnZXRTZWxlY3Rpb24oKQpAQCAtMTI1NSwxMDQgKzEyMDYs
MzggQEAgdm9pZCBET01XaW5kb3c6OmNsZWFySW50ZXJ2YWwoaW50IHRpbWVvdQogICAgIERPTVRp
bWVyOjpyZW1vdmVCeUlkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGltZW91dElkKTsKIH0K
IAotdm9pZCBET01XaW5kb3c6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCB1c2VDYXB0
dXJlLCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciogYWx0ZXJuYXRlTGlzdGVuZXJzKQor
Ym9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKIHsKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKGFs
dGVybmF0ZUxpc3RlbmVycyA/ICphbHRlcm5hdGVMaXN0ZW5lcnMgOiBtX2V2ZW50TGlzdGVuZXJz
KTsKLSAgICBpZiAobGlzdGVuZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSWYgYW55IEhUTUwgZXZlbnQgbGlzdGVuZXJzIGFyZSByZWdpc3RlcmVkIG9uIHRoZSB3aW5k
b3csIGRpc3BhdGNoIHRoZW0gaGVyZS4KLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3Rv
ciBsaXN0ZW5lcnNDb3B5ID0gbGlzdGVuZXJzOwotICAgIHNpemVfdCBzaXplID0gbGlzdGVuZXJz
Q29weS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHIgPSAqbGlzdGVuZXJzQ29weVtpXTsKLSAg
ICAgICAgaWYgKHIuZXZlbnRUeXBlKCkgPT0gZXZlbnQtPnR5cGUoKSAmJiByLnVzZUNhcHR1cmUo
KSA9PSB1c2VDYXB0dXJlICYmICFyLnJlbW92ZWQoKSkKLSAgICAgICAgICAgIHIubGlzdGVuZXIo
KS0+aGFuZGxlRXZlbnQoZXZlbnQsIHRydWUpOwotICAgIH0KLX0KKyAgICBpZiAoIUV2ZW50VGFy
Z2V0OjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLXZvaWQgRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGlk
ZW50aWNhbCBsaXN0ZW5lciBzZXQgd2l0aCBpZGVudGljYWwgYXJndW1lbnRzLgotICAgIC8vIFRo
ZSBET00gMiBzcGVjIHNheXMgdGhhdCAiZHVwbGljYXRlIGluc3RhbmNlcyBhcmUgZGlzY2FyZGVk
IiBpbiB0aGlzIGNhc2UuCi0gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3Rl
bmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhp
cy0+ZG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnQtPmFkZExpc3RlbmVyVHlwZUlmTmVlZGVk
KGV2ZW50VHlwZSk7CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IHJlZ2lz
dGVyZWRMaXN0ZW5lciA9IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpjcmVhdGUoZXZlbnRUeXBl
LCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci0gICAgbV9ldmVudExpc3RlbmVycy5hcHBlbmQocmVn
aXN0ZXJlZExpc3RlbmVyKTsKLQogICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnVu
bG9hZEV2ZW50KQotICAgICAgICBhZGRQZW5kaW5nRXZlbnRMaXN0ZW5lcihwZW5kaW5nVW5sb2Fk
RXZlbnRMaXN0ZW5lck1hcCgpLCB0aGlzLCByZWdpc3RlcmVkTGlzdGVuZXIuZ2V0KCkpOwotICAg
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuYmVmb3JldW5sb2FkRXZlbnQgJiYg
YWxsb3dzUGVuZGluZ0JlZm9yZVVubG9hZExpc3RlbmVycyh0aGlzKSkKLSAgICAgICAgYWRkUGVu
ZGluZ0V2ZW50TGlzdGVuZXIocGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50TGlzdGVuZXJNYXAoKSwg
dGhpcywgcmVnaXN0ZXJlZExpc3RlbmVyLmdldCgpKTsKLX0KKyAgICAgICAgd2luZG93c1dpdGhV
bmxvYWRFdmVudExpc3RlbmVycygpLmFkZCh0aGlzKTsKKyAgICBlbHNlIGlmIChldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50ICYmIGFsbG93c0JlZm9yZVVubG9hZExp
c3RlbmVycyh0aGlzKSkKKyAgICAgICAgd2luZG93c1dpdGhCZWZvcmVVbmxvYWRFdmVudExpc3Rl
bmVycygpLmFkZCh0aGlzKTsKIAotdm9pZCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBi
b29sIHVzZUNhcHR1cmUpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBtX2V2ZW50TGlzdGVuZXJzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgciA9ICptX2V2ZW50TGlzdGVuZXJzW2ldOwotICAgICAg
ICBpZiAoci5ldmVudFR5cGUoKSA9PSBldmVudFR5cGUgJiYgci51c2VDYXB0dXJlKCkgPT0gdXNl
Q2FwdHVyZSAmJiAqci5saXN0ZW5lcigpID09ICpsaXN0ZW5lcikgewotICAgICAgICAgICAgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCi0gICAgICAgICAgICAgICAg
cmVtb3ZlUGVuZGluZ0V2ZW50TGlzdGVuZXIocGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJNYXAo
KSwgdGhpcywgJnIpOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5iZWZvcmV1bmxvYWRFdmVudCAmJiBhbGxvd3NQZW5kaW5nQmVmb3JlVW5sb2FkTGlzdGVu
ZXJzKHRoaXMpKQotICAgICAgICAgICAgICAgIHJlbW92ZVBlbmRpbmdFdmVudExpc3RlbmVyKHBl
bmRpbmdCZWZvcmVVbmxvYWRFdmVudExpc3RlbmVyTWFwKCksIHRoaXMsICZyKTsKLSAgICAgICAg
ICAgIHIuc2V0UmVtb3ZlZCh0cnVlKTsKLSAgICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMucmVt
b3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29s
IERPTVdpbmRvdzo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBlLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0KLSAg
ICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gZTsKLSAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LT50eXBl
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVE
X0VWRU5UX1RZUEVfRVJSOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8RE9NV2luZG93PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlz
KTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLQotICAgIGhhbmRsZUV2ZW50
KGV2ZW50LmdldCgpLCB0cnVlKTsKLSAgICBoYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2Up
OwotCi0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwotfQotCi12b2lkIERP
TVdpbmRvdzo6ZGlzcGF0Y2hFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9v
bCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSkKLXsKLSAgICBBU1NFUlQoIWV2ZW50RGlzcGF0
Y2hGb3JiaWRkZW4oKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKSwgZWMp
OworICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGFjY29tbW9kYXRlcyB0
aGUgRmlyZWZveCBxdWlyayBvZiBkaXNwYXRjaGluZyB0aGUgbG9hZCwgdW5sb2FkIGFuZAotLy8g
YmVmb3JldW5sb2FkIGV2ZW50cyBvbiB0aGUgd2luZG93LCBidXQgc2V0dGluZyBldmVudC50YXJn
ZXQgdG8gYmUgdGhlIERvY3VtZW50LiAKLWlubGluZSB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hF
dmVudFdpdGhEb2N1bWVudEFzVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnQ+IGUsIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyVmVjdG9yKiBhbHRlcm5hdGVFdmVudExpc3RlbmVycykKK2Jvb2wgRE9NV2lu
ZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewotICAgIEFTU0VSVCgh
ZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLQotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBl
OwotICAgIFJlZlB0cjxET01XaW5kb3c+IHByb3RlY3QodGhpcyk7Ci0gICAgUmVmUHRyPERvY3Vt
ZW50PiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CisgICAgaWYgKCFFdmVudFRhcmdldDo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXZlbnQtPnNldFRhcmdldChkb2N1bWVudCk7Ci0g
ICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCisgICAgICAgIHdpbmRvd3NXaXRoVW5sb2FkRXZlbnRM
aXN0ZW5lcnMoKS5yZW1vdmUodGhpcyk7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50
TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCAmJiBhbGxvd3NCZWZvcmVVbmxvYWRMaXN0ZW5lcnMo
dGhpcykpCisgICAgICAgIHdpbmRvd3NXaXRoQmVmb3JlVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKS5y
ZW1vdmUodGhpcyk7CiAKLSAgICBoYW5kbGVFdmVudChldmVudC5nZXQoKSwgdHJ1ZSwgYWx0ZXJu
YXRlRXZlbnRMaXN0ZW5lcnMpOwotICAgIGhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSwg
YWx0ZXJuYXRlRXZlbnRMaXN0ZW5lcnMpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIERP
TVdpbmRvdzo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogewotICAgIGRpc3BhdGNoRXZlbnRXaXRoRG9j
dW1lbnRBc1RhcmdldChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNl
LCBmYWxzZSkpOworICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
bG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBkb2N1bWVudCgpKTsKIAogICAgIC8vIEZvciBsb2Fk
IGV2ZW50cywgc2VuZCBhIHNlcGFyYXRlIGxvYWQgZXZlbnQgdG8gdGhlIGVuY2xvc2luZyBmcmFt
ZSBvbmx5LgogICAgIC8vIFRoaXMgaXMgYSBET00gZXh0ZW5zaW9uIGFuZCBpcyBpbmRlcGVuZGVu
dCBvZiBidWJibGluZy9jYXB0dXJpbmcgcnVsZXMgb2YKQEAgLTEzNjUsNzU5ICsxMjUwLDQ0IEBA
IHZvaWQgRE9NV2luZG93OjpkaXNwYXRjaExvYWRFdmVudCgpCiAgICAgfQogfQogCi12b2lkIERP
TVdpbmRvdzo6ZGlzcGF0Y2hVbmxvYWRFdmVudChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3Rv
ciogYWx0ZXJuYXRlRXZlbnRMaXN0ZW5lcnMpCitib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJw
VGFyZ2V0KQogewotICAgIGRpc3BhdGNoRXZlbnRXaXRoRG9jdW1lbnRBc1RhcmdldChFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgYWx0ZXJuYXRl
RXZlbnRMaXN0ZW5lcnMpOwotfQorICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcHJvdGVjdCA9IHRo
aXM7CisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwogCi1QYXNzUmVmUHRyPEJl
Zm9yZVVubG9hZEV2ZW50PiBET01XaW5kb3c6OmRpc3BhdGNoQmVmb3JlVW5sb2FkRXZlbnQoUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3IqIGFsdGVybmF0ZUV2ZW50TGlzdGVuZXJzKQotewot
ICAgIFJlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBCZWZvcmVV
bmxvYWRFdmVudDo6Y3JlYXRlKCk7Ci0gICAgZGlzcGF0Y2hFdmVudFdpdGhEb2N1bWVudEFzVGFy
Z2V0KGJlZm9yZVVubG9hZEV2ZW50LmdldCgpLCBhbHRlcm5hdGVFdmVudExpc3RlbmVycyk7Ci0g
ICAgcmV0dXJuIGJlZm9yZVVubG9hZEV2ZW50LnJlbGVhc2UoKTsKLX0KKyAgICBldmVudC0+c2V0
VGFyZ2V0KHBycFRhcmdldCA/IHBycFRhcmdldCA6IHRoaXMpOworICAgIGV2ZW50LT5zZXRDdXJy
ZW50VGFyZ2V0KHRoaXMpOworICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJH
RVQpOwogCi12b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hQYWdlVHJhbnNpdGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIHBlcnNpc3RlZCkKLXsKLSAgICBkaXNwYXRj
aEV2ZW50V2l0aERvY3VtZW50QXNUYXJnZXQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50VHlwZSwgcGVyc2lzdGVkKSk7CisgICAgcmV0dXJuIGZpcmVFdmVudExpc3RlbmVycyhldmVu
dC5nZXQoKSk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygp
CiB7Ci0gICAgc2l6ZV90IHNpemUgPSBtX2V2ZW50TGlzdGVuZXJzLnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9ldmVudExpc3RlbmVyc1tp
XS0+c2V0UmVtb3ZlZCh0cnVlKTsKLSAgICBtX2V2ZW50TGlzdGVuZXJzLmNsZWFyKCk7Ci0KLSAg
ICByZW1vdmVQZW5kaW5nRXZlbnRMaXN0ZW5lcnMocGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJN
YXAoKSwgdGhpcyk7Ci0gICAgcmVtb3ZlUGVuZGluZ0V2ZW50TGlzdGVuZXJzKHBlbmRpbmdCZWZv
cmVVbmxvYWRFdmVudExpc3RlbmVyTWFwKCksIHRoaXMpOwotfQotCi1ib29sIERPTVdpbmRvdzo6
aGFzRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKLXsKLSAgICBz
aXplX3Qgc2l6ZSA9IG1fZXZlbnRMaXN0ZW5lcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2V2ZW50TGlzdGVuZXJzW2ldLT5l
dmVudFR5cGUoKSA9PSBldmVudFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBsaXN0ZW5lcikKLXsKLSAgICBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnRUeXBlKTsKLSAgICBpZiAobGlzdGVuZXIpCi0gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIo
ZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpOwotfQotCi12b2lkIERPTVdpbmRvdzo6Y2xlYXJB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotewot
ICAgIHNpemVfdCBzaXplID0gbV9ldmVudExpc3RlbmVycy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXImIHIgPSAqbV9ldmVudExpc3RlbmVyc1tpXTsKLSAgICAgICAgaWYgKHIuZXZlbnRUeXBlKCkg
PT0gZXZlbnRUeXBlICYmIHIubGlzdGVuZXIoKS0+aXNBdHRyaWJ1dGUoKSkgewotICAgICAgICAg
ICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpCi0gICAgICAgICAg
ICAgICAgcmVtb3ZlUGVuZGluZ0V2ZW50TGlzdGVuZXIocGVuZGluZ1VubG9hZEV2ZW50TGlzdGVu
ZXJNYXAoKSwgdGhpcywgJnIpOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCAmJiBhbGxvd3NQZW5kaW5nQmVmb3JlVW5sb2Fk
TGlzdGVuZXJzKHRoaXMpKQotICAgICAgICAgICAgICAgIHJlbW92ZVBlbmRpbmdFdmVudExpc3Rl
bmVyKHBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudExpc3RlbmVyTWFwKCksIHRoaXMsICZyKTsKLSAg
ICAgICAgICAgIHIuc2V0UmVtb3ZlZCh0cnVlKTsKLSAgICAgICAgICAgIG1fZXZlbnRMaXN0ZW5l
cnMucmVtb3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IHNpemUgPSBt
X2V2ZW50TGlzdGVuZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgciA9ICptX2V2ZW50TGlz
dGVuZXJzW2ldOwotICAgICAgICBpZiAoci5ldmVudFR5cGUoKSA9PSBldmVudFR5cGUgJiYgci5s
aXN0ZW5lcigpLT5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHIubGlzdGVuZXIo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6
b25hYm9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25hYm9y
dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYWJvcnRFdmVudCwgZXZlbnRMaXN0ZW5l
cik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25ibHVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmx1ckV2ZW50
KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9uYmx1cihQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuYmx1ckV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciog
RE9NV2luZG93OjpvbmNoYW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5k
b3c6OnNldE9uY2hhbmdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikK
LXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25jbGlj
aygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25jbGljayhQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19
Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25kYmxjbGljaygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRibGNsaWNrRXZl
bnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25kYmxjbGljayhQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50
TGlzdGVuZXIqIERPTVdpbmRvdzo6b25kcmFnKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ0V2ZW50KTsKLX0KLQotdm9pZCBE
T01XaW5kb3c6OnNldE9uZHJhZyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ0V2
ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmRy
YWdlbmQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25kcmFn
ZW5kKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9uZHJhZ2VudGVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
ZHJhZ2VudGVyRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25kcmFnZW50ZXIoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdlbnRlckV2ZW50LCBldmVudExpc3RlbmVy
KTsKLX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmRyYWdsZWF2ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWds
ZWF2ZUV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9uZHJhZ2xlYXZlKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19
Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25kcmFnb3ZlcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdvdmVyRXZl
bnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25kcmFnb3ZlcihQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50
TGlzdGVuZXIqIERPTVdpbmRvdzo6b25kcmFnc3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCk7Ci19
Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRPbmRyYWdzdGFydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3Rl
bmVyKiBET01XaW5kb3c6Om9uZHJvcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyb3BFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2lu
ZG93OjpzZXRPbmRyb3AoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQot
ewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyb3BFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25lcnJvcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmVycm9yRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25lcnJvcihQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0K
LUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25mb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpOwotfQot
Ci12b2lkIERPTVdpbmRvdzo6c2V0T25mb2N1cyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2
ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkuZm9jdXNFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdp
bmRvdzo6b25oYXNoY2hhbmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuaGFzaGNoYW5nZUV2ZW50KTsKLX0KLQotdm9pZCBET01X
aW5kb3c6OnNldE9uaGFzaGNoYW5nZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuaGFz
aGNoYW5nZUV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2lu
ZG93OjpvbmtleWRvd24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6
c2V0T25rZXlkb3duKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsK
LSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ua2V5cHJl
c3MoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ua2V5cHJl
c3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ua2V5dXAoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5rZXl1
cEV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ua2V5dXAoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmtleXVwRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExp
c3RlbmVyKiBET01XaW5kb3c6Om9ubG9hZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7Ci19Ci0KLXZvaWQgRE9N
V2luZG93OjpzZXRPbmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25tb3Vz
ZWRvd24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRPbm1v
dXNlZG93bihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAg
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ubW91c2Vtb3Zl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkubW91c2Vtb3ZlRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25tb3VzZW1v
dmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCBldmVudExp
c3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNlb3V0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
bW91c2VvdXRFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRPbm1vdXNlb3V0KFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50LCBldmVudExpc3RlbmVyKTsK
LX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1vdXNlb3ZlcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlb3Zl
ckV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2VvdmVyKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0K
LUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25tb3VzZXVwKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KTsK
LX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ubW91c2V1cChQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5l
ciogRE9NV2luZG93Ojpvbm1vdXNld2hlZWwoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpOwotfQotCi12
b2lkIERPTVdpbmRvdzo6c2V0T25tb3VzZXdoZWVsKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5tb3VzZXdoZWVsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVy
KiBET01XaW5kb3c6Om9ub2ZmbGluZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm9mZmxpbmVFdmVudCk7Ci19Ci0KLXZvaWQgRE9N
V2luZG93OjpzZXRPbm9mZmxpbmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm9mZmxp
bmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6
b25vbmxpbmUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5vbmxpbmVFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRPbm9u
bGluZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkub25saW5lRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ucGFnZWhpZGUoKSBjb25z
dAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5w
YWdlaGlkZUV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ucGFnZWhpZGUoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwot
fQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ucGFnZXNob3coKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2
ZW50KTsKLX0KKyAgICBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAot
dm9pZCBET01XaW5kb3c6OnNldE9ucGFnZXNob3coUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLnBhZ2VzaG93RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBE
T01XaW5kb3c6Om9ucmVzZXQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6
OnNldE9ucmVzZXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewot
ICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJlc2V0RXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ucmVzaXplKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkucmVzaXplRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25yZXNpemUoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0K
LQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnNjcm9sbCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50KTsK
LX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9uc2Nyb2xsKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5zY3JvbGxFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIq
IERPTVdpbmRvdzo6b25zZWFyY2goKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2lu
ZG93OjpzZXRPbnNlYXJjaChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
Ci17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VhcmNoRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9uc2Vs
ZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuc2VsZWN0RXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25zZWxlY3Qo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50LCBldmVudExpc3RlbmVy
KTsKLX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnN0b3JhZ2UoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdG9yYWdl
RXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25zdG9yYWdlKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVu
dExpc3RlbmVyKiBET01XaW5kb3c6Om9uc3VibWl0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VibWl0RXZlbnQpOwotfQotCi12
b2lkIERPTVdpbmRvdzo6c2V0T25zdWJtaXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LnN1Ym1pdEV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2lu
ZG93OjpvbnVubG9hZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNl
dE9udW5sb2FkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAg
ICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZXZl
bnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25iZWZvcmV1bmxv
YWQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5iZWZvcmV1bmxvYWRFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRPbmJl
Zm9yZXVubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0g
ICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVmb3JldW5sb2FkRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ud2Vi
a2l0YW5pbWF0aW9uc3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50KTsKLX0KLQot
dm9pZCBET01XaW5kb3c6OnNldE9ud2Via2l0YW5pbWF0aW9uc3RhcnQoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ud2Via2l0YW5pbWF0aW9uaXRlcmF0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQpOwotfQotCi12b2lkIERPTVdp
bmRvdzo6c2V0T253ZWJraXRhbmltYXRpb25pdGVyYXRpb24oUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50LCBldmVudExpc3RlbmVyKTsK
LX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbndlYmtpdGFuaW1hdGlvbmVuZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ud2Vi
a2l0YW5pbWF0aW9uZW5kKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikK
LXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRBbmlt
YXRpb25FbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdp
bmRvdzo6b253ZWJraXR0cmFuc2l0aW9uZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50
KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ud2Via2l0dHJhbnNpdGlvbmVuZChQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBldmVudExp
c3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbmNhbnBsYXkoKSBjb25z
dAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5j
YW5wbGF5RXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25jYW5wbGF5KFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jYW5wbGF5RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQot
Ci1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9uY2FucGxheXRocm91Z2goKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jYW5wbGF5
dGhyb3VnaEV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9uY2FucGxheXRocm91Z2go
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNhbnBsYXl0aHJvdWdoRXZlbnQsIGV2ZW50
TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9uZHVyYXRpb25jaGFu
Z2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9u
ZHVyYXRpb25jaGFuZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQot
ewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmR1cmF0aW9uY2hh
bmdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6
Om9uZW1wdGllZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmVtcHRpZWRFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRP
bmVtcHRpZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAg
IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmVtcHRpZWRFdmVudCwgZXZl
bnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25lbmRlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmVuZGVkRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25lbmRlZChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuZW5kZWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgd2lu
ZG93c1dpdGhVbmxvYWRFdmVudExpc3RlbmVycygpLmNsZWFyKHRoaXMpOworICAgIHdpbmRvd3NX
aXRoQmVmb3JlVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKS5jbGVhcih0aGlzKTsKIH0KIAotRXZlbnRM
aXN0ZW5lciogRE9NV2luZG93OjpvbmxvYWRlZGRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2FkZWRkYXRhRXZlbnQpOwot
fQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25sb2FkZWRkYXRhKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5sb2FkZWRkYXRhRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExp
c3RlbmVyKiBET01XaW5kb3c6Om9ubG9hZGVkbWV0YWRhdGEoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2FkZWRtZXRhZGF0YUV2
ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ubG9hZGVkbWV0YWRhdGEoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRlZG1ldGFkYXRhRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ucGF1c2UoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50
KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ucGF1c2UoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLnBhdXNlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVy
KiBET01XaW5kb3c6Om9ucGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBsYXlFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93
OjpzZXRPbnBsYXkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewot
ICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBsYXlFdmVudCwgZXZl
bnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25wbGF5aW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkucGxheWluZ0V2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ucGxheWluZyhQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucGxheWluZ0V2ZW50LCBldmVudExpc3RlbmVyKTsK
LX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93OjpvbnJhdGVjaGFuZ2UoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yYXRlY2hh
bmdlRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25yYXRlY2hhbmdlKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwot
fQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9uc2Vla2VkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2Vla2VkRXZlbnQp
OwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25zZWVrZWQoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLnNlZWtlZEV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5l
ciogRE9NV2luZG93OjpvbnNlZWtpbmcoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWVraW5nRXZlbnQpOwotfQotCi12b2lkIERP
TVdpbmRvdzo6c2V0T25zZWVraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWVr
aW5nRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6
Om9udGltZXVwZGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93
OjpzZXRPbnRpbWV1cGRhdGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnRpbWV1cGRh
dGVFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6
b252b2x1bWVjaGFuZ2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS52b2x1bWVjaGFuZ2VFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2lu
ZG93OjpzZXRPbnZvbHVtZWNoYW5nZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkudm9s
dW1lY2hhbmdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01X
aW5kb3c6Om9ud2FpdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLndhaXRpbmdFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93
OjpzZXRPbndhaXRpbmcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQot
ewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLndhaXRpbmdFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25sb2Fk
c3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRPbmxv
YWRzdGFydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAg
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZHN0YXJ0RXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9ucHJvZ3Jlc3Mo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5wcm9ncmVzc0V2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9ucHJvZ3Jlc3Mo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9uc3RhbGxlZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN0YWxs
ZWRFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRPbnN0YWxsZWQoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnN0YWxsZWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2
ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25zdXNwZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VzcGVuZEV2ZW50KTsKLX0K
LQotdm9pZCBET01XaW5kb3c6OnNldE9uc3VzcGVuZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuc3VzcGVuZEV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciog
RE9NV2luZG93OjpvbmlucHV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuaW5wdXRFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93
OjpzZXRPbmlucHV0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsK
LSAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50LCBl
dmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpvbm1lc3NhZ2Uo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5tZXNzYWdlRXZlbnQpOwotfQotCi12b2lkIERPTVdpbmRvdzo6c2V0T25tZXNzYWdlKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBzZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9uY29udGV4dG1lbnUoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb250
ZXh0bWVudUV2ZW50KTsKLX0KLQotdm9pZCBET01XaW5kb3c6OnNldE9uY29udGV4dG1lbnUoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6Om9uaW52YWxpZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmludmFs
aWRFdmVudCk7Ci19Ci0KLXZvaWQgRE9NV2luZG93OjpzZXRPbmludmFsaWQoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLSNp
ZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQotRXZlbnRMaXN0ZW5lciogRE9NV2luZG93Ojpv
bm9yaWVudGF0aW9uY2hhbmdlKCkgY29uc3QKK3ZvaWQgRE9NV2luZG93OjpjYXB0dXJlRXZlbnRz
KCkKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
b3JpZW50YXRpb25jaGFuZ2VFdmVudCk7CisgICAgLy8gTm90IGltcGxlbWVudGVkLgogfQogCi12
b2lkIERPTVdpbmRvdzo6c2V0T25vcmllbnRhdGlvbmNoYW5nZShQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCit2b2lkIERPTVdpbmRvdzo6cmVsZWFzZUV2ZW50cygpCiB7
Ci0gICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkub3JpZW50YXRpb25j
aGFuZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgLy8gTm90IGltcGxlbWVudGVkLgogfQot
I2VuZGlmCiAKLXZvaWQgRE9NV2luZG93OjpjYXB0dXJlRXZlbnRzKCkKK0V2ZW50VGFyZ2V0RGF0
YSogRE9NV2luZG93OjpldmVudFRhcmdldERhdGEoKQogewotICAgIC8vIE5vdCBpbXBsZW1lbnRl
ZC4KKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCi12b2lkIERPTVdpbmRvdzo6
cmVsZWFzZUV2ZW50cygpCitFdmVudFRhcmdldERhdGEqIERPTVdpbmRvdzo6ZW5zdXJlRXZlbnRU
YXJnZXREYXRhKCkKIHsKLSAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCisgICAgcmV0dXJuICZtX2V2
ZW50VGFyZ2V0RGF0YTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cu
aAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNywxNjQgKzIzNyw4NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgLy8gRXZlbnRzCiAgICAgICAgIC8vIEV2ZW50VGFyZ2V0IEFQSQotICAgICAgICB2aXJ0dWFs
IHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICAg
ICAgdmlydHVhbCBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAotICAgICAgICB2b2lkIGhhbmRs
ZUV2ZW50KEV2ZW50KiwgYm9vbCB1c2VDYXB0dXJlLCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZl
Y3RvciogPSAwKTsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUpOworICAgICAg
ICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKKyAgICAgICAgYm9vbCBkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
PiBwcnBUYXJnZXQpOwogICAgICAgICB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCk7Ci0gICAgICAg
IHZvaWQgZGlzcGF0Y2hVbmxvYWRFdmVudChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3Rvciog
PSAwKTsKLSAgICAgICAgUGFzc1JlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gZGlzcGF0Y2hCZWZv
cmVVbmxvYWRFdmVudChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciogPSAwKTsKLSAgICAg
ICAgdm9pZCBkaXNwYXRjaFBhZ2VUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGJvb2wgcGVyc2lzdGVkKTsKLQotICAgICAgICAvLyBVc2VkIGZvciBsZWdhY3kg
Im9uRXZlbnQiIHByb3BlcnR5IEFQSXMuCi0gICAgICAgIHZvaWQgc2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPik7Ci0gICAgICAgIHZvaWQgY2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogZ2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7
Ci0KLSAgICAgICAgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3ImIGV2ZW50TGlz
dGVuZXJzKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQotICAgICAgICBib29s
IGhhc0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwotICAgICAg
ICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Ci0KLSAgICAgICAgRXZlbnRMaXN0ZW5l
ciogb25hYm9ydCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uYWJvcnQoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uYmx1cigpIGNvbnN0Owot
ICAgICAgICB2b2lkIHNldE9uYmx1cihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAg
ICAgRXZlbnRMaXN0ZW5lciogb25jaGFuZ2UoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmNo
YW5nZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciog
b25jbGljaygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uY2xpY2soUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uZGJsY2xpY2soKSBjb25zdDsK
LSAgICAgICAgdm9pZCBzZXRPbmRibGNsaWNrKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwot
ICAgICAgICBFdmVudExpc3RlbmVyKiBvbmRyYWcoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRP
bmRyYWcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIq
IG9uZHJhZ2VuZCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uZHJhZ2VuZChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25kcmFnZW50ZXIoKSBj
b25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmRyYWdlbnRlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25kcmFnbGVhdmUoKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBzZXRPbmRyYWdsZWF2ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAg
ICAgRXZlbnRMaXN0ZW5lciogb25kcmFnb3ZlcigpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9u
ZHJhZ292ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVu
ZXIqIG9uZHJhZ3N0YXJ0KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25kcmFnc3RhcnQoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uZHJvcCgp
IGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uZHJvcChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0OwotICAgICAgICB2b2lk
IHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlz
dGVuZXIqIG9uZm9jdXMoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmZvY3VzKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmhhc2hjaGFuZ2Uo
KSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmhhc2hjaGFuZ2UoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ua2V5ZG93bigpIGNvbnN0OwotICAg
ICAgICB2b2lkIHNldE9ua2V5ZG93bihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAg
ICAgRXZlbnRMaXN0ZW5lciogb25rZXlwcmVzcygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9u
a2V5cHJlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVu
ZXIqIG9ua2V5dXAoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmtleXVwKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmxvYWQoKSBjb25zdDsK
LSAgICAgICAgdm9pZCBzZXRPbmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAg
ICAgIEV2ZW50TGlzdGVuZXIqIG9ubW91c2Vkb3duKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
T25tb3VzZWRvd24oUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlz
dGVuZXIqIG9ubW91c2Vtb3ZlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25tb3VzZW1vdmUo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubW91
c2VvdXQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbm1vdXNlb3V0KFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1vdXNlb3ZlcigpIGNvbnN0
OwotICAgICAgICB2b2lkIHNldE9ubW91c2VvdmVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4p
OwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1vdXNldXAoKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBzZXRPbm1vdXNldXAoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50
TGlzdGVuZXIqIG9ubW91c2V3aGVlbCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9ubW91c2V3
aGVlbChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciog
b25vZmZsaW5lKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25vZmZsaW5lKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbm9ubGluZSgpIGNvbnN0
OwotICAgICAgICB2b2lkIHNldE9ub25saW5lKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwot
ICAgICAgICBFdmVudExpc3RlbmVyKiBvbnBhZ2VoaWRlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
c2V0T25wYWdlaGlkZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRM
aXN0ZW5lciogb25wYWdlc2hvdygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9ucGFnZXNob3co
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ucmVz
ZXQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbnJlc2V0KFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbnJlc2l6ZSgpIGNvbnN0OwotICAgICAg
ICB2b2lkIHNldE9ucmVzaXplKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBF
dmVudExpc3RlbmVyKiBvbnNjcm9sbCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uc2Nyb2xs
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbnNl
YXJjaCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uc2VhcmNoKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbnNlbGVjdCgpIGNvbnN0OwotICAg
ICAgICB2b2lkIHNldE9uc2VsZWN0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAg
ICBFdmVudExpc3RlbmVyKiBvbnN0b3JhZ2UoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbnN0
b3JhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIq
IG9uc3VibWl0KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25zdWJtaXQoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9udW5sb2FkKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgc2V0T251bmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0g
ICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uYmVmb3JldW5sb2FkKCkgY29uc3Q7Ci0gICAgICAgIHZv
aWQgc2V0T25iZWZvcmV1bmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAg
IEV2ZW50TGlzdGVuZXIqIG9ud2Via2l0YW5pbWF0aW9uc3RhcnQoKSBjb25zdDsKLSAgICAgICAg
dm9pZCBzZXRPbndlYmtpdGFuaW1hdGlvbnN0YXJ0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4p
OwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbigpIGNv
bnN0OwotICAgICAgICB2b2lkIHNldE9ud2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbndlYmtpdGFuaW1h
dGlvbmVuZCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9ud2Via2l0YW5pbWF0aW9uZW5kKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbndlYmtp
dHRyYW5zaXRpb25lbmQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbndlYmtpdHRyYW5zaXRp
b25lbmQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIq
IG9uY2FucGxheSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uY2FucGxheShQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25jYW5wbGF5dGhyb3Vn
aCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uY2FucGxheXRocm91Z2goUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uZHVyYXRpb25jaGFuZ2Uo
KSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmR1cmF0aW9uY2hhbmdlKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmVtcHRpZWQoKSBjb25zdDsK
LSAgICAgICAgdm9pZCBzZXRPbmVtcHRpZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0g
ICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uZW5kZWQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRP
bmVuZGVkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVy
KiBvbmxvYWRlZGRhdGEoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmxvYWRlZGRhdGEoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubG9hZGVk
bWV0YWRhdGEoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmxvYWRlZG1ldGFkYXRhKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbnBhdXNlKCkg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25wYXVzZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25wbGF5KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
c2V0T25wbGF5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3Rl
bmVyKiBvbnBsYXlpbmcoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbnBsYXlpbmcoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ucmF0ZWNoYW5n
ZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9ucmF0ZWNoYW5nZShQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25zZWVrZWQoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzZXRPbnNlZWtlZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAg
ICAgRXZlbnRMaXN0ZW5lciogb25zZWVraW5nKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25z
ZWVraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVy
KiBvbnRpbWV1cGRhdGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbnRpbWV1cGRhdGUoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9udm9sdW1l
Y2hhbmdlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T252b2x1bWVjaGFuZ2UoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ud2FpdGluZygpIGNv
bnN0OwotICAgICAgICB2b2lkIHNldE9ud2FpdGluZyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25sb2Fkc3RhcnQoKSBjb25zdDsKLSAgICAgICAg
dm9pZCBzZXRPbmxvYWRzdGFydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAg
RXZlbnRMaXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9ucHJv
Z3Jlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIq
IG9uc3RhbGxlZCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uc3RhbGxlZChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25zdXNwZW5kKCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgc2V0T25zdXNwZW5kKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4p
OwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmlucHV0KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
c2V0T25pbnB1dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0
ZW5lciogb25tZXNzYWdlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmNvbnRleHRt
ZW51KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25jb250ZXh0bWVudShQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25pbnZhbGlkKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgc2V0T25pbnZhbGlkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwor
CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOworICAgICAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGJsdXIpOworICAgICAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNoYW5nZSk7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoY2xpY2spOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGRibGNsaWNrKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihkcmFnKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihkcmFn
ZW5kKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihkcmFnZW50ZXIp
OworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGRyYWdsZWF2ZSk7Cisg
ICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZHJhZ292ZXIpOworICAgICAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGRyYWdzdGFydCk7CisgICAgICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZHJvcCk7CisgICAgICAgIERFRklORV9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKGZvY3VzKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihoYXNoY2hhbmdlKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihrZXlkb3duKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihrZXlw
cmVzcyk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoa2V5dXApOwor
ICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWQpOworICAgICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG1vdXNlZG93bik7CisgICAgICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobW91c2Vtb3ZlKTsKKyAgICAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihtb3VzZW91dCk7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIobW91c2VvdmVyKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihtb3VzZXVwKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihtb3VzZXdoZWVsKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihvZmZsaW5lKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihv
bmxpbmUpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBhZ2VoaWRl
KTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihwYWdlc2hvdyk7Cisg
ICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocmVzZXQpOworICAgICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHJlc2l6ZSk7CisgICAgICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2Nyb2xsKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihzZWFyY2gpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKHNlbGVjdCk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoc3RvcmFnZSk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc3Vi
bWl0KTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih1bmxvYWQpOwor
ICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGJlZm9yZXVubG9hZCk7Cisg
ICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY2FucGxheSk7CisgICAgICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY2FucGxheXRocm91Z2gpOworICAgICAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGR1cmF0aW9uY2hhbmdlKTsKKyAgICAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlbXB0aWVkKTsKKyAgICAgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlbmRlZCk7CisgICAgICAgIERFRklORV9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIobG9hZGVkZGF0YSk7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIobG9hZGVkbWV0YWRhdGEpOworICAgICAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKHBhdXNlKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihwbGF5KTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihwbGF5aW5nKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihyYXRl
Y2hhbmdlKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzZWVrZWQp
OworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlZWtpbmcpOworICAg
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHRpbWV1cGRhdGUpOworICAgICAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHZvbHVtZWNoYW5nZSk7CisgICAgICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2FpdGluZyk7CisgICAgICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZHN0YXJ0KTsKKyAgICAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihwcm9ncmVzcyk7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoc3RhbGxlZCk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoc3VzcGVuZCk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoaW5wdXQpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG1l
c3NhZ2UpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbnRleHRt
ZW51KTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihpbnZhbGlkKTsK
ICNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQotICAgICAgICBFdmVudExpc3RlbmVyKiBv
bm9yaWVudGF0aW9uY2hhbmdlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25vcmllbnRhdGlv
bmNoYW5nZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKKyAgICAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUihvcmllbnRhdGlvbmNoYW5nZSk7CiAjZW5kaWYKIAorICAgICAg
ICBERUZJTkVfTUFQUEVEX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRhbmltYXRpb25z
dGFydCwgd2Via2l0QW5pbWF0aW9uU3RhcnQpOworICAgICAgICBERUZJTkVfTUFQUEVEX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRhbmltYXRpb25pdGVyYXRpb24sIHdlYmtpdEFuaW1h
dGlvbkl0ZXJhdGlvbik7CisgICAgICAgIERFRklORV9NQVBQRURfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKHdlYmtpdGFuaW1hdGlvbmVuZCwgd2Via2l0QW5pbWF0aW9uRW5kKTsKKyAgICAgICAg
REVGSU5FX01BUFBFRF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Via2l0dHJhbnNpdGlvbmVu
ZCwgd2Via2l0VHJhbnNpdGlvbkVuZCk7CisKICAgICAgICAgdm9pZCBjYXB0dXJlRXZlbnRzKCk7
CiAgICAgICAgIHZvaWQgcmVsZWFzZUV2ZW50cygpOwogCkBAIC00MjgsOCArMzQ5LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgp
IHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRl
cmVmKCk7IH0KLQotICAgICAgICB2b2lkIGRpc3BhdGNoRXZlbnRXaXRoRG9jdW1lbnRBc1Rhcmdl
dChQYXNzUmVmUHRyPEV2ZW50PiwgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3IqID0gMCk7
CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKKyAg
ICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwog
CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKICAgICAg
ICAgS1VSTCBtX3VybDsKQEAgLTQ1OCw3ICszNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIG11dGFibGUgUmVmUHRyPE5vdGlmaWNhdGlvbkNlbnRlcj4gbV9ub3RpZmljYXRpb25z
OwogI2VuZGlmCiAKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3IgbV9ldmVu
dExpc3RlbmVyczsKKyAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZp
c2lvbiA0ODY4NikKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBDdXN0b21OYXRpdmVD
b252ZXJ0ZXIsCiAgICAgICAgIEN1c3RvbVB1dEZ1bmN0aW9uLAogICAgICAgICBFeHRlbmRzRE9N
R2xvYmFsT2JqZWN0LAorICAgICAgICBFdmVudFRhcmdldCwKICAgICAgICAgR2VuZXJhdGVOYXRp
dmVDb252ZXJ0ZXIsCiAgICAgICAgIExlZ2FjeVBhcmVudD1KU0RPTVdpbmRvd0Jhc2UKICAgICBd
IERPTVdpbmRvdyB7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNDg2ODYpCisr
KyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5Nyw3
ICsxODk3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmNhbk1vdXNlRG93blN0YXJ0U2VsZQogICAg
ICAgICAgICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBub2RlLT5yZW5kZXJlcigp
OyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKICAgICAgICAgaWYgKE5vZGUqIG5vZGUg
PSBjdXJyLT5ub2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZS0+ZGlzcGF0Y2hFdmVudChl
dmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZS0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zZWxl
Y3RzdGFydEV2ZW50LCB0cnVlLCB0cnVlKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xOTExLDcgKzE5MTEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEcmFnRXh0ZW5k
U2VsCiAgICAgICAgICAgICAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJl
bmRlcmVyKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewogICAgICAgICBpZiAoTm9k
ZSogbm9kZSA9IGN1cnItPm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5kaXNwYXRj
aEV2ZW50KGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50LCB0cnVlLCB0cnVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBub2RlLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnNlbGVjdHN0YXJ0RXZlbnQsIHRydWUsIHRydWUpKTsKICAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTI0NjYsNyArMjQ2Niw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjYXBzTG9ja1N0
YXRlTWF5SGF2ZUMKIAogdm9pZCBFdmVudEhhbmRsZXI6OnNlbmRSZXNpemVFdmVudCgpCiB7Ci0g
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChldmVudE5hbWVzKCku
cmVzaXplRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGlz
cGF0Y2hXaW5kb3dFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwg
ZmFsc2UsIGZhbHNlKSk7CiB9CiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpzZW5kU2Nyb2xsRXZlbnQo
KQpAQCAtMjQ3NSw3ICsyNDc1LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNlbmRTY3JvbGxFdmVu
dCgpCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm47CiAgICAgdi0+c2V0V2FzU2Nyb2xsZWRC
eVVzZXIodHJ1ZSk7Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChldmVu
dE5hbWVzKCkuc2Nyb2xsRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50
LCB0cnVlLCBmYWxzZSkpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NF
dmVudFRvU2Nyb2xsYmFyKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHJldmlzaW9uIDQ4Njg2KQor
KysgV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcg
KzEwOCw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OmVuZFJlcXVlc3QoKQogICAgIG1fcmVxdWVzdElu
RmxpZ2h0ID0gZmFsc2U7CiAKICAgICBpZiAoIW1fZmFpbFNpbGVudGx5KQotICAgICAgICBkaXNw
YXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CisgICAgICAgIGRpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZh
bHNlKSk7CiAKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJDb250
ZXh0KCkpCiAgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5ub25DYWNoZVJlcXVlc3RDb21wbGV0
ZShtX3VybCk7CkBAIC0xNjIsNzAgKzE2MiwxMiBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBF
dmVudFNvdXJjZTo6c2NyCiAgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogfQogCi12b2lkIEV2ZW50U291cmNlOjphZGRFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2
ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBt
X2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVy
czsKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9l
dmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgICAg
IGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5i
ZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikg
ewotICAgICAgICAgICAgaWYgKCoqbGlzdGVuZXJJdGVyID09ICpldmVudExpc3RlbmVyKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxpc3RlbmVycy5hcHBl
bmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlw
ZSwgbGlzdGVuZXJzKTsKLSAgICB9Ci19Ci0KLXZvaWQgRXZlbnRTb3VyY2U6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2
ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBt
X2V2ZW50TGlzdGVuZXJzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMaXN0ZW5lclZl
Y3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5l
ckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAgICAgICBpZiAo
KipsaXN0ZW5lckl0ZXIgPT0gKmV2ZW50TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGxpc3RlbmVy
cy5yZW1vdmUobGlzdGVuZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEV2ZW50U291cmNlOjpkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpZiAoIWV2ZW50IHx8IGV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0g
RXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBFdmVudExpc3RlbmVyKiBhdHRyaWJ1dGVMaXN0ZW5lciA9
IG1fYXR0cmlidXRlTGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKS5nZXQoKTsKLSAgICBpZiAo
YXR0cmlidXRlTGlzdGVuZXIpIHsKLSAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAg
ICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGF0dHJpYnV0ZUxp
c3RlbmVyLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLQotICAgIExp
c3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+
dHlwZSgpKTsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5l
ckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnND
b3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRo
aXMpOwotICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbGlz
dGVuZXJJdGVyLT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KIHZvaWQgRXZl
bnRTb3VyY2U6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKIHsKICAgICBpbnQgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCk7
CiAgICAgaWYgKHN0YXR1c0NvZGUgPT0gMjAwICYmIHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgi
Q29udGVudC1UeXBlIikgPT0gInRleHQvZXZlbnQtc3RyZWFtIikgewogICAgICAgICBtX3N0YXRl
ID0gT1BFTjsKLSAgICAgICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnROYW1lcygpLm9wZW5F
dmVudCk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
b3BlbkV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc3Rh
dHVzQ29kZSA8PSAyMDAgfHwgc3RhdHVzQ29kZSA+IDI5OSkKICAgICAgICAgICAgIG1fc3RhdGUg
PSBDTE9TRUQ7CkBAIC0zMDQsNyArMjQ2LDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6cGFyc2VFdmVu
dFN0cmVhbUxpbmUodQogewogICAgIGlmICghbGluZUxlbmd0aCkgewogICAgICAgICBpZiAoIW1f
ZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkaXNwYXRjaE1lc3NhZ2VFdmVudCgpOworICAg
ICAgICAgICAgZGlzcGF0Y2hFdmVudChjcmVhdGVNZXNzYWdlRXZlbnQoKSk7CiAgICAgICAgIGlm
ICghbV9ldmVudE5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9ldmVudE5hbWUgPSAiIjsK
ICAgICB9IGVsc2UgaWYgKGZpZWxkTGVuZ3RoKSB7CkBAIC0zNDQsMjcgKzI4NiwyNiBAQCB2b2lk
IEV2ZW50U291cmNlOjpwYXJzZUV2ZW50U3RyZWFtTGluZSh1CiAgICAgfQogfQogCi12b2lkIEV2
ZW50U291cmNlOjpkaXNwYXRjaEdlbmVyaWNFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUp
Cit2b2lkIEV2ZW50U291cmNlOjpzdG9wKCkKK3sKKyAgICBjbG9zZSgpOworfQorCitQYXNzUmVm
UHRyPE1lc3NhZ2VFdmVudD4gRXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCgpCiB7Ci0g
ICAgUmVmUHRyPEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRlKHR5cGUsIGZhbHNlLCBmYWxzZSk7
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFz
ZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQgRXZlbnRTb3VyY2U6OmRpc3Bh
dGNoTWVzc2FnZUV2ZW50KCkKLXsKLSAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldnQgPSBNZXNz
YWdlRXZlbnQ6OmNyZWF0ZSgpOwotICAgIFN0cmluZyBldmVudE5hbWUgPSBtX2V2ZW50TmFtZS5p
c0VtcHR5KCkgPyBldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50LnN0cmluZygpIDogbV9ldmVudE5h
bWU7Ci0gICAgZXZ0LT5pbml0TWVzc2FnZUV2ZW50KGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlLCBT
dHJpbmc6OmFkb3B0KG1fZGF0YSksIG1fb3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAwKTsKLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCks
IGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudCA9
IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKCk7CisgICAgZXZlbnQtPmluaXRNZXNzYWdlRXZlbnQobV9l
dmVudE5hbWUuaXNFbXB0eSgpID8gZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCA6IEF0b21pY1N0
cmluZyhtX2V2ZW50TmFtZSksIGZhbHNlLCBmYWxzZSwgU3RyaW5nOjphZG9wdChtX2RhdGEpLCBt
X29yaWdpbiwgbV9sYXN0RXZlbnRJZCwgMCwgMCk7CisgICAgcmV0dXJuIGV2ZW50LnJlbGVhc2Uo
KTsKIH0KIAotdm9pZCBFdmVudFNvdXJjZTo6c3RvcCgpCitFdmVudFRhcmdldERhdGEqIEV2ZW50
U291cmNlOjpldmVudFRhcmdldERhdGEoKQogewotICAgIGNsb3NlKCk7CisgICAgcmV0dXJuICZt
X2V2ZW50VGFyZ2V0RGF0YTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBFdmVudFNvdXJjZTo6ZW5z
dXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAkocmV2aXNpb24g
NDg2ODYpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBNZXNzYWdl
RXZlbnQ7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKICAgICBjbGFzcyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOwogICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CkBAIC03MSwxNCArNzIsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
OwogCi0gICAgICAgIHZvaWQgc2V0T25vcGVuKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikgeyBtX2F0dHJpYnV0ZUxpc3RlbmVycy5zZXQoZXZlbnROYW1lcygpLm9wZW5F
dmVudCwgZXZlbnRMaXN0ZW5lcik7IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25vcGVuKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZXMoKS5vcGVu
RXZlbnQpLmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlTGlzdGVuZXJzLnNldChl
dmVudE5hbWVzKCkubWVzc2FnZUV2ZW50LCBldmVudExpc3RlbmVyKTsgfQotICAgICAgICBFdmVu
dExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZUxpc3RlbmVy
cy5nZXQoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCkuZ2V0KCk7IH0KLQotICAgICAgICB2b2lk
IHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1f
YXR0cmlidXRlTGlzdGVuZXJzLnNldChldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZXZlbnRMaXN0
ZW5lcik7IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlTGlzdGVuZXJzLmdldChldmVudE5hbWVzKCkuZXJyb3JFdmVudCkuZ2V0KCk7
IH0KKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihvcGVuKTsKKyAgICAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtZXNzYWdlKTsKKyAgICAgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7CiAKICAgICAgICAgdm9pZCBjbG9z
ZSgpOwogCkBAIC04OCwxNCArODQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgRXZlbnRTb3VyY2UqIHRvRXZlbnRTb3VyY2UoKSB7IHJldHVybiB0aGlzOyB9CiAgICAg
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0OwogCi0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVy
PiA+IExpc3RlbmVyVmVjdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAg
RXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3Rl
bmVyczsgfQotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKICAgICBwcml2YXRlOgpA
QCAtMTAzLDYgKzkxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0
YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KTsKQEAgLTExNiwxNSArMTA2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCByZWNvbm5lY3RUaW1lckZpcmVkKFRpbWVyPEV2ZW50U291cmNlPiopOwogICAgICAgICB2b2lk
IHBhcnNlRXZlbnRTdHJlYW0oKTsKICAgICAgICAgdm9pZCBwYXJzZUV2ZW50U3RyZWFtTGluZSh1
bnNpZ25lZCBpbnQgcG9zLCBpbnQgZmllbGRMZW5ndGgsIGludCBsaW5lTGVuZ3RoKTsKLSAgICAg
ICAgdm9pZCBkaXNwYXRjaEdlbmVyaWNFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpOwot
ICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50KCk7CisgICAgICAgIFBhc3NSZWZQdHI8
TWVzc2FnZUV2ZW50PiBjcmVhdGVNZXNzYWdlRXZlbnQoKTsKIAogICAgICAgICBLVVJMIG1fdXJs
OwogICAgICAgICBTdGF0ZSBtX3N0YXRlOwogCi0gICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBtX2F0dHJpYnV0ZUxpc3RlbmVyczsKLSAgICAgICAg
RXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKLQogICAgICAgICBSZWZQdHI8VGV4
dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwogICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxv
YWRlcj4gbV9sb2FkZXI7CiAgICAgICAgIFRpbWVyPEV2ZW50U291cmNlPiBtX3JlY29ubmVjdFRp
bWVyOwpAQCAtMTM3LDYgKzEyMyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3Ry
aW5nIG1fbGFzdEV2ZW50SWQ7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3JlY29ubmVj
dERlbGF5OwogICAgICAgICBTdHJpbmcgbV9vcmlnaW47CisgICAgICAgIAorICAgICAgICBFdmVu
dFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNv
cmUvcGFnZS9FdmVudFNvdXJjZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAg
bW9kdWxlIHdpbmRvdyB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1F
VkVOVFNPVVJDRSwKLSAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgICAgICBFdmVudFRh
cmdldCwKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIEV2ZW50U291cmNlIHsKIApJbmRl
eDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKQEAg
LTYyLDcgKzYzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGRpc3BhdGNoRXZlbnRzT25XaW5kbwog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzEwNQogICAg
IGlmICghZm9jdXNlZCAmJiBkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKSkKICAgICAgICAgZG9jdW1l
bnQtPmZvY3VzZWROb2RlKCktPmRpc3BhdGNoQmx1ckV2ZW50KCk7Ci0gICAgZG9jdW1lbnQtPmRp
c3BhdGNoV2luZG93RXZlbnQoZm9jdXNlZCA/IGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50IDogZXZl
bnROYW1lcygpLmJsdXJFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICBkb2N1bWVudC0+ZGlzcGF0
Y2hXaW5kb3dFdmVudChFdmVudDo6Y3JlYXRlKGZvY3VzZWQgPyBldmVudE5hbWVzKCkuZm9jdXNF
dmVudCA6IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogICAgIGlmIChm
b2N1c2VkICYmIGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpKQogICAgICAgICBkb2N1bWVudC0+Zm9j
dXNlZE5vZGUoKS0+ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CiB9CkBAIC04NywxMiArODgsMTIgQEAg
dm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWRGcmFtZShQYQogICAgIC8vIE5vdyB0aGF0
IHRoZSBmcmFtZSBpcyB1cGRhdGVkLCBmaXJlIGV2ZW50cyBhbmQgdXBkYXRlIHRoZSBzZWxlY3Rp
b24gZm9jdXNlZCBzdGF0ZXMgb2YgYm90aCBmcmFtZXMuCiAgICAgaWYgKG9sZEZyYW1lICYmIG9s
ZEZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgb2xkRnJhbWUtPnNlbGVjdGlvbigpLT5zZXRGb2N1
c2VkKGZhbHNlKTsKLSAgICAgICAgb2xkRnJhbWUtPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93
RXZlbnQoZXZlbnROYW1lcygpLmJsdXJFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgb2xk
RnJhbWUtPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuYmx1ckV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKICAgICB9CiAKICAgICBpZiAobmV3
RnJhbWUgJiYgbmV3RnJhbWUtPnZpZXcoKSAmJiBpc0ZvY3VzZWQoKSkgewogICAgICAgICBuZXdG
cmFtZS0+c2VsZWN0aW9uKCktPnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgICAgIG5ld0ZyYW1lLT5k
b2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBm
YWxzZSwgZmFsc2UpOworICAgICAgICBuZXdGcmFtZS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5k
b3dFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBmYWxzZSwgZmFs
c2UpKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjY1LDcgKzE2NjUsNyBAQCB2b2lk
IEZyYW1lOjp1bmZvY3VzV2luZG93KCkKICAgICAgICAgcGFnZSgpLT5jaHJvbWUoKS0+dW5mb2N1
cygpOwogfQogCi1ib29sIEZyYW1lOjpzaG91bGRDbG9zZShSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
clZlY3RvciogYWx0ZXJuYXRlRXZlbnRMaXN0ZW5lcnMpCitib29sIEZyYW1lOjpzaG91bGRDbG9z
ZSgpCiB7CiAgICAgQ2hyb21lKiBjaHJvbWUgPSBwYWdlKCkgPyBwYWdlKCktPmNocm9tZSgpIDog
MDsKICAgICBpZiAoIWNocm9tZSB8fCAhY2hyb21lLT5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJt
UGFuZWwoKSkKQEAgLTE2NzksNyArMTY3OSw4IEBAIGJvb2wgRnJhbWU6OnNob3VsZENsb3NlKFJl
Z2lzdGVyZWRFdmVudEwKICAgICBpZiAoIWJvZHkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgUmVmUHRyPEJlZm9yZVVubG9hZEV2ZW50PiBiZWZvcmVVbmxvYWRFdmVudCA9IG1fZG9tV2lu
ZG93LT5kaXNwYXRjaEJlZm9yZVVubG9hZEV2ZW50KGFsdGVybmF0ZUV2ZW50TGlzdGVuZXJzKTsK
KyAgICBSZWZQdHI8QmVmb3JlVW5sb2FkRXZlbnQ+IGJlZm9yZVVubG9hZEV2ZW50ID0gQmVmb3Jl
VW5sb2FkRXZlbnQ6OmNyZWF0ZSgpOworICAgIG1fZG9tV2luZG93LT5kaXNwYXRjaEV2ZW50KGJl
Zm9yZVVubG9hZEV2ZW50LmdldCgpLCBtX2RvbVdpbmRvdy0+ZG9jdW1lbnQoKSk7CiAKICAgICBp
ZiAoIWJlZm9yZVVubG9hZEV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCiAgICAgICAgIGRvYy0+
ZGVmYXVsdEV2ZW50SGFuZGxlcihiZWZvcmVVbmxvYWRFdmVudC5nZXQoKSk7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2
aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTk4LDcgKzE5OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHZvaWQgZm9jdXNXaW5kb3coKTsKICAgICAgICAgdm9pZCB1bmZvY3VzV2luZG93KCk7Ci0gICAg
ICAgIGJvb2wgc2hvdWxkQ2xvc2UoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJWZWN0b3IqIGFsdGVy
bmF0ZUV2ZW50TGlzdGVuZXJzID0gMCk7CisgICAgICAgIGJvb2wgc2hvdWxkQ2xvc2UoKTsKICAg
ICAgICAgdm9pZCBzY2hlZHVsZUNsb3NlKCk7CiAKICAgICAgICAgdm9pZCBzZXRKU1N0YXR1c0Jh
clRleHQoY29uc3QgU3RyaW5nJik7CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNv
cmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksMTAgQEAKICNpbmNs
dWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNp
bmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVk
ZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTk0LDcgKzk2LDcgQEAgc3RhdGljIHZv
aWQgbmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAKICAgICBBdG9taWNTdHJpbmcgZXZlbnROYW1lID0g
bmV0d29ya1N0YXRlTm90aWZpZXIoKS5vbkxpbmUoKSA/IGV2ZW50TmFtZXMoKS5vbmxpbmVFdmVu
dCA6IGV2ZW50TmFtZXMoKS5vZmZsaW5lRXZlbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZyYW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5k
aXNwYXRjaFdpbmRvd0V2ZW50KGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgZnJh
bWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lLCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNo
cm9tZUNsaWVudCwgQ29udGV4dE1lbnVDbGllbnQqIGNvbnRleHRNZW51Q2xpZW50LCBFZGl0b3JD
bGllbnQqIGVkaXRvckNsaWVudCwgRHJhZ0NsaWVudCogZHJhZ0NsaWVudCwgSW5zcGVjdG9yQ2xp
ZW50KiBpbnNwZWN0b3JDbGllbnQpCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsOCBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5o
IgorI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCkBAIC0xMzYsOSArMTM4
LDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUwogICAgIFZlY3Rv
cjxFdmVudFRvRGlzcGF0Y2g+Ojpjb25zdF9pdGVyYXRvciBldmVudHNUb0Rpc3BhdGNoRW5kID0g
bV9ldmVudHNUb0Rpc3BhdGNoLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPEV2ZW50VG9EaXNwYXRj
aD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ldmVudHNUb0Rpc3BhdGNoLmJlZ2luKCk7IGl0ICE9
IGV2ZW50c1RvRGlzcGF0Y2hFbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT5ldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCkKLSAgICAgICAgICAgIGl0
LT5lbGVtZW50LT5kaXNwYXRjaFdlYktpdFRyYW5zaXRpb25FdmVudChpdC0+ZXZlbnRUeXBlLCBp
dC0+bmFtZSwgaXQtPmVsYXBzZWRUaW1lKTsKKyAgICAgICAgICAgIGl0LT5lbGVtZW50LT5kaXNw
YXRjaEV2ZW50KFdlYktpdFRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGl0LT5ldmVudFR5cGUsIGl0
LT5uYW1lLCBpdC0+ZWxhcHNlZFRpbWUpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaXQt
PmVsZW1lbnQtPmRpc3BhdGNoV2ViS2l0QW5pbWF0aW9uRXZlbnQoaXQtPmV2ZW50VHlwZSwgaXQt
Pm5hbWUsIGl0LT5lbGFwc2VkVGltZSk7CisgICAgICAgICAgICBpdC0+ZWxlbWVudC0+ZGlzcGF0
Y2hFdmVudChXZWJLaXRBbmltYXRpb25FdmVudDo6Y3JlYXRlKGl0LT5ldmVudFR5cGUsIGl0LT5u
YW1lLCBpdC0+ZWxhcHNlZFRpbWUpKTsKICAgICB9CiAgICAgCiAgICAgbV9ldmVudHNUb0Rpc3Bh
dGNoLmNsZWFyKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNp
b24gNDg2ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTI3LDggKzUyNyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGIKICAgICBpZiAobmV3T2Zmc2V0ICE9IG1faW5kZXhPZmZzZXQpIHsKICAgICAg
ICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNldDsKICAgICAgICAgcmVwYWludCgpOwotICAgICAg
ICAvLyBGaXJlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgotICAgICAgICBub2RlKCktPmRpc3BhdGNo
RXZlbnQoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBu
b2RlKCktPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2Nyb2xsRXZl
bnQsIGZhbHNlLCBmYWxzZSkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMSw3ICs1MDEsNyBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZWxlY3Rpb25DaGFuZ2VkCiAKICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewogICAgICAgICBpZiAoZnJhbWUtPnNl
bGVjdGlvbigpLT5pc1JhbmdlKCkgJiYgdXNlclRyaWdnZXJlZCkKLSAgICAgICAgICAgIG5vZGUo
KS0+ZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIHRydWUsIGZhbHNlKTsK
KyAgICAgICAgICAgIG5vZGUoKS0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5zZWxlY3RFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlz
aW9uIDQ4Njg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIKIAorI2luY2x1ZGUg
IkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC01MCw4ICs1MSw3IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmU6OnN1YnRyZWUKICAgICBpZiAoIW5vZGUoKS0+Zm9jdXNlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBGaXJlIHRoZSAiaW5wdXQiIERPTSBldmVudAotICAgIG5v
ZGUoKS0+ZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuaW5wdXRFdmVudCwgdHJ1ZSwgZmFsc2Up
OworICAgIG5vZGUoKS0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5p
bnB1dEV2ZW50LCB0cnVlLCBmYWxzZSkpOwogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGZyYW1lLT50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNp
b24gNDg2ODYpCisrKyBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkwLDE4ICsxOTAsMTcgQEAgYm9vbCBTVkdFbGVtZW50OjpoYXZlTG9hZGVkUmVxdWlyZWRS
ZXNvdQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBoYXNMb2FkTGlzdGVuZXIo
U1ZHRWxlbWVudCogbm9kZSkKK3N0YXRpYyBib29sIGhhc0xvYWRMaXN0ZW5lcihOb2RlKiBub2Rl
KQogewotICAgIE5vZGUqIGN1cnJlbnROb2RlID0gbm9kZTsKLSAgICB3aGlsZSAoY3VycmVudE5v
ZGUgJiYgY3VycmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBjb25zdCBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KGN1cnJlbnROb2RlKS0+ZXZlbnRMaXN0ZW5lcnMoKTsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBsaXN0ZW5lcnMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHIgPSAq
bGlzdGVuZXJzW2ldOwotICAgICAgICAgICAgaWYgKHIuZXZlbnRUeXBlKCkgPT0gZXZlbnROYW1l
cygpLmxvYWRFdmVudCAmJiByLnVzZUNhcHR1cmUoKSB8fCBjdXJyZW50Tm9kZSA9PSBub2RlKQor
ICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubG9hZEV2ZW50KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCk7IG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpOyBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGVudHJ5ID0gbm9kZS0+
Z2V0RXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZW50cnkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChl
bnRyeVtpXS51c2VDYXB0dXJlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKTsKICAg
ICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5z
dGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5j
cHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
c3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIGluc3RhbmNlQ291bnRlcigiV2ViQ29y
ZVNWR0VsZW1lbnRJbnN0YW5jZSIpOwogI2VuZGlmCiAKK3N0YXRpYyBFdmVudFRhcmdldERhdGEm
IGR1bW15RXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEV2ZW50
VGFyZ2V0RGF0YSwgZHVtbXlFdmVudFRhcmdldERhdGEsICgpKTsKKyAgICBkdW1teUV2ZW50VGFy
Z2V0RGF0YS5ldmVudExpc3RlbmVyTWFwLmNsZWFyKCk7CisgICAgcmV0dXJuIGR1bW15RXZlbnRU
YXJnZXREYXRhOworfQorCiBTVkdFbGVtZW50SW5zdGFuY2U6OlNWR0VsZW1lbnRJbnN0YW5jZShT
VkdVc2VFbGVtZW50KiB1c2VFbGVtZW50LCBQYXNzUmVmUHRyPFNWR0VsZW1lbnQ+IG9yaWdpbmFs
RWxlbWVudCkKICAgICA6IG1fbmVlZHNVcGRhdGUoZmFsc2UpCiAgICAgLCBtX3VzZUVsZW1lbnQo
dXNlRWxlbWVudCkKQEAgLTEzNyw0MzggKzE0NCw1MiBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBTVkdFbGVtZW50SW5zdGFuCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgU1ZHRWxlbWVudElu
c3RhbmNlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0g
ICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBjb3JyZXNwb25kaW5nRWxlbWVudCgpKQotICAg
ICAgICBlbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNh
cHR1cmUpOwotfQotCi12b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIs
IGJvb2wgdXNlQ2FwdHVyZSkKLXsKLSAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IGNvcnJl
c3BvbmRpbmdFbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIo
ZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci19Ci0KLWJvb2wgU1ZHRWxlbWVudElu
c3RhbmNlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorYm9vbCBTVkdFbGVtZW50SW5zdGFuY2U6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIs
IGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dChlKTsKLSAgICBBU1NF
UlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgaWYgKCFldnQgfHwgZXZ0LT50eXBl
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVE
X0VWRU5UX1RZUEVfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8g
VGhlIGV2ZW50IGhhcyB0byBiZSBkaXNwYXRjaGVkIHRvIHRoZSBzaGFkb3dUcmVlRWxlbWVudCgp
LCBub3QgdGhlIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkhCi0gICAgU1ZHRWxlbWVudCogZWxlbWVu
dCA9IHNoYWRvd1RyZWVFbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50KQorICAgIGlmICghY29y
cmVzcG9uZGluZ0VsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZXZ0LT5z
ZXRUYXJnZXQodGhpcyk7Ci0KLSAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+dmlldygpOwotICAgIHJldHVybiBlbGVtZW50LT5kaXNwYXRjaEdlbmVyaWNF
dmVudChldnQucmVsZWFzZSgpKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3Rh
bmNlOjpvbmFib3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7Ci19
Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmFib3J0KFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCBldmVudExp
c3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbmJsdXIo
KSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpOwotfQotCi12b2lkIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6c2V0T25ibHVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1F
dmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY2hhbmdlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpOwotfQotCi12b2lkIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6c2V0T25jaGFuZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQot
ewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0
ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbmNsaWNrKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuY2xpY2tFdmVudCk7Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmNs
aWNrKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3Jy
ZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxl
bWVudEluc3RhbmNlOjpvbmNvbnRleHRtZW51KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29ycmVz
cG9uZGluZ0VsZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
Y29udGV4dG1lbnVFdmVudCk7Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmNv
bnRleHRtZW51KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAg
ICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0
ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbmRibGNsaWNrKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuZGJsY2xpY2tFdmVudCk7Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpz
ZXRPbmRibGNsaWNrKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsK
LSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0
ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbmVycm9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuZXJyb3JFdmVudCk7Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmVy
cm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3Jy
ZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxl
bWVudEluc3RhbmNlOjpvbmZvY3VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZm9jdXNF
dmVudCk7Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmZvY3VzKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxl
bWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50
LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNl
OjpvbmlucHV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuaW5wdXRFdmVudCk7Ci19Ci0K
LXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmlucHV0KFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5pbnB1dEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbmtleWRvd24o
KSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpOwotfQotCi12b2lkIFNW
R0VsZW1lbnRJbnN0YW5jZTo6c2V0T25rZXlkb3duKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ua2V5cHJlc3MoKSBj
b25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKLX0KLQotdm9pZCBTVkdF
bGVtZW50SW5zdGFuY2U6OnNldE9ua2V5cHJlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ua2V5dXAoKSBjb25z
dAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KTsKLX0KLQotdm9pZCBTVkdFbGVtZW50
SW5zdGFuY2U6OnNldE9ua2V5dXAoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmtleXVwRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVu
dExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubG9hZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLmxvYWRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiB9CiAK
LXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQorYm9vbCBTVkdFbGVtZW50SW5zdGFuY2U6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBldmVudExp
c3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbm1vdXNl
ZG93bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KTsKLX0KLQot
dm9pZCBTVkdFbGVtZW50SW5zdGFuY2U6OnNldE9ubW91c2Vkb3duKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgZXZl
bnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIFNWR0VsZW1lbnRJbnN0YW5jZTo6b25t
b3VzZW1vdmUoKSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCk7Ci19
Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbm1vdXNlbW92ZShQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9ubW91c2VvdXQoKSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KTsK
LX0KLQotdm9pZCBTVkdFbGVtZW50SW5zdGFuY2U6OnNldE9ubW91c2VvdXQoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9ubW91c2VvdmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQp
OwotfQotCi12b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW92ZXIoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2
ZW50LCBldmVudExpc3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3Rh
bmNlOjpvbm1vdXNldXAoKSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQp
OwotfQotCi12b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZXVwKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9ubW91c2V3aGVlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVu
dCk7Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbm1vdXNld2hlZWwoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNld2hl
ZWxFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6b25iZWZvcmVjdXQoKSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVj
dXRFdmVudCk7Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmJlZm9yZWN1dChQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVm
b3JlY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVt
ZW50SW5zdGFuY2U6Om9uY3V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY3V0RXZlbnQp
OwotfQotCi12b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jdXQoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmN1dEV2ZW50LCBldmVudExp
c3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbmJlZm9y
ZWNvcHkoKSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5RXZlbnQpOwotfQot
Ci12b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25iZWZvcmVjb3B5KFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgp
LT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5RXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uY29weSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdl
dEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvcHlFdmVudCk7Ci19Ci0KLXZv
aWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmNvcHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvcHlFdmVudCwgZXZlbnRMaXN0ZW5lcik7
Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIFNWR0VsZW1lbnRJbnN0YW5jZTo6b25iZWZvcmVwYXN0ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJlZm9yZXBhc3RlRXZlbnQpOwotfQotCi12b2lk
IFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25iZWZvcmVwYXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVmb3JlcGFzdGVFdmVudCwgZXZl
bnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIFNWR0VsZW1lbnRJbnN0YW5jZTo6b25w
YXN0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQpOwotfQotCi12b2lk
IFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25wYXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucGFzdGVFdmVudCwgZXZlbnRMaXN0ZW5lcik7
Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIFNWR0VsZW1lbnRJbnN0YW5jZTo6b25kcmFnZW50ZXIoKSBj
b25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnZW50ZXJFdmVudCk7Ci19Ci0KLXZvaWQgU1ZH
RWxlbWVudEluc3RhbmNlOjpzZXRPbmRyYWdlbnRlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ2VudGVyRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ292ZXIo
KSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnb3ZlckV2ZW50KTsKLX0KLQotdm9pZCBT
VkdFbGVtZW50SW5zdGFuY2U6OnNldE9uZHJhZ292ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdvdmVyRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ2xlYXZl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQpOwotfQotCi12b2lk
IFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnbGVhdmUoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdsZWF2ZUV2ZW50LCBldmVudExp
c3RlbmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbmRyb3Ao
KSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcm9wRXZlbnQpOwotfQotCi12b2lkIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6c2V0T25kcm9wKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcm9wRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1F
dmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ3N0YXJ0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQpOwotfQotCi12b2lkIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6c2V0T25kcmFnc3RhcnQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdzdGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKLX0K
LQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbmRyYWcoKSBjb25zdAotewot
ICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQpOwotfQotCi12b2lkIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6c2V0T25kcmFnKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLXsK
LSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVy
KiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ2VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmRyYWdlbmRFdmVudCk7Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbmRy
YWdlbmQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmRyYWdlbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIFNW
R0VsZW1lbnRJbnN0YW5jZTo6b25yZXNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcnJlc3Bv
bmRpbmdFbGVtZW50KCktPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJl
c2V0RXZlbnQpOwotfQotCi12b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25yZXNldChQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzZXRF
dmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19Ci0KLUV2ZW50TGlzdGVuZXIqIFNWR0VsZW1lbnRJbnN0
YW5jZTo6b25yZXNpemUoKSBjb25zdAotewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCk7
Ci19Ci0KLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbnJlc2l6ZShQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCi17Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwotfQotCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9u
c2Nyb2xsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQpOwotfQotCi12
b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25zY3JvbGwoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQotewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKLX0KLQotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbnNlYXJjaCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlYXJjaEV2ZW50KTsKLX0KLQotdm9pZCBTVkdF
bGVtZW50SW5zdGFuY2U6OnNldE9uc2VhcmNoKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19
Ci0KLUV2ZW50TGlzdGVuZXIqIFNWR0VsZW1lbnRJbnN0YW5jZTo6b25zZWxlY3QoKSBjb25zdAot
ewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCk7CisgICAgaWYgKCFjb3JyZXNwb25kaW5n
RWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRp
bmdFbGVtZW50KCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSk7CiB9CiAKLXZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjpzZXRPbnNlbGVjdChQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCit2b2lkIFNWR0VsZW1lbnRJbnN0
YW5jZTo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBpZiAoIWNvcnJlc3BvbmRpbmdFbGVtZW50KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5yZW1vdmVBbGxFdmVudExp
c3RlbmVycygpOwogfQogCi1FdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uc2Vs
ZWN0c3RhcnQoKSBjb25zdAorYm9vbCBTVkdFbGVtZW50SW5zdGFuY2U6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdHN0
YXJ0RXZlbnQpOwotfQorICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcHJvdGVjdCA9IHRoaXM7Cisg
ICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwogCi12b2lkIFNWR0VsZW1lbnRJbnN0
YW5jZTo6c2V0T25zZWxlY3RzdGFydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCi17Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Ci19
CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKIAotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVu
dEluc3RhbmNlOjpvbnN1Ym1pdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Ym1pdEV2
ZW50KTsKLX0KKyAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc2hhZG93VHJlZUVsZW1lbnQoKTsK
KyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotdm9pZCBTVkdFbGVt
ZW50SW5zdGFuY2U6OnNldE9uc3VibWl0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKLXsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAg
UmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGVsZW1lbnQtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAg
ICByZXR1cm4gZWxlbWVudC0+ZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsK
IH0KIAotRXZlbnRMaXN0ZW5lciogU1ZHRWxlbWVudEluc3RhbmNlOjpvbnVubG9hZCgpIGNvbnN0
CitFdmVudFRhcmdldERhdGEqIFNWR0VsZW1lbnRJbnN0YW5jZTo6ZXZlbnRUYXJnZXREYXRhKCkK
IHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpID8gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+ZXZlbnRUYXJnZXREYXRhKCkg
OiAwOwogfQogCi12b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T251bmxvYWQoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQorRXZlbnRUYXJnZXREYXRhKiBTVkdFbGVt
ZW50SW5zdGFuY2U6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAgY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkudW5sb2Fk
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHJldHVybiAmZHVtbXlFdmVudFRhcmdldERhdGEo
KTsgLy8gcmV0dXJuIHNvbWV0aGluZywgc28gd2UgZG9uJ3QgY3Jhc2gKIH0KIAotfQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnRJbnN0YW5jZS5oCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1l
bnRJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMCArNTEsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgICAgIGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yJiBldmVudExpc3RlbmVycygpIGNvbnN0IHsgcmV0
dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmV2ZW50TGlzdGVuZXJzKCk7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CisgICAgICAgIHVzaW5nIEV2ZW50VGFy
Z2V0OjpkaXNwYXRjaEV2ZW50OworICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50Pik7CiAKICAgICAgICAgU1ZHRWxlbWVudCogY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KICAgICAgICAgU1ZHVXNl
RWxlbWVudCogY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3VzZUVs
ZW1lbnQ7IH0KQEAgLTc3LDg2ICs3OCw0NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHVzaW5nIFRyZWVTaGFyZWQ8U1ZHRWxlbWVudEluc3RhbmNlPjo6ZGVyZWY7CiAKICAgICAgICAg
Ly8gRXZlbnRUYXJnZXQgQVBJCi0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uYWJvcnQoKSBjb25z
dDsKLSAgICAgICAgdm9pZCBzZXRPbmFib3J0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwot
ICAgICAgICBFdmVudExpc3RlbmVyKiBvbmJsdXIoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRP
bmJsdXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIq
IG9uY2hhbmdlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25jaGFuZ2UoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uY2xpY2soKSBjb25zdDsK
LSAgICAgICAgdm9pZCBzZXRPbmNsaWNrKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAg
ICAgICBFdmVudExpc3RlbmVyKiBvbmNvbnRleHRtZW51KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
c2V0T25jb250ZXh0bWVudShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZl
bnRMaXN0ZW5lciogb25kYmxjbGljaygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uZGJsY2xp
Y2soUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9u
ZXJyb3IoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmZvY3VzKCkgY29uc3Q7Ci0gICAg
ICAgIHZvaWQgc2V0T25mb2N1cyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAg
RXZlbnRMaXN0ZW5lciogb25pbnB1dCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uaW5wdXQo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ua2V5
ZG93bigpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9ua2V5ZG93bihQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25rZXlwcmVzcygpIGNvbnN0Owot
ICAgICAgICB2b2lkIHNldE9ua2V5cHJlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0g
ICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ua2V5dXAoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRP
bmtleXVwKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVy
KiBvbmxvYWQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmxvYWQoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubW91c2Vkb3duKCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgc2V0T25tb3VzZWRvd24oUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7
Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubW91c2Vtb3ZlKCkgY29uc3Q7Ci0gICAgICAgIHZv
aWQgc2V0T25tb3VzZW1vdmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2
ZW50TGlzdGVuZXIqIG9ubW91c2VvdXQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbm1vdXNl
b3V0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBv
bm1vdXNlb3ZlcigpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9ubW91c2VvdmVyKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1vdXNldXAoKSBj
b25zdDsKLSAgICAgICAgdm9pZCBzZXRPbm1vdXNldXAoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
Pik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubW91c2V3aGVlbCgpIGNvbnN0OwotICAgICAg
ICB2b2lkIHNldE9ubW91c2V3aGVlbChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAg
ICAgRXZlbnRMaXN0ZW5lciogb25iZWZvcmVjdXQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRP
bmJlZm9yZWN1dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0
ZW5lciogb25jdXQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmN1dChQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25iZWZvcmVjb3B5KCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgc2V0T25iZWZvcmVjb3B5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmNvcHkoKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBzZXRPbmNvcHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlz
dGVuZXIqIG9uYmVmb3JlcGFzdGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmJlZm9yZXBh
c3RlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBv
bnBhc3RlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25wYXN0ZShQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25kcmFnZW50ZXIoKSBjb25zdDsK
LSAgICAgICAgdm9pZCBzZXRPbmRyYWdlbnRlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsK
LSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25kcmFnb3ZlcigpIGNvbnN0OwotICAgICAgICB2b2lk
IHNldE9uZHJhZ292ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50
TGlzdGVuZXIqIG9uZHJhZ2xlYXZlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25kcmFnbGVh
dmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9u
ZHJvcCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uZHJvcChQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25kcmFnc3RhcnQoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzZXRPbmRyYWdzdGFydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAg
ICAgICAgRXZlbnRMaXN0ZW5lciogb25kcmFnKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25k
cmFnKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBv
bmRyYWdlbmQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbmRyYWdlbmQoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPik7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ucmVzZXQoKSBjb25zdDsK
LSAgICAgICAgdm9pZCBzZXRPbnJlc2V0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAg
ICAgICBFdmVudExpc3RlbmVyKiBvbnJlc2l6ZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9u
cmVzaXplKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVy
KiBvbnNjcm9sbCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldE9uc2Nyb2xsKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3RlbmVyKiBvbnNlYXJjaCgpIGNvbnN0
OwotICAgICAgICB2b2lkIHNldE9uc2VhcmNoKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwot
ICAgICAgICBFdmVudExpc3RlbmVyKiBvbnNlbGVjdCgpIGNvbnN0OwotICAgICAgICB2b2lkIHNl
dE9uc2VsZWN0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICBFdmVudExpc3Rl
bmVyKiBvbnNlbGVjdHN0YXJ0KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0T25zZWxlY3RzdGFy
dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25z
dWJtaXQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRPbnN1Ym1pdChQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+KTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb251bmxvYWQoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzZXRPbnVubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKKyAgICAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7CisgICAgICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmx1cik7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoY2hhbmdlKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihjbGljayk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoY29udGV4dG1lbnUpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KGRibGNsaWNrKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJv
cik7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZm9jdXMpOworICAg
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGlucHV0KTsKKyAgICAgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihrZXlkb3duKTsKKyAgICAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihrZXlwcmVzcyk7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoa2V5dXApOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGxvYWQpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KG1vdXNlZG93bik7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobW91
c2Vtb3ZlKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtb3VzZW91
dCk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobW91c2VvdmVyKTsK
KyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtb3VzZXVwKTsKKyAgICAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtb3VzZXdoZWVsKTsKKyAgICAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihiZWZvcmVjdXQpOworICAgICAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGN1dCk7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoYmVmb3JlY29weSk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoY29weSk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoYmVmb3JlcGFzdGUpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKHBhc3RlKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihkcmFn
ZW50ZXIpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGRyYWdvdmVy
KTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihkcmFnbGVhdmUpOwor
ICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGRyb3ApOworICAgICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGRyYWdzdGFydCk7CisgICAgICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZHJhZyk7CisgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoZHJhZ2VuZCk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIocmVzZXQpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKHJlc2l6ZSk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2Ny
b2xsKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzZWFyY2gpOwor
ICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdCk7CisgICAgICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2VsZWN0c3RhcnQpOworICAgICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHN1Ym1pdCk7CisgICAgICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIodW5sb2FkKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBTVkdVc2VFbGVtZW50OwpAQCAtMTg5LDYgKzE1MCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJl
ZigpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigp
OyB9CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsK
KyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgp
OwogCiAgICAgICAgIGJvb2wgbV9uZWVkc1VwZGF0ZSA6IDE7CiAKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdJbWFnZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS9zdmcvU1ZHSW1hZ2VMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNp
bmNsdWRlICJTVkdJbWFnZUxvYWRlci5oIgogCisjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAi
UmVuZGVySW1hZ2UuaCIKQEAgLTQzLDcgKzQ0LDcgQEAgU1ZHSW1hZ2VMb2FkZXI6On5TVkdJbWFn
ZUxvYWRlcigpCiB2b2lkIFNWR0ltYWdlTG9hZGVyOjpkaXNwYXRjaExvYWRFdmVudCgpCiB7CiAg
ICAgaWYgKGltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgZWxlbWVudCgpLT5kaXNw
YXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAg
ICBlbGVtZW50KCktPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJy
b3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIFNWR0ltYWdlRWxl
bWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4oZWxlbWVu
dCgpKTsKICAgICAgICAgaWYgKGltYWdlRWxlbWVudC0+ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZEJhc2VWYWx1ZSgpKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ4
Njg2KQorKysgV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJTVkdTY3JpcHRFbGVtZW50LmgiCiAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CkBAIC0yMDksNyArMjEwLDcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRF
dmVudAogCiB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB7Ci0g
ICAgZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2UpOwor
ICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwg
dHJ1ZSwgZmFsc2UpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDQ4Njg2KQorKysgV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc2OCwxOCArNzY4LDE4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6dHJhbnNmZXJFdmVudExp
c3RlbmUKICAgICBBU1NFUlQob3JpZ2luYWxFbGVtZW50KTsKIAogICAgIGlmIChTVkdFbGVtZW50
KiBzaGFkb3dUcmVlRWxlbWVudCA9IHRhcmdldC0+c2hhZG93VHJlZUVsZW1lbnQoKSkgewotICAg
ICAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gb3Jp
Z2luYWxFbGVtZW50LT5ldmVudExpc3RlbmVycygpOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IGxp
c3RlbmVycy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgciA9ICpsaXN0
ZW5lcnNbaV07Ci0gICAgICAgICAgICBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHIubGlzdGVu
ZXIoKTsKLSAgICAgICAgICAgIEFTU0VSVChsaXN0ZW5lcik7Ci0KLSAgICAgICAgICAgIC8vIEV2
ZW50IGxpc3RlbmVycyBjcmVhdGVkIGZyb20gbWFya3VwIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5z
ZmVyZWQgdG8gdGhlIHNoYWRvdyB0cmVlIGR1cmluZyBjbG9uaW5nIQotICAgICAgICAgICAgaWYg
KGxpc3RlbmVyLT53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBzaGFkb3dUcmVlRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihy
LmV2ZW50VHlwZSgpLCBsaXN0ZW5lciwgci51c2VDYXB0dXJlKCkpOworICAgICAgICBpZiAoRXZl
bnRUYXJnZXREYXRhKiBkID0gb3JpZ2luYWxFbGVtZW50LT5ldmVudFRhcmdldERhdGEoKSkgewor
ICAgICAgICAgICAgRXZlbnRMaXN0ZW5lck1hcCYgbWFwID0gZC0+ZXZlbnRMaXN0ZW5lck1hcDsK
KyAgICAgICAgICAgIEV2ZW50TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsK
KyAgICAgICAgICAgIGZvciAoRXZlbnRMaXN0ZW5lck1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lclZl
Y3RvciYgZW50cnkgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZW50cnkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRXZl
bnQgbGlzdGVuZXJzIGNyZWF0ZWQgZnJvbSBtYXJrdXAgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNm
ZXJlZCB0byB0aGUgc2hhZG93IHRyZWUgZHVyaW5nIGNsb25pbmcuCisgICAgICAgICAgICAgICAg
ICAgIGlmIChlbnRyeVtpXS5saXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBzaGFkb3dU
cmVlRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihpdC0+Zmlyc3QsIGVudHJ5W2ldLmxpc3RlbmVy
LCBlbnRyeVtpXS51c2VDYXB0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZH
U01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgIG1fZXZlbnRCYXNlLT5hZGRFdmVudExpc3RlbmVyKG1fY29uZGl0aW9uLT5tX25h
bWUsIHRoaXMsIGZhbHNlKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQo
RXZlbnQqLCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKIAog
ICAgIFNWR1NNSUxFbGVtZW50KiBtX2FuaW1hdGlvbjsKICAgICBTVkdTTUlMRWxlbWVudDo6Q29u
ZGl0aW9uKiBtX2NvbmRpdGlvbjsKQEAgLTEwMyw3ICsxMDMsNyBAQCBib29sIENvbmRpdGlvbkV2
ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENv
bmRpdGlvbkV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCkgCit2
b2lkIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkgCiB7
CiAgICAgbV9hbmltYXRpb24tPmhhbmRsZUNvbmRpdGlvbkV2ZW50KGV2ZW50LCBtX2NvbmRpdGlv
bik7CiB9CkluZGV4OiBXZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkocmV2aXNpb24gNDg2ODYpCisr
KyBXZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MjMgKzUyLDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFByb2Nlc3NXZWJTb2NrZXRF
dmVudFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiB2b2lkIChXZWJTb2NrZXQ6OipNZXRob2QpKEV2ZW50Kik7Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8UHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8V2ViU29ja2V0PiB3ZWJTb2NrZXQsIE1ldGhvZCBtZXRob2QsIFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2s+
IGNyZWF0ZShQYXNzUmVmUHRyPFdlYlNvY2tldD4gd2ViU29ja2V0LCBQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvY2Vzc1dlYlNv
Y2tldEV2ZW50VGFzayh3ZWJTb2NrZXQsIG1ldGhvZCwgZXZlbnQpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrKHdlYlNvY2tldCwgZXZlbnQp
KTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKQogICAgIHsKLSAgICAgICAgKG1fd2ViU29ja2V0LmdldCgpLT4qbV9tZXRob2QpKG1f
ZXZlbnQuZ2V0KCkpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgbV93
ZWJTb2NrZXQtPmRpc3BhdGNoRXZlbnQobV9ldmVudC5nZXQoKSwgZWMpOworICAgICAgICBBU1NF
UlQoIWVjKTsKICAgICB9CiAKICAgcHJpdmF0ZToKLSAgICBQcm9jZXNzV2ViU29ja2V0RXZlbnRU
YXNrKFBhc3NSZWZQdHI8V2ViU29ja2V0PiB3ZWJTb2NrZXQsIE1ldGhvZCBtZXRob2QsIFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQorICAgIFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2soUGFzc1Jl
ZlB0cjxXZWJTb2NrZXQ+IHdlYlNvY2tldCwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAg
ICAgIDogbV93ZWJTb2NrZXQod2ViU29ja2V0KQotICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkK
ICAgICAgICAgLCBtX2V2ZW50KGV2ZW50KSB7IH0KIAogICAgIFJlZlB0cjxXZWJTb2NrZXQ+IG1f
d2ViU29ja2V0OwotICAgIE1ldGhvZCBtX21ldGhvZDsKICAgICBSZWZQdHI8RXZlbnQ+IG1fZXZl
bnQ7CiB9OwogCkBAIC0xNzEsNTQgKzE3MSw2IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdl
YlNvY2tldDo6c2NyaXAKICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiB9CiAKLXZvaWQgV2ViU29ja2V0OjphZGRFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBtX2V2
ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyczsK
LSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVu
dExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIGZv
ciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdp
bigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikKLSAg
ICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7
Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViU29ja2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sKQot
ewotICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVy
cy5maW5kKGV2ZW50VHlwZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0
ZXItPnNlY29uZDsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0
ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5l
bmQoKTsgKytsaXN0ZW5lckl0ZXIpCi0gICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50
TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXJJdGVyIC0g
bGlzdGVuZXJzLmJlZ2luKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci19Ci0K
LWJvb2wgV2ViU29ja2V0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2dCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFldnQgfHwgZXZ0LT50eXBlKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVf
RVJSOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBMaXN0ZW5lclZlY3RvciBs
aXN0ZW5lcnNDb3B5ID0gbV9ldmVudExpc3RlbmVycy5nZXQoZXZ0LT50eXBlKCkpOwotICAgIGZv
ciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVy
c0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlz
dGVuZXJJdGVyKSB7Ci0gICAgICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBldnQt
PnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGxpc3RlbmVySXRlci0+Z2V0KCktPmhh
bmRsZUV2ZW50KGV2dC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLSAgICByZXR1cm4gIWV2dC0+ZGVm
YXVsdFByZXZlbnRlZCgpOwotfQotCiB2b2lkIFdlYlNvY2tldDo6ZGlkQ29ubmVjdCgpCiB7CiAg
ICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXQgJXAgZGlkQ29ubmVjdCIsIHRoaXMpOwpAQCAtMjI3
LDcgKzE3OSw3IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRDb25uZWN0KCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBtX3N0YXRlID0gT1BFTjsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPnBvc3RUYXNrKFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2s6OmNyZWF0ZSh0aGlzLCAmV2Vi
U29ja2V0OjpkaXNwYXRjaE9wZW5FdmVudCwgRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkub3Bl
bkV2ZW50LCBmYWxzZSwgZmFsc2UpKSk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5w
b3N0VGFzayhQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrOjpjcmVhdGUodGhpcywgRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkub3BlbkV2ZW50LCBmYWxzZSwgZmFsc2UpKSk7CiB9CiAKIHZvaWQg
V2ViU29ja2V0OjpkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZykKQEAgLTIzOCw1
MyArMTkwLDI0IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRSZWNlaXZlTWVzc2FnZShjb25zdCAKICAg
ICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOwogICAg
IC8vIEZJWE1FOiBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIG1lc3NhZ2VQb3J0LgogICAg
IGV2dC0+aW5pdE1lc3NhZ2VFdmVudChldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50LCBmYWxzZSwg
ZmFsc2UsIG1zZywgIiIsICIiLCAwLCAwKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnBvc3RUYXNrKFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2s6OmNyZWF0ZSh0aGlzLCAmV2ViU29j
a2V0OjpkaXNwYXRjaE1lc3NhZ2VFdmVudCwgZXZ0KSk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5wb3N0VGFzayhQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrOjpjcmVhdGUodGhpcywg
ZXZ0KSk7CiB9CiAKIHZvaWQgV2ViU29ja2V0OjpkaWRDbG9zZSgpCiB7CiAgICAgTE9HKE5ldHdv
cmssICJXZWJTb2NrZXQgJXAgZGlkQ2xvc2UiLCB0aGlzKTsKICAgICBtX3N0YXRlID0gQ0xPU0VE
OwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soUHJvY2Vzc1dlYlNvY2tl
dEV2ZW50VGFzazo6Y3JlYXRlKHRoaXMsICZXZWJTb2NrZXQ6OmRpc3BhdGNoQ2xvc2VFdmVudCwg
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xvc2VFdmVudCwgZmFsc2UsIGZhbHNlKSkpOwor
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soUHJvY2Vzc1dlYlNvY2tldEV2
ZW50VGFzazo6Y3JlYXRlKHRoaXMsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsb3NlRXZl
bnQsIGZhbHNlLCBmYWxzZSkpKTsKIH0KIAotdm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2
ZW50KEV2ZW50KiBldnQpCitFdmVudFRhcmdldERhdGEqIFdlYlNvY2tldDo6ZXZlbnRUYXJnZXRE
YXRhKCkKIHsKLSAgICBpZiAobV9vbm9wZW4pIHsKLSAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhp
cyk7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbV9vbm9w
ZW4tPmhhbmRsZUV2ZW50KGV2dCwgZmFsc2UpOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGRpc3BhdGNoRXZlbnQoZXZ0LCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Cisg
ICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAotdm9pZCBXZWJTb2NrZXQ6OmRpc3Bh
dGNoTWVzc2FnZUV2ZW50KEV2ZW50KiBldnQpCitFdmVudFRhcmdldERhdGEqIFdlYlNvY2tldDo6
ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKIHsKLSAgICBpZiAobV9vbm1lc3NhZ2UpIHsKLSAgICAg
ICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCh0
aGlzKTsKLSAgICAgICAgbV9vbm1lc3NhZ2UtPmhhbmRsZUV2ZW50KGV2dCwgZmFsc2UpOwotICAg
IH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNoRXZlbnQoZXZ0LCBl
Yyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQgV2ViU29ja2V0OjpkaXNwYXRjaENsb3Nl
RXZlbnQoRXZlbnQqIGV2dCkKLXsKLSAgICBpZiAobV9vbmNsb3NlKSB7Ci0gICAgICAgIGV2dC0+
c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0g
ICAgICAgIG1fb25jbG9zZS0+aGFuZGxlRXZlbnQoZXZ0LCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQsIGVjKTsKLSAgICBB
U1NFUlQoIWVjKTsKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAkocmV2aXNpb24gNDg2
ODYpCisrKyBXZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJB
dG9taWNTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsQ2xpZW50LmgiCkBAIC02OSwyNiArNzAsMTUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7
CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdDsKIAotICAgICAg
ICB2b2lkIHNldE9ub3BlbihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
IHsgbV9vbm9wZW4gPSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9u
b3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fb25vcGVuLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0
T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29u
bWVzc2FnZSA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNz
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9vbm1lc3NhZ2UuZ2V0KCk7IH0KLSAgICAgICAgdm9pZCBz
ZXRPbmNsb3NlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29u
Y2xvc2UgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uY2xvc2Uo
KSBjb25zdCB7IHJldHVybiBtX29uY2xvc2UuZ2V0KCk7IH0KKyAgICAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUihvcGVuKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihtZXNzYWdlKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihjbG9zZSk7CiAKICAgICAgICAgLy8gRXZlbnRUYXJnZXQKICAgICAgICAgdmlydHVhbCBX
ZWJTb2NrZXQqIHRvV2ViU29ja2V0KCkgeyByZXR1cm4gdGhpczsgfQogCiAgICAgICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
OwogCi0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExpc3Rl
bmVyVmVjdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5l
clZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgRXZlbnRMaXN0
ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQot
CiAgICAgICAgIC8vIEFjdGl2ZURPTU9iamVjdAogICAgICAgICAvLyAgdmlydHVhbCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogICAgICAgICAvLyB2aXJ0dWFsIHZvaWQgY29udGV4
dERlc3Ryb3llZCgpOwpAQCAtMTEwLDYgKzEwMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKKyAgICAgICAgdmlydHVh
bCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCiAgICAgICAgIHZv
aWQgZGlzcGF0Y2hPcGVuRXZlbnQoRXZlbnQqKTsKICAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3Nh
Z2VFdmVudChFdmVudCopOwpAQCAtMTE3LDE0ICsxMDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIFJlZlB0cjxXZWJTb2NrZXRDaGFubmVsPiBtX2NoYW5uZWw7CiAKLSAgICAg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25vcGVuOwotICAgICAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbV9vbm1lc3NhZ2U7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29u
Y2xvc2U7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5lcnM7Ci0KICAg
ICAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICAgICAgS1VSTCBtX3VybDsKICAgICAgICAgU3RyaW5n
IG1fcHJvdG9jb2w7CisgICAgICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsK
ICAgICB9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDkgQEAKIG1vZHVsZSB3ZWJzb2NrZXRz
IHsKIAogICAgIGludGVyZmFjZSBbCi0gICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKLSAgICAg
ICAgTm9TdGF0aWNUYWJsZXMsCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9TT0NLRVRTCisgICAg
ICAgIENvbmRpdGlvbmFsPVdFQl9TT0NLRVRTLAorICAgICAgICBFdmVudFRhcmdldCwKKyAgICAg
ICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFdlYlNvY2tldCB7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgVVJMOwogCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RX
b3JrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5j
cHAJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsOTAgKzUyLDYgQEAgQWJzdHJhY3RXb3JrZXI6On5BYnN0
cmFjdFdvcmtlcigpCiB7CiB9CiAKLXZvaWQgQWJzdHJhY3RXb3JrZXI6OmFkZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0
b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwotICAgIGlmIChpdGVy
ID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpIHsKLSAgICAgICAgTGlzdGVuZXJWZWN0b3IgbGlz
dGVuZXJzOwotICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAg
ICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKLSAg
ICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVu
ZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJ
dGVyKSB7Ci0gICAgICAgICAgICBpZiAoKipsaXN0ZW5lckl0ZXIgPT0gKmV2ZW50TGlzdGVuZXIp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbGlzdGVuZXJz
LmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZl
bnRUeXBlLCBsaXN0ZW5lcnMpOwotICAgIH0KLX0KLQotdm9pZCBBYnN0cmFjdFdvcmtlcjo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRl
cmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwotICAgIGlmIChp
dGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExp
c3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgZm9yIChMaXN0ZW5l
clZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7
IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAg
ICAgIGlmICgqKmxpc3RlbmVySXRlciA9PSAqZXZlbnRMaXN0ZW5lcikgewotICAgICAgICAgICAg
bGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5lcnMuYmVnaW4oKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgQWJzdHJhY3RXb3Jr
ZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGlmICghZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVy
c0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsKLSAgICBmb3IgKExp
c3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5
LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xpc3RlbmVy
SXRlcikgewotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBldmVudC0+
c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbGlzdGVuZXJJdGVyLT5nZXQoKS0+aGFu
ZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gIWV2ZW50
LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KLXZvaWQgQWJzdHJhY3RXb3JrZXI6OmRpc3BhdGNo
TG9hZEVycm9yRXZlbnQoKQotewotICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIHRydWUpOwotICAgIGlmIChtX29uRXJy
b3JMaXN0ZW5lcikgewotICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0
LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBtX29uRXJyb3JMaXN0ZW5lci0+aGFu
ZGxlRXZlbnQoZXZ0LmdldCgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQo
IWVjKTsKLX0KLQotYm9vbCBBYnN0cmFjdFdvcmtlcjo6ZGlzcGF0Y2hTY3JpcHRFcnJvckV2ZW50
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5l
TnVtYmVyKQotewotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIFJlZlB0cjxFcnJvckV2
ZW50PiBldmVudCA9IEVycm9yRXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCBzb3VyY2VVUkwsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihsaW5lTnVtYmVyKSk7Ci0gICAgaWYgKG1fb25FcnJvckxpc3RlbmVy
KSB7Ci0gICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2ZW50LT5zZXRD
dXJyZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBtX29uRXJyb3JMaXN0ZW5lci0+aGFuZGxlRXZl
bnQoZXZlbnQuZ2V0KCksIHRydWUpOwotICAgICAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50
ZWQoKSkKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgIH0KLQotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGhhbmRsZWQgPSAhZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNl
KCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLQotICAgIHJldHVybiBoYW5kbGVkOwotfQotCiBL
VVJMIEFic3RyYWN0V29ya2VyOjpyZXNvbHZlVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkgewpAQCAtMTU3LDYgKzczLDE2
IEBAIEtVUkwgQWJzdHJhY3RXb3JrZXI6OnJlc29sdmVVUkwoY29uc3QgU3QKICAgICByZXR1cm4g
c2NyaXB0VVJMOwogfQogCitFdmVudFRhcmdldERhdGEqIEFic3RyYWN0V29ya2VyOjpldmVudFRh
cmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK0V2ZW50
VGFyZ2V0RGF0YSogQWJzdHJhY3RXb3JrZXI6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCit7Cisg
ICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvQWJz
dHJhY3RXb3JrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3Jr
ZXIuaAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgogI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgpAQCAtNTEsMTkgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBF
dmVudFRhcmdldCBBUElzCiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICAvLyBVdGls
aXR5IHJvdXRpbmVzIHRvIGdlbmVyYXRlIGFwcHJvcHJpYXRlIGVycm9yIGV2ZW50cyBmb3IgbG9h
ZGluZyBhbmQgc2NyaXB0IGV4Y2VwdGlvbnMuCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hMb2FkRXJy
b3JFdmVudCgpOwotICAgICAgICBib29sIGRpc3BhdGNoU2NyaXB0RXJyb3JFdmVudChjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCk7Ci0KLSAg
ICAgICAgdm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikgeyBtX29uRXJyb3JMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICAgICAgRXZl
bnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25FcnJvckxpc3RlbmVyLmdl
dCgpOyB9Ci0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExp
c3RlbmVyVmVjdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0
ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXJzTWFw
JiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KKyAgICAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7CiAKICAgICAgICAgdXNpbmcg
UmVmQ291bnRlZDxBYnN0cmFjdFdvcmtlcj46OnJlZjsKICAgICAgICAgdXNpbmcgUmVmQ291bnRl
ZDxBYnN0cmFjdFdvcmtlcj46OmRlcmVmOwpAQCAtNzgsOSArNjcsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdl
dCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7
IGRlcmVmKCk7IH0KLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkVycm9yTGlz
dGVuZXI7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5lcnM7CisgICAg
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKKyAgICAgICAg
dmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOworICAgICAg
ICAKKyAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdv
cmtlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlk
bAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBAIG1vZHVsZSB0aHJlYWRzIHsKIAogICAg
IGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPVdPUktFUlMsCi0gICAgICAgIEN1c3Rv
bU1hcmtGdW5jdGlvbiwKICAgICAgICAgQ3VzdG9tVG9KUywKKyAgICAgICAgRXZlbnRUYXJnZXQs
CiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IKICAgICBdIEFic3RyYWN0V29ya2VyIHsKIApJ
bmRleDogV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcAkocmV2aXNp
b24gNDg2ODYpCisrKyBXZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDIzICs3MSw2IEBAIHZvaWQgRGVkaWNhdGVkV29ya2VyQ29u
dGV4dDo6cG9zdE1lc3NhZ2UKICAgICB0aHJlYWQoKS0+d29ya2VyT2JqZWN0UHJveHkoKS5wb3N0
TWVzc2FnZVRvV29ya2VyT2JqZWN0KG1lc3NhZ2UsIGNoYW5uZWxzLnJlbGVhc2UoKSk7CiB9CiAK
LXZvaWQgRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0cykKLXsKLSAgICAv
LyBTaW5jZSBjbG9zZSgpIHN0b3BzIHRoZSB0aHJlYWQgZXZlbnQgbG9vcCwgdGhpcyBzaG91bGQg
bm90IGV2ZXIgZ2V0IGNhbGxlZCB3aGlsZSBjbG9zaW5nLgotICAgIEFTU0VSVCghaXNDbG9zaW5n
KCkpOwotICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2Fn
ZSwgIiIsICIiLCAwLCBwb3J0cyk7Ci0KLSAgICBpZiAobV9vbm1lc3NhZ2VMaXN0ZW5lci5nZXQo
KSkgewotICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5zZXRDdXJy
ZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBtX29ubWVzc2FnZUxpc3RlbmVyLT5oYW5kbGVFdmVu
dChldnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsK
LX0KLQogdm9pZCBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB1cmxzLCBjb25zdCBTdHJpbmcmIGNhbGxlclVSTCwgaW50IGNhbGxlckxp
bmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEJhc2U6OmltcG9ydFNjcmlwdHModXJscywg
Y2FsbGVyVVJMLCBjYWxsZXJMaW5lLCBlYyk7CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvRGVkaWNh
dGVkV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9EZWRpY2F0
ZWRXb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS93b3JrZXJzL0Rl
ZGljYXRlZFdvcmtlckNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTUgKzU5LDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICAv
LyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSB1cGRhdGUgdGhlIE9iakMgYmluZGluZ3MgKGJ1
ZyAjMjg3NzQpLgogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIE1lc3Nh
Z2VQb3J0KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICB2b2lkIHNldE9ubWVzc2FnZShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbm1lc3NhZ2VMaXN0ZW5l
ciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9vbm1lc3NhZ2VMaXN0ZW5lci5nZXQoKTsgfQogCi0gICAgICAgIHZv
aWQgZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRB
cnJheT4pOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG1lc3NhZ2Up
OwogCiAgICAgICAgIERlZGljYXRlZFdvcmtlclRocmVhZCogdGhyZWFkKCk7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgRGVkaWNhdGVkV29ya2VyQ29udGV4dChjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiwgRGVkaWNhdGVkV29ya2VyVGhyZWFkKik7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBtX29ubWVzc2FnZUxpc3RlbmVyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwJKHJl
dmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIG1vZHVsZSB0aHJlYWRzIHsKIAog
ICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPVdPUktFUlMsCi0gICAgICAgIEN1
c3RvbU1hcmtGdW5jdGlvbiwKICAgICAgICAgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCwKICAgICAg
ICAgSXNXb3JrZXJDb250ZXh0LAogICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKSW5k
ZXg6IFdlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5
LmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdv
cmtlclJlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1
ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMjMyLDggKzIzMywxMCBAQCBwcml2YXRlOgogICAgICAg
ICBwb3J0LT5lbnRhbmdsZShtX2NoYW5uZWwucmVsZWFzZSgpKTsKICAgICAgICAgQVNTRVJUKHNj
cmlwdENvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKICAgICAgICAgV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRDb250ZXh0
KTsKKyAgICAgICAgLy8gU2luY2UgY2xvc2UoKSBzdG9wcyB0aGUgdGhyZWFkIGV2ZW50IGxvb3As
IHRoaXMgc2hvdWxkIG5vdCBldmVyIGdldCBjYWxsZWQgd2hpbGUgY2xvc2luZy4KKyAgICAgICAg
QVNTRVJUKCF3b3JrZXJDb250ZXh0LT5pc0Nsb3NpbmcoKSk7CiAgICAgICAgIEFTU0VSVCh3b3Jr
ZXJDb250ZXh0LT5pc1NoYXJlZFdvcmtlckNvbnRleHQoKSk7Ci0gICAgICAgIHdvcmtlckNvbnRl
eHQtPnRvU2hhcmVkV29ya2VyQ29udGV4dCgpLT5kaXNwYXRjaENvbm5lY3QocG9ydCk7CisgICAg
ICAgIHdvcmtlckNvbnRleHQtPnRvU2hhcmVkV29ya2VyQ29udGV4dCgpLT5kaXNwYXRjaEV2ZW50
KGNyZWF0ZUNvbm5lY3RFdmVudChwb3J0KSk7CiAgICAgfQogCiAgICAgT3duUHRyPE1lc3NhZ2VQ
b3J0Q2hhbm5lbD4gbV9jaGFubmVsOwpAQCAtMjcyLDE4ICsyNzUsMTkgQEAgdm9pZCBTaGFyZWRX
b3JrZXJTY3JpcHRMb2FkZXI6OmxvYWQoY29ucwogCiAgICAgLy8gU3RheSBhbGl2ZSB1bnRpbCB0
aGUgbG9hZCBmaW5pc2hlcy4KICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgbV93
b3JrZXItPnNldFBlbmRpbmdBY3Rpdml0eShtX3dvcmtlci5nZXQoKSk7CiB9CiAKIHZvaWQgU2hh
cmVkV29ya2VyU2NyaXB0TG9hZGVyOjpub3RpZnlGaW5pc2hlZCgpCiB7CiAgICAgLy8gSGFuZCBv
ZmYgdGhlIGp1c3QtbG9hZGVkIGNvZGUgdG8gdGhlIHJlcG9zaXRvcnkgdG8gc3RhcnQgdXAgdGhl
IHdvcmtlciB0aHJlYWQuCiAgICAgaWYgKG1fc2NyaXB0TG9hZGVyLT5mYWlsZWQoKSkKLSAgICAg
ICAgbV93b3JrZXItPmRpc3BhdGNoTG9hZEVycm9yRXZlbnQoKTsKKyAgICAgICAgbV93b3JrZXIt
PmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFs
c2UsIHRydWUpKTsKICAgICBlbHNlCiAgICAgICAgIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0
b3J5OjppbnN0YW5jZSgpLndvcmtlclNjcmlwdExvYWRlZCgqbV9wcm94eSwgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRMb2FkZXItPnVybCgpKSwgbV9zY3JpcHRM
b2FkZXItPnNjcmlwdCgpLCBtX3BvcnQucmVsZWFzZSgpKTsKIAotICAgIC8vIFRoaXMgZnJlZXMg
dGhpcyBvYmplY3QgLSBtdXN0IGJlIHRoZSBsYXN0IGFjdGlvbiBpbiB0aGlzIGZ1bmN0aW9uLgot
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIG1fd29ya2VyLT51bnNldFBlbmRp
bmdBY3Rpdml0eShtX3dvcmtlci5nZXQoKSk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhp
cyk7IC8vIFRoaXMgZnJlZXMgdGhpcyBvYmplY3QgLSBtdXN0IGJlIHRoZSBsYXN0IGFjdGlvbiBp
biB0aGlzIGZ1bmN0aW9uLgogfQogCiBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSYgRGVm
YXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omluc3RhbmNlKCkKSW5kZXg6IFdlYkNvcmUvd29y
a2Vycy9TaGFyZWRXb3JrZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9TaGFy
ZWRXb3JrZXIuaWRsCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvd29ya2Vycy9TaGFyZWRX
b3JrZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIG1vZHVsZSB0aHJlYWRz
IHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPVNIQVJFRF9XT1JLRVJT
LAotICAgICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCiAgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29u
dmVydGVyLAogICAgICAgICBHZW5lcmF0ZVRvSlMKICAgICBdIFNoYXJlZFdvcmtlciA6IEFic3Ry
YWN0V29ya2VyIHsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK1Bhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBjcmVhdGVDb25uZWN0RXZlbnQoUGFzc1Jl
ZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKK3sKKyAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVu
dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG5ldyBNZXNzYWdlUG9ydEFycmF5KDEsIHBvcnQpKTsK
KyAgICBldmVudC0+aW5pdEV2ZW50KGV2ZW50TmFtZXMoKS5jb25uZWN0RXZlbnQsIGZhbHNlLCBm
YWxzZSk7CisgICAgcmV0dXJuIGV2ZW50OworfQorCiBTaGFyZWRXb3JrZXJDb250ZXh0OjpTaGFy
ZWRXb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHVzZXJBZ2VudCwgU2hhcmVkV29ya2VyVGhyZWFkKiB0aHJlYWQpCiAgICAgOiBX
b3JrZXJDb250ZXh0KHVybCwgdXNlckFnZW50LCB0aHJlYWQpCiAgICAgLCBtX25hbWUobmFtZSkK
QEAgLTUyLDI3ICs1OSw2IEBAIFNoYXJlZFdvcmtlckNvbnRleHQ6On5TaGFyZWRXb3JrZXJDb250
ZXgKIHsKIH0KIAotdm9pZCBTaGFyZWRXb3JrZXJDb250ZXh0OjpkaXNwYXRjaENvbm5lY3QoUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKLXsKLSAgICAvLyBTaW5jZSBjbG9zZSgpIHN0b3Bz
IHRoZSB0aHJlYWQgZXZlbnQgbG9vcCwgdGhpcyBzaG91bGQgbm90IGV2ZXIgZ2V0IGNhbGxlZCB3
aGlsZSBjbG9zaW5nLgotICAgIEFTU0VSVCghaXNDbG9zaW5nKCkpOwotICAgIC8vIFRoZSBjb25u
ZWN0IGV2ZW50IHVzZXMgdGhlIE1lc3NhZ2VFdmVudCBpbnRlcmZhY2UsIGJ1dCBoYXMgdGhlIG5h
bWUgImNvbm5lY3QiLgotICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0QXJyYXkobmV3
IE1lc3NhZ2VQb3J0QXJyYXkoKSk7Ci0gICAgcG9ydEFycmF5LT5hcHBlbmQocG9ydCk7Ci0gICAg
UmVmUHRyPEV2ZW50PiBldmVudCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKCIiLCAiIiwgIiIsIDAs
IHBvcnRBcnJheS5yZWxlYXNlKCkpOwotICAgIGV2ZW50LT5pbml0RXZlbnQoZXZlbnROYW1lcygp
LmNvbm5lY3RFdmVudCwgZmFsc2UsIGZhbHNlKTsKLQotICAgIGlmIChtX29uY29ubmVjdExpc3Rl
bmVyLmdldCgpKSB7Ci0gICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2
ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBtX29uY29ubmVjdExpc3RlbmVy
LT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLQotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpLCBlYyk7Ci0g
ICAgQVNTRVJUKCFlYyk7Ci19Ci0KIFNoYXJlZFdvcmtlclRocmVhZCogU2hhcmVkV29ya2VyQ29u
dGV4dDo6dGhyZWFkKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhcmVkV29ya2VyVGhy
ZWFkKj4oQmFzZTo6dGhyZWFkKCkpOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtl
ckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29u
dGV4dC5oCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisgICAgY2xhc3MgTWVzc2FnZUV2ZW50OwogICAgIGNsYXNzIFNoYXJlZFdvcmtl
clRocmVhZDsKIAogICAgIGNsYXNzIFNoYXJlZFdvcmtlckNvbnRleHQgOiBwdWJsaWMgV29ya2Vy
Q29udGV4dCB7CkBAIC01NCwxOSArNTUsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIFNoYXJlZFdvcmtlckNvbnRleHQqIHRvU2hhcmVkV29ya2VyQ29udGV4dCgpIHsg
cmV0dXJuIHRoaXM7IH0KIAogICAgICAgICAvLyBTZXR0ZXJzL0dldHRlcnMgZm9yIGF0dHJpYnV0
ZXMgaW4gU2hhcmVkV29ya2VyQ29udGV4dC5pZGwKLSAgICAgICAgdm9pZCBzZXRPbmNvbm5lY3Qo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25jb25uZWN0TGlz
dGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uY29ubmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb25jb25uZWN0TGlzdGVuZXIuZ2V0KCk7IH0KKyAgICAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjb25uZWN0KTsKICAgICAgICAgU3RyaW5n
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAotICAgICAgICB2b2lkIGRpc3BhdGNo
Q29ubmVjdChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0Pik7Ci0KICAgICAgICAgU2hhcmVkV29ya2Vy
VGhyZWFkKiB0aHJlYWQoKTsKICAgICBwcml2YXRlOgogICAgICAgICBTaGFyZWRXb3JrZXJDb250
ZXh0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIFNoYXJl
ZFdvcmtlclRocmVhZCopOwotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbmNvbm5l
Y3RMaXN0ZW5lcjsKICAgICAgICAgU3RyaW5nIG1fbmFtZTsKICAgICB9OwogCisgICAgUGFzc1Jl
ZlB0cjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZUNvbm5lY3RFdmVudChQYXNzUmVmUHRyPE1lc3NhZ2VQ
b3J0Pik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTSEFS
RURfV09SS0VSUykKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4dC5pZGwJ
KHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIG1vZHVsZSB0aHJlYWRzIHsKIAog
ICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPVNIQVJFRF9XT1JLRVJTLAotICAg
ICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCiAgICAgICAgIEV4dGVuZHNET01HbG9iYWxPYmplY3Qs
CiAgICAgICAgIElzV29ya2VyQ29udGV4dCwKICAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0
ZXIsCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3dvcmtl
cnMvV29ya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgV29y
a2VyOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlz
aGVkKCkKIHsKICAgICBpZiAobV9zY3JpcHRMb2FkZXItPmZhaWxlZCgpKQotICAgICAgICBkaXNw
YXRjaExvYWRFcnJvckV2ZW50KCk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIHRydWUpKTsKICAgICBlbHNlCiAgICAg
ICAgIG1fY29udGV4dFByb3h5LT5zdGFydFdvcmtlckNvbnRleHQobV9zY3JpcHRMb2FkZXItPnVy
bCgpLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVzZXJBZ2VudChtX3NjcmlwdExvYWRlci0+
dXJsKCkpLCBtX3NjcmlwdExvYWRlci0+c2NyaXB0KCkpOwogCkBAIC0xMjUsMjEgKzEyNSw2IEBA
IHZvaWQgV29ya2VyOjpub3RpZnlGaW5pc2hlZCgpCiAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CiB9CiAKLXZvaWQgV29ya2VyOjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzKQotewotICAgIFJlZlB0
cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCBw
b3J0cyk7Ci0KLSAgICBpZiAobV9vbk1lc3NhZ2VMaXN0ZW5lci5nZXQoKSkgewotICAgICAgICBl
dnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMp
OwotICAgICAgICBtX29uTWVzc2FnZUxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2
ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCkluZGV4OiBXZWJDb3Jl
L3dvcmtlcnMvV29ya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlci5o
CShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVk
ZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCIK
QEAgLTY0LDE1ICs2NSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCB0
ZXJtaW5hdGUoKTsKIAotICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcm
LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+KTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaEVy
cm9yRXZlbnQoKTsKLQogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdlTGlzdGVuZXIg
PSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KKyAgICAKKyAgICAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtZXNzYWdlKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RXhjZXB0aW9uQ29kZSYpOwpAQCAtODMsMTAgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQogCiAg
ICAgICAgIE93blB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IG1fc2NyaXB0TG9hZGVyOwotCiAgICAg
ICAgIFdvcmtlckNvbnRleHRQcm94eSogbV9jb250ZXh0UHJveHk7IC8vIFRoZSBwcm94eSBvdXRs
aXZlcyB0aGUgd29ya2VyIHRvIHBlcmZvcm0gdGhyZWFkIHNodXRkb3duLgotCi0gICAgICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTWVzc2FnZUxpc3RlbmVyOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsCShyZXZpc2lvbiA0ODY4NikKKysr
IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBAIG1vZHVsZSB0aHJlYWRzIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlv
bmFsPVdPUktFUlMsCi0gICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKICAgICAgICAgR2VuZXJh
dGVOYXRpdmVDb252ZXJ0ZXIsCiAgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gV29ya2VyIDog
QWJzdHJhY3RXb3JrZXIgewpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkocmV2aXNp
b24gNDg2ODYpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MSw1NyArMTYxLDYgQEAgdm9pZCBXb3JrZXJDb250ZXh0OjpzY3JpcHRJbXBv
cnRlZCh1bnNpZwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV29ya2VyQ29udGV4
dDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyLCBib29sKQotewotICAgIEV2ZW50TGlz
dGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlw
ZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgewotICAgICAgICBM
aXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7Ci0gICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRM
aXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVu
ZXJzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0g
aXRlci0+c2Vjb25kOwotICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0
ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5l
bmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKLSAgICAgICAgICAgIGlmICgqKmxpc3RlbmVySXRlciA9
PSAqZXZlbnRMaXN0ZW5lcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAg
IG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKLSAgICB9ICAgIAot
fQotCi12b2lkIFdvcmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17
Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJz
LmZpbmQoZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9
IGl0ZXItPnNlY29uZDsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBs
aXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVy
cy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKLSAgICAgICAgaWYgKCoqbGlzdGVuZXJJdGVyID09
ICpldmVudExpc3RlbmVyKSB7Ci0gICAgICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVy
SXRlciAtIGxpc3RlbmVycy5iZWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotYm9vbCBXb3JrZXJDb250ZXh0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIWV2ZW50IHx8
IGV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246
OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5l
cnMuZ2V0KGV2ZW50LT50eXBlKCkpOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVy
ICE9IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAgIGV2ZW50
LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMp
OwotICAgICAgICBsaXN0ZW5lckl0ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwg
ZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCk7Ci19Ci0KIHZvaWQgV29ya2VyQ29udGV4dDo6cG9zdFRhc2soUGFzc1JlZlB0cjxUYXNrPiB0
YXNrKQogewogICAgIHRocmVhZCgpLT5ydW5Mb29wKCkucG9zdFRhc2sodGFzayk7CkBAIC0zMDQs
NiArMjUzLDE2IEBAIE5vdGlmaWNhdGlvbkNlbnRlciogV29ya2VyQ29udGV4dDo6d2Via2kKIH0K
ICNlbmRpZgogCitFdmVudFRhcmdldERhdGEqIFdvcmtlckNvbnRleHQ6OmV2ZW50VGFyZ2V0RGF0
YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworRXZlbnRUYXJnZXRE
YXRhKiBXb3JrZXJDb250ZXh0OjplbnN1cmVFdmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVy
biAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCShyZXZp
c2lvbiA0ODY4NikKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIK
ICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIKQEAgLTc5LDggKzgwLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXb3JrZXJDb250ZXh0KiBzZWxmKCkgeyByZXR1
cm4gdGhpczsgfQogICAgICAgICBXb3JrZXJMb2NhdGlvbiogbG9jYXRpb24oKSBjb25zdDsKICAg
ICAgICAgdm9pZCBjbG9zZSgpOwotICAgICAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25lcnJvckxpc3RlbmVyID0gZXZlbnRM
aXN0ZW5lcjsgfQotICAgICAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1
cm4gbV9vbmVycm9yTGlzdGVuZXIuZ2V0KCk7IH0KKworICAgICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKIAogICAgICAgICAvLyBXb3JrZXJVdGlscwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgaW1wb3J0U2NyaXB0cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdXJscywg
Y29uc3QgU3RyaW5nJiBjYWxsZXJVUkwsIGludCBjYWxsZXJMaW5lLCBFeGNlcHRpb25Db2RlJik7
CkBAIC05MiwxNSArOTMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBzZXRJ
bnRlcnZhbChTY2hlZHVsZWRBY3Rpb24qLCBpbnQgdGltZW91dCk7CiAgICAgICAgIHZvaWQgY2xl
YXJJbnRlcnZhbChpbnQgdGltZW91dElkKTsKIAotICAgICAgICAvLyBFdmVudFRhcmdldAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwotICAgICAgICB2
aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29k
ZSYpOwotCi0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExp
c3RlbmVyVmVjdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0
ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXJzTWFw
JiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KLQogICAgICAg
ICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRF
eGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1l
c3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCk7CkBAIC0xMjUsOCArMTE3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIHsgZGVyZWYoKTsgfQorCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJn
ZXQoKSB7IGRlcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50
VGFyZ2V0RGF0YSgpOworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZl
bnRUYXJnZXREYXRhKCk7CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBLVVJMJiB2aXJ0dWFsVVJM
KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgS1VSTCB2aXJ0dWFsQ29tcGxldGVVUkwoY29uc3Qg
U3RyaW5nJikgY29uc3Q7CkBAIC0xNDAsMTMgKzEzNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIE93blB0cjxXb3JrZXJTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKICAgICAg
ICAgV29ya2VyVGhyZWFkKiBtX3RocmVhZDsKIAotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbV9vbmVycm9yTGlzdGVuZXI7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRM
aXN0ZW5lcnM7Ci0KICNpZiBFTkFCTEVfTk9USUZJQ0FUSU9OUwogICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxOb3RpZmljYXRpb25DZW50ZXI+IG1fbm90aWZpY2F0aW9uczsKICNlbmRpZgogICAgICAg
ICBib29sIG1fY2xvc2luZzsKKyAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXRE
YXRhOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG1vZHVsZSB0aHJl
YWRzIHsKICAgICAgICAgQ29uZGl0aW9uYWw9V09SS0VSUywKICAgICAgICAgQ3VzdG9tTWFya0Z1
bmN0aW9uLAogICAgICAgICBEZWxlZ2F0aW5nR2V0T3duUHJvcGVydHlTbG90LAorICAgICAgICBF
dmVudFRhcmdldCwKICAgICAgICAgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCwKICAgICAgICAgSXNX
b3JrZXJDb250ZXh0LAogICAgICAgICBMZWdhY3lQYXJlbnQ9SlNXb3JrZXJDb250ZXh0QmFzZSwK
SW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkocmV2aXNpb24g
NDg2ODYpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyVGhy
ZWFkLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJFcnJvckV2ZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIkdlbmVyaWNXb3JrZXJUYXNrLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtNjEsNyArNjMsNyBAQCBwcml2YXRl
OgogICAgICAgICBBU1NFUlQoc2NyaXB0Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwogICAg
ICAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8RGVkaWNh
dGVkV29ya2VyQ29udGV4dCo+KHNjcmlwdENvbnRleHQpOwogICAgICAgICBPd25QdHI8TWVzc2Fn
ZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqc2NyaXB0Q29u
dGV4dCwgbV9jaGFubmVscy5yZWxlYXNlKCkpOwotICAgICAgICBjb250ZXh0LT5kaXNwYXRjaE1l
c3NhZ2UobV9tZXNzYWdlLCBwb3J0cy5yZWxlYXNlKCkpOworICAgICAgICBjb250ZXh0LT5kaXNw
YXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKHBvcnRzLnJlbGVhc2UoKSwgbV9tZXNzYWdl
KSk7CiAgICAgICAgIGNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJPYmplY3RQcm94eSgpLmNvbmZp
cm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChjb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7
CiAgICAgfQogCkBAIC05Miw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0gTWVzc2FnZVBvcnQ6
OmVudGFuZ2xlUG9ydHMoKnNjcmlwdENvbnRleHQsIG1fY2hhbm5lbHMucmVsZWFzZSgpKTsKLSAg
ICAgICAgd29ya2VyT2JqZWN0LT5kaXNwYXRjaE1lc3NhZ2UobV9tZXNzYWdlLCBwb3J0cy5yZWxl
YXNlKCkpOworICAgICAgICB3b3JrZXJPYmplY3QtPmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50
OjpjcmVhdGUocG9ydHMucmVsZWFzZSgpLCBtX21lc3NhZ2UpKTsKICAgICB9CiAKIHByaXZhdGU6
CkBAIC0xMjYsOCArMTI4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gV2UgZG9uJ3QgYm90aGVy
IGNoZWNraW5nIHRoZSBhc2tlZFRvVGVybWluYXRlKCkgZmxhZyBoZXJlLCBiZWNhdXNlIGV4Y2Vw
dGlvbnMgc2hvdWxkICphbHdheXMqIGJlIHJlcG9ydGVkIGV2ZW4gaWYgdGhlIHRocmVhZCBpcyB0
ZXJtaW5hdGVkLgogICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgZGlmZmVyZW50IHRo
YW4gdGhlIGJlaGF2aW9yIGluIE1lc3NhZ2VXb3JrZXJUYXNrLCBiZWNhdXNlIHRlcm1pbmF0ZWQg
d29ya2VycyBubyBsb25nZXIgZGVsaXZlciBtZXNzYWdlcyAoc2VjdGlvbiA0LjYgb2YgdGhlIFdl
YldvcmtlciBzcGVjKSwgYnV0IHRoZXkgZG8gcmVwb3J0IGV4Y2VwdGlvbnMuCiAKLSAgICAgICAg
Ym9vbCBlcnJvckhhbmRsZWQgPSB3b3JrZXJPYmplY3QtPmRpc3BhdGNoU2NyaXB0RXJyb3JFdmVu
dChtX2Vycm9yTWVzc2FnZSwgbV9zb3VyY2VVUkwsIG1fbGluZU51bWJlcik7Ci0KKyAgICAgICAg
Ym9vbCBlcnJvckhhbmRsZWQgPSAhd29ya2VyT2JqZWN0LT5kaXNwYXRjaEV2ZW50KEVycm9yRXZl
bnQ6OmNyZWF0ZShtX2Vycm9yTWVzc2FnZSwgbV9zb3VyY2VVUkwsIG1fbGluZU51bWJlcikpOwog
ICAgICAgICBpZiAoIWVycm9ySGFuZGxlZCkKICAgICAgICAgICAgIGNvbnRleHQtPnJlcG9ydEV4
Y2VwdGlvbihtX2Vycm9yTWVzc2FnZSwgbV9saW5lTnVtYmVyLCBtX3NvdXJjZVVSTCk7CiAgICAg
fQpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw1NiArMjM1LDYg
QEAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIFhNTEh0dHBSZXF1ZXN0Ojp1cAogICAgIHJldHVybiBt
X3VwbG9hZC5nZXQoKTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyLCBib29sKQotewotICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7Ci0gICAgaWYgKGl0ZXIg
PT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgewotICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0
ZW5lcnM7Ci0gICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAg
IG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOwotICAg
ICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5l
cnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0
ZXIpCi0gICAgICAgICAgICBpZiAoKipsaXN0ZW5lckl0ZXIgPT0gKmV2ZW50TGlzdGVuZXIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRM
aXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVu
ZXJzKTsKLSAgICB9Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlz
dGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBtX2V2ZW50
TGlzdGVuZXJzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMaXN0ZW5lclZlY3RvciYg
bGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIg
IT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikKLSAgICAgICAgaWYgKCoqbGlzdGVu
ZXJJdGVyID09ICpldmVudExpc3RlbmVyKSB7Ci0gICAgICAgICAgICBsaXN0ZW5lcnMucmVtb3Zl
KGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5iZWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotfQotCi1ib29sIFhNTEh0dHBSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IGNo
ZWNrIGZvciBvdGhlciBlcnJvciBjb25kaXRpb25zIGVudW1lcmF0ZWQgaW4gdGhlIHNwZWMuCi0g
ICAgaWYgKCFldnQgfHwgZXZ0LT50eXBlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0gRXZl
bnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnNDb3B5ID0gbV9ldmVu
dExpc3RlbmVycy5nZXQoZXZ0LT50eXBlKCkpOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVu
ZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAg
IGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhp
cyk7Ci0gICAgICAgIGxpc3RlbmVySXRlci0+Z2V0KCktPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwg
ZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiAhZXZ0LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19
Ci0KIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNoYW5nZVN0YXRlKFN0YXRlIG5ld1N0YXRlKQogewog
ICAgIGlmIChtX3N0YXRlICE9IG5ld1N0YXRlKSB7CkBAIC0yOTgsMTAgKzI0OCwxMCBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNoYW5nCiAgICAgaWYgKCFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRpc3BhdGNoUmVhZHlTdGF0
ZUNoYW5nZUV2ZW50KCk7CisgICAgZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50KSk7CiAKICAg
ICBpZiAobV9zdGF0ZSA9PSBET05FICYmICFtX2Vycm9yKQotICAgICAgICBkaXNwYXRjaExvYWRF
dmVudCgpOworICAgICAgICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVx
dWVzdDo6c2V0V2l0aENyZWRlbnRpYWxzKGJvb2wgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpA
QCAtNDc5LDEwICs0MjksMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdChF
eGNlcAogICAgIC8vIEFsc28sIG9ubHkgYXN5bmMgcmVxdWVzdHMgc3VwcG9ydCB1cGxvYWQgcHJv
Z3Jlc3MgZXZlbnRzLgogICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKICAgICBpZiAo
bV9hc3luYykgewotICAgICAgICBkaXNwYXRjaExvYWRTdGFydEV2ZW50KCk7CisgICAgICAgIGRp
c3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmxvYWRzdGFydEV2ZW50KSk7CiAgICAgICAgIGlmIChtX3JlcXVlc3RFbnRpdHlCb2R5ICYm
IG1fdXBsb2FkKSB7Ci0gICAgICAgICAgICBmb3JjZVByZWZsaWdodCA9IG1fdXBsb2FkLT5oYXNM
aXN0ZW5lcnMoKTsKLSAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaExvYWRTdGFydEV2ZW50
KCk7CisgICAgICAgICAgICBmb3JjZVByZWZsaWdodCA9IG1fdXBsb2FkLT5oYXNFdmVudExpc3Rl
bmVycygpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRzdGFydEV2ZW50KSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTU3MSwxMSArNTIxLDExIEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmFib3J0KCkKICAgICAgICAgbV9zdGF0ZSA9IFVOU0VOVDsKICAgICB9CiAKLSAgICBkaXNw
YXRjaEFib3J0RXZlbnQoKTsKKyAgICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7CiAgICAgaWYgKCFtX3Vw
bG9hZENvbXBsZXRlKSB7CiAgICAgICAgIG1fdXBsb2FkQ29tcGxldGUgPSB0cnVlOwogICAgICAg
ICBpZiAobV91cGxvYWQgJiYgbV91cGxvYWRFdmVudHNBbGxvd2VkKQotICAgICAgICAgICAgbV91
cGxvYWQtPmRpc3BhdGNoQWJvcnRFdmVudCgpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3Bh
dGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmFib3J0RXZlbnQpKTsKICAgICB9CiB9CiAKQEAgLTYyNSwxMSArNTc1LDExIEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmdlbmVyaWNFcnJvcigpCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpuZXR3b3Jr
RXJyb3IoKQogewogICAgIGdlbmVyaWNFcnJvcigpOwotICAgIGRpc3BhdGNoRXJyb3JFdmVudCgp
OworICAgIGRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2FkQ29tcGxldGUpIHsK
ICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlmIChtX3VwbG9hZCAm
JiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCi0gICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hF
cnJvckV2ZW50KCk7CisgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hFdmVudChYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCkpOwog
ICAgIH0KICAgICBpbnRlcm5hbEFib3J0KCk7CiB9CkBAIC02MzcsMTEgKzU4NywxMSBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpuZXR3b3JrRXJyb3IoKQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJv
cnRFcnJvcigpCiB7CiAgICAgZ2VuZXJpY0Vycm9yKCk7Ci0gICAgZGlzcGF0Y2hBYm9ydEV2ZW50
KCk7CisgICAgZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0ZSkg
ewogICAgICAgICBtX3VwbG9hZENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKG1fdXBsb2Fk
ICYmIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCkKLSAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRj
aEFib3J0RXZlbnQoKTsKKyAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50KFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7
CiAgICAgfQogfQogCkBAIC04ODksMTIgKzgzOSwxMiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpk
aWRTZW5kRGF0YSh1bnNpZ25lCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3VwbG9hZEV2
ZW50c0FsbG93ZWQpCi0gICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaFByb2dyZXNzRXZlbnQoYnl0
ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hF
dmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucHJv
Z3Jlc3NFdmVudCwgdHJ1ZSwgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpKTsKIAogICAg
IGlmIChieXRlc1NlbnQgPT0gdG90YWxCeXRlc1RvQmVTZW50ICYmICFtX3VwbG9hZENvbXBsZXRl
KSB7CiAgICAgICAgIG1fdXBsb2FkQ29tcGxldGUgPSB0cnVlOwogICAgICAgICBpZiAobV91cGxv
YWRFdmVudHNBbGxvd2VkKQotICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoTG9hZEV2ZW50
KCk7CisgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50KSk7CiAgICAgfQogfQog
CkBAIC05NDIsNyArODkyLDEyIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRh
KGNvbnMKICAgICBtX3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW4p
OwogCiAgICAgaWYgKCFtX2Vycm9yKSB7Ci0gICAgICAgIHVwZGF0ZUFuZERpc3BhdGNoT25Qcm9n
cmVzcyhsZW4pOworICAgICAgICBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGggPSBtX3Jlc3BvbnNl
LmV4cGVjdGVkQ29udGVudExlbmd0aCgpOworICAgICAgICBtX3JlY2VpdmVkTGVuZ3RoICs9IGxl
bjsKKworICAgICAgICAvLyBGSVhNRTogdGhlIHNwZWMgcmVxdWlyZXMgdGhhdCB3ZSBkaXNwYXRj
aCB0aGUgZXZlbnQgYWNjb3JkaW5nIHRvIHRoZSBsZWFzdAorICAgICAgICAvLyBmcmVxdWVudCBt
ZXRob2QgYmV0d2VlbiBldmVyeSAzNTBtcyAoKy8tMjAwbXMpIGFuZCBmb3IgZXZlcnkgYnl0ZSBy
ZWNlaXZlZC4KKyAgICAgICAgZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgZXhwZWN0ZWRMZW5ndGggJiYg
bV9yZWNlaXZlZExlbmd0aCA8PSBleHBlY3RlZExlbmd0aCwgbV9yZWNlaXZlZExlbmd0aCwgZXhw
ZWN0ZWRMZW5ndGgpKTsKIAogICAgICAgICBpZiAobV9zdGF0ZSAhPSBMT0FESU5HKQogICAgICAg
ICAgICAgY2hhbmdlU3RhdGUoTE9BRElORyk7CkBAIC05NTIsNzAgKzkwNyw2IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnMKICAgICB9CiB9CiAKLXZvaWQgWE1MSHR0
cFJlcXVlc3Q6OnVwZGF0ZUFuZERpc3BhdGNoT25Qcm9ncmVzcyh1bnNpZ25lZCBpbnQgbGVuKQot
ewotICAgIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCA9IG1fcmVzcG9uc2UuZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCk7Ci0gICAgbV9yZWNlaXZlZExlbmd0aCArPSBsZW47Ci0KLSAgICAvLyBGSVhN
RTogdGhlIHNwZWMgcmVxdWlyZXMgdGhhdCB3ZSBkaXNwYXRjaCB0aGUgZXZlbnQgYWNjb3JkaW5n
IHRvIHRoZSBsZWFzdAotICAgIC8vIGZyZXF1ZW50IG1ldGhvZCBiZXR3ZWVuIGV2ZXJ5IDM1MG1z
ICgrLy0yMDBtcykgYW5kIGZvciBldmVyeSBieXRlIHJlY2VpdmVkLgotICAgIGRpc3BhdGNoUHJv
Z3Jlc3NFdmVudChleHBlY3RlZExlbmd0aCk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRp
c3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KCkKLXsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9
IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCwgZmFsc2Us
IGZhbHNlKTsKLSAgICBpZiAobV9vblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcikgewotICAgICAg
ICBldnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRo
aXMpOwotICAgICAgICBtX29uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyLT5oYW5kbGVFdmVudChl
dnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0K
LQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlzcGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnQoRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9v
bCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb2FkZWQsIHVuc2lnbmVkIHRvdGFsKQotewot
ICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ+IGV2dCA9IFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKHR5cGUsIGxlbmd0aENvbXB1dGFibGUsIGxvYWRlZCwg
dG90YWwpOwotICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICBldnQtPnNldFRhcmdldCh0aGlz
KTsKLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBsaXN0ZW5l
ci0+aGFuZGxlRXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7Ci0gICAg
QVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNoQWJvcnRFdmVu
dCgpCi17Ci0gICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQobV9vbkFib3J0
TGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCBmYWxzZSwgMCwgMCk7Ci19
Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNoRXJyb3JFdmVudCgpCi17Ci0gICAgZGlz
cGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQobV9vbkVycm9yTGlzdGVuZXIuZ2V0KCks
IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgMCwgMCk7Ci19Ci0KLXZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpc3BhdGNoTG9hZEV2ZW50KCkKLXsKLSAgICBkaXNwYXRjaFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudChtX29uTG9hZExpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkubG9h
ZEV2ZW50LCBmYWxzZSwgMCwgMCk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNo
TG9hZFN0YXJ0RXZlbnQoKQotewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50KG1fb25Mb2FkU3RhcnRMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLmxvYWRzdGFydEV2
ZW50LCBmYWxzZSwgMCwgMCk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNoUHJv
Z3Jlc3NFdmVudChsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgpCi17Ci0gICAgZGlzcGF0Y2hYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnQobV9vblByb2dyZXNzTGlzdGVuZXIuZ2V0KCksIGV2ZW50
TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBleHBlY3RlZExlbmd0aCAmJiBtX3JlY2VpdmVkTGVuZ3Ro
IDw9IGV4cGVjdGVkTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlY2VpdmVkTGVuZ3RoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGV4cGVjdGVkTGVuZ3RoKSk7Ci19Ci0KIGJvb2wgWE1MSHR0cFJlcXVlc3Q6OmNh
blN1c3BlbmQoKSBjb25zdAogewogICAgIHJldHVybiAhbV9sb2FkZXI7CkBAIC0xMDM3LDQgKzky
OCwxNCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBYTUxIdHRwUmVxdWVzdDo6CiAgICAgcmV0
dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogfQogCitFdmVu
dFRhcmdldERhdGEqIFhNTEh0dHBSZXF1ZXN0OjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJl
dHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogWE1MSHR0cFJl
cXVlc3Q6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFy
Z2V0RGF0YTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5oCShyZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKICNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgog
I2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgpAQCAt
ODUsMzIgKzg2LDEyIEBAIHB1YmxpYzoKICAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2Fk
KCk7CiAgICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIG9wdGlvbmFsVXBsb2FkKCkgY29uc3QgeyBy
ZXR1cm4gbV91cGxvYWQuZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0T25yZWFkeXN0YXRlY2hhbmdl
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uUmVhZHlTdGF0
ZUNoYW5nZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9u
cmVhZHlzdGF0ZWNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25SZWFkeVN0YXRlQ2hhbmdlTGlz
dGVuZXIuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0T25hYm9ydChQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkFib3J0TGlzdGVuZXIgPSBldmVudExpc3RlbmVy
OyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25hYm9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fb25BYm9y
dExpc3RlbmVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25FcnJvckxpc3RlbmVyID0gZXZlbnRMaXN0
ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9uZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX29u
RXJyb3JMaXN0ZW5lci5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRPbmxvYWQoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Mb2FkTGlzdGVuZXIgPSBldmVudExp
c3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25sb2FkKCkgY29uc3QgeyByZXR1cm4gbV9v
bkxvYWRMaXN0ZW5lci5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRPbmxvYWRzdGFydChQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkxvYWRTdGFydExpc3RlbmVy
ID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9ubG9hZHN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9vbkxvYWRTdGFydExpc3RlbmVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNl
dE9ucHJvZ3Jlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1f
b25Qcm9ncmVzc0xpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIq
IG9ucHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX29uUHJvZ3Jlc3NMaXN0ZW5lci5nZXQoKTsg
fQotCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJW
ZWN0b3I7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgTGlzdGVuZXJWZWN0b3I+
IEV2ZW50TGlzdGVuZXJzTWFwOwotCi0gICAgLy8gdXNlQ2FwdHVyZSBpcyBub3QgdXNlZCwgZXZl
biBmb3IgYWRkL3JlbW92ZSBwYWlyaW5nIChmb3IgRmlyZWZveCBjb21wYXRpYmlsaXR5KS4KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgdmlydHVhbCBib29s
IGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBF
dmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVu
ZXJzOyB9CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihyZWFkeXN0YXRlY2hh
bmdlKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFib3J0KTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKyAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKGxvYWQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIobG9hZHN0YXJ0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBy
b2dyZXNzKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8WE1MSHR0cFJlcXVlc3Q+OjpyZWY7CiAg
ICAgdXNpbmcgUmVmQ291bnRlZDxYTUxIdHRwUmVxdWVzdD46OmRlcmVmOwpAQCAtMTIwLDYgKzEw
MSw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJl
ZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0K
KyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7CisgICAgdmly
dHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CiAKQEAgLTEzNSw4ICsxMTgsNiBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOwogCi0gICAgdm9pZCB1cGRhdGVBbmREaXNwYXRjaE9uUHJvZ3Jlc3ModW5zaWduZWQg
aW50IGxlbik7Ci0KICAgICBTdHJpbmcgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OwogICAgIGJv
b2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0OwogCkBAIC0xNTksMjIgKzE0MCw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBuZXR3b3JrRXJyb3IoKTsKICAgICB2b2lkIGFib3J0RXJyb3IoKTsKIAotICAg
IHZvaWQgZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoKTsKLSAgICB2b2lkIGRpc3BhdGNo
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWduZWQgbG9h
ZGVkLCB1bnNpZ25lZCB0b3RhbCk7Ci0gICAgdm9pZCBkaXNwYXRjaEFib3J0RXZlbnQoKTsKLSAg
ICB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwotICAgIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQo
KTsKLSAgICB2b2lkIGRpc3BhdGNoTG9hZFN0YXJ0RXZlbnQoKTsKLSAgICB2b2lkIGRpc3BhdGNo
UHJvZ3Jlc3NFdmVudChsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgpOwotCi0gICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fb25BYm9ydExpc3RlbmVyOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBtX29uRXJyb3JMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkxvYWRM
aXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkxvYWRTdGFydExpc3RlbmVy
OwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uUHJvZ3Jlc3NMaXN0ZW5lcjsKLSAgICBF
dmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOwotCiAgICAgUmVmUHRyPFhNTEh0dHBS
ZXF1ZXN0VXBsb2FkPiBtX3VwbG9hZDsKIAogICAgIEtVUkwgbV91cmw7CkBAIC0yMTcsNiArMTgy
LDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xhc3RTZW5kTGluZU51bWJlcjsKICAgICBT
dHJpbmcgbV9sYXN0U2VuZFVSTDsKICAgICBFeGNlcHRpb25Db2RlIG1fZXhjZXB0aW9uQ29kZTsK
KyAgICAKKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaWRsCShyZXZpc2lvbiA0
ODY4NikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQCBtb2R1bGUgeG1sIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAg
IEN1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICAgICAgRXZlbnRUYXJnZXQsCiAgICAgICAgIE5vU3Rh
dGljVGFibGVzCiAgICAgXSBYTUxIdHRwUmVxdWVzdCB7CiAgICAgICAgIC8vIEZyb20gWE1MSHR0
cFJlcXVlc3RFdmVudFRhcmdldApJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50LmgJKHJldmlzaW9uIDQ4Njg2KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50PiBjcmVhdGUoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBib29sIGxlbmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvYWRlZCwg
dW5zaWduZWQgdG90YWwpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBsZW5n
dGhDb21wdXRhYmxlID0gZmFsc2UsIHVuc2lnbmVkIGxvYWRlZCA9IDAsIHVuc2lnbmVkIHRvdGFs
ID0gMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQodHlwZSwgbGVuZ3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0b3Rh
bCkpOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCShy
ZXZpc2lvbiA0ODY4NikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDYgQEAgWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OlhN
TEh0dHBSZXF1ZXN0VXBsbwogewogfQogCi1ib29sIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpoYXNM
aXN0ZW5lcnMoKSBjb25zdAotewotICAgIHJldHVybiBtX29uQWJvcnRMaXN0ZW5lciB8fCBtX29u
RXJyb3JMaXN0ZW5lciB8fCBtX29uTG9hZExpc3RlbmVyIHx8IG1fb25Mb2FkU3RhcnRMaXN0ZW5l
ciB8fCBtX29uUHJvZ3Jlc3NMaXN0ZW5lciB8fCAhbV9ldmVudExpc3RlbmVycy5pc0VtcHR5KCk7
Ci19Ci0KIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKIHsKICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0
cFJlcXVlc3QgPSBhc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKQEAgLTU0LDk1ICs0OSwxNCBA
QCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBYTUxIdHRwUmVxdWVzdFVwCiAgICAgcmV0dXJuIHht
bEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiB9CiAKLXZvaWQgWE1MSHR0
cFJlcXVlc3RVcGxvYWQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsK
LSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMu
ZmluZChldmVudFR5cGUpOwotICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkp
IHsKLSAgICAgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzOwotICAgICAgICBsaXN0ZW5lcnMu
YXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVu
dFR5cGUsIGxpc3RlbmVycyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTGlzdGVuZXJWZWN0b3Im
IGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6
aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAh
PSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAgICAgICBpZiAoKips
aXN0ZW5lckl0ZXIgPT0gKmV2ZW50TGlzdGVuZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVu
ZXIpOwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7
Ci0gICAgfQotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpyZW1vdmVFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBldmVudExp
c3RlbmVyLCBib29sKQotewotICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0g
bV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9ldmVu
dExpc3RlbmVycy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGlzdGVuZXJWZWN0b3Im
IGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25z
dF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVy
ICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKLSAgICAgICAgaWYgKCoqbGlz
dGVuZXJJdGVyID09ICpldmVudExpc3RlbmVyKSB7Ci0gICAgICAgICAgICBsaXN0ZW5lcnMucmVt
b3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5iZWdpbigpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIC8vIEZJWE1FOiBjaGVjayBmb3Igb3RoZXIgZXJyb3IgY29uZGl0aW9ucyBlbnVtZXJhdGVk
IGluIHRoZSBzcGVjLgotICAgIGlmICghZXZ0IHx8IGV2dC0+dHlwZSgpLmlzRW1wdHkoKSkgewot
ICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVu
ZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2dC0+dHlwZSgpKTsKLSAgICBmb3IgKExp
c3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5
LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xpc3RlbmVy
SXRlcikgewotICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5zZXRD
dXJyZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBsaXN0ZW5lckl0ZXItPmdldCgpLT5oYW5kbGVF
dmVudChldnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gIWV2dC0+ZGVmYXVs
dFByZXZlbnRlZCgpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpkaXNwYXRjaFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGxlbmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvYWRl
ZCwgdW5zaWduZWQgdG90YWwpCi17Ci0gICAgUmVmUHRyPFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudD4gZXZ0ID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUodHlwZSwgbGVu
Z3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0b3RhbCk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAg
ICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQo
dGhpcyk7Ci0gICAgICAgIGxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZhbHNlKTsK
LSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50KGV2
dC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVx
dWVzdFVwbG9hZDo6ZGlzcGF0Y2hBYm9ydEV2ZW50KCkKLXsKLSAgICBkaXNwYXRjaFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uQWJvcnRMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygp
LmFib3J0RXZlbnQsIGZhbHNlLCAwLCAwKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9h
ZDo6ZGlzcGF0Y2hFcnJvckV2ZW50KCkKLXsKLSAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudChtX29uRXJyb3JMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLmVycm9yRXZl
bnQsIGZhbHNlLCAwLCAwKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6ZGlzcGF0
Y2hMb2FkRXZlbnQoKQotewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
KG1fb25Mb2FkTGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCAw
LCAwKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9hZDo6ZGlzcGF0Y2hMb2FkU3RhcnRF
dmVudCgpCitFdmVudFRhcmdldERhdGEqIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpldmVudFRhcmdl
dERhdGEoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25M
b2FkU3RhcnRMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLmxvYWRzdGFydEV2ZW50LCBmYWxz
ZSwgMCwgMCk7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAotdm9pZCBYTUxI
dHRwUmVxdWVzdFVwbG9hZDo6ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGxvbmcgbG9uZyBieXRlc1Nl
bnQsIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCitFdmVudFRhcmdldERhdGEqIFhNTEh0
dHBSZXF1ZXN0VXBsb2FkOjplbnN1cmVFdmVudFRhcmdldERhdGEoKQogewotICAgIGRpc3BhdGNo
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpLCBl
dmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgdHJ1ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJ5
dGVzU2VudCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3RhbEJ5dGVzVG9CZVNlbnQpKTsKKyAg
ICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmgJKHJldmlzaW9uIDQ4Njg2KQorKysg
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZlbnRU
YXJnZXQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CkBAIC00OCw4ICs0OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgWE1MSHR0cFJlcXVlc3RVcGxvYWQoeG1sSHR0cFJlcXVlc3Qp
KTsKICAgICAgICAgfQogCi0gICAgICAgIGJvb2wgaGFzTGlzdGVuZXJzKCkgY29uc3Q7Ci0KICAg
ICAgICAgdmlydHVhbCBYTUxIdHRwUmVxdWVzdFVwbG9hZCogdG9YTUxIdHRwUmVxdWVzdFVwbG9h
ZCgpIHsgcmV0dXJuIHRoaXM7IH0KIAogICAgICAgICBYTUxIdHRwUmVxdWVzdCogYXNzb2NpYXRl
ZFhNTEh0dHBSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV94bWxIdHRwUmVxdWVzdDsgfQpAQCAt
NTcsMzQgKzU2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKLSAgICAgICAg
dm9pZCBkaXNwYXRjaEFib3J0RXZlbnQoKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaEVycm9yRXZl
bnQoKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwotICAgICAgICB2b2lkIGRp
c3BhdGNoTG9hZFN0YXJ0RXZlbnQoKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaFByb2dyZXNzRXZl
bnQobG9uZyBsb25nIGJ5dGVzU2VudCwgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci0K
LSAgICAgICAgdm9pZCBzZXRPbmFib3J0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikgeyBtX29uQWJvcnRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICAgICAg
RXZlbnRMaXN0ZW5lciogb25hYm9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fb25BYm9ydExpc3RlbmVy
LmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uRXJyb3JMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7
IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25F
cnJvckxpc3RlbmVyLmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRPbmxvYWQoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Mb2FkTGlzdGVuZXIgPSBldmVu
dExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubG9hZCgpIGNvbnN0IHsgcmV0
dXJuIG1fb25Mb2FkTGlzdGVuZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHNldE9ubG9hZHN0
YXJ0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uTG9hZFN0
YXJ0TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9u
bG9hZHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9vbkxvYWRTdGFydExpc3RlbmVyLmdldCgpOyB9
Ci0KLSAgICAgICAgdm9pZCBzZXRPbnByb2dyZXNzKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikgeyBtX29uUHJvZ3Jlc3NMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0K
LSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fb25Q
cm9ncmVzc0xpc3RlbmVyLmdldCgpOyB9Ci0KLSAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsKLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwotICAgICAgICB2
aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgICAgICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVy
biBtX2V2ZW50TGlzdGVuZXJzOyB9CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoYWJvcnQpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVy
cm9yKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkKTsKKyAg
ICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2Fkc3RhcnQpOworICAgICAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKIAogICAgICAgICB1
c2luZyBSZWZDb3VudGVkPFhNTEh0dHBSZXF1ZXN0VXBsb2FkPjo6cmVmOwogICAgICAgICB1c2lu
ZyBSZWZDb3VudGVkPFhNTEh0dHBSZXF1ZXN0VXBsb2FkPjo6ZGVyZWY7CkBAIC05MiwxOSArNjgs
MTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIFhNTEh0dHBS
ZXF1ZXN0VXBsb2FkKFhNTEh0dHBSZXF1ZXN0Kik7CiAKLSAgICAgICAgdm9pZCBkaXNwYXRjaFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChFdmVudExpc3RlbmVyKiwgY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBib29sIGxlbmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvYWRlZCwgdW5zaWdu
ZWQgdG90YWwpOwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVm
KCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7
IH0KLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkFib3J0TGlzdGVuZXI7Ci0g
ICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uRXJyb3JMaXN0ZW5lcjsKLSAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25Mb2FkTGlzdGVuZXI7Ci0gICAgICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBtX29uTG9hZFN0YXJ0TGlzdGVuZXI7Ci0gICAgICAgIFJlZlB0cjxFdmVu
dExpc3RlbmVyPiBtX29uUHJvZ3Jlc3NMaXN0ZW5lcjsKLSAgICAgICAgRXZlbnRMaXN0ZW5lcnNN
YXAgbV9ldmVudExpc3RlbmVyczsKKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2
ZW50VGFyZ2V0RGF0YSgpOworICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJl
RXZlbnRUYXJnZXREYXRhKCk7CiAKICAgICAgICAgWE1MSHR0cFJlcXVlc3QqIG1feG1sSHR0cFJl
cXVlc3Q7CisgICAgICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKICAgICB9
OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RVcGxvYWQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0VXBsb2FkLmlkbAkocmV2aXNpb24gNDg2ODYpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdFVwbG9hZC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDkgQEAKIG1vZHVsZSB4
bWwgewogCiAgICAgaW50ZXJmYWNlIFsKLSAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvciwKICAg
ICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgICAgICBFdmVudFRhcmdldCwKKyAgICAgICAg
R2VuZXJhdGVDb25zdHJ1Y3RvciwKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFhNTEh0
dHBSZXF1ZXN0VXBsb2FkIHsKICAgICAgICAgLy8gRnJvbSBYTUxIdHRwUmVxdWVzdEV2ZW50VGFy
Z2V0Cg==
</data>
<flag name="review"
          id="21213"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="21214"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>