<?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>35245</bug_id>
          
          <creation_ts>2010-02-22 09:42:58 -0800</creation_ts>
          <short_desc>[V8] Clean up V8DOMWrapper::getEventListener()</short_desc>
          <delta_ts>2010-02-24 09:06:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>antonm</cc>
    
    <cc>dglazkov</cc>
    
    <cc>vitalyr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192491</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-22 09:42:58 -0800</bug_when>
    <thetext>We currently have 10 variants of V8DOMWrapper::getEventListener(). There&apos;s no reason we can&apos;t reduce that to 1.

This cleanup will also make it feasible to generate most of V8&apos;s addEventListener and removeEventListener callbacks. The exception is DOMWindow, which has some additional security restrictions on its add/remove functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192506</commentid>
    <comment_count>1</comment_count>
      <attachid>49224</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-22 10:17:01 -0800</bug_when>
    <thetext>Created attachment 49224
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192521</commentid>
    <comment_count>2</comment_count>
      <attachid>49224</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-22 10:46:36 -0800</bug_when>
    <thetext>Comment on attachment 49224
patch

Awesome, with comments:

&gt; +  static v8::Handle&lt;v8::Value&gt; ${functionName}EventListenerCallback(const v8::Arguments&amp; args)
&gt; +  {
&gt; +    INC_STATS(&quot;DOM.${implClassName}.${functionName}EventListener()&quot;);
&gt; +    RefPtr&lt;EventListener&gt; listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFind${lookupType});
&gt; +    if (listener) {
&gt; +      V8${implClassName}::toNative(args.Holder())-&gt;${functionName}EventListener(v8ValueToAtomicWebCoreString(args[0]), listener${passRefPtrHandling}, args[2]-&gt;BooleanValue());
&gt; +      ${hiddenDependencyAction}HiddenDependency(args.Holder(), args[1], V8${implClassName}::cacheIndex);
&gt; +    }
&gt; +    return v8::Undefined();
&gt; +  }

Can haz proper 4-space indent here? I know we seem to generate 2-spacers, but that should change too.

&gt; +    if (WorkerContextExecutionProxy::retrieve())
&gt; +        return V8EventListenerList::findOrCreateWrapper&lt;V8WorkerContextEventListener&gt;(value, isAttribute);

Can we not get rid of this using your new fancy trick? Or is this already using it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192524</commentid>
    <comment_count>3</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-22 10:52:10 -0800</bug_when>
    <thetext>
&gt; &gt; +    if (WorkerContextExecutionProxy::retrieve())
&gt; &gt; +        return V8EventListenerList::findOrCreateWrapper&lt;V8WorkerContextEventListener&gt;(value, isAttribute);
&gt; 
&gt; Can we not get rid of this using your new fancy trick? Or is this already using
&gt; it?

I&apos;m already using it above, so I think this may be redundant.  I think that the only case where we would have no WorkerContextExecutionProxy and no V8Proxy would be the early exit case due to there being no current v8::Context.  Does that seem right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192525</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-22 10:53:11 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; &gt; +    if (WorkerContextExecutionProxy::retrieve())
&gt; &gt; &gt; +        return V8EventListenerList::findOrCreateWrapper&lt;V8WorkerContextEventListener&gt;(value, isAttribute);
&gt; &gt; 
&gt; &gt; Can we not get rid of this using your new fancy trick? Or is this already using
&gt; &gt; it?
&gt; 
&gt; I&apos;m already using it above, so I think this may be redundant.  I think that the
&gt; only case where we would have no WorkerContextExecutionProxy and no V8Proxy
&gt; would be the early exit case due to there being no current v8::Context.  Does
&gt; that seem right?

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193312</commentid>
    <comment_count>5</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-02-24 05:19:06 -0800</bug_when>
    <thetext>Sorry for being late---we were on holidays Mon/Tue here.

Vitaly (vitalyr@chromium.org) worked with event listeners, Vitaly, any comments?

Nice cleanup, btw, Nate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193384</commentid>
    <comment_count>6</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-24 09:06:07 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Sorry for being late---we were on holidays Mon/Tue here.
&gt; 
&gt; Vitaly (vitalyr@chromium.org) worked with event listeners, Vitaly, any
&gt; comments?
&gt; 
&gt; Nice cleanup, btw, Nate.

Thanks! :)

This was landed in http://trac.webkit.org/changeset/55096, sorry for not updating the bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49224</attachid>
            <date>2010-02-22 10:17:01 -0800</date>
            <delta_ts>2010-02-22 10:46:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>60055</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05v
ZGUuaWRsCShyZXZpc2lvbiA1NTAzNikKKysrIFdlYkNvcmUvZG9tL05vZGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsMTIgKzEzMiwxMiBAQAogI2VuZGlmIC8qIGRlZmluZWQoTEFOR1VBR0Vf
T0JKRUNUSVZFX0MpICovCiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwg
IUxBTkdVQUdFX09CSkVDVElWRV9DCi0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0
ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIFtDdXN0
b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAg
IFtKU0NDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVy
IGxpc3RlbmVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtKU0NDdXN0b21dIHZvaWQgcmVtb3ZlRXZl
bnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVy
ZSk7CiAgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldmVudCkKICAgICAg
ICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9t
L01lc3NhZ2VQb3J0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5p
ZGwJKHJldmlzaW9uIDU1MDM2KQorKysgV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxMiArNDMsMTIgQEAKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlz
dGVuZXIgb25tZXNzYWdlOwogCiAgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAg
ICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBs
aXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29s
ZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVu
ZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICBbSlNDQ3VzdG9tXSB2b2lkIGFkZEV2ZW50
TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAg
ICAgICBbSlNDQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5
cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZl
bnRMaXN0ZW5lciBsaXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwogICAgICAgICBib29sZWFuIGRpc3Bh
dGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQogICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9u
KTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1MDM2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wMi0xOSAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtWOF0gU3RyZWFtbGluZSBWOCBldmVudCBsaXN0ZW5lciBjb2RlLiBNZXJnZSBh
bGwgdGhlIHZhcmlhbnRzIG9mCisgICAgICAgIFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0bmVy
KCkgaW50byBhIHNpbmdsZSB2ZXJzaW9uIGFuZCBnZW5lcmF0ZQorICAgICAgICBhZGRFdmVudExp
c3RlbmVyKCkgYW5kIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSBiaW5kaW5ncyBmb3IgYWxsIG9iamVj
dHMgCisgICAgICAgIGV4Y2VwdCBET01XaW5kb3cuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MjQ1CisKKyAgICAgICAgKiBBbmRyb2lkLnY4Ymlu
ZGluZ3MubWs6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmg6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lckNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVy
Q2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50U291cmNlQ3Vz
dG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdl
UG9ydEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3Rv
bS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVy
Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5z
dGFuY2VDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYlNvY2tldEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29y
a2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhN
TEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQu
aWRsOgorICAgICAgICAqIGRvbS9Ob2RlLmlkbDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
RE9NQXBwbGljYXRpb25DYWNoZS5pZGw6CisgICAgICAgICogbm90aWZpY2F0aW9ucy9Ob3RpZmlj
YXRpb24uaWRsOgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuaWRsOgorICAgICAgICAqIHN2
Zy9TVkdFbGVtZW50SW5zdGFuY2UuaWRsOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0
LmlkbDoKKyAgICAgICAgKiB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbDoKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5p
ZGw6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbDoKKwogMjAxMC0wMi0x
OSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZnJleSBHYXJlbi4KSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlkbAkocmV2aXNpb24gNTUw
MzYpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01
MywxMiArNTMsMTIgQEAKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgICAgIC8vIEV2ZW50
VGFyZ2V0IGludGVyZmFjZQotICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIo
aW4gRE9NU3RyaW5nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQg
cmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgW0pTQ0N1c3Rv
bV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNl
Q2FwdHVyZSk7CisgICAgICAgIFtKU0NDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihp
biBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwogICAgICAgICBi
b29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQogICAgICAgICAgICAgcmFpc2VzKEV2
ZW50RXhjZXB0aW9uKTsKIApJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNp
b24gNTUwMzYpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDEyICs2MiwxMiBAQAogCiAKICAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50
ZXJmYWNlCi0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJp
bmcgdHlwZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVu
dExpc3RlbmVyIGxpc3RlbmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3Zl
RXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgIFtKU0NDdXN0b21dIHZv
aWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2Fw
dHVyZSk7CisgICAgICAgIFtKU0NDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBE
T01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CiAgICAgICAgIGJv
b2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCiAgICAgICAgICAgICByYWlzZXMoRXZl
bnRFeGNlcHRpb24pOwogCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwJKHJldmlz
aW9uIDU1MDM2KQorKysgV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDEyIEBACiAKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlz
dGVuZXIgb25lcnJvcjsKIAotICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIo
aW4gRE9NU3RyaW5nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICBbSlNDQ3Vz
dG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKKyAgICAgICAgW0pTQ0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVy
KGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CiAgICAgICAg
IGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCiAgICAgICAgICAgICByYWlzZXMo
RXZlbnRFeGNlcHRpb24pOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDU1MDM2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtOTQ4LDcgKzk0
OCw3IEBACiAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAi
RXZlbnRMaXN0ZW5lciIpIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmgifSA9IDE7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIHRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBpbXAtPiRhdHRy
TmFtZSgpLCB2YWx1ZSwgVjgke2ludGVyZmFjZU5hbWV9OjpjYWNoZUluZGV4KTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpbXAtPnNldCRpbXBsU2V0dGVy
RnVuY3Rpb25OYW1lKFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihpbXAsIHZhbHVlLCB0
cnVlLCBMaXN0ZW5lckZpbmRPckNyZWF0ZSkiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgaW1wLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZShWOERPTVdyYXBw
ZXI6OmdldEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUsIExpc3RlbmVyRmluZE9yQ3JlYXRlKSIp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICBpbXAtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCRyZXN1bHQiKTsKICAgICAgICAg
fQpAQCAtMTAxMCw2ICsxMDEwLDI5IEBACiAgICAgcmV0dXJuICJ2ODo6RnVuY3Rpb25UZW1wbGF0
ZTo6TmV3KCRjYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksICRzaWduYXR1cmUpIjsK
IH0KIAorc3ViIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrCit7CisgICAgbXkgJGltcGxD
bGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb25OYW1lID0gc2hpZnQ7CisgICAgbXkg
JGxvb2t1cFR5cGUgPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAiT3JDcmVhdGUiIDogIk9u
bHkiOworICAgIG15ICRwYXNzUmVmUHRySGFuZGxpbmcgPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRk
IikgPyAiIiA6ICIuZ2V0KCkiOworICAgIG15ICRoaWRkZW5EZXBlbmRlbmN5QWN0aW9uID0gKCRm
dW5jdGlvbk5hbWUgZXEgImFkZCIpID8gImNyZWF0ZSIgOiAicmVtb3ZlIjsKKyAKKyAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gJHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCisgIHsKKyAgICBJTkNfU1RBVFMoIkRPTS4ke2ltcGxDbGFzc05hbWV9LiR7ZnVu
Y3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIoKSIpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihhcmdzWzFdLCBmYWxzZSwg
TGlzdGVuZXJGaW5kJHtsb29rdXBUeXBlfSk7CisgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICBW
OCR7aW1wbENsYXNzTmFtZX06OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpLT4ke2Z1bmN0aW9uTmFt
ZX1FdmVudExpc3RlbmVyKHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIGxp
c3RlbmVyJHtwYXNzUmVmUHRySGFuZGxpbmd9LCBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKSk7Cisg
ICAgICAke2hpZGRlbkRlcGVuZGVuY3lBY3Rpb259SGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRl
cigpLCBhcmdzWzFdLCBWOCR7aW1wbENsYXNzTmFtZX06OmNhY2hlSW5kZXgpOworICAgIH0KKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICB9CisKK0VORAorfQorCiBzdWIgR2VuZXJhdGVG
dW5jdGlvbkNhbGxiYWNrCiB7CiAgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CkBAIC0xMDIwLDYg
KzEwNDMsMTcgQEAKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKICAg
ICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwogCisgICAgIyBBZGRpbmcg
YW5kIHJlbW92aW5nIGV2ZW50IGxpc3RlbmVycyBhcmUgbm90IHN0YW5kYXJkIGNhbGxiYWNrIGJl
aGF2aW9yLAorICAgICMgYnV0IHRoZXkgYXJlIGV4dHJlbWVseSBjb25zaXN0ZW50IGFjcm9zcyB0
aGUgdmFyaW91cyBjbGFzc2VzIHRoYXQgdGFrZSBldmVudCBsaXN0ZW5lcnMsCisgICAgIyBzbyB3
ZSBjYW4gZ2VuZXJhdGUgdGhlbSBhcyBhICJzcGVjaWFsIGNhc2UiLgorICAgIGlmICgkbmFtZSBl
cSAiYWRkRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2Fs
bGJhY2soJGltcGxDbGFzc05hbWUsICJhZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxz
aWYgKCRuYW1lIGVxICJyZW1vdmVFdmVudExpc3RlbmVyIikgeworICAgICAgICBHZW5lcmF0ZUV2
ZW50TGlzdGVuZXJDYWxsYmFjaygkaW1wbENsYXNzTmFtZSwgInJlbW92ZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywKICIgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtuYW1lfUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpIHtcbiIgLgogIiAgICBJTkNfU1RBVFMoXCJET00uJGltcGxDbGFzc05hbWUuJG5hbWVc
Iik7XG4iKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHJldmlzaW9u
IDU1MDM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiVjhXZWJTb2NrZXQuaCIKICNpbmNs
dWRlICJWOFdvcmtlci5oIgogI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUg
IlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFhNTEh0dHBSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0
dHJpYnV0ZXMuaCIKQEAgLTQ2Miw4OSArNDYzLDIyIEBACiAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gVjhET01XcmFw
cGVyOjpnZXRFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKQorUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIodjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIExpc3RlbmVyTG9va3VwVHlw
ZSBsb29rdXApCiB7Ci0gICAgcmV0dXJuIChsb29rdXAgPT0gTGlzdGVuZXJGaW5kT25seSkgPyBW
OEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kV3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogVjhF
dmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHZh
bHVlLCBpc0F0dHJpYnV0ZSk7Ci19Ci0KLSNpZiBFTkFCTEUoU1ZHKQotUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoU1ZHRWxlbWVudEluc3Rh
bmNlKiBlbGVtZW50LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0
ZSwgTGlzdGVuZXJMb29rdXBUeXBlIGxvb2t1cCkKLXsKLSAgICByZXR1cm4gZ2V0RXZlbnRMaXN0
ZW5lcihlbGVtZW50LT5jb3JyZXNwb25kaW5nRWxlbWVudCgpLCB2YWx1ZSwgaXNBdHRyaWJ1dGUs
IGxvb2t1cCk7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBWOERPTVdy
YXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoQWJzdHJhY3RXb3JrZXIqIHdvcmtlciwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIExpc3RlbmVyTG9va3VwVHlwZSBs
b29rdXApCi17Ci0gICAgaWYgKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1dv
cmtlckNvbnRleHQoKSkgewotICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdv
cmtlckNvbnRleHRQcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUo
KTsKLSAgICAgICAgQVNTRVJUKHdvcmtlckNvbnRleHRQcm94eSk7Ci0gICAgICAgIHJldHVybiB3
b3JrZXJDb250ZXh0UHJveHktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodmFsdWUsIGlzQXR0
cmlidXRlLCBsb29rdXAgPT0gTGlzdGVuZXJGaW5kT25seSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IChsb29rdXAgPT0gTGlzdGVuZXJGaW5kT25seSkgPyBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5k
V3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9y
Q3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHZhbHVlLCBpc0F0dHJpYnV0ZSk7Ci19Ci0K
LSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKLVBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gVjhE
T01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29r
dXBUeXBlIGxvb2t1cCkKLXsKLSAgICBpZiAobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzV29ya2VyQ29udGV4dCgpKSB7Ci0gICAgICAgIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5OjpyZXRyaWV2ZSgpOwotICAgICAgICBBU1NFUlQod29ya2VyQ29udGV4dFByb3h5KTsKLSAg
ICAgICAgcmV0dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5l
cih2YWx1ZSwgaXNBdHRyaWJ1dGUsIGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gKGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5KSA/IFY4RXZlbnRMaXN0
ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBWOEV2ZW50TGlzdGVu
ZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4odmFsdWUsIGlzQXR0
cmlidXRlKTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3Jh
cHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29rdXBU
eXBlIGxvb2t1cCkKLXsKLSAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtlckNv
bnRleHRQcm94eSA9IHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpOwotICAgIGlmICh3
b3JrZXJDb250ZXh0UHJveHkpCi0gICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZp
bmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodmFsdWUsIGlzQXR0cmlidXRlLCBsb29rdXAgPT0gTGlz
dGVuZXJGaW5kT25seSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoWE1MSHR0cFJlcXVlc3RVcGxv
YWQqIHVwbG9hZCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUs
IExpc3RlbmVyTG9va3VwVHlwZSBsb29rdXApCi17Ci0gICAgcmV0dXJuIGdldEV2ZW50TGlzdGVu
ZXIodXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKSwgdmFsdWUsIGlzQXR0cmlidXRl
LCBsb29rdXApOwotfQotCi0jaWYgRU5BQkxFKEVWRU5UU09VUkNFKQotUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoRXZlbnRTb3VyY2UqIGV2
ZW50U291cmNlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwg
TGlzdGVuZXJMb29rdXBUeXBlIGxvb2t1cCkKLXsKLSAgICBpZiAoVjhQcm94eTo6cmV0cmlldmUo
ZXZlbnRTb3VyY2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIHJldHVybiAo
bG9va3VwID09IExpc3RlbmVyRmluZE9ubHkpID8gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZFdy
YXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRPckNy
ZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPih2YWx1ZSwgaXNBdHRyaWJ1dGUpOwotCisgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50
KCk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAobG9va3VwID09IExpc3RlbmVyRmluZE9ubHkpCisgICAgICAgIHJldHVybiBWOEV2ZW50TGlz
dGVuZXJMaXN0OjpmaW5kV3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUpOworICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gZ2xvYmFsUHJvdG90eXBlID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChjb250ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOworICAgIGlmIChnbG9iYWxP
YmplY3RQcm90b3R5cGVJc0RPTVdpbmRvdyhnbG9iYWxQcm90b3R5cGUpKQorICAgICAgICByZXR1
cm4gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVu
ZXI+KHZhbHVlLCBpc0F0dHJpYnV0ZSk7CiAjaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7Ci0gICAgaWYgKHdvcmtlckNvbnRleHRQcm94eSkK
LSAgICAgICAgcmV0dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0
ZW5lcih2YWx1ZSwgaXNBdHRyaWJ1dGUsIGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5KTsKLSNl
bmRpZgotCisgICAgaWYgKFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKSkK
KyAgICAgICAgcmV0dXJuIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8
VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcj4odmFsdWUsIGlzQXR0cmlidXRlKTsKKyNlbHNl
CiAgICAgcmV0dXJuIDA7Ci19CiAjZW5kaWYKLQotUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBW
OERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0LCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29r
dXBUeXBlIGxvb2t1cCkKLXsKLSAgICBpZiAoVjhQcm94eTo6cmV0cmlldmUoZXZlbnRUYXJnZXQt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIHJldHVybiAobG9va3VwID09IExp
c3RlbmVyRmluZE9ubHkpID8gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIodmFsdWUs
IGlzQXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8
VjhFdmVudExpc3RlbmVyPih2YWx1ZSwgaXNBdHRyaWJ1dGUpOwotCi0jaWYgRU5BQkxFKFdPUktF
UlMpCi0gICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkg
PSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7Ci0gICAgaWYgKHdvcmtl
ckNvbnRleHRQcm94eSkKLSAgICAgICAgcmV0dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9y
Q3JlYXRlRXZlbnRMaXN0ZW5lcih2YWx1ZSwgaXNBdHRyaWJ1dGUsIGxvb2t1cCA9PSBMaXN0ZW5l
ckZpbmRPbmx5KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKFY4UHJveHkqIHByb3h5
LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJM
b29rdXBUeXBlIGxvb2t1cCkKLXsKLSAgICByZXR1cm4gKGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRP
bmx5KSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRXcmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0
ZSkgOiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0
ZW5lcj4odmFsdWUsIGlzQXR0cmlidXRlKTsKLX0KLQogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkocmV2aXNpb24gNTUwMzYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw1
NCArNDcsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgLy8gRklYTUU6IFRoaXMg
cHJvYmFibHkgYXJlbid0IGFsbCBuZWVkZWQuCi0gICAgY2xhc3MgQ1NTUnVsZTsKLSAgICBjbGFz
cyBDU1NSdWxlTGlzdDsKLSAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwotICAgIGNsYXNz
IENTU1ZhbHVlOwotICAgIGNsYXNzIENTU1ZhbHVlTGlzdDsKLSAgICBjbGFzcyBDbGllbnRSZWN0
TGlzdDsKLSAgICBjbGFzcyBET01JbXBsZW1lbnRhdGlvbjsKICAgICBjbGFzcyBET01XaW5kb3c7
Ci0gICAgY2xhc3MgRG9jdW1lbnQ7Ci0gICAgY2xhc3MgRWxlbWVudDsKLSAgICBjbGFzcyBFdmVu
dDsKLSAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEV2ZW50VGFyZ2V0OwogICAg
IGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIEhUTUxDb2xsZWN0aW9uOwotICAgIGNsYXNzIEhUTUxE
b2N1bWVudDsKLSAgICBjbGFzcyBIVE1MRWxlbWVudDsKLSAgICBjbGFzcyBIVE1MT3B0aW9uc0Nv
bGxlY3Rpb247Ci0gICAgY2xhc3MgTWVkaWFMaXN0OwotICAgIGNsYXNzIE1pbWVUeXBlOwotICAg
IGNsYXNzIE1pbWVUeXBlQXJyYXk7Ci0gICAgY2xhc3MgTmFtZWROb2RlTWFwOwotICAgIGNsYXNz
IE5hdmlnYXRvcjsKICAgICBjbGFzcyBOb2RlOwotICAgIGNsYXNzIE5vZGVGaWx0ZXI7Ci0gICAg
Y2xhc3MgTm9kZUxpc3Q7Ci0gICAgY2xhc3MgUGx1Z2luOwotICAgIGNsYXNzIFBsdWdpbkFycmF5
OwotICAgIGNsYXNzIFNWR0VsZW1lbnQ7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBjbGFzcyBTVkdF
bGVtZW50SW5zdGFuY2U7Ci0jZW5kaWYKLSAgICBjbGFzcyBTY3JlZW47Ci0gICAgY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgY2xhc3Mg
U3RvcmFnZTsKLSAgICBjbGFzcyBTdG9yYWdlRXZlbnQ7Ci0jZW5kaWYKLSAgICBjbGFzcyBTdHJp
bmc7Ci0gICAgY2xhc3MgU3R5bGVTaGVldDsKLSAgICBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKLSAg
ICBjbGFzcyBWOEV2ZW50TGlzdGVuZXI7Ci0gICAgY2xhc3MgVjhPYmplY3RFdmVudExpc3RlbmVy
OwogICAgIGNsYXNzIFY4UHJveHk7Ci0jaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotICAgIGNsYXNz
IFdlYlNvY2tldDsKLSNlbmRpZgogICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKICAgICBlbnVt
IExpc3RlbmVyTG9va3VwVHlwZSB7CkBAIC0xMzEsMjggKzg4LDggQEAKIAogICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZl
bnRUYXJnZXQqKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBn
ZXRFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29rdXBUeXBlIGxv
b2t1cCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZl
bnRMaXN0ZW5lcihTVkdFbGVtZW50SW5zdGFuY2UqIGVsZW1lbnQsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKTsK
LQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBnZXRFdmVudExpc3Rl
bmVyKEFic3RyYWN0V29ya2VyKiB3b3JrZXIsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKTsKLQotI2lmIEVOQUJM
RShOT1RJRklDQVRJT05TKQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBnZXRFdmVudExpc3RlbmVyKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29rdXBUeXBlIGxv
b2t1cCk7Ci0jZW5kaWYKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBnZXRFdmVudExpc3RlbmVyKFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUg
bG9va3VwKTsKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBnZXRF
dmVudExpc3RlbmVyKFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB1cGxvYWQsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3Vw
KTsKLQotI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihFdmVudFNvdXJjZSogZXZlbnRUYXJnZXQs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxv
b2t1cFR5cGUgbG9va3VwKTsKLSNlbmRpZgotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0LCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29r
dXBUeXBlIGxvb2t1cCk7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZ2V0RXZlbnRMaXN0ZW5lcihWOFByb3h5KiBwcm94eSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIExpc3RlbmVyTG9va3VwVHlwZSBsb29rdXApOwotCiAj
aWYgRU5BQkxFKFhQQVRIKQogICAgICAgICAvLyBYUGF0aC1yZWxhdGVkIHV0aWxpdGllcwogICAg
ICAgICBzdGF0aWMgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gZ2V0WFBhdGhOU1Jlc29sdmVyKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgVjhQcm94eSogcHJveHkgPSAwKQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNw
cAkocmV2aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSw4IEBACiAKICNp
bmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIAotI2luY2x1ZGUgIkRPTUNv
cmVFeGNlcHRpb24uaCIKICNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmgiCiAjaW5j
bHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudFNvdXJjZS5oIgotI2luY2x1ZGUgIk5vdGlm
aWNhdGlvbi5oIgotI2luY2x1ZGUgIk5vdGlmaWNhdGlvbkNlbnRlci5oIgotI2luY2x1ZGUgIkV2
ZW50RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJSYW5n
ZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlci5oIgogI2luY2x1ZGUgIlNoYXJl
ZFdvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKQEAgLTUxLDE3ICs0NCw5
IEBACiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRl
ICJWOFdvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyLmgiCi0jaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotI2luY2x1ZGUgIldlYlNvY2tldC5oIgot
I2VuZGlmCiAjaW5jbHVkZSAiV29ya2VyLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgot
I2luY2x1ZGUgIldvcmtlckxvY2F0aW9uLmgiCi0jaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgi
CiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlhNTEh0dHBS
ZXF1ZXN0LmgiCi0jaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0yNDcsMTEgKzIzMiw2IEBACiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmpl
Y3QsIGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHkpCi17Ci0gICAgcmV0dXJuIGZpbmRPbmx5
ID8gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIob2JqZWN0LCBpc0lubGluZSkgOiBW
OEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JDcmVhdGVXcmFwcGVyPFY4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXI+KG9iamVjdCwgaXNJbmxpbmUpOwotfQotCiB2b2lkIFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6dHJhY2tFdmVudChFdmVudCogZXZlbnQpCiB7CiAgICAgbV9ldmVudHMu
YXBwZW5kKGV2ZW50KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuaAkocmV2aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw2IEBACiAjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgotI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKICNpbmNsdWRlICJWOEluZGV4
LmgiCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00NSw4ICs0
NCw2IEBACiAKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudFRhcmdldDsKLSAgICBj
bGFzcyBWOEV2ZW50TGlzdGVuZXI7Ci0gICAgY2xhc3MgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0
ZW5lcjsKICAgICBjbGFzcyBXb3JrZXJDb250ZXh0OwogCiAgICAgc3RydWN0IFdvcmtlckNvbnRl
eHRFeGVjdXRpb25TdGF0ZSB7CkBAIC02NCw5ICs2MSw2IEBACiAgICAgICAgIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eShXb3JrZXJDb250ZXh0Kik7CiAgICAgICAgIH5Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkoKTsKIAotICAgICAgICAvLyBGaW5kcy9jcmVhdGVzIGV2ZW50IGxpc3Rl
bmVyIHdyYXBwZXJzLgotICAgICAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gZmluZE9y
Q3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBsaXN0ZW5lciwgYm9vbCBp
c0lubGluZSwgYm9vbCBmaW5kT25seSk7Ci0KICAgICAgICAgLy8gVHJhY2sgdGhlIGV2ZW50IHNv
IHRoYXQgd2UgY2FuIGRldGFjaCBpdCBmcm9tIHRoZSBKUyB3cmFwcGVyIHdoZW4gYSB3b3JrZXIK
ICAgICAgICAgLy8gdGVybWluYXRlcy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZWVkIHRv
IGJlIGFibGUgdG8gZGlzcG9zZSB0aGVzZQogICAgICAgICAvLyBldmVudHMgYW5kIHJlbGVhc2Vz
IHJlZmVyZW5jZXMgdG8gdGhlaXIgZXZlbnQgdGFyZ2V0czogV29ya2VyQ29udGV4dC4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01BcHBsaWNh
dGlvbkNhY2hlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhET01BcHBs
aWNhdGlvbkNhY2hlLmgiCi0KLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQot
Ci0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKLSNpbmNsdWRlICJET01BcHBsaWNh
dGlvbkNhY2hlLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKLSNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIEhhbmRsZXMgYXBwY2FjaGUuYWRkRXZlbnRMaXN0bmVyKG5hbWUsIGZ1bmMsIGNh
cHR1cmUpIG1ldGhvZCBjYWxscwotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NQXBwbGljYXRp
b25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET01BcHBsaWNhdGlvbkNhY2hlLmFkZEV2ZW50TGlzdGVu
ZXIoKSIpOwotICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlID0gVjhET01BcHBsaWNh
dGlvbkNhY2hlOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLQotICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihhcHBjYWNo
ZSwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9yQ3JlYXRlKTsKLSAgICBpZiAobGlzdGVu
ZXIpIHsKLSAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdz
WzFdLCBjYWNoZUluZGV4KTsKLSAgICAgICAgU3RyaW5nIGV2ZW50VHlwZSA9IHRvV2ViQ29yZVN0
cmluZyhhcmdzWzBdKTsKLSAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVh
blZhbHVlKCk7Ci0gICAgICAgIGFwcGNhY2hlLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwg
bGlzdGVuZXIsIHVzZUNhcHR1cmUpOwotICAgIH0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwotfQotCi0vLyBIYW5kbGVzIGFwcGNhY2hlLnJlbW92ZUV2ZW50TGlzdG5lcihuYW1lLCBmdW5j
LCBjYXB0dXJlKSBtZXRob2QgY2FsbHMKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTUFwcGxp
Y2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NQXBwbGljYXRpb25DYWNoZS5yZW1vdmVF
dmVudExpc3RlbmVyKCkiKTsKLSAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9IFY4
RE9NQXBwbGljYXRpb25DYWNoZTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVu
ZXIoYXBwY2FjaGUsIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPbmx5KTsKLSAgICBpZiAo
bGlzdGVuZXIpIHsKLSAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigp
LCBhcmdzWzFdLCBjYWNoZUluZGV4KTsKLSAgICAgICAgU3RyaW5nIGV2ZW50VHlwZSA9IHRvV2Vi
Q29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+
Qm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGFwcGNhY2hlLT5yZW1vdmVFdmVudExpc3RlbmVyKGV2
ZW50VHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOwotICAgIH0KLSAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAg
Ly8gRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDU1MDM2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODksNyArMjg5LDcgQEAKICAgICBpZiAoIXByb3h5KQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHByb3h5LCBhcmdzWzFdLCBm
YWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihhcmdzWzFdLCBmYWxzZSwg
TGlzdGVuZXJGaW5kT3JDcmVhdGUpOwogCiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIGlt
cC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKQEAg
LTMyMSw3ICszMjEsNyBAQAogICAgIGlmICghcHJveHkpCiAgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdy
YXBwZXI6OmdldEV2ZW50TGlzdGVuZXIocHJveHksIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZp
bmRPbmx5KTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBw
ZXI6OmdldEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkpOwog
CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIGltcC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihl
dmVudFR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRl
eHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMzggKzEyNiw2IEBACiAgICAgcmV0
dXJuIFNldFRpbWVvdXRPckludGVydmFsKGFyZ3MsIGZhbHNlKTsKIH0KIAotdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRl
eHQuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVu
ZXIod29ya2VyQ29udGV4dCwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9yQ3JlYXRlKTsK
LSAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJp
bmcoYXJnc1swXSk7Ci0gICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5W
YWx1ZSgpOwotICAgICAgICB3b3JrZXJDb250ZXh0LT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxp
c3RlbmVyLCB1c2VDYXB0dXJlKTsKLQotICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGFy
Z3MuSG9sZGVyKCksIGFyZ3NbMV0sIGNhY2hlSW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0
OjpyZW1vdmVFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
LXsKLSAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5yZW1vdmVFdmVudExpc3RlbmVy
KCkiKTsKLSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLQotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXJDb250ZXh0LCBh
cmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT25seSk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7Ci0g
ICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgICAgICBi
b29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKLSAgICAgICAgd29ya2Vy
Q29udGV4dC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2Fw
dHVyZSk7Ci0KLSAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBh
cmdzWzFdLCBjYWNoZUluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
LX0KLQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV29ya2VyQ29udGV4dCogaW1wbCkKIHsK
ICAgICBpZiAoIWltcGwpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9k
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1MDM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNDAgKzU2LDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb2RlOjphZGRF
dmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJ
TkNfU1RBVFMoIkRPTS5Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIE5vZGUqIG5vZGUg
PSBWOE5vZGU6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKG5vZGUsIGFy
Z3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPckNyZWF0ZSk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7
Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgICAg
ICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKLSAgICAgICAgbm9k
ZS0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci0gICAgICAg
IGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgY2FjaGVJbmRl
eCk7Ci0gICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLk5vZGUucmVtb3ZlRXZlbnRM
aXN0ZW5lcigpIik7Ci0gICAgTm9kZSogbm9kZSA9IFY4Tm9kZTo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7Ci0KLSAgICAvLyBJdCBpcyBwb3NzYmlsZSB0aGF0IHRoZSBvd25lciBkb2N1bWVudCBv
ZiB0aGUgbm9kZSBpcyBkZXRhY2hlZAotICAgIC8vIGZyb20gdGhlIGZyYW1lLgotICAgIC8vIFNl
ZSBpc3N1ZSBodHRwOi8vYi84Nzg5MDkKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIobm9kZSwgYXJnc1sxXSwgZmFsc2Us
IExpc3RlbmVyRmluZE9ubHkpOwotICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICBBdG9taWNT
dHJpbmcgdHlwZSA9IHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAg
ICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwotICAgICAgICBu
b2RlLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJl
KTsKLSAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFd
LCBjYWNoZUluZGV4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQot
CiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGN1c3RvbWl6ZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhl
IG9wdGlvbmFsIDR0aCBhcmd1bWVudDogc2hvdWxkTGF6eUF0dGFjaAogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4Tm9kZTo6aW5zZXJ0QmVmb3JlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVl
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1NTAzNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSwzOSArNTEsNiBAQAogICAgIHJldHVybiB4bWxIdHRwUmVxdWVzdC0+cmVzcG9uc2VU
ZXh0KCkudjhTdHJpbmdPck51bGwoKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WE1M
SHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LmFkZEV2ZW50TGlz
dGVuZXIoKSIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4WE1MSHR0
cFJlcXVlc3Q6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBS
ZXF1ZXN0LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwotICAgIGlmIChs
aXN0ZW5lcikgewotICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKLSAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Ci0g
ICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1
c2VDYXB0dXJlKTsKLQotICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVy
KCksIGFyZ3NbMV0sIGNhY2hlSW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAg
SU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0g
ICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhYTUxIdHRwUmVxdWVzdDo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3Nb
MV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPbmx5KTsKLSAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAg
ICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAgICAgIGJvb2wg
dXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwotICAgICAgICB4bWxIdHRwUmVx
dWVzdC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVy
ZSk7Ci0KLSAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdz
WzFdLCBjYWNoZUluZGV4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
fQotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdDo6b3BlbkNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0
cFJlcXVlc3Qub3BlbigpIik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhN
TEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAkocmV2aXNpb24g
NTUwMzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBs
b2FkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNDMgKzQyLDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdFVw
bG9hZDo6YWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQuYWRkRXZlbnRMaXN0
ZW5lcigpIik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2Fk
ID0gVjhYTUxIdHRwUmVxdWVzdFVwbG9hZDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0KLSAg
ICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+
YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3Qs
IGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPckNyZWF0ZSk7Ci0gICAgaWYgKGxpc3RlbmVy
KSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAg
ICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKLSAgICAgICAg
eG1sSHR0cFJlcXVlc3RVcGxvYWQtPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHVz
ZUNhcHR1cmUpOwotCi0gICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIo
KSwgYXJnc1sxXSwgY2FjaGVJbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpy
ZW1vdmVFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsK
LSAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5yZW1vdmVFdmVudExpc3Rl
bmVyKCkiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQg
PSBWOFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLQotICAg
IFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5h
c3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKLQotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwg
YXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkpOwotICAgIGlmIChsaXN0ZW5lcikgewot
ICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICAgICAg
Ym9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIHhtbEh0
dHBSZXF1ZXN0VXBsb2FkLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLmdldCgp
LCB1c2VDYXB0dXJlKTsKLQotICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9s
ZGVyKCksIGFyZ3NbMV0sIGNhY2hlSW5kZXgpOwotICAgIH0KLQotICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Ci19Ci0KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhNTEh0dHBSZXF1ZXN0VXBs
b2FkOjpkaXNwYXRjaEV2ZW50Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5kaXNwYXRjaEV2ZW50KCki
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1
c3RvbS5jcHAJKHJldmlzaW9uIDU1MDM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXZWJTb2NrZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwzNyArNDUsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYlNvY2tl
dDo6YWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17
Ci0gICAgSU5DX1NUQVRTKCJET00uV2ViU29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAg
IFdlYlNvY2tldCogd2ViU29ja2V0ID0gVjhXZWJTb2NrZXQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVy
OjpnZXRFdmVudExpc3RlbmVyKHdlYlNvY2tldCwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmlu
ZE9yQ3JlYXRlKTsKLSAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB0
b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3Nb
Ml0tPkJvb2xlYW5WYWx1ZSgpOwotICAgICAgICB3ZWJTb2NrZXQtPmFkZEV2ZW50TGlzdGVuZXIo
dHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVu
ZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgY2FjaGVJbmRleCk7Ci0gICAgfQotICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYlNv
Y2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uV2ViU29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIo
KSIpOwotICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gVjhXZWJTb2NrZXQ6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhE
T01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHdlYlNvY2tldCwgYXJnc1sxXSwgZmFsc2UsIExp
c3RlbmVyRmluZE9ubHkpOwotICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICBTdHJpbmcgdHlw
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0g
YXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIHdlYlNvY2tldC0+cmVtb3ZlRXZlbnRM
aXN0ZW5lcih0eXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHJlbW92
ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgY2FjaGVJbmRleCk7Ci0g
ICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFdlYlNvY2tldDo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLldlYlNvY2tldC5Db25zdHJ1Y3RvciIpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZp
Y2F0aW9uQ2VudGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDM4ICs0Niw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4Tm90aWZpY2F0aW9uOjphZGRFdmVudExpc3RlbmVyQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5Ob3RpZmljYXRp
b24uYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24g
PSBWOE5vdGlmaWNhdGlvbjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIo
bm90aWZpY2F0aW9uLCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwotICAg
IGlmIChsaXN0ZW5lcikgewotICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhh
cmdzWzBdKTsKLSAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVl
KCk7Ci0gICAgICAgIG5vdGlmaWNhdGlvbi0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5l
ciwgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xk
ZXIoKSwgYXJnc1sxXSwgY2FjaGVJbmRleCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm90aWZpY2F0aW9uOjpyZW1v
dmVFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5Ob3RpZmljYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0g
ICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOE5vdGlmaWNhdGlvbjo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBW
OERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIobm90aWZpY2F0aW9uLCBhcmdzWzFdLCBmYWxz
ZSwgTGlzdGVuZXJGaW5kT25seSk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgIFN0cmlu
ZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgICAgICBib29sIHVzZUNhcHR1
cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKLSAgICAgICAgbm90aWZpY2F0aW9uLT5yZW1v
dmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKLSAgICAg
ICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBjYWNoZUlu
ZGV4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhOb3RpZmljYXRpb25DZW50ZXI6OmNyZWF0ZUhUTUxOb3RpZmljYXRp
b25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUyhM
IkRPTS5Ob3RpZmljYXRpb25DZW50ZXIuQ3JlYXRlSFRNTE5vdGlmaWNhdGlvbigpIik7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1l
c3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMzcgKzQyLDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhNZXNzYWdlUG9y
dDo6YWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17
Ci0gICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0g
ICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhNZXNzYWdlUG9ydDo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01X
cmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKG1lc3NhZ2VQb3J0LCBhcmdzWzFdLCBmYWxzZSwgTGlz
dGVuZXJGaW5kT3JDcmVhdGUpOwotICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICBTdHJpbmcg
dHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICAgICAgYm9vbCB1c2VDYXB0dXJl
ID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIG1lc3NhZ2VQb3J0LT5hZGRFdmVu
dExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLQotICAgICAgICBjcmVhdGVI
aWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIGNhY2hlSW5kZXgpOwotICAg
IH0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQucmVtb3Zl
RXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhNZXNz
YWdlUG9ydDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKG1lc3NhZ2VQb3J0
LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT25seSk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7
Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgICAg
ICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKLSAgICAgICAgbWVz
c2FnZVBvcnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNh
cHR1cmUpOwotCi0gICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwg
YXJnc1sxXSwgY2FjaGVJbmRleCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLX0KLQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5NZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSIpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDU1
MDM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShXT1JLRVJTKQotI2luY2x1ZGUgIlY4QWJzdHJhY3RXb3JrZXIuaCIKLQot
I2luY2x1ZGUgIkFic3RyYWN0V29ya2VyLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgot
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhBYnN0cmFjdFdvcmtlcjo6YWRkRXZlbnRMaXN0
ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRT
KEwiRE9NLkFic3RyYWN0V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIEFic3RyYWN0
V29ya2VyKiB3b3JrZXIgPSBWOEFic3RyYWN0V29ya2VyOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKLQotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6
Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPckNy
ZWF0ZSk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5C
b29sZWFuVmFsdWUoKTsKLSAgICAgICAgd29ya2VyLT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxp
c3RlbmVyLCB1c2VDYXB0dXJlKTsKLQotICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGFy
Z3MuSG9sZGVyKCksIGFyZ3NbMV0sIGNhY2hlSW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhBYnN0cmFjdFdvcmtl
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Ci17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLkFic3RyYWN0V29ya2VyLnJlbW92ZUV2ZW50TGlzdGVu
ZXIoKSIpOwotICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIgPSBWOEFic3RyYWN0V29ya2VyOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLQotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZh
bHNlLCBMaXN0ZW5lckZpbmRPbmx5KTsKLSAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgU3Ry
aW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAgICAgIGJvb2wgdXNlQ2Fw
dHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwotICAgICAgICB3b3JrZXItPnJlbW92ZUV2
ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOwotCi0gICAgICAg
IHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgY2FjaGVJbmRl
eCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VD
dXN0b20uY3BwCShyZXZpc2lvbiA1NTAzNikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJWOFNWR0VsZW1lbnRJbnN0YW5jZS5oIgotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgot
I2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgotCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgi
Ci0jaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiVjhTVkdQT0RU
eXBlV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTVkdFbGVtZW50SW5zdGFuY2U6OmFkZEV2ZW50
TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19T
VEFUUygiRE9NLlNWR0VsZW1lbnRJbnN0YW5jZS5BZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBT
VkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gVjhTVkdFbGVtZW50SW5zdGFuY2U6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGluc3RhbmNlLCBhcmdzWzFdLCBmYWxz
ZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwotICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICBT
dHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICAgICAgYm9vbCB1c2VD
YXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGluc3RhbmNlLT5hZGRF
dmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLSAgICAgICAgY3JlYXRl
SGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBjYWNoZUluZGV4KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhTVkdFbGVtZW50SW5zdGFuY2U6OnJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlNWR0VsZW1l
bnRJbnN0YW5jZS5SZW1vdmVFdmVudExpc3RlbmVyKCkiKTsKLSAgICBTVkdFbGVtZW50SW5zdGFu
Y2UqIGluc3RhbmNlID0gVjhTVkdFbGVtZW50SW5zdGFuY2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVy
OjpnZXRFdmVudExpc3RlbmVyKGluc3RhbmNlLCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5k
T25seSk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5C
b29sZWFuVmFsdWUoKTsKLSAgICAgICAgaW5zdGFuY2UtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlw
ZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOwotICAgICAgICByZW1vdmVIaWRkZW5EZXBl
bmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIGNhY2hlSW5kZXgpOwotICAgIH0KLQotICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50U291cmNlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50
U291cmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEV2ZW50U291cmNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFBy
b2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoRVZFTlRTT1VS
Q0UpCi0jaW5jbHVkZSAiVjhFdmVudFNvdXJjZS5oIgotCi0jaW5jbHVkZSAiRXZlbnRTb3VyY2Uu
aCIKLQotI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhFdmVudFNvdXJjZTo6
YWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0g
ICAgSU5DX1NUQVRTKCJET00uRXZlbnRTb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAg
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gVjhFdmVudFNvdXJjZTo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdy
YXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoZXZlbnRTb3VyY2UsIGFyZ3NbMV0sIGZhbHNlLCBMaXN0
ZW5lckZpbmRPckNyZWF0ZSk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgIFN0cmluZyB0
eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgICAgICBib29sIHVzZUNhcHR1cmUg
PSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKLSAgICAgICAgZXZlbnRTb3VyY2UtPmFkZEV2ZW50
TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgICAgIGNyZWF0ZUhp
ZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgY2FjaGVJbmRleCk7Ci0gICAg
fQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOEV2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5FdmVudFNvdXJjZS5yZW1vdmVF
dmVudExpc3RlbmVyKCkiKTsKLSAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBWOEV2ZW50
U291cmNlOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLQotICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihldmVudFNvdXJj
ZSwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkpOwotICAgIGlmIChsaXN0ZW5lcikg
ewotICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICAg
ICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIGV2
ZW50U291cmNlLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VD
YXB0dXJlKTsKLQotICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCks
IGFyZ3NbMV0sIGNhY2hlSW5kZXgpOwotICAgIH0KLQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShFVkVO
VFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1NTAzNikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC02NjIsNyArNjYyLDYgQEAKICAgICAgICAgICAgICdiaW5kaW5n
cy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0No
aWxkVGhyZWFkRE9NRGF0YS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0NoaWxkVGhy
ZWFkRE9NRGF0YS5oJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFj
dFdvcmtlckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0
dHJDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZv
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4
ZWxBcnJheUN1c3RvbS5jcHAnLApAQCAtNzA2LDE0ICs3MDUsMTIgQEAKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlv
bkN1c3RvbS5jcHAnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxp
Y2F0aW9uQ2FjaGVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhET01TZWxlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhET01XaW5kb3dDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhEb2N1bWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEVsZW1lbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhFdmVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2
ZW50U291cmNlQ29uc3RydWN0b3IuY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhFdmVudFNvdXJjZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEdlb2xvY2F0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAnLApAQCAtNzYxLDcgKzc1OCw2
IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRD
dXN0b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50
SW5zdGFuY2VDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdMZW5ndGhDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdNYXRyaXhDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdQYXRoU2VnQ3VzdG9tLmNwcCcsCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFu
Y2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5pZGwJ
KHJldmlzaW9uIDU1MDM2KQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtOTAsMTIgKzkwLDEyIEBACiAgICAgICAgIGF0dHJpYnV0ZSBbRG9u
dEVudW1dIEV2ZW50TGlzdGVuZXIgb25zdWJtaXQ7CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVu
dW1dIEV2ZW50TGlzdGVuZXIgb251bmxvYWQ7CiAKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRF
dmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAg
ICAgW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAK
KyAgICAgICAgW0pTQ0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0
eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50
TGlzdGVuZXIgbGlzdGVuZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0pTQ0N1c3RvbV0gdm9pZCBy
ZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKICAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2ZW50
KQogICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKICNlbmRpZiAvKiBkZWZpbmVk
KExBTkdVQUdFX09CSkVDVElWRV9DKSAqLwpJbmRleDogV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwJ
KHJldmlzaW9uIDU1MDM2KQorKysgV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDEyICs1NiwxMiBAQAogICAgICAgICB2b2lkIGNsb3NlKCk7CiAK
ICAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICAgIFtDdXN0b21dIHZvaWQg
YWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwotICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUs
CisgICAgICAgIFtKU0NDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcg
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50
TGlzdGVuZXIgbGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBbSlNDQ3VzdG9tXSB2b2lkIHJl
bW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VD
YXB0dXJlKTsKICAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkKICAg
ICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUv
bm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaWRsCShyZXZpc2lvbiA1NTAzNikKKysrIFdlYkNvcmUv
bm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMiAr
NDMsMTIgQEAKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jbG9zZTsKIAogICAg
ICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRF
dmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAg
ICAgW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAK
KyAgICAgICAgW0pTQ0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0
eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50
TGlzdGVuZXIgbGlzdGVuZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0pTQ0N1c3RvbV0gdm9pZCBy
ZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKICAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkK
ICAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CiAgICAgfTsKSW5kZXg6IFdlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5pZGwJKHJldmlzaW9uIDU1MDM2KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMiArOTEsMTIgQEAKICAgICAgICAgW0N1
c3RvbV0gdm9pZCBvdmVycmlkZU1pbWVUeXBlKGluIERPTVN0cmluZyBvdmVycmlkZSk7CiAKICAg
ICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAg
ICBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAor
ICAgICAgICBbSlNDQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5
cGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRM
aXN0ZW5lciBsaXN0ZW5lciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBbSlNDQ3VzdG9tXSB2b2lkIHJl
bW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVz
ZUNhcHR1cmUpOwogICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQog
ICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKICAgICB9OwpJbmRleDogV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbAkocmV2aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEyICs0Miwx
MiBAQAogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnByb2dyZXNzOwogCiAgICAg
ICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2
ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAg
ICAgICAgW0pTQ0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBl
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlz
dGVuZXIgbGlzdGVuZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0pTQ0N1c3RvbV0gdm9pZCByZW1v
dmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VD
YXB0dXJlKTsKICAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkKICAg
ICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUv
QW5kcm9pZC52OGJpbmRpbmdzLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC52OGJp
bmRpbmdzLm1rCShyZXZpc2lvbiA1NTAzNikKKysrIFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdz
Lm1rCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw2IEBACiAJXAogCWJpbmRpbmdzL3Y4L25w
cnVudGltZS5jcHAgXAogCVwKLQliaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1
c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20uY3BwIFwKIAliaW5k
aW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q1NTUnVsZUN1c3RvbS5jcHAgXApAQCAtMTA2LDcgKzEwNSw2IEBACiAJYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAgXAogCWJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAgXAogCWJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5jcHAgXAotCWJpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0
b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhR3JpZENvbHVtbkxp
c3RDdXN0b20uY3BwIFwKQEAgLTExNyw3ICsxMTUsNiBAQAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEVsZW1lbnRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5j
cHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwIFwK
LQliaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudFNvdXJjZUN1c3RvbS5jcHAgXAogCWJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEZpbGVMaXN0Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4
R2VvbG9jYXRpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29s
bGVjdGlvbkN1c3RvbS5jcHAgXApAQCAtMTU3LDcgKzE1NCw2IEBACiBMT0NBTF9TUkNfRklMRVMg
Kz0gXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCBcCiAJYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAgXAotCWJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNWR0xlbmd0aEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJp
eEN1c3RvbS5jcHAKIAliaW5kaW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcCBc
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hl
LmlkbAkocmV2aXNpb24gNTUwMzYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBs
aWNhdGlvbkNhY2hlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDEyIEBACiAgICAg
ICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ub2Jzb2xldGU7CiAKICAgICAgICAgLy8gRXZl
bnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5l
cihpbiBET01TdHJpbmcgdHlwZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgIFtK
U0NDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxp
c3RlbmVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJv
b2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtKU0NDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRM
aXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7
CiAgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCiAgICAgICAgICAg
ICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOwogICAgIH07Cg==
</data>
<flag name="review"
          id="32024"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>